Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/quick/scenegraph/qsgwindowsrenderloop.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||
2 | - | |||||||||||||||||||
3 | - | |||||||||||||||||||
4 | - | |||||||||||||||||||
5 | - | |||||||||||||||||||
6 | - | |||||||||||||||||||
7 | - | |||||||||||||||||||
8 | - | |||||||||||||||||||
9 | - | |||||||||||||||||||
10 | - | |||||||||||||||||||
11 | extern __attribute__((visibility("default"))) QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha); | - | ||||||||||||||||||
12 | - | |||||||||||||||||||
13 | - | |||||||||||||||||||
14 | - | |||||||||||||||||||
15 | static QElapsedTimer qsg_render_timer; | - | ||||||||||||||||||
16 | QSGWindowsRenderLoop::QSGWindowsRenderLoop() | - | ||||||||||||||||||
17 | : m_gl(nullptr) | - | ||||||||||||||||||
18 | , m_sg(QSGContext::createDefaultContext()) | - | ||||||||||||||||||
19 | , m_updateTimer(0) | - | ||||||||||||||||||
20 | , m_animationTimer(0) | - | ||||||||||||||||||
21 | { | - | ||||||||||||||||||
22 | m_rc = static_cast<QSGDefaultRenderContext *>(m_sg->createRenderContext()); | - | ||||||||||||||||||
23 | - | |||||||||||||||||||
24 | m_vsyncDelta = 1000 / QGuiApplication::primaryScreen()->refreshRate(); | - | ||||||||||||||||||
25 | if (m_vsyncDelta <= 0
| 0 | ||||||||||||||||||
26 | m_vsyncDelta = 16; never executed: m_vsyncDelta = 16; | 0 | ||||||||||||||||||
27 | - | |||||||||||||||||||
28 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 92, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("Windows Render Loop created"); | 0 | ||||||||||||||||||
29 | - | |||||||||||||||||||
30 | m_animationDriver = m_sg->createAnimationDriver(m_sg); | - | ||||||||||||||||||
31 | connect(m_animationDriver, qFlagLocation("2""started()" "\0" __FILE__ ":" "95"), this, qFlagLocation("1""started()" "\0" __FILE__ ":" "95")); | - | ||||||||||||||||||
32 | connect(m_animationDriver, qFlagLocation("2""stopped()" "\0" __FILE__ ":" "96"), this, qFlagLocation("1""stopped()" "\0" __FILE__ ":" "96")); | - | ||||||||||||||||||
33 | m_animationDriver->install(); | - | ||||||||||||||||||
34 | - | |||||||||||||||||||
35 | qsg_render_timer.start(); | - | ||||||||||||||||||
36 | } never executed: end of block | 0 | ||||||||||||||||||
37 | - | |||||||||||||||||||
38 | QSGWindowsRenderLoop::~QSGWindowsRenderLoop() | - | ||||||||||||||||||
39 | { | - | ||||||||||||||||||
40 | delete m_rc; | - | ||||||||||||||||||
41 | delete m_sg; | - | ||||||||||||||||||
42 | } never executed: end of block | 0 | ||||||||||||||||||
43 | - | |||||||||||||||||||
44 | bool QSGWindowsRenderLoop::interleaveIncubation() const | - | ||||||||||||||||||
45 | { | - | ||||||||||||||||||
46 | return never executed: m_animationDriver->isRunning() && anyoneShowing();return m_animationDriver->isRunning() && anyoneShowing(); never executed: return m_animationDriver->isRunning() && anyoneShowing(); | 0 | ||||||||||||||||||
47 | } | - | ||||||||||||||||||
48 | - | |||||||||||||||||||
49 | QSGWindowsRenderLoop::WindowData *QSGWindowsRenderLoop::windowData(QQuickWindow *window) | - | ||||||||||||||||||
50 | { | - | ||||||||||||||||||
51 | for (int i=0; i<m_windows.size()
| 0 | ||||||||||||||||||
52 | WindowData &wd = m_windows[i]; | - | ||||||||||||||||||
53 | if (wd.window == window
| 0 | ||||||||||||||||||
54 | return never executed: &wd;return &wd; never executed: return &wd; | 0 | ||||||||||||||||||
55 | } never executed: end of block | 0 | ||||||||||||||||||
56 | return never executed: nullptr;return nullptr; never executed: return nullptr; | 0 | ||||||||||||||||||
57 | } | - | ||||||||||||||||||
58 | - | |||||||||||||||||||
59 | void QSGWindowsRenderLoop::maybePostUpdateTimer() | - | ||||||||||||||||||
60 | { | - | ||||||||||||||||||
61 | if (!m_updateTimer
| 0 | ||||||||||||||||||
62 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 126, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - posting event"); | 0 | ||||||||||||||||||
63 | m_updateTimer = startTimer(m_vsyncDelta / 3); | - | ||||||||||||||||||
64 | } never executed: end of block | 0 | ||||||||||||||||||
65 | } never executed: end of block | 0 | ||||||||||||||||||
66 | - | |||||||||||||||||||
67 | - | |||||||||||||||||||
68 | - | |||||||||||||||||||
69 | - | |||||||||||||||||||
70 | - | |||||||||||||||||||
71 | void QSGWindowsRenderLoop::started() | - | ||||||||||||||||||
72 | { | - | ||||||||||||||||||
73 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 137, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("Animations started..."); | 0 | ||||||||||||||||||
74 | if (!anyoneShowing()
| 0 | ||||||||||||||||||
75 | if (m_animationTimer == 0
| 0 | ||||||||||||||||||
76 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 140, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - starting non-visual animation timer"); | 0 | ||||||||||||||||||
77 | m_animationTimer = startTimer(m_vsyncDelta); | - | ||||||||||||||||||
78 | } never executed: end of block | 0 | ||||||||||||||||||
79 | } never executed: else {end of block | 0 | ||||||||||||||||||
80 | maybePostUpdateTimer(); | - | ||||||||||||||||||
81 | } never executed: end of block | 0 | ||||||||||||||||||
82 | } | - | ||||||||||||||||||
83 | - | |||||||||||||||||||
84 | void QSGWindowsRenderLoop::stopped() | - | ||||||||||||||||||
85 | { | - | ||||||||||||||||||
86 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 150, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("Animations stopped..."); | 0 | ||||||||||||||||||
87 | if (m_animationTimer
| 0 | ||||||||||||||||||
88 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 152, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - stopping non-visual animation timer"); | 0 | ||||||||||||||||||
89 | killTimer(m_animationTimer); | - | ||||||||||||||||||
90 | m_animationTimer = 0; | - | ||||||||||||||||||
91 | } never executed: end of block | 0 | ||||||||||||||||||
92 | } never executed: end of block | 0 | ||||||||||||||||||
93 | - | |||||||||||||||||||
94 | void QSGWindowsRenderLoop::show(QQuickWindow *window) | - | ||||||||||||||||||
95 | { | - | ||||||||||||||||||
96 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 160, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("show"); | 0 | ||||||||||||||||||
97 | if (windowData(window) != nullptr
| 0 | ||||||||||||||||||
98 | return; never executed: return; | 0 | ||||||||||||||||||
99 | - | |||||||||||||||||||
100 | - | |||||||||||||||||||
101 | - | |||||||||||||||||||
102 | - | |||||||||||||||||||
103 | - | |||||||||||||||||||
104 | - | |||||||||||||||||||
105 | - | |||||||||||||||||||
106 | if (!m_gl
| 0 | ||||||||||||||||||
107 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 171, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - creating GL context"); | 0 | ||||||||||||||||||
108 | m_gl = new QOpenGLContext(); | - | ||||||||||||||||||
109 | m_gl->setFormat(window->requestedFormat()); | - | ||||||||||||||||||
110 | m_gl->setScreen(window->screen()); | - | ||||||||||||||||||
111 | if (qt_gl_global_share_context()
| 0 | ||||||||||||||||||
112 | m_gl->setShareContext(qt_gl_global_share_context()); never executed: m_gl->setShareContext(qt_gl_global_share_context()); | 0 | ||||||||||||||||||
113 | bool created = m_gl->create(); | - | ||||||||||||||||||
114 | if (!created
| 0 | ||||||||||||||||||
115 | const bool isEs = m_gl->isOpenGLES(); | - | ||||||||||||||||||
116 | delete m_gl; | - | ||||||||||||||||||
117 | m_gl = nullptr; | - | ||||||||||||||||||
118 | handleContextCreationFailure(window, isEs); | - | ||||||||||||||||||
119 | return; never executed: return; | 0 | ||||||||||||||||||
120 | } | - | ||||||||||||||||||
121 | - | |||||||||||||||||||
122 | QQuickWindowPrivate::get(window)->fireOpenGLContextCreated(m_gl); | - | ||||||||||||||||||
123 | - | |||||||||||||||||||
124 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 188, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - making current"); | 0 | ||||||||||||||||||
125 | bool current = m_gl->makeCurrent(window); | - | ||||||||||||||||||
126 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 190, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - initializing SG"); | 0 | ||||||||||||||||||
127 | if (current
| 0 | ||||||||||||||||||
128 | m_rc->initialize(m_gl); never executed: m_rc->initialize(m_gl); | 0 | ||||||||||||||||||
129 | } never executed: end of block | 0 | ||||||||||||||||||
130 | - | |||||||||||||||||||
131 | WindowData data; | - | ||||||||||||||||||
132 | data.window = window; | - | ||||||||||||||||||
133 | data.pendingUpdate = false; | - | ||||||||||||||||||
134 | m_windows << data; | - | ||||||||||||||||||
135 | - | |||||||||||||||||||
136 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 200, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - done with show"); | 0 | ||||||||||||||||||
137 | } never executed: end of block | 0 | ||||||||||||||||||
138 | - | |||||||||||||||||||
139 | void QSGWindowsRenderLoop::hide(QQuickWindow *window) | - | ||||||||||||||||||
140 | { | - | ||||||||||||||||||
141 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 205, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("hide"); | 0 | ||||||||||||||||||
142 | - | |||||||||||||||||||
143 | - | |||||||||||||||||||
144 | - | |||||||||||||||||||
145 | - | |||||||||||||||||||
146 | - | |||||||||||||||||||
147 | if (window->isExposed()
| 0 | ||||||||||||||||||
148 | handleObscurity(); never executed: handleObscurity(); | 0 | ||||||||||||||||||
149 | if (!m_gl
| 0 | ||||||||||||||||||
150 | return; never executed: return; | 0 | ||||||||||||||||||
151 | QQuickWindowPrivate::get(window)->fireAboutToStop(); | - | ||||||||||||||||||
152 | } never executed: end of block | 0 | ||||||||||||||||||
153 | - | |||||||||||||||||||
154 | void QSGWindowsRenderLoop::windowDestroyed(QQuickWindow *window) | - | ||||||||||||||||||
155 | { | - | ||||||||||||||||||
156 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 220, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("windowDestroyed"); | 0 | ||||||||||||||||||
157 | for (int i=0; i<m_windows.size()
| 0 | ||||||||||||||||||
158 | if (m_windows.at(i).window == window
| 0 | ||||||||||||||||||
159 | m_windows.removeAt(i); | - | ||||||||||||||||||
160 | break; never executed: break; | 0 | ||||||||||||||||||
161 | } | - | ||||||||||||||||||
162 | } never executed: end of block | 0 | ||||||||||||||||||
163 | - | |||||||||||||||||||
164 | hide(window); | - | ||||||||||||||||||
165 | - | |||||||||||||||||||
166 | QQuickWindowPrivate *d = QQuickWindowPrivate::get(window); | - | ||||||||||||||||||
167 | - | |||||||||||||||||||
168 | bool current = false; | - | ||||||||||||||||||
169 | QScopedPointer<QOffscreenSurface> offscreenSurface; | - | ||||||||||||||||||
170 | if (m_gl
| 0 | ||||||||||||||||||
171 | QSurface *surface = window; | - | ||||||||||||||||||
172 | - | |||||||||||||||||||
173 | if (!window->handle()
| 0 | ||||||||||||||||||
174 | offscreenSurface.reset(new QOffscreenSurface); | - | ||||||||||||||||||
175 | offscreenSurface->setFormat(m_gl->format()); | - | ||||||||||||||||||
176 | offscreenSurface->create(); | - | ||||||||||||||||||
177 | surface = offscreenSurface.data(); | - | ||||||||||||||||||
178 | } never executed: end of block | 0 | ||||||||||||||||||
179 | current = m_gl->makeCurrent(surface); | - | ||||||||||||||||||
180 | } never executed: end of block | 0 | ||||||||||||||||||
181 | if (__builtin_expect(!!(!current), false)
| 0 | ||||||||||||||||||
182 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 246, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("cleanup without an OpenGL context"); | 0 | ||||||||||||||||||
183 | - | |||||||||||||||||||
184 | - | |||||||||||||||||||
185 | QQuickOpenGLShaderEffectMaterial::cleanupMaterialCache(); | - | ||||||||||||||||||
186 | - | |||||||||||||||||||
187 | - | |||||||||||||||||||
188 | d->cleanupNodesOnShutdown(); | - | ||||||||||||||||||
189 | if (m_windows.size() == 0
| 0 | ||||||||||||||||||
190 | d->context->invalidate(); | - | ||||||||||||||||||
191 | delete m_gl; | - | ||||||||||||||||||
192 | m_gl = nullptr; | - | ||||||||||||||||||
193 | } never executed: else if (m_glend of block
| 0 | ||||||||||||||||||
194 | m_gl->doneCurrent(); | - | ||||||||||||||||||
195 | } never executed: end of block | 0 | ||||||||||||||||||
196 | - | |||||||||||||||||||
197 | delete d->animationController; | - | ||||||||||||||||||
198 | } never executed: end of block | 0 | ||||||||||||||||||
199 | - | |||||||||||||||||||
200 | bool QSGWindowsRenderLoop::anyoneShowing() const | - | ||||||||||||||||||
201 | { | - | ||||||||||||||||||
202 | for (const WindowData &wd : qAsConst(m_windows)) | - | ||||||||||||||||||
203 | if (wd.window->isVisible()
| 0 | ||||||||||||||||||
204 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||
205 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||
206 | } | - | ||||||||||||||||||
207 | - | |||||||||||||||||||
208 | void QSGWindowsRenderLoop::exposureChanged(QQuickWindow *window) | - | ||||||||||||||||||
209 | { | - | ||||||||||||||||||
210 | - | |||||||||||||||||||
211 | if (windowData(window) == nullptr
| 0 | ||||||||||||||||||
212 | return; never executed: return; | 0 | ||||||||||||||||||
213 | - | |||||||||||||||||||
214 | if (window->isExposed()
| 0 | ||||||||||||||||||
215 | - | |||||||||||||||||||
216 | - | |||||||||||||||||||
217 | if (m_animationTimer
| 0 | ||||||||||||||||||
218 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 282, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - stopping non-visual animation timer"); | 0 | ||||||||||||||||||
219 | killTimer(m_animationTimer); | - | ||||||||||||||||||
220 | m_animationTimer = 0; | - | ||||||||||||||||||
221 | } never executed: end of block | 0 | ||||||||||||||||||
222 | - | |||||||||||||||||||
223 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 287, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("exposureChanged - exposed"); | 0 | ||||||||||||||||||
224 | WindowData *wd = windowData(window); | - | ||||||||||||||||||
225 | wd->pendingUpdate = true; | - | ||||||||||||||||||
226 | - | |||||||||||||||||||
227 | - | |||||||||||||||||||
228 | - | |||||||||||||||||||
229 | if (m_updateTimer
| 0 | ||||||||||||||||||
230 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 294, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - killing pending update timer"); | 0 | ||||||||||||||||||
231 | killTimer(m_updateTimer); | - | ||||||||||||||||||
232 | m_updateTimer = 0; | - | ||||||||||||||||||
233 | } never executed: end of block | 0 | ||||||||||||||||||
234 | render(); | - | ||||||||||||||||||
235 | } never executed: else {end of block | 0 | ||||||||||||||||||
236 | handleObscurity(); | - | ||||||||||||||||||
237 | } never executed: end of block | 0 | ||||||||||||||||||
238 | } | - | ||||||||||||||||||
239 | - | |||||||||||||||||||
240 | void QSGWindowsRenderLoop::handleObscurity() | - | ||||||||||||||||||
241 | { | - | ||||||||||||||||||
242 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 306, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("handleObscurity"); | 0 | ||||||||||||||||||
243 | - | |||||||||||||||||||
244 | if (m_animationDriver->isRunning()
| 0 | ||||||||||||||||||
245 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 309, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - starting non-visual animation timer"); | 0 | ||||||||||||||||||
246 | m_animationTimer = startTimer(m_vsyncDelta); | - | ||||||||||||||||||
247 | } never executed: end of block | 0 | ||||||||||||||||||
248 | } never executed: end of block | 0 | ||||||||||||||||||
249 | - | |||||||||||||||||||
250 | QImage QSGWindowsRenderLoop::grab(QQuickWindow *window) | - | ||||||||||||||||||
251 | { | - | ||||||||||||||||||
252 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 316, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("grab"); | 0 | ||||||||||||||||||
253 | if (!m_gl
| 0 | ||||||||||||||||||
254 | return never executed: QImage();return QImage(); never executed: return QImage(); | 0 | ||||||||||||||||||
255 | - | |||||||||||||||||||
256 | m_gl->makeCurrent(window); | - | ||||||||||||||||||
257 | - | |||||||||||||||||||
258 | QQuickWindowPrivate *d = QQuickWindowPrivate::get(window); | - | ||||||||||||||||||
259 | d->polishItems(); | - | ||||||||||||||||||
260 | d->syncSceneGraph(); | - | ||||||||||||||||||
261 | d->renderSceneGraph(window->size()); | - | ||||||||||||||||||
262 | - | |||||||||||||||||||
263 | bool alpha = window->format().alphaBufferSize() > 0
| 0 | ||||||||||||||||||
264 | QImage image = qt_gl_read_framebuffer(window->size() * window->effectiveDevicePixelRatio(), alpha, alpha); | - | ||||||||||||||||||
265 | image.setDevicePixelRatio(window->effectiveDevicePixelRatio()); | - | ||||||||||||||||||
266 | return never executed: image;return image; never executed: return image; | 0 | ||||||||||||||||||
267 | } | - | ||||||||||||||||||
268 | - | |||||||||||||||||||
269 | void QSGWindowsRenderLoop::update(QQuickWindow *window) | - | ||||||||||||||||||
270 | { | - | ||||||||||||||||||
271 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 335, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("update"); | 0 | ||||||||||||||||||
272 | maybeUpdate(window); | - | ||||||||||||||||||
273 | } never executed: end of block | 0 | ||||||||||||||||||
274 | - | |||||||||||||||||||
275 | void QSGWindowsRenderLoop::maybeUpdate(QQuickWindow *window) | - | ||||||||||||||||||
276 | { | - | ||||||||||||||||||
277 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 341, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("maybeUpdate"); | 0 | ||||||||||||||||||
278 | - | |||||||||||||||||||
279 | WindowData *wd = windowData(window); | - | ||||||||||||||||||
280 | if (!wd
| 0 | ||||||||||||||||||
281 | return; never executed: return; | 0 | ||||||||||||||||||
282 | - | |||||||||||||||||||
283 | wd->pendingUpdate = true; | - | ||||||||||||||||||
284 | maybePostUpdateTimer(); | - | ||||||||||||||||||
285 | } never executed: end of block | 0 | ||||||||||||||||||
286 | - | |||||||||||||||||||
287 | QSGRenderContext *QSGWindowsRenderLoop::createRenderContext(QSGContext *) const | - | ||||||||||||||||||
288 | { | - | ||||||||||||||||||
289 | return never executed: m_rc;return m_rc; never executed: return m_rc; | 0 | ||||||||||||||||||
290 | } | - | ||||||||||||||||||
291 | - | |||||||||||||||||||
292 | bool QSGWindowsRenderLoop::event(QEvent *event) | - | ||||||||||||||||||
293 | { | - | ||||||||||||||||||
294 | switch (event->type()) { | - | ||||||||||||||||||
295 | case never executed: QEvent::Timer:case QEvent::Timer: never executed: {case QEvent::Timer: | 0 | ||||||||||||||||||
296 | QTimerEvent *te = static_cast<QTimerEvent *>(event); | - | ||||||||||||||||||
297 | if (te->timerId() == m_animationTimer
| 0 | ||||||||||||||||||
298 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 362, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("event : animation tick while nothing is showing"); | 0 | ||||||||||||||||||
299 | m_animationDriver->advance(); | - | ||||||||||||||||||
300 | } never executed: else if (te->timerId() == m_updateTimerend of block
| 0 | ||||||||||||||||||
301 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 365, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("event : update"); | 0 | ||||||||||||||||||
302 | killTimer(m_updateTimer); | - | ||||||||||||||||||
303 | m_updateTimer = 0; | - | ||||||||||||||||||
304 | render(); | - | ||||||||||||||||||
305 | } never executed: end of block | 0 | ||||||||||||||||||
306 | return never executed: true;return true; never executed: }return true; | 0 | ||||||||||||||||||
307 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||
308 | break; never executed: break; | 0 | ||||||||||||||||||
309 | } | - | ||||||||||||||||||
310 | - | |||||||||||||||||||
311 | return never executed: QObject::event(event);return QObject::event(event); never executed: return QObject::event(event); | 0 | ||||||||||||||||||
312 | } | - | ||||||||||||||||||
313 | - | |||||||||||||||||||
314 | - | |||||||||||||||||||
315 | - | |||||||||||||||||||
316 | - | |||||||||||||||||||
317 | - | |||||||||||||||||||
318 | void QSGWindowsRenderLoop::render() | - | ||||||||||||||||||
319 | { | - | ||||||||||||||||||
320 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 384, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("render"); | 0 | ||||||||||||||||||
321 | bool rendered = false; | - | ||||||||||||||||||
322 | for (const WindowData &wd : qAsConst(m_windows)) { | - | ||||||||||||||||||
323 | if (wd.pendingUpdate
| 0 | ||||||||||||||||||
324 | const_cast<WindowData &>(wd).pendingUpdate = false; | - | ||||||||||||||||||
325 | renderWindow(wd.window); | - | ||||||||||||||||||
326 | rendered = true; | - | ||||||||||||||||||
327 | } never executed: end of block | 0 | ||||||||||||||||||
328 | } never executed: end of block | 0 | ||||||||||||||||||
329 | - | |||||||||||||||||||
330 | if (!rendered
| 0 | ||||||||||||||||||
331 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 395, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("no changes, sleep"); | 0 | ||||||||||||||||||
332 | QThread::msleep(m_vsyncDelta); | - | ||||||||||||||||||
333 | } never executed: end of block | 0 | ||||||||||||||||||
334 | - | |||||||||||||||||||
335 | if (m_animationDriver->isRunning()
| 0 | ||||||||||||||||||
336 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 400, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("advancing animations"); | 0 | ||||||||||||||||||
337 | qint64 time_start = 0; if (QSG_LOG_TIME_RENDERLOOP().isDebugEnabled()
never executed: ;time_start = qsg_render_timer.nsecsElapsed(); | 0 | ||||||||||||||||||
338 | if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)
never executed: else (end of block never executed: void)0;(void)0; never executed: (void)0; | 0 | ||||||||||||||||||
339 | m_animationDriver->advance(); | - | ||||||||||||||||||
340 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 404, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("animations advanced"); | 0 | ||||||||||||||||||
341 | - | |||||||||||||||||||
342 | for (bool qt_category_enabled = QSG_LOG_TIME_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger( __FILE__ , 408 , __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP().categoryName()).debug("animations ticked in %dms", int((qsg_render_timer.nsecsElapsed() - time_start)/1000000)) ; | 0 | ||||||||||||||||||
343 | 0 | |||||||||||||||||||
344 | __FILE__ never executed: QMessageLogger( __FILE__ , 408 , __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP().categoryName()).debug("animations ticked in %dms", int((qsg_render_timer.nsecsElapsed() - time_start)/1000000)) ; | 0 | ||||||||||||||||||
345 | , never executed: QMessageLogger( __FILE__ , 408 , __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP().categoryName()).debug("animations ticked in %dms", int((qsg_render_timer.nsecsElapsed() - time_start)/1000000)) ; | 0 | ||||||||||||||||||
346 | 0 | |||||||||||||||||||
347 | 408 never executed: QMessageLogger( __FILE__ , 408 , __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP().categoryName()).debug("animations ticked in %dms", int((qsg_render_timer.nsecsElapsed() - time_start)/1000000)) ; | 0 | ||||||||||||||||||
348 | , __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP().categoryName()).debug("animations ticked in %dms", int((qsg_render_timer.nsecsElapsed() - time_start)/1000000)) never executed: QMessageLogger( __FILE__ , 408 , __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP().categoryName()).debug("animations ticked in %dms", int((qsg_render_timer.nsecsElapsed() - time_start)/1000000)) ; | 0 | ||||||||||||||||||
349 | 0 | |||||||||||||||||||
350 | ; never executed: QMessageLogger( __FILE__ , 408 , __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP().categoryName()).debug("animations ticked in %dms", int((qsg_render_timer.nsecsElapsed() - time_start)/1000000)) ; | 0 | ||||||||||||||||||
351 | - | |||||||||||||||||||
352 | if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)
never executed: else (end of block never executed: void)0;(void)0; never executed: (void)0; | 0 | ||||||||||||||||||
353 | - | |||||||||||||||||||
354 | - | |||||||||||||||||||
355 | - | |||||||||||||||||||
356 | - | |||||||||||||||||||
357 | maybePostUpdateTimer(); | - | ||||||||||||||||||
358 | - | |||||||||||||||||||
359 | timeToIncubate(); | - | ||||||||||||||||||
360 | } never executed: end of block | 0 | ||||||||||||||||||
361 | } never executed: end of block | 0 | ||||||||||||||||||
362 | void QSGWindowsRenderLoop::renderWindow(QQuickWindow *window) | - | ||||||||||||||||||
363 | { | - | ||||||||||||||||||
364 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 431, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("renderWindow"); | 0 | ||||||||||||||||||
365 | QQuickWindowPrivate *d = QQuickWindowPrivate::get(window); | - | ||||||||||||||||||
366 | - | |||||||||||||||||||
367 | if (!d->isRenderable()
| 0 | ||||||||||||||||||
368 | return; never executed: return; | 0 | ||||||||||||||||||
369 | - | |||||||||||||||||||
370 | if (!m_gl->makeCurrent(window)
| 0 | ||||||||||||||||||
371 | - | |||||||||||||||||||
372 | if (!m_gl->isValid()
| 0 | ||||||||||||||||||
373 | d->cleanupNodesOnShutdown(); | - | ||||||||||||||||||
374 | m_rc->invalidate(); | - | ||||||||||||||||||
375 | if (m_gl->create()
| 0 | ||||||||||||||||||
376 | m_rc->initialize(m_gl); never executed: m_rc->initialize(m_gl); | 0 | ||||||||||||||||||
377 | else | - | ||||||||||||||||||
378 | return; never executed: return; | 0 | ||||||||||||||||||
379 | } | - | ||||||||||||||||||
380 | } never executed: end of block | 0 | ||||||||||||||||||
381 | - | |||||||||||||||||||
382 | bool lastDirtyWindow = true; | - | ||||||||||||||||||
383 | for (int i=0; i<m_windows.size()
| 0 | ||||||||||||||||||
384 | if ( m_windows[i].pendingUpdate
| 0 | ||||||||||||||||||
385 | lastDirtyWindow = false; | - | ||||||||||||||||||
386 | break; never executed: break; | 0 | ||||||||||||||||||
387 | } | - | ||||||||||||||||||
388 | } never executed: end of block | 0 | ||||||||||||||||||
389 | - | |||||||||||||||||||
390 | d->flushFrameSynchronousEvents(); | - | ||||||||||||||||||
391 | - | |||||||||||||||||||
392 | if (!windowData(window)
| 0 | ||||||||||||||||||
393 | return; never executed: return; | 0 | ||||||||||||||||||
394 | - | |||||||||||||||||||
395 | qint64 time_start = 0; if (QSG_LOG_TIME_RENDERLOOP().isDebugEnabled()
never executed: ;time_start = qsg_render_timer.nsecsElapsed(); | 0 | ||||||||||||||||||
396 | if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)
never executed: else (end of block never executed: void)0;(void)0; never executed: (void)0; | 0 | ||||||||||||||||||
397 | - | |||||||||||||||||||
398 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 465, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - polishing"); | 0 | ||||||||||||||||||
399 | d->polishItems(); | - | ||||||||||||||||||
400 | qint64 time_polished = 0; if (QSG_LOG_TIME_RENDERLOOP().isDebugEnabled()
never executed: ;time_polished = qsg_render_timer.nsecsElapsed(); | 0 | ||||||||||||||||||
401 | if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)
never executed: else (end of block never executed: void)0(void)0 ; never executed: (void)0 ; | 0 | ||||||||||||||||||
402 | 0 | |||||||||||||||||||
403 | ; never executed: (void)0 ; | 0 | ||||||||||||||||||
404 | - | |||||||||||||||||||
405 | window->afterAnimating(); | - | ||||||||||||||||||
406 | - | |||||||||||||||||||
407 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 474, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - syncing"); | 0 | ||||||||||||||||||
408 | d->syncSceneGraph(); | - | ||||||||||||||||||
409 | if (lastDirtyWindow
| 0 | ||||||||||||||||||
410 | m_rc->endSync(); never executed: m_rc->endSync(); | 0 | ||||||||||||||||||
411 | qint64 time_synced = 0; if (QSG_LOG_TIME_RENDERLOOP().isDebugEnabled()
never executed: if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)time_synced = qsg_render_timer.nsecsElapsed();
never executed: else (end of block never executed: void)0;(void)0; never executed: (void)0; | 0 | ||||||||||||||||||
412 | ; | - | ||||||||||||||||||
413 | - | |||||||||||||||||||
414 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 481, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - rendering"); | 0 | ||||||||||||||||||
415 | d->renderSceneGraph(window->size()); | - | ||||||||||||||||||
416 | qint64 time_rendered = 0; if (QSG_LOG_TIME_RENDERLOOP().isDebugEnabled()
never executed: if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)time_rendered = qsg_render_timer.nsecsElapsed();
never executed: else (end of block never executed: void)0;(void)0; never executed: (void)0; | 0 | ||||||||||||||||||
417 | ; | - | ||||||||||||||||||
418 | - | |||||||||||||||||||
419 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 486, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - swapping"); | 0 | ||||||||||||||||||
420 | if (!d->customRenderStage
| 0 | ||||||||||||||||||
421 | m_gl->swapBuffers(window); never executed: m_gl->swapBuffers(window); | 0 | ||||||||||||||||||
422 | qint64 time_swapped = 0; if (QSG_LOG_TIME_RENDERLOOP().isDebugEnabled()
never executed: if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)time_swapped = qsg_render_timer.nsecsElapsed();
never executed: else (end of block never executed: void)0;(void)0; never executed: (void)0; | 0 | ||||||||||||||||||
423 | ; | - | ||||||||||||||||||
424 | - | |||||||||||||||||||
425 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 492, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug(" - frameDone"); | 0 | ||||||||||||||||||
426 | d->fireFrameSwapped(); | - | ||||||||||||||||||
427 | - | |||||||||||||||||||
428 | for (bool qt_category_enabled = QSG_LOG_TIME_RENDERLOOP()().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 495, __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP()().categoryName()).debug().nospace() << "Frame rendered with 'windows' renderloop in: " << (time_swapped - time_start) / 1000000 << "ms" << ", polish=" << (time_polished - time_start) / 1000000 << ", sync=" << (time_synced - time_polished) / 1000000 << ", render=" << (time_rendered - time_synced) / 1000000 << ", swap=" << (time_swapped - time_rendered) / 1000000 << " - " << window; | 0 | ||||||||||||||||||
429 | << "Frame rendered with 'windows' renderloop in: " << (time_swapped - time_start) / 1000000 << "ms" never executed: QMessageLogger(__FILE__, 495, __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP()().categoryName()).debug().nospace() << "Frame rendered with 'windows' renderloop in: " << (time_swapped - time_start) / 1000000 << "ms" << ", polish=" << (time_polished - time_start) / 1000000 << ", sync=" << (time_synced - time_polished) / 1000000 << ", render=" << (time_rendered - time_synced) / 1000000 << ", swap=" << (time_swapped - time_rendered) / 1000000 << " - " << window; | 0 | ||||||||||||||||||
430 | << ", polish=" << (time_polished - time_start) / 1000000 never executed: QMessageLogger(__FILE__, 495, __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP()().categoryName()).debug().nospace() << "Frame rendered with 'windows' renderloop in: " << (time_swapped - time_start) / 1000000 << "ms" << ", polish=" << (time_polished - time_start) / 1000000 << ", sync=" << (time_synced - time_polished) / 1000000 << ", render=" << (time_rendered - time_synced) / 1000000 << ", swap=" << (time_swapped - time_rendered) / 1000000 << " - " << window; | 0 | ||||||||||||||||||
431 | << ", sync=" << (time_synced - time_polished) / 1000000 never executed: QMessageLogger(__FILE__, 495, __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP()().categoryName()).debug().nospace() << "Frame rendered with 'windows' renderloop in: " << (time_swapped - time_start) / 1000000 << "ms" << ", polish=" << (time_polished - time_start) / 1000000 << ", sync=" << (time_synced - time_polished) / 1000000 << ", render=" << (time_rendered - time_synced) / 1000000 << ", swap=" << (time_swapped - time_rendered) / 1000000 << " - " << window; | 0 | ||||||||||||||||||
432 | << ", render=" << (time_rendered - time_synced) / 1000000 never executed: QMessageLogger(__FILE__, 495, __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP()().categoryName()).debug().nospace() << "Frame rendered with 'windows' renderloop in: " << (time_swapped - time_start) / 1000000 << "ms" << ", polish=" << (time_polished - time_start) / 1000000 << ", sync=" << (time_synced - time_polished) / 1000000 << ", render=" << (time_rendered - time_synced) / 1000000 << ", swap=" << (time_swapped - time_rendered) / 1000000 << " - " << window; | 0 | ||||||||||||||||||
433 | << ", swap=" << (time_swapped - time_rendered) / 1000000 never executed: QMessageLogger(__FILE__, 495, __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP()().categoryName()).debug().nospace() << "Frame rendered with 'windows' renderloop in: " << (time_swapped - time_start) / 1000000 << "ms" << ", polish=" << (time_polished - time_start) / 1000000 << ", sync=" << (time_synced - time_polished) / 1000000 << ", render=" << (time_rendered - time_synced) / 1000000 << ", swap=" << (time_swapped - time_rendered) / 1000000 << " - " << window; | 0 | ||||||||||||||||||
434 | << " - " << window; never executed: QMessageLogger(__FILE__, 495, __PRETTY_FUNCTION__, QSG_LOG_TIME_RENDERLOOP()().categoryName()).debug().nospace() << "Frame rendered with 'windows' renderloop in: " << (time_swapped - time_start) / 1000000 << "ms" << ", polish=" << (time_polished - time_start) / 1000000 << ", sync=" << (time_synced - time_polished) / 1000000 << ", render=" << (time_rendered - time_synced) / 1000000 << ", swap=" << (time_swapped - time_rendered) / 1000000 << " - " << window; | 0 | ||||||||||||||||||
435 | - | |||||||||||||||||||
436 | if (QQuickProfiler::featuresEnabled & (1 << QQuickProfiler::ProfileSceneGraph)
never executed: else (end of block never executed: void)0(void)0 ; never executed: (void)0 ; | 0 | ||||||||||||||||||
437 | ; never executed: (void)0 ; | 0 | ||||||||||||||||||
438 | } | - | ||||||||||||||||||
439 | - | |||||||||||||||||||
440 | void QSGWindowsRenderLoop::releaseResources(QQuickWindow *w) | - | ||||||||||||||||||
441 | { | - | ||||||||||||||||||
442 | - | |||||||||||||||||||
443 | for (bool qt_category_enabled = QSG_LOG_RENDERLOOP().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 510, __PRETTY_FUNCTION__, QSG_LOG_RENDERLOOP().categoryName()).debug("releaseResources"); | 0 | ||||||||||||||||||
444 | QQuickWindowPrivate *d = QQuickWindowPrivate::get(w); | - | ||||||||||||||||||
445 | if (d->renderer
| 0 | ||||||||||||||||||
446 | d->renderer->releaseCachedResources(); never executed: d->renderer->releaseCachedResources(); | 0 | ||||||||||||||||||
447 | } never executed: end of block | 0 | ||||||||||||||||||
448 | - | |||||||||||||||||||
449 | - | |||||||||||||||||||
450 | - | |||||||||||||||||||
Switch to Source code | Preprocessed file |