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

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

Issue 1394263004: android webview: allow cc to fail hardware draw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tests compile but crash Created 5 years, 2 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
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 CreateHostImpl(settings, CreateOutputSurface()); 460 CreateHostImpl(settings, CreateOutputSurface());
461 } 461 }
462 }; 462 };
463 463
464 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) { 464 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) {
465 bool always_draw = false; 465 bool always_draw = false;
466 CheckNotifyCalledIfCanDrawChanged(always_draw); 466 CheckNotifyCalledIfCanDrawChanged(always_draw);
467 } 467 }
468 468
469 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) { 469 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) {
470 CreateHostImpl(DefaultSettings(), 470 CreateHostImpl(DefaultSettings(), FakeOutputSurface::Create3d());
471 FakeOutputSurface::CreateAlwaysDrawAndSwap3d()); 471 const gfx::Transform external_transform;
472 const gfx::Rect external_viewport;
473 const gfx::Rect external_clip;
474 const bool resourceless_software_draw = true;
475 host_impl_->SetExternalDrawConstraints(
476 external_transform, external_viewport, external_clip, external_viewport,
477 external_transform, resourceless_software_draw);
472 478
473 bool always_draw = true; 479 bool always_draw = true;
474 CheckNotifyCalledIfCanDrawChanged(always_draw); 480 CheckNotifyCalledIfCanDrawChanged(always_draw);
475 } 481 }
476 482
477 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) { 483 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) {
478 ASSERT_FALSE(host_impl_->active_tree()->root_layer()); 484 ASSERT_FALSE(host_impl_->active_tree()->root_layer());
479 485
480 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 486 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas();
481 ASSERT_EQ(scroll_info->scrolls.size(), 0u); 487 ASSERT_EQ(scroll_info->scrolls.size(), 0u);
(...skipping 2629 matching lines...) Expand 10 before | Expand all | Expand 10 after
3111 LayerTreeHostImpl::FrameData frame; 3117 LayerTreeHostImpl::FrameData frame;
3112 EXPECT_EQ(testcase.expected_result, PrepareToDrawFrame(&frame)); 3118 EXPECT_EQ(testcase.expected_result, PrepareToDrawFrame(&frame));
3113 host_impl_->DrawLayers(&frame); 3119 host_impl_->DrawLayers(&frame);
3114 host_impl_->DidDrawAllLayers(frame); 3120 host_impl_->DidDrawAllLayers(frame);
3115 host_impl_->SwapBuffers(frame); 3121 host_impl_->SwapBuffers(frame);
3116 } 3122 }
3117 } 3123 }
3118 3124
3119 TEST_F(LayerTreeHostImplTest, 3125 TEST_F(LayerTreeHostImplTest,
3120 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { 3126 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) {
3121 CreateHostImpl(DefaultSettings(), 3127 CreateHostImpl(DefaultSettings(), FakeOutputSurface::Create3d());
3122 FakeOutputSurface::CreateAlwaysDrawAndSwap3d()); 3128
3123 EXPECT_TRUE(host_impl_->output_surface() 3129 const gfx::Transform external_transform;
3124 ->capabilities() 3130 const gfx::Rect external_viewport;
3125 .draw_and_swap_full_viewport_every_frame); 3131 const gfx::Rect external_clip;
3132 const bool resourceless_software_draw = true;
3133 host_impl_->SetExternalDrawConstraints(
3134 external_transform, external_viewport, external_clip, external_viewport,
3135 external_transform, resourceless_software_draw);
3126 3136
3127 std::vector<PrepareToDrawSuccessTestCase> cases; 3137 std::vector<PrepareToDrawSuccessTestCase> cases;
3128 3138
3129 // 0. Default case. 3139 // 0. Default case.
3130 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); 3140 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
3131 // 1. Animation with missing tile. 3141 // 1. Animation with missing tile.
3132 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); 3142 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
3133 cases.back().layer_between.has_missing_tile = true; 3143 cases.back().layer_between.has_missing_tile = true;
3134 cases.back().layer_between.is_animating = true; 3144 cases.back().layer_between.is_animating = true;
3135 // 2. High res required with incomplete tile. 3145 // 2. High res required with incomplete tile.
(...skipping 2389 matching lines...) Expand 10 before | Expand all | Expand 10 after
5525 host_impl_->DidDrawAllLayers(frame); 5535 host_impl_->DidDrawAllLayers(frame);
5526 } 5536 }
5527 5537
5528 class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { 5538 class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest {
5529 protected: 5539 protected:
5530 LayerTreeHostImplViewportCoveredTest() : 5540 LayerTreeHostImplViewportCoveredTest() :
5531 gutter_quad_material_(DrawQuad::SOLID_COLOR), 5541 gutter_quad_material_(DrawQuad::SOLID_COLOR),
5532 child_(NULL), 5542 child_(NULL),
5533 did_activate_pending_tree_(false) {} 5543 did_activate_pending_tree_(false) {}
5534 5544
5535 scoped_ptr<OutputSurface> CreateFakeOutputSurface(bool always_draw) { 5545 scoped_ptr<OutputSurface> CreateFakeOutputSurface() {
5536 if (always_draw) {
5537 return FakeOutputSurface::CreateAlwaysDrawAndSwap3d();
5538 }
5539 return FakeOutputSurface::Create3d(); 5546 return FakeOutputSurface::Create3d();
5540 } 5547 }
5541 5548
5542 void SetupActiveTreeLayers() { 5549 void SetupActiveTreeLayers() {
5543 host_impl_->active_tree()->set_background_color(SK_ColorGRAY); 5550 host_impl_->active_tree()->set_background_color(SK_ColorGRAY);
5544 host_impl_->active_tree()->SetRootLayer( 5551 host_impl_->active_tree()->SetRootLayer(
5545 LayerImpl::Create(host_impl_->active_tree(), 1)); 5552 LayerImpl::Create(host_impl_->active_tree(), 1));
5546 host_impl_->active_tree()->root_layer()->SetHasRenderSurface(true); 5553 host_impl_->active_tree()->root_layer()->SetHasRenderSurface(true);
5547 host_impl_->active_tree()->root_layer()->AddChild( 5554 host_impl_->active_tree()->root_layer()->AddChild(
5548 BlendStateCheckLayer::Create(host_impl_->active_tree(), 5555 BlendStateCheckLayer::Create(host_impl_->active_tree(),
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
5677 texture_quad->uv_bottom_right.y(), 5684 texture_quad->uv_bottom_right.y(),
5678 texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); 5685 texture_quad->rect.bottom() / gutter_texture_size_pixels.height());
5679 } 5686 }
5680 } 5687 }
5681 5688
5682 gfx::Size DipSizeToPixelSize(const gfx::Size& size) { 5689 gfx::Size DipSizeToPixelSize(const gfx::Size& size) {
5683 return gfx::ScaleToRoundedSize( 5690 return gfx::ScaleToRoundedSize(
5684 size, host_impl_->active_tree()->device_scale_factor()); 5691 size, host_impl_->active_tree()->device_scale_factor());
5685 } 5692 }
5686 5693
5694 void SetAlwaysDraw() {
5695 const gfx::Transform external_transform;
5696 const gfx::Rect external_viewport;
5697 const gfx::Rect external_clip;
5698 const bool resourceless_software_draw = true;
5699 host_impl_->SetExternalDrawConstraints(
5700 external_transform, external_viewport, external_clip, external_viewport,
5701 external_transform, resourceless_software_draw);
5702 }
5703
5687 DrawQuad::Material gutter_quad_material_; 5704 DrawQuad::Material gutter_quad_material_;
5688 gfx::Size gutter_texture_size_; 5705 gfx::Size gutter_texture_size_;
5689 gfx::Size viewport_size_; 5706 gfx::Size viewport_size_;
5690 BlendStateCheckLayer* child_; 5707 BlendStateCheckLayer* child_;
5691 bool did_activate_pending_tree_; 5708 bool did_activate_pending_tree_;
5692 }; 5709 };
5693 5710
5694 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { 5711 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) {
5695 viewport_size_ = gfx::Size(1000, 1000); 5712 viewport_size_ = gfx::Size(1000, 1000);
5696 5713
5697 bool always_draw = false; 5714 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface());
5698 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(always_draw));
5699 5715
5700 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); 5716 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
5701 SetupActiveTreeLayers(); 5717 SetupActiveTreeLayers();
5702 TestLayerCoversFullViewport(); 5718 TestLayerCoversFullViewport();
5703 TestEmptyLayer(); 5719 TestEmptyLayer();
5704 TestLayerInMiddleOfViewport(); 5720 TestLayerInMiddleOfViewport();
5705 TestLayerIsLargerThanViewport(); 5721 TestLayerIsLargerThanViewport();
5706 } 5722 }
5707 5723
5708 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCoveredScaled) { 5724 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCoveredScaled) {
5709 viewport_size_ = gfx::Size(1000, 1000); 5725 viewport_size_ = gfx::Size(1000, 1000);
5710 5726
5711 bool always_draw = false; 5727 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface());
5712 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(always_draw));
5713 5728
5714 host_impl_->active_tree()->SetDeviceScaleFactor(2.f); 5729 host_impl_->active_tree()->SetDeviceScaleFactor(2.f);
5715 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); 5730 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
5716 SetupActiveTreeLayers(); 5731 SetupActiveTreeLayers();
5717 TestLayerCoversFullViewport(); 5732 TestLayerCoversFullViewport();
5718 TestEmptyLayer(); 5733 TestEmptyLayer();
5719 TestLayerInMiddleOfViewport(); 5734 TestLayerInMiddleOfViewport();
5720 TestLayerIsLargerThanViewport(); 5735 TestLayerIsLargerThanViewport();
5721 } 5736 }
5722 5737
5723 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { 5738 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) {
5724 viewport_size_ = gfx::Size(1000, 1000); 5739 viewport_size_ = gfx::Size(1000, 1000);
5725 5740
5726 bool always_draw = true; 5741 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface());
5727 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(always_draw)); 5742 SetAlwaysDraw();
5728 5743
5729 // Pending tree to force active_tree size invalid. Not used otherwise. 5744 // Pending tree to force active_tree size invalid. Not used otherwise.
5730 host_impl_->CreatePendingTree(); 5745 host_impl_->CreatePendingTree();
5731 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); 5746 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
5732 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); 5747 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
5733 5748
5734 SetupActiveTreeLayers(); 5749 SetupActiveTreeLayers();
5735 TestEmptyLayer(); 5750 TestEmptyLayer();
5736 TestLayerInMiddleOfViewport(); 5751 TestLayerInMiddleOfViewport();
5737 TestLayerIsLargerThanViewport(); 5752 TestLayerIsLargerThanViewport();
5738 } 5753 }
5739 5754
5740 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) { 5755 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) {
5741 viewport_size_ = gfx::Size(1000, 1000); 5756 viewport_size_ = gfx::Size(1000, 1000);
5742 5757
5743 bool always_draw = true; 5758 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface());
5744 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(always_draw)); 5759 SetAlwaysDraw();
5745 5760
5746 // Set larger viewport and activate it to active tree. 5761 // Set larger viewport and activate it to active tree.
5747 host_impl_->CreatePendingTree(); 5762 host_impl_->CreatePendingTree();
5748 gfx::Size larger_viewport(viewport_size_.width() + 100, 5763 gfx::Size larger_viewport(viewport_size_.width() + 100,
5749 viewport_size_.height() + 100); 5764 viewport_size_.height() + 100);
5750 host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport)); 5765 host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport));
5751 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); 5766 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
5752 host_impl_->ActivateSyncTree(); 5767 host_impl_->ActivateSyncTree();
5753 EXPECT_TRUE(did_activate_pending_tree_); 5768 EXPECT_TRUE(did_activate_pending_tree_);
5754 EXPECT_FALSE(host_impl_->active_tree()->ViewportSizeInvalid()); 5769 EXPECT_FALSE(host_impl_->active_tree()->ViewportSizeInvalid());
(...skipping 3014 matching lines...) Expand 10 before | Expand all | Expand 10 after
8769 host_impl_->ActivateSyncTree(); 8784 host_impl_->ActivateSyncTree();
8770 host_impl_->active_tree()->UpdateDrawProperties(false); 8785 host_impl_->active_tree()->UpdateDrawProperties(false);
8771 active_tree_node = 8786 active_tree_node =
8772 host_impl_->active_tree()->property_trees()->transform_tree.Node( 8787 host_impl_->active_tree()->property_trees()->transform_tree.Node(
8773 page_scale_layer->transform_tree_index()); 8788 page_scale_layer->transform_tree_index());
8774 EXPECT_EQ(active_tree_node->data.post_local_scale_factor, 2.f); 8789 EXPECT_EQ(active_tree_node->data.post_local_scale_factor, 2.f);
8775 } 8790 }
8776 8791
8777 } // namespace 8792 } // namespace
8778 } // namespace cc 8793 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698