Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderloop.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | - | |||||||||||||
4 | - | |||||||||||||
5 | - | |||||||||||||
6 | - | |||||||||||||
7 | - | |||||||||||||
8 | QSGSoftwareRenderLoop::QSGSoftwareRenderLoop() | - | ||||||||||||
9 | { | - | ||||||||||||
10 | sg = new QSGSoftwareContext(); | - | ||||||||||||
11 | rc = sg->createRenderContext(); | - | ||||||||||||
12 | } executed 2 times by 1 test: end of block Executed by:
| 2 | ||||||||||||
13 | - | |||||||||||||
14 | QSGSoftwareRenderLoop::~QSGSoftwareRenderLoop() | - | ||||||||||||
15 | { | - | ||||||||||||
16 | delete rc; | - | ||||||||||||
17 | delete sg; | - | ||||||||||||
18 | } executed 2 times by 1 test: end of block Executed by:
| 2 | ||||||||||||
19 | - | |||||||||||||
20 | void QSGSoftwareRenderLoop::show(QQuickWindow *window) | - | ||||||||||||
21 | { | - | ||||||||||||
22 | WindowData data; | - | ||||||||||||
23 | data.updatePending = false; | - | ||||||||||||
24 | data.grabOnly = false; | - | ||||||||||||
25 | m_windows[window] = data; | - | ||||||||||||
26 | - | |||||||||||||
27 | if (m_backingStores[window] == nullptr
| 0-8 | ||||||||||||
28 | m_backingStores[window] = new QBackingStore(window); | - | ||||||||||||
29 | } executed 8 times by 1 test: end of block Executed by:
| 8 | ||||||||||||
30 | - | |||||||||||||
31 | maybeUpdate(window); | - | ||||||||||||
32 | } executed 8 times by 1 test: end of block Executed by:
| 8 | ||||||||||||
33 | - | |||||||||||||
34 | void QSGSoftwareRenderLoop::hide(QQuickWindow *window) | - | ||||||||||||
35 | { | - | ||||||||||||
36 | QQuickWindowPrivate *cd = QQuickWindowPrivate::get(window); | - | ||||||||||||
37 | cd->fireAboutToStop(); | - | ||||||||||||
38 | } executed 12 times by 1 test: end of block Executed by:
| 12 | ||||||||||||
39 | - | |||||||||||||
40 | void QSGSoftwareRenderLoop::windowDestroyed(QQuickWindow *window) | - | ||||||||||||
41 | { | - | ||||||||||||
42 | m_windows.remove(window); | - | ||||||||||||
43 | delete m_backingStores[window]; | - | ||||||||||||
44 | m_backingStores.remove(window); | - | ||||||||||||
45 | hide(window); | - | ||||||||||||
46 | - | |||||||||||||
47 | QQuickWindowPrivate *d = QQuickWindowPrivate::get(window); | - | ||||||||||||
48 | d->cleanupNodesOnShutdown(); | - | ||||||||||||
49 | - | |||||||||||||
50 | if (m_windows.size() == 0
| 0-12 | ||||||||||||
51 | rc->invalidate(); | - | ||||||||||||
52 | } executed 12 times by 1 test: end of block Executed by:
| 12 | ||||||||||||
53 | } executed 12 times by 1 test: end of block Executed by:
| 12 | ||||||||||||
54 | - | |||||||||||||
55 | void QSGSoftwareRenderLoop::renderWindow(QQuickWindow *window, bool isNewExpose) | - | ||||||||||||
56 | { | - | ||||||||||||
57 | QQuickWindowPrivate *cd = QQuickWindowPrivate::get(window); | - | ||||||||||||
58 | if (!m_windows.contains(window)
| 0-24 | ||||||||||||
59 | return; never executed: return; | 0 | ||||||||||||
60 | - | |||||||||||||
61 | WindowData &data = const_cast<WindowData &>(m_windows[window]); | - | ||||||||||||
62 | - | |||||||||||||
63 | - | |||||||||||||
64 | if (!data.grabOnly
| 0-16 | ||||||||||||
65 | return; never executed: return; | 0 | ||||||||||||
66 | - | |||||||||||||
67 | - | |||||||||||||
68 | if (m_backingStores[window]->size() != window->size()
| 8-16 | ||||||||||||
69 | m_backingStores[window]->resize(window->size()); | - | ||||||||||||
70 | } executed 8 times by 1 test: end of block Executed by:
| 8 | ||||||||||||
71 | - | |||||||||||||
72 | - | |||||||||||||
73 | QSGSoftwareRenderContext *ctx = static_cast<QSGSoftwareRenderContext*>(cd->context); | - | ||||||||||||
74 | ctx->initializeIfNeeded(); | - | ||||||||||||
75 | - | |||||||||||||
76 | bool alsoSwap = data.updatePending; | - | ||||||||||||
77 | data.updatePending = false; | - | ||||||||||||
78 | - | |||||||||||||
79 | if (!data.grabOnly
| 8-16 | ||||||||||||
80 | cd->flushFrameSynchronousEvents(); | - | ||||||||||||
81 | - | |||||||||||||
82 | if (!m_windows.contains(window)
| 0-16 | ||||||||||||
83 | return; never executed: return; | 0 | ||||||||||||
84 | } executed 16 times by 1 test: end of block Executed by:
| 16 | ||||||||||||
85 | QElapsedTimer renderTimer; | - | ||||||||||||
86 | qint64 renderTime = 0, syncTime = 0, polishTime = 0; | - | ||||||||||||
87 | bool profileFrames = QSG_RASTER_LOG_TIME_RENDERLOOP().isDebugEnabled(); | - | ||||||||||||
88 | if (profileFrames
| 0-24 | ||||||||||||
89 | renderTimer.start(); never executed: renderTimer.start(); | 0 | ||||||||||||
90 | if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)
never executed: else (end of block executed 24 times by 1 test: void)0;(void)0; Executed by:
executed 24 times by 1 test: (void)0; Executed by:
| 0-24 | ||||||||||||
91 | - | |||||||||||||
92 | cd->polishItems(); | - | ||||||||||||
93 | - | |||||||||||||
94 | if (profileFrames
| 0-24 | ||||||||||||
95 | polishTime = renderTimer.nsecsElapsed(); never executed: polishTime = renderTimer.nsecsElapsed(); | 0 | ||||||||||||
96 | if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)
never executed: else (end of block executed 24 times by 1 test: void)0(void)0 ; Executed by:
executed 24 times by 1 test: (void)0 ; Executed by:
| 0-24 | ||||||||||||
97 | 24 | |||||||||||||
98 | ; executed 24 times by 1 test: (void)0 ; Executed by:
| 24 | ||||||||||||
99 | - | |||||||||||||
100 | window->afterAnimating(); | - | ||||||||||||
101 | - | |||||||||||||
102 | cd->syncSceneGraph(); | - | ||||||||||||
103 | rc->endSync(); | - | ||||||||||||
104 | - | |||||||||||||
105 | if (profileFrames
| 0-24 | ||||||||||||
106 | syncTime = renderTimer.nsecsElapsed(); never executed: syncTime = renderTimer.nsecsElapsed(); | 0 | ||||||||||||
107 | if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)
never executed: else (end of block executed 24 times by 1 test: void)0(void)0 ; Executed by:
executed 24 times by 1 test: (void)0 ; Executed by:
| 0-24 | ||||||||||||
108 | ; executed 24 times by 1 test: (void)0 ; Executed by:
| 24 | ||||||||||||
109 | - | |||||||||||||
110 | - | |||||||||||||
111 | auto softwareRenderer = static_cast<QSGSoftwareRenderer*>(cd->renderer); | - | ||||||||||||
112 | if (softwareRenderer
| 0-24 | ||||||||||||
113 | softwareRenderer->setBackingStore(m_backingStores[window]); executed 24 times by 1 test: softwareRenderer->setBackingStore(m_backingStores[window]); Executed by:
| 24 | ||||||||||||
114 | - | |||||||||||||
115 | cd->renderSceneGraph(window->size()); | - | ||||||||||||
116 | - | |||||||||||||
117 | if (profileFrames
| 0-24 | ||||||||||||
118 | renderTime = renderTimer.nsecsElapsed(); never executed: renderTime = renderTimer.nsecsElapsed(); | 0 | ||||||||||||
119 | if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)
never executed: else (end of block executed 24 times by 1 test: void)0(void)0 ; Executed by:
executed 24 times by 1 test: (void)0 ; Executed by:
| 0-24 | ||||||||||||
120 | ; executed 24 times by 1 test: (void)0 ; Executed by:
| 24 | ||||||||||||
121 | - | |||||||||||||
122 | if (data.grabOnly
| 8-16 | ||||||||||||
123 | grabContent = m_backingStores[window]->handle()->toImage(); | - | ||||||||||||
124 | data.grabOnly = false; | - | ||||||||||||
125 | } executed 8 times by 1 test: end of block Executed by:
| 8 | ||||||||||||
126 | - | |||||||||||||
127 | if (alsoSwap
| 0-16 | ||||||||||||
128 | - | |||||||||||||
129 | if (!isNewExpose
| 0-16 | ||||||||||||
130 | m_backingStores[window]->flush(softwareRenderer->flushRegion()); never executed: m_backingStores[window]->flush(softwareRenderer->flushRegion()); | 0 | ||||||||||||
131 | else | - | ||||||||||||
132 | m_backingStores[window]->flush(QRegion(QRect(QPoint(0,0), window->size()))); executed 16 times by 1 test: m_backingStores[window]->flush(QRegion(QRect(QPoint(0,0), window->size()))); Executed by:
| 16 | ||||||||||||
133 | cd->fireFrameSwapped(); | - | ||||||||||||
134 | } executed 16 times by 1 test: end of block Executed by:
| 16 | ||||||||||||
135 | - | |||||||||||||
136 | qint64 swapTime = 0; | - | ||||||||||||
137 | if (profileFrames
| 0-24 | ||||||||||||
138 | swapTime = renderTimer.nsecsElapsed(); never executed: swapTime = renderTimer.nsecsElapsed(); | 0 | ||||||||||||
139 | if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)
never executed: else (end of block executed 24 times by 1 test: void)0(void)0 ; Executed by:
executed 24 times by 1 test: (void)0 ; Executed by:
| 0-24 | ||||||||||||
140 | ; executed 24 times by 1 test: (void)0 ; Executed by:
| 24 | ||||||||||||
141 | - | |||||||||||||
142 | if (QSG_RASTER_LOG_TIME_RENDERLOOP().isDebugEnabled()
| 0-24 | ||||||||||||
143 | static QTime lastFrameTime = QTime::currentTime(); | - | ||||||||||||
144 | for (bool qt_category_enabled = QSG_RASTER_LOG_TIME_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger( __FILE__ , 199 , __PRETTY_FUNCTION__, QSG_RASTER_LOG_TIME_RENDERLOOP().categoryName()).debug("Frame rendered with 'software' renderloop in %dms, polish=%d, sync=%d, render=%d, swap=%d, frameDelta=%d", int(swapTime / 1000000), int(polishTime / 1000000), int((syncTime - polishTime) / 1000000), int((renderTime - syncTime) / 1000000), int((swapTime - renderTime) / 1000000), int(lastFrameTime.msecsTo(QTime::currentTime()))) ; | 0 | ||||||||||||
145 | 0 | |||||||||||||
146 | 0 | |||||||||||||
147 | 0 | |||||||||||||
148 | 0 | |||||||||||||
149 | 0 | |||||||||||||
150 | 0 | |||||||||||||
151 | __FILE__ never executed: QMessageLogger( __FILE__ , 199 , __PRETTY_FUNCTION__, QSG_RASTER_LOG_TIME_RENDERLOOP().categoryName()).debug("Frame rendered with 'software' renderloop in %dms, polish=%d, sync=%d, render=%d, swap=%d, frameDelta=%d", int(swapTime / 1000000), int(polishTime / 1000000), int((syncTime - polishTime) / 1000000), int((renderTime - syncTime) / 1000000), int((swapTime - renderTime) / 1000000), int(lastFrameTime.msecsTo(QTime::currentTime()))) ; | 0 | ||||||||||||
152 | , never executed: QMessageLogger( __FILE__ , 199 , __PRETTY_FUNCTION__, QSG_RASTER_LOG_TIME_RENDERLOOP().categoryName()).debug("Frame rendered with 'software' renderloop in %dms, polish=%d, sync=%d, render=%d, swap=%d, frameDelta=%d", int(swapTime / 1000000), int(polishTime / 1000000), int((syncTime - polishTime) / 1000000), int((renderTime - syncTime) / 1000000), int((swapTime - renderTime) / 1000000), int(lastFrameTime.msecsTo(QTime::currentTime()))) ; | 0 | ||||||||||||
153 | 0 | |||||||||||||
154 | 0 | |||||||||||||
155 | 0 | |||||||||||||
156 | 0 | |||||||||||||
157 | 0 | |||||||||||||
158 | 0 | |||||||||||||
159 | 199 never executed: QMessageLogger( __FILE__ , 199 , __PRETTY_FUNCTION__, QSG_RASTER_LOG_TIME_RENDERLOOP().categoryName()).debug("Frame rendered with 'software' renderloop in %dms, polish=%d, sync=%d, render=%d, swap=%d, frameDelta=%d", int(swapTime / 1000000), int(polishTime / 1000000), int((syncTime - polishTime) / 1000000), int((renderTime - syncTime) / 1000000), int((swapTime - renderTime) / 1000000), int(lastFrameTime.msecsTo(QTime::currentTime()))) ; | 0 | ||||||||||||
160 | , __PRETTY_FUNCTION__, QSG_RASTER_LOG_TIME_RENDERLOOP().categoryName()).debug("Frame rendered with 'software' renderloop in %dms, polish=%d, sync=%d, render=%d, swap=%d, frameDelta=%d", int(swapTime / 1000000), int(polishTime / 1000000), int((syncTime - polishTime) / 1000000), int((renderTime - syncTime) / 1000000), int((swapTime - renderTime) / 1000000), int(lastFrameTime.msecsTo(QTime::currentTime()))) never executed: QMessageLogger( __FILE__ , 199 , __PRETTY_FUNCTION__, QSG_RASTER_LOG_TIME_RENDERLOOP().categoryName()).debug("Frame rendered with 'software' renderloop in %dms, polish=%d, sync=%d, render=%d, swap=%d, frameDelta=%d", int(swapTime / 1000000), int(polishTime / 1000000), int((syncTime - polishTime) / 1000000), int((renderTime - syncTime) / 1000000), int((swapTime - renderTime) / 1000000), int(lastFrameTime.msecsTo(QTime::currentTime()))) ; | 0 | ||||||||||||
161 | 0 | |||||||||||||
162 | 0 | |||||||||||||
163 | 0 | |||||||||||||
164 | 0 | |||||||||||||
165 | 0 | |||||||||||||
166 | 0 | |||||||||||||
167 | ; never executed: QMessageLogger( __FILE__ , 199 , __PRETTY_FUNCTION__, QSG_RASTER_LOG_TIME_RENDERLOOP().categoryName()).debug("Frame rendered with 'software' renderloop in %dms, polish=%d, sync=%d, render=%d, swap=%d, frameDelta=%d", int(swapTime / 1000000), int(polishTime / 1000000), int((syncTime - polishTime) / 1000000), int((renderTime - syncTime) / 1000000), int((swapTime - renderTime) / 1000000), int(lastFrameTime.msecsTo(QTime::currentTime()))) ; | 0 | ||||||||||||
168 | lastFrameTime = QTime::currentTime(); | - | ||||||||||||
169 | } never executed: end of block | 0 | ||||||||||||
170 | - | |||||||||||||
171 | - | |||||||||||||
172 | if (data.updatePending
| 8-16 | ||||||||||||
173 | maybeUpdate(window); executed 8 times by 1 test: maybeUpdate(window); Executed by:
| 8 | ||||||||||||
174 | } executed 24 times by 1 test: end of block Executed by:
| 24 | ||||||||||||
175 | - | |||||||||||||
176 | void QSGSoftwareRenderLoop::exposureChanged(QQuickWindow *window) | - | ||||||||||||
177 | { | - | ||||||||||||
178 | if (window->isExposed()
| 0-16 | ||||||||||||
179 | m_windows[window].updatePending = true; | - | ||||||||||||
180 | renderWindow(window, true); | - | ||||||||||||
181 | } executed 16 times by 1 test: end of block Executed by:
| 16 | ||||||||||||
182 | } executed 16 times by 1 test: end of block Executed by:
| 16 | ||||||||||||
183 | - | |||||||||||||
184 | QImage QSGSoftwareRenderLoop::grab(QQuickWindow *window) | - | ||||||||||||
185 | { | - | ||||||||||||
186 | - | |||||||||||||
187 | if (!m_backingStores.contains(window)
| 0-8 | ||||||||||||
188 | m_backingStores[window] = new QBackingStore(window); | - | ||||||||||||
189 | - | |||||||||||||
190 | window->create(); | - | ||||||||||||
191 | } never executed: end of block | 0 | ||||||||||||
192 | - | |||||||||||||
193 | - | |||||||||||||
194 | if (!m_windows.contains(window)
| 0-8 | ||||||||||||
195 | WindowData data; | - | ||||||||||||
196 | data.updatePending = false; | - | ||||||||||||
197 | m_windows[window] = data; | - | ||||||||||||
198 | } never executed: end of block | 0 | ||||||||||||
199 | - | |||||||||||||
200 | m_windows[window].grabOnly = true; | - | ||||||||||||
201 | - | |||||||||||||
202 | renderWindow(window); | - | ||||||||||||
203 | - | |||||||||||||
204 | QImage grabbed = grabContent; | - | ||||||||||||
205 | grabbed.detach(); | - | ||||||||||||
206 | grabContent = QImage(); | - | ||||||||||||
207 | return executed 8 times by 1 test: grabbed;return grabbed; Executed by:
executed 8 times by 1 test: return grabbed; Executed by:
| 8 | ||||||||||||
208 | } | - | ||||||||||||
209 | - | |||||||||||||
210 | - | |||||||||||||
211 | - | |||||||||||||
212 | void QSGSoftwareRenderLoop::maybeUpdate(QQuickWindow *window) | - | ||||||||||||
213 | { | - | ||||||||||||
214 | if (!m_windows.contains(window)
| 64-92 | ||||||||||||
215 | return; executed 92 times by 1 test: return; Executed by:
| 92 | ||||||||||||
216 | - | |||||||||||||
217 | m_windows[window].updatePending = true; | - | ||||||||||||
218 | window->requestUpdate(); | - | ||||||||||||
219 | } executed 64 times by 1 test: end of block Executed by:
| 64 | ||||||||||||
220 | - | |||||||||||||
221 | QSurface::SurfaceType QSGSoftwareRenderLoop::windowSurfaceType() const | - | ||||||||||||
222 | { | - | ||||||||||||
223 | return executed 12 times by 1 test: QSurface::RasterSurface;return QSurface::RasterSurface; Executed by:
executed 12 times by 1 test: return QSurface::RasterSurface; Executed by:
| 12 | ||||||||||||
224 | } | - | ||||||||||||
225 | - | |||||||||||||
226 | - | |||||||||||||
227 | - | |||||||||||||
228 | QSGContext *QSGSoftwareRenderLoop::sceneGraphContext() const | - | ||||||||||||
229 | { | - | ||||||||||||
230 | return executed 12 times by 1 test: sg;return sg; Executed by:
executed 12 times by 1 test: return sg; Executed by:
| 12 | ||||||||||||
231 | } | - | ||||||||||||
232 | - | |||||||||||||
233 | - | |||||||||||||
234 | void QSGSoftwareRenderLoop::handleUpdateRequest(QQuickWindow *window) | - | ||||||||||||
235 | { | - | ||||||||||||
236 | renderWindow(window); | - | ||||||||||||
237 | } never executed: end of block | 0 | ||||||||||||
238 | - | |||||||||||||
239 | - | |||||||||||||
240 | - | |||||||||||||
Switch to Source code | Preprocessed file |