OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "cc/layers/content_layer.h" | 8 #include "cc/layers/content_layer.h" |
9 #include "cc/layers/delegated_frame_provider.h" | 9 #include "cc/layers/delegated_frame_provider.h" |
10 #include "cc/layers/delegated_frame_resource_collection.h" | 10 #include "cc/layers/delegated_frame_resource_collection.h" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 : LayerTreeTest(), | 56 : LayerTreeTest(), |
57 context3d_(NULL), | 57 context3d_(NULL), |
58 times_to_fail_create_(0), | 58 times_to_fail_create_(0), |
59 times_to_lose_during_commit_(0), | 59 times_to_lose_during_commit_(0), |
60 times_to_lose_during_draw_(0), | 60 times_to_lose_during_draw_(0), |
61 times_to_fail_recreate_(0), | 61 times_to_fail_recreate_(0), |
62 times_to_expect_create_failed_(0), | 62 times_to_expect_create_failed_(0), |
63 times_create_failed_(0), | 63 times_create_failed_(0), |
64 committed_at_least_once_(false), | 64 committed_at_least_once_(false), |
65 context_should_support_io_surface_(false), | 65 context_should_support_io_surface_(false), |
66 fallback_context_works_(false), | 66 fallback_context_works_(false) { |
67 async_output_surface_creation_(false) { | |
68 media::InitializeMediaLibraryForTesting(); | 67 media::InitializeMediaLibraryForTesting(); |
69 } | 68 } |
70 | 69 |
71 void LoseContext() { | 70 void LoseContext() { |
72 // For sanity-checking tests, they should only call this when the | 71 // For sanity-checking tests, they should only call this when the |
73 // context is not lost. | 72 // context is not lost. |
74 CHECK(context3d_); | 73 CHECK(context3d_); |
75 context3d_->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, | 74 context3d_->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
76 GL_INNOCENT_CONTEXT_RESET_ARB); | 75 GL_INNOCENT_CONTEXT_RESET_ARB); |
77 context3d_ = NULL; | 76 context3d_ = NULL; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 TestWebGraphicsContext3D* context3d_; | 146 TestWebGraphicsContext3D* context3d_; |
148 int times_to_fail_create_; | 147 int times_to_fail_create_; |
149 int times_to_lose_during_commit_; | 148 int times_to_lose_during_commit_; |
150 int times_to_lose_during_draw_; | 149 int times_to_lose_during_draw_; |
151 int times_to_fail_recreate_; | 150 int times_to_fail_recreate_; |
152 int times_to_expect_create_failed_; | 151 int times_to_expect_create_failed_; |
153 int times_create_failed_; | 152 int times_create_failed_; |
154 bool committed_at_least_once_; | 153 bool committed_at_least_once_; |
155 bool context_should_support_io_surface_; | 154 bool context_should_support_io_surface_; |
156 bool fallback_context_works_; | 155 bool fallback_context_works_; |
157 bool async_output_surface_creation_; | |
158 }; | 156 }; |
159 | 157 |
160 class LayerTreeHostContextTestLostContextSucceeds | 158 class LayerTreeHostContextTestLostContextSucceeds |
161 : public LayerTreeHostContextTest { | 159 : public LayerTreeHostContextTest { |
162 public: | 160 public: |
163 LayerTreeHostContextTestLostContextSucceeds() | 161 LayerTreeHostContextTestLostContextSucceeds() |
164 : LayerTreeHostContextTest(), | 162 : LayerTreeHostContextTest(), |
165 test_case_(0), | 163 test_case_(0), |
166 num_losses_(0), | 164 num_losses_(0), |
167 num_losses_last_test_case_(-1), | 165 num_losses_last_test_case_(-1), |
168 recovered_context_(true), | 166 recovered_context_(true), |
169 first_initialized_(false) {} | 167 first_initialized_(false) {} |
170 | 168 |
171 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } | 169 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
172 | 170 |
173 virtual void RequestNewOutputSurface(bool fallback) OVERRIDE { | |
174 if (async_output_surface_creation_) { | |
175 MainThreadTaskRunner()->PostTask( | |
176 FROM_HERE, | |
177 base::Bind(&LayerTreeHostContextTestLostContextSucceeds:: | |
178 CreateAndSetOutputSurface, | |
179 base::Unretained(this), | |
180 fallback)); | |
181 } else { | |
182 CreateAndSetOutputSurface(fallback); | |
183 } | |
184 } | |
185 | |
186 void CreateAndSetOutputSurface(bool fallback) { | |
187 layer_tree_host()->SetOutputSurface( | |
188 LayerTreeHostContextTest::CreateOutputSurface(fallback)); | |
189 } | |
190 | |
191 virtual void DidInitializeOutputSurface() OVERRIDE { | 171 virtual void DidInitializeOutputSurface() OVERRIDE { |
192 if (first_initialized_) | 172 if (first_initialized_) |
193 ++num_losses_; | 173 ++num_losses_; |
194 else | 174 else |
195 first_initialized_ = true; | 175 first_initialized_ = true; |
196 | 176 |
197 recovered_context_ = true; | 177 recovered_context_ = true; |
198 } | 178 } |
199 | 179 |
200 virtual void AfterTest() OVERRIDE { EXPECT_EQ(11u, test_case_); } | 180 virtual void AfterTest() OVERRIDE { EXPECT_EQ(7u, test_case_); } |
201 | 181 |
202 virtual void DidCommitAndDrawFrame() OVERRIDE { | 182 virtual void DidCommitAndDrawFrame() OVERRIDE { |
203 // If the last frame had a context loss, then we'll commit again to | 183 // If the last frame had a context loss, then we'll commit again to |
204 // recover. | 184 // recover. |
205 if (!recovered_context_) | 185 if (!recovered_context_) |
206 return; | 186 return; |
207 if (times_to_lose_during_commit_) | 187 if (times_to_lose_during_commit_) |
208 return; | 188 return; |
209 if (times_to_lose_during_draw_) | 189 if (times_to_lose_during_draw_) |
210 return; | 190 return; |
(...skipping 13 matching lines...) Expand all Loading... |
224 | 204 |
225 bool NextTestCase() { | 205 bool NextTestCase() { |
226 static const TestCase kTests[] = { | 206 static const TestCase kTests[] = { |
227 // Losing the context and failing to recreate it (or losing it again | 207 // Losing the context and failing to recreate it (or losing it again |
228 // immediately) a small number of times should succeed. | 208 // immediately) a small number of times should succeed. |
229 { | 209 { |
230 1, // times_to_lose_during_commit | 210 1, // times_to_lose_during_commit |
231 0, // times_to_lose_during_draw | 211 0, // times_to_lose_during_draw |
232 0, // times_to_fail_recreate | 212 0, // times_to_fail_recreate |
233 false, // fallback_context_works | 213 false, // fallback_context_works |
234 false, // async_output_surface_creation | |
235 }, | 214 }, |
236 { | 215 { |
237 0, // times_to_lose_during_commit | 216 0, // times_to_lose_during_commit |
238 1, // times_to_lose_during_draw | 217 1, // times_to_lose_during_draw |
239 0, // times_to_fail_recreate | 218 0, // times_to_fail_recreate |
240 false, // fallback_context_works | 219 false, // fallback_context_works |
241 false, // async_output_surface_creation | |
242 }, | 220 }, |
243 { | 221 { |
244 1, // times_to_lose_during_commit | 222 1, // times_to_lose_during_commit |
245 0, // times_to_lose_during_draw | 223 0, // times_to_lose_during_draw |
246 3, // times_to_fail_recreate | 224 3, // times_to_fail_recreate |
247 false, // fallback_context_works | 225 false, // fallback_context_works |
248 false, // async_output_surface_creation | |
249 }, | 226 }, |
250 { | 227 { |
251 0, // times_to_lose_during_commit | 228 0, // times_to_lose_during_commit |
252 1, // times_to_lose_during_draw | 229 1, // times_to_lose_during_draw |
253 3, // times_to_fail_recreate | 230 3, // times_to_fail_recreate |
254 false, // fallback_context_works | 231 false, // fallback_context_works |
255 false, // async_output_surface_creation | |
256 }, | |
257 { | |
258 0, // times_to_lose_during_commit | |
259 1, // times_to_lose_during_draw | |
260 3, // times_to_fail_recreate | |
261 false, // fallback_context_works | |
262 true, // async_output_surface_creation | |
263 }, | 232 }, |
264 // Losing the context and recreating it any number of times should | 233 // Losing the context and recreating it any number of times should |
265 // succeed. | 234 // succeed. |
266 { | 235 { |
267 10, // times_to_lose_during_commit | 236 10, // times_to_lose_during_commit |
268 0, // times_to_lose_during_draw | 237 0, // times_to_lose_during_draw |
269 0, // times_to_fail_recreate | 238 0, // times_to_fail_recreate |
270 false, // fallback_context_works | 239 false, // fallback_context_works |
271 false, // async_output_surface_creation | |
272 }, | 240 }, |
273 { | 241 { |
274 0, // times_to_lose_during_commit | 242 0, // times_to_lose_during_commit |
275 10, // times_to_lose_during_draw | 243 10, // times_to_lose_during_draw |
276 0, // times_to_fail_recreate | 244 0, // times_to_fail_recreate |
277 false, // fallback_context_works | 245 false, // fallback_context_works |
278 false, // async_output_surface_creation | |
279 }, | |
280 { | |
281 10, // times_to_lose_during_commit | |
282 0, // times_to_lose_during_draw | |
283 0, // times_to_fail_recreate | |
284 false, // fallback_context_works | |
285 true, // async_output_surface_creation | |
286 }, | |
287 { | |
288 0, // times_to_lose_during_commit | |
289 10, // times_to_lose_during_draw | |
290 0, // times_to_fail_recreate | |
291 false, // fallback_context_works | |
292 true, // async_output_surface_creation | |
293 }, | 246 }, |
294 // Losing the context, failing to reinitialize it, and making a fallback | 247 // Losing the context, failing to reinitialize it, and making a fallback |
295 // context should work. | 248 // context should work. |
296 { | 249 { |
297 0, // times_to_lose_during_commit | |
298 1, // times_to_lose_during_draw | |
299 0, // times_to_fail_recreate | |
300 true, // fallback_context_works | |
301 false, // async_output_surface_creation | |
302 }, | |
303 { | |
304 0, // times_to_lose_during_commit | 250 0, // times_to_lose_during_commit |
305 1, // times_to_lose_during_draw | 251 1, // times_to_lose_during_draw |
306 0, // times_to_fail_recreate | 252 0, // times_to_fail_recreate |
307 true, // fallback_context_works | 253 true, // fallback_context_works |
308 true, // async_output_surface_creation | |
309 }, | 254 }, |
310 }; | 255 }; |
311 | 256 |
312 if (test_case_ >= arraysize(kTests)) | 257 if (test_case_ >= arraysize(kTests)) |
313 return false; | 258 return false; |
314 // Make sure that we lost our context at least once in the last test run so | 259 // Make sure that we lost our context at least once in the last test run so |
315 // the test did something. | 260 // the test did something. |
316 EXPECT_GT(num_losses_, num_losses_last_test_case_); | 261 EXPECT_GT(num_losses_, num_losses_last_test_case_); |
317 num_losses_last_test_case_ = num_losses_; | 262 num_losses_last_test_case_ = num_losses_; |
318 | 263 |
319 times_to_lose_during_commit_ = | 264 times_to_lose_during_commit_ = |
320 kTests[test_case_].times_to_lose_during_commit; | 265 kTests[test_case_].times_to_lose_during_commit; |
321 times_to_lose_during_draw_ = kTests[test_case_].times_to_lose_during_draw; | 266 times_to_lose_during_draw_ = kTests[test_case_].times_to_lose_during_draw; |
322 times_to_fail_recreate_ = kTests[test_case_].times_to_fail_recreate; | 267 times_to_fail_recreate_ = kTests[test_case_].times_to_fail_recreate; |
323 fallback_context_works_ = kTests[test_case_].fallback_context_works; | 268 fallback_context_works_ = kTests[test_case_].fallback_context_works; |
324 async_output_surface_creation_ = | |
325 kTests[test_case_].async_output_surface_creation; | |
326 ++test_case_; | 269 ++test_case_; |
327 return true; | 270 return true; |
328 } | 271 } |
329 | 272 |
330 struct TestCase { | 273 struct TestCase { |
331 int times_to_lose_during_commit; | 274 int times_to_lose_during_commit; |
332 int times_to_lose_during_draw; | 275 int times_to_lose_during_draw; |
333 int times_to_fail_recreate; | 276 int times_to_fail_recreate; |
334 bool fallback_context_works; | 277 bool fallback_context_works; |
335 bool async_output_surface_creation; | |
336 }; | 278 }; |
337 | 279 |
338 protected: | 280 protected: |
339 size_t test_case_; | 281 size_t test_case_; |
340 int num_losses_; | 282 int num_losses_; |
341 int num_losses_last_test_case_; | 283 int num_losses_last_test_case_; |
342 bool recovered_context_; | 284 bool recovered_context_; |
343 bool first_initialized_; | 285 bool first_initialized_; |
344 }; | 286 }; |
345 | 287 |
(...skipping 1360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1706 virtual void AfterTest() OVERRIDE {} | 1648 virtual void AfterTest() OVERRIDE {} |
1707 | 1649 |
1708 bool deferred_; | 1650 bool deferred_; |
1709 }; | 1651 }; |
1710 | 1652 |
1711 SINGLE_AND_MULTI_THREAD_TEST_F( | 1653 SINGLE_AND_MULTI_THREAD_TEST_F( |
1712 LayerTreeHostContextTestLoseAfterSendingBeginMainFrame); | 1654 LayerTreeHostContextTestLoseAfterSendingBeginMainFrame); |
1713 | 1655 |
1714 } // namespace | 1656 } // namespace |
1715 } // namespace cc | 1657 } // namespace cc |
OLD | NEW |