qtconcurrentthreadengine.cpp

Switch to Source codePreprocessed file
LineSource CodeCoverage
1 -
2 -
3 -
4 -
5 -
6namespace QtConcurrent { -
7 -
8ThreadEngineBarrier::ThreadEngineBarrier() -
9:count(0) { }
executed: }
Execution Count:81049
81049
10 -
11void ThreadEngineBarrier::acquire() -
12{ -
13 for(;;) { -
14 int localCount = count.load(); -
15 if (localCount < 0) {
evaluated: localCount < 0
TRUEFALSE
yes
Evaluation Count:917
yes
Evaluation Count:556928
917-556928
16 if (count.testAndSetOrdered(localCount, localCount -1))
evaluated: count.testAndSetOrdered(localCount, localCount -1)
TRUEFALSE
yes
Evaluation Count:900
yes
Evaluation Count:24
24-900
17 return;
executed: return;
Execution Count:899
899
18 } else {
executed: }
Execution Count:24
24
19 if (count.testAndSetOrdered(localCount, localCount + 1))
evaluated: count.testAndSetOrdered(localCount, localCount + 1)
TRUEFALSE
yes
Evaluation Count:542479
yes
Evaluation Count:20300
20300-542479
20 return;
executed: return;
Execution Count:542454
542454
21 }
executed: }
Execution Count:20263
20263
22 } -
23}
never executed: }
0
24 -
25int ThreadEngineBarrier::release() -
26{ -
27 for(;;) { -
28 int localCount = count.load(); -
29 if (localCount == -1) {
evaluated: localCount == -1
TRUEFALSE
yes
Evaluation Count:501
yes
Evaluation Count:558093
501-558093
30 if (count.testAndSetOrdered(-1, 0)) {
partially evaluated: count.testAndSetOrdered(-1, 0)
TRUEFALSE
yes
Evaluation Count:501
no
Evaluation Count:0
0-501
31 semaphore.release(); -
32 return 0;
executed: return 0;
Execution Count:501
501
33 } -
34 } else if (localCount < 0) {
never executed: }
evaluated: localCount < 0
TRUEFALSE
yes
Evaluation Count:2371
yes
Evaluation Count:556199
0-556199
35 if (count.testAndSetOrdered(localCount, localCount + 1))
evaluated: count.testAndSetOrdered(localCount, localCount + 1)
TRUEFALSE
yes
Evaluation Count:2349
yes
Evaluation Count:41
41-2349
36 return qAbs(localCount + 1);
executed: return qAbs(localCount + 1);
Execution Count:2346
2346
37 } else {
executed: }
Execution Count:41
41
38 if (count.testAndSetOrdered(localCount, localCount - 1))
evaluated: count.testAndSetOrdered(localCount, localCount - 1)
TRUEFALSE
yes
Evaluation Count:539740
yes
Evaluation Count:23585
23585-539740
39 return localCount - 1;
executed: return localCount - 1;
Execution Count:539406
539406
40 }
executed: }
Execution Count:23424
23424
41 } -
42}
never executed: }
0
43 -
44 -
45void ThreadEngineBarrier::wait() -
46{ -
47 for(;;) { -
48 int localCount = count.load(); -
49 if (localCount == 0)
evaluated: localCount == 0
TRUEFALSE
yes
Evaluation Count:20051
yes
Evaluation Count:515
515-20051
50 return;
executed: return;
Execution Count:20051
20051
51 -
52 qt_noop(); -
53 if (count.testAndSetOrdered(localCount, -localCount)) {
evaluated: count.testAndSetOrdered(localCount, -localCount)
TRUEFALSE
yes
Evaluation Count:501
yes
Evaluation Count:14
14-501
54 semaphore.acquire(); -
55 return;
executed: return;
Execution Count:501
501
56 } -
57 }
executed: }
Execution Count:14
14
58}
never executed: }
0
59 -
60int ThreadEngineBarrier::currentCount() -
61{ -
62 return count.load();
never executed: return count.load();
0
63} -
64 -
65 -
66 -
67bool ThreadEngineBarrier::releaseUnlessLast() -
68{ -
69 for(;;) { -
70 int localCount = count.load(); -
71 if (qAbs(localCount) == 1) {
evaluated: qAbs(localCount) == 1
TRUEFALSE
yes
Evaluation Count:1302
yes
Evaluation Count:814
814-1302
72 return false;
executed: return false;
Execution Count:1302
1302
73 } else if (localCount < 0) {
evaluated: localCount < 0
TRUEFALSE
yes
Evaluation Count:369
yes
Evaluation Count:444
369-444
74 if (count.testAndSetOrdered(localCount, localCount + 1))
evaluated: count.testAndSetOrdered(localCount, localCount + 1)
TRUEFALSE
yes
Evaluation Count:366
yes
Evaluation Count:5
5-366
75 return true;
executed: return true;
Execution Count:366
366
76 } else {
executed: }
Execution Count:5
5
77 if (count.testAndSetOrdered(localCount, localCount - 1))
evaluated: count.testAndSetOrdered(localCount, localCount - 1)
TRUEFALSE
yes
Evaluation Count:439
yes
Evaluation Count:6
6-439
78 return true;
executed: return true;
Execution Count:439
439
79 }
executed: }
Execution Count:6
6
80 } -
81}
never executed: }
0
82 -
83ThreadEngineBase::ThreadEngineBase() -
84:futureInterface(0), threadPool(QThreadPool::globalInstance()) -
85{ -
86 setAutoDelete(false); -
87}
executed: }
Execution Count:81049
81049
88 -
89ThreadEngineBase::~ThreadEngineBase() {} -
90 -
91void ThreadEngineBase::startSingleThreaded() -
92{ -
93 start(); -
94 while (threadFunction() != ThreadFinished)
partially evaluated: threadFunction() != ThreadFinished
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:1
0-1
95 ;
never executed: ;
0
96 finish(); -
97}
executed: }
Execution Count:1
1
98 -
99void ThreadEngineBase::startBlocking() -
100{ -
101 start(); -
102 barrier.acquire(); -
103 startThreads(); -
104 -
105 bool throttled = false; -
106 -
107 try { -
108 -
109 while (threadFunction() == ThrottleThread) {
evaluated: threadFunction() == ThrottleThread
TRUEFALSE
yes
Evaluation Count:11
yes
Evaluation Count:20537
11-20537
110 if (threadThrottleExit()) {
partially evaluated: threadThrottleExit()
TRUEFALSE
yes
Evaluation Count:11
no
Evaluation Count:0
0-11
111 throttled = true; -
112 break;
executed: break;
Execution Count:11
11
113 } -
114 }
never executed: }
0
115 -
116 } catch (QException &e) {
executed: }
Execution Count:20548
20548
117 handleException(e); -
118 } catch (...) {
executed: }
Execution Count:2
2
119 handleException(QUnhandledException()); -
120 }
executed: }
Execution Count:2
2
121 -
122 -
123 if (throttled == false) {
evaluated: throttled == false
TRUEFALSE
yes
Evaluation Count:20541
yes
Evaluation Count:11
11-20541
124 barrier.release(); -
125 }
executed: }
Execution Count:20541
20541
126 -
127 barrier.wait(); -
128 finish(); -
129 exceptionStore.throwPossibleException(); -
130}
executed: }
Execution Count:20548
20548
131 -
132void ThreadEngineBase::startThread() -
133{ -
134 startThreadInternal(); -
135}
executed: }
Execution Count:79218
79218
136 -
137void ThreadEngineBase::acquireBarrierSemaphore() -
138{ -
139 barrier.acquire(); -
140}
executed: }
Execution Count:60497
60497
141 -
142bool ThreadEngineBase::isCanceled() -
143{ -
144 if (futureInterface)
evaluated: futureInterface
TRUEFALSE
yes
Evaluation Count:775546
yes
Evaluation Count:145390
145390-775546
145 return futureInterface->isCanceled();
executed: return futureInterface->isCanceled();
Execution Count:775307
775307
146 else -
147 return false;
executed: return false;
Execution Count:144887
144887
148} -
149 -
150void ThreadEngineBase::waitForResume() -
151{ -
152 if (futureInterface)
evaluated: futureInterface
TRUEFALSE
yes
Evaluation Count:24799
yes
Evaluation Count:57473
24799-57473
153 futureInterface->waitForResume();
executed: futureInterface->waitForResume();
Execution Count:24663
24663
154}
executed: }
Execution Count:81718
81718
155 -
156bool ThreadEngineBase::isProgressReportingEnabled() -
157{ -
158 -
159 return (futureInterface != 0);
executed: return (futureInterface != 0);
Execution Count:20910
20910
160} -
161 -
162void ThreadEngineBase::setProgressValue(int progress) -
163{ -
164 if (futureInterface)
partially evaluated: futureInterface
TRUEFALSE
yes
Evaluation Count:24394
no
Evaluation Count:0
0-24394
165 futureInterface->setProgressValue(progress);
executed: futureInterface->setProgressValue(progress);
Execution Count:24346
24346
166}
executed: }
Execution Count:24428
24428
167 -
168void ThreadEngineBase::setProgressRange(int minimum, int maximum) -
169{ -
170 if (futureInterface)
partially evaluated: futureInterface
TRUEFALSE
yes
Evaluation Count:255
no
Evaluation Count:0
0-255
171 futureInterface->setProgressRange(minimum, maximum);
executed: futureInterface->setProgressRange(minimum, maximum);
Execution Count:255
255
172}
executed: }
Execution Count:255
255
173 -
174bool ThreadEngineBase::startThreadInternal() -
175{ -
176 if (this->isCanceled())
partially evaluated: this->isCanceled()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:459381
0-459381
177 return false;
never executed: return false;
0
178 -
179 barrier.acquire(); -
180 if (!threadPool->tryStart(this)) {
evaluated: !threadPool->tryStart(this)
TRUEFALSE
yes
Evaluation Count:163145
yes
Evaluation Count:298530
163145-298530
181 barrier.release(); -
182 return false;
executed: return false;
Execution Count:163827
163827
183 } -
184 return true;
executed: return true;
Execution Count:298538
298538
185} -
186 -
187void ThreadEngineBase::startThreads() -
188{ -
189 while (shouldStartThread() && startThreadInternal())
evaluated: startThreadInternal()
TRUEFALSE
yes
Evaluation Count:298467
yes
Evaluation Count:84591
evaluated: shouldStartThread()
TRUEFALSE
yes
Evaluation Count:382147
yes
Evaluation Count:294079
84591-382147
190 ;
executed: ;
Execution Count:298468
298468
191}
executed: }
Execution Count:378412
378412
192 -
193void ThreadEngineBase::threadExit() -
194{ -
195 const bool asynchronous = futureInterface != 0; -
196 const int lastThread = (barrier.release() == 0); -
197 -
198 if (lastThread && asynchronous)
evaluated: lastThread
TRUEFALSE
yes
Evaluation Count:60977
yes
Evaluation Count:296913
evaluated: asynchronous
TRUEFALSE
yes
Evaluation Count:60474
yes
Evaluation Count:503
503-296913
199 this->asynchronousFinish();
executed: this->asynchronousFinish();
Execution Count:60467
60467
200}
executed: }
Execution Count:357891
357891
201 -
202 -
203 -
204 -
205bool ThreadEngineBase::threadThrottleExit() -
206{ -
207 return barrier.releaseUnlessLast();
executed: return barrier.releaseUnlessLast();
Execution Count:2106
2106
208} -
209 -
210void ThreadEngineBase::run() -
211{ -
212 if (this->isCanceled()) {
evaluated: this->isCanceled()
TRUEFALSE
yes
Evaluation Count:92
yes
Evaluation Count:358016
92-358016
213 threadExit(); -
214 return;
executed: return;
Execution Count:94
94
215 } -
216 -
217 startThreads(); -
218 -
219 -
220 try { -
221 -
222 while (threadFunction() == ThrottleThread) {
evaluated: threadFunction() == ThrottleThread
TRUEFALSE
yes
Evaluation Count:2094
yes
Evaluation Count:356466
2094-356466
223 -
224 -
225 -
226 -
227 if (threadThrottleExit())
evaluated: threadThrottleExit()
TRUEFALSE
yes
Evaluation Count:794
yes
Evaluation Count:1302
794-1302
228 return;
executed: return;
Execution Count:794
794
229 }
executed: }
Execution Count:1302
1302
230 -
231 -
232 } catch (QException &e) {
executed: }
Execution Count:356414
356414
233 handleException(e); -
234 } catch (...) {
executed: }
Execution Count:20
20
235 handleException(QUnhandledException()); -
236 }
executed: }
Execution Count:24
24
237 -
238 threadExit(); -
239}
executed: }
Execution Count:357814
357814
240 -
241 -
242 -
243void ThreadEngineBase::handleException(const QException &exception) -
244{ -
245 if (futureInterface)
evaluated: futureInterface
TRUEFALSE
yes
Evaluation Count:12
yes
Evaluation Count:36
12-36
246 futureInterface->reportException(exception);
executed: futureInterface->reportException(exception);
Execution Count:12
12
247 else -
248 exceptionStore.setException(exception);
executed: exceptionStore.setException(exception);
Execution Count:36
36
249} -
250 -
251 -
252 -
253} -
254 -
255 -
256 -
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial