Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(483)

Side by Side Diff: cc/trees/layer_tree_host_unittest_context.cc

Issue 250083002: cc: Use the onscreen context to perform composited ganesh filters. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: onscreenfilters: nit Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/trees/layer_tree_host_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_delegated.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 EXPECT_TRUE(succeeded); 207 EXPECT_TRUE(succeeded);
208 208
209 if (first_initialized_) 209 if (first_initialized_)
210 ++num_losses_; 210 ++num_losses_;
211 else 211 else
212 first_initialized_ = true; 212 first_initialized_ = true;
213 213
214 recovered_context_ = true; 214 recovered_context_ = true;
215 } 215 }
216 216
217 virtual void AfterTest() OVERRIDE { EXPECT_EQ(9u, test_case_); } 217 virtual void AfterTest() OVERRIDE { EXPECT_EQ(7u, test_case_); }
218 218
219 virtual void DidCommitAndDrawFrame() OVERRIDE { 219 virtual void DidCommitAndDrawFrame() OVERRIDE {
220 // If the last frame had a context loss, then we'll commit again to 220 // If the last frame had a context loss, then we'll commit again to
221 // recover. 221 // recover.
222 if (!recovered_context_) 222 if (!recovered_context_)
223 return; 223 return;
224 if (times_to_lose_during_commit_) 224 if (times_to_lose_during_commit_)
225 return; 225 return;
226 if (times_to_lose_during_draw_) 226 if (times_to_lose_during_draw_)
227 return; 227 return;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 3, // times_to_fail_recreate 260 3, // times_to_fail_recreate
261 0, // times_to_fail_recreate_offscreen 261 0, // times_to_fail_recreate_offscreen
262 false, // fallback_context_works 262 false, // fallback_context_works
263 }, 263 },
264 {0, // times_to_lose_during_commit 264 {0, // times_to_lose_during_commit
265 1, // times_to_lose_during_draw 265 1, // times_to_lose_during_draw
266 3, // times_to_fail_recreate 266 3, // times_to_fail_recreate
267 0, // times_to_fail_recreate_offscreen 267 0, // times_to_fail_recreate_offscreen
268 false, // fallback_context_works 268 false, // fallback_context_works
269 }, 269 },
270 {1, // times_to_lose_during_commit
271 0, // times_to_lose_during_draw
272 0, // times_to_fail_recreate
273 3, // times_to_fail_recreate_offscreen
274 false, // fallback_context_works
275 },
276 {0, // times_to_lose_during_commit
277 1, // times_to_lose_during_draw
278 0, // times_to_fail_recreate
279 3, // times_to_fail_recreate_offscreen
280 false, // fallback_context_works
281 },
282 // Losing the context and recreating it any number of times should 270 // Losing the context and recreating it any number of times should
283 // succeed. 271 // succeed.
284 {10, // times_to_lose_during_commit 272 {10, // times_to_lose_during_commit
285 0, // times_to_lose_during_draw 273 0, // times_to_lose_during_draw
286 0, // times_to_fail_recreate 274 0, // times_to_fail_recreate
287 0, // times_to_fail_recreate_offscreen 275 0, // times_to_fail_recreate_offscreen
288 false, // fallback_context_works 276 false, // fallback_context_works
289 }, 277 },
290 {0, // times_to_lose_during_commit 278 {0, // times_to_lose_during_commit
291 10, // times_to_lose_during_draw 279 10, // times_to_lose_during_draw
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 353
366 virtual void AfterTest() OVERRIDE { 354 virtual void AfterTest() OVERRIDE {
367 } 355 }
368 }; 356 };
369 357
370 MULTI_THREAD_TEST_F(LayerTreeHostClientNotReadyDoesNotCreateOutputSurface); 358 MULTI_THREAD_TEST_F(LayerTreeHostClientNotReadyDoesNotCreateOutputSurface);
371 359
372 class LayerTreeHostContextTestLostContextSucceedsWithContent 360 class LayerTreeHostContextTestLostContextSucceedsWithContent
373 : public LayerTreeHostContextTestLostContextSucceeds { 361 : public LayerTreeHostContextTestLostContextSucceeds {
374 public: 362 public:
375 LayerTreeHostContextTestLostContextSucceedsWithContent()
376 : LayerTreeHostContextTestLostContextSucceeds() {}
377
378 virtual void SetupTree() OVERRIDE { 363 virtual void SetupTree() OVERRIDE {
379 root_ = Layer::Create(); 364 root_ = Layer::Create();
380 root_->SetBounds(gfx::Size(10, 10)); 365 root_->SetBounds(gfx::Size(10, 10));
381 root_->SetAnchorPoint(gfx::PointF()); 366 root_->SetAnchorPoint(gfx::PointF());
382 root_->SetIsDrawable(true); 367 root_->SetIsDrawable(true);
383 368
384 content_ = FakeContentLayer::Create(&client_); 369 content_ = FakeContentLayer::Create(&client_);
385 content_->SetBounds(gfx::Size(10, 10)); 370 content_->SetBounds(gfx::Size(10, 10));
386 content_->SetAnchorPoint(gfx::PointF()); 371 content_->SetAnchorPoint(gfx::PointF());
387 content_->SetIsDrawable(true); 372 content_->SetIsDrawable(true);
388 if (use_surface_) {
389 content_->SetForceRenderSurface(true);
390 // Filters require us to create an offscreen context.
391 FilterOperations filters;
392 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
393 content_->SetFilters(filters);
394 content_->SetBackgroundFilters(filters);
395 }
396 373
397 root_->AddChild(content_); 374 root_->AddChild(content_);
398 375
399 layer_tree_host()->SetRootLayer(root_); 376 layer_tree_host()->SetRootLayer(root_);
400 LayerTreeHostContextTest::SetupTree(); 377 LayerTreeHostContextTest::SetupTree();
401 } 378 }
402 379
403 virtual void InvalidateAndSetNeedsCommit() OVERRIDE { 380 virtual void InvalidateAndSetNeedsCommit() OVERRIDE {
404 // Invalidate the render surface so we don't try to use a cached copy of the 381 // Invalidate the render surface so we don't try to use a cached copy of the
405 // surface. We want to make sure to test the drawing paths for drawing to 382 // surface. We want to make sure to test the drawing paths for drawing to
406 // a child surface. 383 // a child surface.
407 content_->SetNeedsDisplay(); 384 content_->SetNeedsDisplay();
408 LayerTreeHostContextTestLostContextSucceeds::InvalidateAndSetNeedsCommit(); 385 LayerTreeHostContextTestLostContextSucceeds::InvalidateAndSetNeedsCommit();
409 } 386 }
410 387
411 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 388 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
412 FakeContentLayerImpl* content_impl = static_cast<FakeContentLayerImpl*>( 389 FakeContentLayerImpl* content_impl = static_cast<FakeContentLayerImpl*>(
413 host_impl->active_tree()->root_layer()->children()[0]); 390 host_impl->active_tree()->root_layer()->children()[0]);
414 // Even though the context was lost, we should have a resource. The 391 // Even though the context was lost, we should have a resource. The
415 // TestWebGraphicsContext3D ensures that this resource is created with 392 // TestWebGraphicsContext3D ensures that this resource is created with
416 // the active context. 393 // the active context.
417 EXPECT_TRUE(content_impl->HaveResourceForTileAt(0, 0)); 394 EXPECT_TRUE(content_impl->HaveResourceForTileAt(0, 0));
418
419 ContextProvider* contexts = host_impl->offscreen_context_provider();
420 if (use_surface_) {
421 ASSERT_TRUE(contexts);
422 EXPECT_TRUE(contexts->ContextGL());
423 // TODO(danakj): Make a fake GrContext.
424 // EXPECT_TRUE(contexts->GrContext());
425 } else {
426 EXPECT_FALSE(contexts);
427 }
428 }
429
430 virtual void AfterTest() OVERRIDE {
431 LayerTreeHostContextTestLostContextSucceeds::AfterTest();
432 if (use_surface_) {
433 // 1 create to start with +
434 // 4 from test cases that lose the offscreen context directly +
435 // 2 from test cases that create a fallback +
436 // All the test cases that recreate both contexts only once
437 // per time it is lost.
438 EXPECT_EQ(4 + 1 + 2 + num_losses_, times_offscreen_created_);
439 } else {
440 EXPECT_EQ(0, times_offscreen_created_);
441 }
442 } 395 }
443 396
444 protected: 397 protected:
445 bool use_surface_;
446 FakeContentLayerClient client_; 398 FakeContentLayerClient client_;
447 scoped_refptr<Layer> root_; 399 scoped_refptr<Layer> root_;
448 scoped_refptr<ContentLayer> content_; 400 scoped_refptr<ContentLayer> content_;
449 }; 401 };
450 402
451 TEST_F(LayerTreeHostContextTestLostContextSucceedsWithContent, 403 // This test uses TiledLayer to check for a working context.
452 NoSurface_SingleThread_DirectRenderer) { 404 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(
453 use_surface_ = false; 405 LayerTreeHostContextTestLostContextSucceedsWithContent);
454 RunTest(false, false, false);
455 }
456
457 TEST_F(LayerTreeHostContextTestLostContextSucceedsWithContent,
458 NoSurface_SingleThread_DelegatingRenderer) {
459 use_surface_ = false;
460 RunTest(false, true, false);
461 }
462
463 TEST_F(LayerTreeHostContextTestLostContextSucceedsWithContent,
464 NoSurface_MultiThread_DirectRenderer_MainThreadPaint) {
465 use_surface_ = false;
466 RunTest(true, false, false);
467 }
468
469 TEST_F(LayerTreeHostContextTestLostContextSucceedsWithContent,
470 NoSurface_MultiThread_DelegatingRenderer_MainThreadPaint) {
471 use_surface_ = false;
472 RunTest(true, true, false);
473 }
474
475 // Surfaces don't exist with a delegating renderer.
476 TEST_F(LayerTreeHostContextTestLostContextSucceedsWithContent,
477 WithSurface_SingleThread_DirectRenderer) {
478 use_surface_ = true;
479 RunTest(false, false, false);
480 }
481
482 TEST_F(LayerTreeHostContextTestLostContextSucceedsWithContent,
483 WithSurface_MultiThread_DirectRenderer_MainThreadPaint) {
484 use_surface_ = true;
485 RunTest(true, false, false);
486 }
487 406
488 class LayerTreeHostContextTestCreateOutputSurfaceFails 407 class LayerTreeHostContextTestCreateOutputSurfaceFails
489 : public LayerTreeHostContextTest { 408 : public LayerTreeHostContextTest {
490 public: 409 public:
491 // Run a test that initially fails OutputSurface creation |times_to_fail| 410 // Run a test that initially fails OutputSurface creation |times_to_fail|
492 // times. If |expect_fallback_attempt| is |true|, an attempt to create a 411 // times. If |expect_fallback_attempt| is |true|, an attempt to create a
493 // fallback/software OutputSurface is expected to occur. 412 // fallback/software OutputSurface is expected to occur.
494 LayerTreeHostContextTestCreateOutputSurfaceFails(int times_to_fail, 413 LayerTreeHostContextTestCreateOutputSurfaceFails(int times_to_fail,
495 bool expect_fallback_attempt, 414 bool expect_fallback_attempt,
496 bool expect_to_give_up) 415 bool expect_to_give_up)
(...skipping 1482 matching lines...) Expand 10 before | Expand all | Expand 10 after
1979 1898
1980 protected: 1899 protected:
1981 FakeContentLayerClient client_; 1900 FakeContentLayerClient client_;
1982 scoped_refptr<FakeContentLayer> layer_; 1901 scoped_refptr<FakeContentLayer> layer_;
1983 }; 1902 };
1984 1903
1985 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestSurfaceCreateCallback); 1904 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestSurfaceCreateCallback);
1986 1905
1987 } // namespace 1906 } // namespace
1988 } // namespace cc 1907 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_delegated.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698