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

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

Issue 1418273002: cc: Move draw params from SetExternalDrawConstraints to OnDraw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years 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 #include <utility>
9 10
10 #include "base/bind.h" 11 #include "base/bind.h"
11 #include "base/command_line.h" 12 #include "base/command_line.h"
12 #include "base/containers/hash_tables.h" 13 #include "base/containers/hash_tables.h"
13 #include "base/containers/scoped_ptr_hash_map.h" 14 #include "base/containers/scoped_ptr_hash_map.h"
14 #include "base/location.h" 15 #include "base/location.h"
15 #include "base/thread_task_runner_handle.h" 16 #include "base/thread_task_runner_handle.h"
16 #include "cc/animation/scrollbar_animation_controller_thinning.h" 17 #include "cc/animation/scrollbar_animation_controller_thinning.h"
17 #include "cc/animation/transform_operations.h" 18 #include "cc/animation/transform_operations.h"
18 #include "cc/base/math_util.h" 19 #include "cc/base/math_util.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 111
111 void TearDown() override {} 112 void TearDown() override {}
112 113
113 void UpdateRendererCapabilitiesOnImplThread() override {} 114 void UpdateRendererCapabilitiesOnImplThread() override {}
114 void DidLoseOutputSurfaceOnImplThread() override {} 115 void DidLoseOutputSurfaceOnImplThread() override {}
115 void CommitVSyncParameters(base::TimeTicks timebase, 116 void CommitVSyncParameters(base::TimeTicks timebase,
116 base::TimeDelta interval) override {} 117 base::TimeDelta interval) override {}
117 void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override {} 118 void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override {}
118 void DidSwapBuffersOnImplThread() override {} 119 void DidSwapBuffersOnImplThread() override {}
119 void DidSwapBuffersCompleteOnImplThread() override {} 120 void DidSwapBuffersCompleteOnImplThread() override {}
120 void OnResourcelessSoftareDrawStateChanged(bool resourceless_draw) override {}
121 void OnCanDrawStateChanged(bool can_draw) override { 121 void OnCanDrawStateChanged(bool can_draw) override {
122 on_can_draw_state_changed_called_ = true; 122 on_can_draw_state_changed_called_ = true;
123 } 123 }
124 void NotifyReadyToActivate() override { 124 void NotifyReadyToActivate() override {
125 did_notify_ready_to_activate_ = true; 125 did_notify_ready_to_activate_ = true;
126 host_impl_->ActivateSyncTree(); 126 host_impl_->ActivateSyncTree();
127 } 127 }
128 void NotifyReadyToDraw() override {} 128 void NotifyReadyToDraw() override {}
129 void SetNeedsRedrawOnImplThread() override { did_request_redraw_ = true; } 129 void SetNeedsRedrawOnImplThread() override { did_request_redraw_ = true; }
130 void SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) override { 130 void SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) override {
(...skipping 15 matching lines...) Expand all
146 base::TimeDelta delay) override { 146 base::TimeDelta delay) override {
147 animation_task_ = task; 147 animation_task_ = task;
148 requested_animation_delay_ = delay; 148 requested_animation_delay_ = delay;
149 } 149 }
150 void DidActivateSyncTree() override {} 150 void DidActivateSyncTree() override {}
151 void WillPrepareTiles() override {} 151 void WillPrepareTiles() override {}
152 void DidPrepareTiles() override {} 152 void DidPrepareTiles() override {}
153 void DidCompletePageScaleAnimationOnImplThread() override { 153 void DidCompletePageScaleAnimationOnImplThread() override {
154 did_complete_page_scale_animation_ = true; 154 did_complete_page_scale_animation_ = true;
155 } 155 }
156 void OnDrawForOutputSurface() override {} 156 void OnDrawForOutputSurface(bool resourceless_software_draw) override {
157 scoped_ptr<LayerTreeHostImpl::FrameData> frame(
158 new LayerTreeHostImpl::FrameData);
159 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(frame.get()));
160 host_impl_->DrawLayers(frame.get());
161 host_impl_->DidDrawAllLayers(*frame);
162 host_impl_->SwapBuffers(*frame);
163 last_on_draw_frame_ = std::move(frame);
164 }
157 void PostFrameTimingEventsOnImplThread( 165 void PostFrameTimingEventsOnImplThread(
158 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, 166 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events,
159 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) 167 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events)
160 override {} 168 override {}
161 169
162 void set_reduce_memory_result(bool reduce_memory_result) { 170 void set_reduce_memory_result(bool reduce_memory_result) {
163 reduce_memory_result_ = reduce_memory_result; 171 reduce_memory_result_ = reduce_memory_result;
164 } 172 }
165 173
166 virtual bool CreateHostImpl(const LayerTreeSettings& settings, 174 virtual bool CreateHostImpl(const LayerTreeSettings& settings,
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 bool on_can_draw_state_changed_called_; 457 bool on_can_draw_state_changed_called_;
450 bool did_notify_ready_to_activate_; 458 bool did_notify_ready_to_activate_;
451 bool did_request_commit_; 459 bool did_request_commit_;
452 bool did_request_redraw_; 460 bool did_request_redraw_;
453 bool did_request_next_frame_; 461 bool did_request_next_frame_;
454 bool did_request_prepare_tiles_; 462 bool did_request_prepare_tiles_;
455 bool did_complete_page_scale_animation_; 463 bool did_complete_page_scale_animation_;
456 bool reduce_memory_result_; 464 bool reduce_memory_result_;
457 base::Closure animation_task_; 465 base::Closure animation_task_;
458 base::TimeDelta requested_animation_delay_; 466 base::TimeDelta requested_animation_delay_;
467 scoped_ptr<LayerTreeHostImpl::FrameData> last_on_draw_frame_;
459 }; 468 };
460 469
461 // A test fixture for new animation timelines tests. 470 // A test fixture for new animation timelines tests.
462 class LayerTreeHostImplTimelinesTest : public LayerTreeHostImplTest { 471 class LayerTreeHostImplTimelinesTest : public LayerTreeHostImplTest {
463 public: 472 public:
464 void SetUp() override { 473 void SetUp() override {
465 LayerTreeSettings settings = DefaultSettings(); 474 LayerTreeSettings settings = DefaultSettings();
466 settings.use_compositor_animation_timelines = true; 475 settings.use_compositor_animation_timelines = true;
467 CreateHostImpl(settings, CreateOutputSurface()); 476 CreateHostImpl(settings, CreateOutputSurface());
468 } 477 }
469 }; 478 };
470 479
471 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) { 480 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) {
472 bool always_draw = false; 481 bool always_draw = false;
473 CheckNotifyCalledIfCanDrawChanged(always_draw); 482 CheckNotifyCalledIfCanDrawChanged(always_draw);
474 } 483 }
475 484
476 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) { 485 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) {
477 CreateHostImpl(DefaultSettings(), 486 CreateHostImpl(DefaultSettings(),
478 FakeOutputSurface::CreateSoftware( 487 FakeOutputSurface::CreateSoftware(
479 make_scoped_ptr(new SoftwareOutputDevice()))); 488 make_scoped_ptr(new SoftwareOutputDevice())));
480 const gfx::Transform external_transform;
481 const gfx::Rect external_viewport;
482 const gfx::Rect external_clip;
483 const bool resourceless_software_draw = true; 489 const bool resourceless_software_draw = true;
484 host_impl_->SetExternalDrawConstraints( 490 host_impl_->SetResourcelessSoftwareDrawForTesting(resourceless_software_draw);
485 external_transform, external_viewport, external_clip, external_viewport,
486 external_transform, resourceless_software_draw);
487 491
488 bool always_draw = true; 492 bool always_draw = true;
489 CheckNotifyCalledIfCanDrawChanged(always_draw); 493 CheckNotifyCalledIfCanDrawChanged(always_draw);
490 } 494 }
491 495
492 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) { 496 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) {
493 ASSERT_FALSE(host_impl_->active_tree()->root_layer()); 497 ASSERT_FALSE(host_impl_->active_tree()->root_layer());
494 498
495 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 499 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas();
496 ASSERT_EQ(scroll_info->scrolls.size(), 0u); 500 ASSERT_EQ(scroll_info->scrolls.size(), 0u);
(...skipping 2878 matching lines...) Expand 10 before | Expand all | Expand 10 after
3375 TEST_F(LayerTreeHostImplTest, 3379 TEST_F(LayerTreeHostImplTest,
3376 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { 3380 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) {
3377 CreateHostImpl(DefaultSettings(), 3381 CreateHostImpl(DefaultSettings(),
3378 FakeOutputSurface::CreateSoftware( 3382 FakeOutputSurface::CreateSoftware(
3379 make_scoped_ptr(new SoftwareOutputDevice()))); 3383 make_scoped_ptr(new SoftwareOutputDevice())));
3380 3384
3381 const gfx::Transform external_transform; 3385 const gfx::Transform external_transform;
3382 const gfx::Rect external_viewport; 3386 const gfx::Rect external_viewport;
3383 const gfx::Rect external_clip; 3387 const gfx::Rect external_clip;
3384 const bool resourceless_software_draw = true; 3388 const bool resourceless_software_draw = true;
3385 host_impl_->SetExternalDrawConstraints( 3389 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
3386 external_transform, external_viewport, external_clip, external_viewport, 3390 external_transform);
3387 external_transform, resourceless_software_draw);
3388 3391
3389 std::vector<PrepareToDrawSuccessTestCase> cases; 3392 std::vector<PrepareToDrawSuccessTestCase> cases;
3390 3393
3391 // 0. Default case. 3394 // 0. Default case.
3392 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); 3395 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
3393 // 1. Animation with missing tile. 3396 // 1. Animation with missing tile.
3394 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); 3397 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
3395 cases.back().layer_between.has_missing_tile = true; 3398 cases.back().layer_between.has_missing_tile = true;
3396 cases.back().layer_between.is_animating = true; 3399 cases.back().layer_between.is_animating = true;
3397 // 2. High res required with incomplete tile. 3400 // 2. High res required with incomplete tile.
3398 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); 3401 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
3399 cases.back().high_res_required = true; 3402 cases.back().high_res_required = true;
3400 cases.back().layer_between.has_incomplete_tile = true; 3403 cases.back().layer_between.has_incomplete_tile = true;
3401 // 3. High res required with missing tile. 3404 // 3. High res required with missing tile.
3402 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); 3405 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
3403 cases.back().high_res_required = true; 3406 cases.back().high_res_required = true;
3404 cases.back().layer_between.has_missing_tile = true; 3407 cases.back().layer_between.has_missing_tile = true;
3405 3408
3406 host_impl_->active_tree()->SetRootLayer( 3409 host_impl_->active_tree()->SetRootLayer(
3407 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); 3410 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1));
3408 DidDrawCheckLayer* root = 3411 DidDrawCheckLayer* root =
3409 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); 3412 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
3410 root->SetForceRenderSurface(true); 3413 root->SetForceRenderSurface(true);
3411 3414
3412 LayerTreeHostImpl::FrameData frame; 3415 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
3413 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 3416 resourceless_software_draw);
3414 host_impl_->DrawLayers(&frame);
3415 host_impl_->DidDrawAllLayers(frame);
3416 host_impl_->SwapBuffers(frame);
3417 3417
3418 for (size_t i = 0; i < cases.size(); ++i) { 3418 for (size_t i = 0; i < cases.size(); ++i) {
3419 const auto& testcase = cases[i]; 3419 const auto& testcase = cases[i];
3420 std::vector<LayerImpl*> to_remove; 3420 std::vector<LayerImpl*> to_remove;
3421 for (const auto& child : root->children()) 3421 for (const auto& child : root->children())
3422 to_remove.push_back(child.get()); 3422 to_remove.push_back(child.get());
3423 for (auto* child : to_remove) 3423 for (auto* child : to_remove)
3424 root->RemoveChild(child); 3424 root->RemoveChild(child);
3425 3425
3426 std::ostringstream scope; 3426 std::ostringstream scope;
(...skipping 23 matching lines...) Expand all
3450 testcase.layer_after.has_incomplete_tile, 3450 testcase.layer_after.has_incomplete_tile,
3451 testcase.layer_after.is_animating, host_impl_->resource_provider())); 3451 testcase.layer_after.is_animating, host_impl_->resource_provider()));
3452 DidDrawCheckLayer* after = 3452 DidDrawCheckLayer* after =
3453 static_cast<DidDrawCheckLayer*>(root->children().back().get()); 3453 static_cast<DidDrawCheckLayer*>(root->children().back().get());
3454 if (testcase.layer_after.has_copy_request) 3454 if (testcase.layer_after.has_copy_request)
3455 after->AddCopyRequest(); 3455 after->AddCopyRequest();
3456 3456
3457 if (testcase.high_res_required) 3457 if (testcase.high_res_required)
3458 host_impl_->SetRequiresHighResToDraw(); 3458 host_impl_->SetRequiresHighResToDraw();
3459 3459
3460 LayerTreeHostImpl::FrameData frame; 3460 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
3461 EXPECT_EQ(testcase.expected_result, PrepareToDrawFrame(&frame)); 3461 resourceless_software_draw);
3462 host_impl_->DrawLayers(&frame);
3463 host_impl_->DidDrawAllLayers(frame);
3464 host_impl_->SwapBuffers(frame);
3465 } 3462 }
3466 } 3463 }
3467 3464
3468 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { 3465 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) {
3469 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); 3466 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1);
3470 root->SetScrollClipLayer(Layer::INVALID_ID); 3467 root->SetScrollClipLayer(Layer::INVALID_ID);
3471 root->SetForceRenderSurface(true); 3468 root->SetForceRenderSurface(true);
3472 host_impl_->active_tree()->SetRootLayer(std::move(root)); 3469 host_impl_->active_tree()->SetRootLayer(std::move(root));
3473 DrawFrame(); 3470 DrawFrame();
3474 3471
(...skipping 2478 matching lines...) Expand 10 before | Expand all | Expand 10 after
5953 texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); 5950 texture_quad->rect.bottom() / gutter_texture_size_pixels.height());
5954 } 5951 }
5955 } 5952 }
5956 5953
5957 gfx::Size DipSizeToPixelSize(const gfx::Size& size) { 5954 gfx::Size DipSizeToPixelSize(const gfx::Size& size) {
5958 return gfx::ScaleToRoundedSize( 5955 return gfx::ScaleToRoundedSize(
5959 size, host_impl_->active_tree()->device_scale_factor()); 5956 size, host_impl_->active_tree()->device_scale_factor());
5960 } 5957 }
5961 5958
5962 void SetResourcelessSoftwareDraw() { 5959 void SetResourcelessSoftwareDraw() {
5963 const gfx::Transform external_transform;
5964 const gfx::Rect external_viewport;
5965 const gfx::Rect external_clip;
5966 const bool resourceless_software_draw = true; 5960 const bool resourceless_software_draw = true;
danakj 2015/12/10 22:33:54 if you wanted.. you could just pass |true| directl
5967 host_impl_->SetExternalDrawConstraints( 5961 host_impl_->SetResourcelessSoftwareDrawForTesting(
5968 external_transform, external_viewport, external_clip, external_viewport, 5962 resourceless_software_draw);
5969 external_transform, resourceless_software_draw);
5970 } 5963 }
5971 5964
5972 DrawQuad::Material gutter_quad_material_; 5965 DrawQuad::Material gutter_quad_material_;
5973 gfx::Size gutter_texture_size_; 5966 gfx::Size gutter_texture_size_;
5974 gfx::Size viewport_size_; 5967 gfx::Size viewport_size_;
5975 BlendStateCheckLayer* child_; 5968 BlendStateCheckLayer* child_;
5976 bool did_activate_pending_tree_; 5969 bool did_activate_pending_tree_;
5977 }; 5970 };
5978 5971
5979 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { 5972 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) {
(...skipping 23 matching lines...) Expand all
6003 TestEmptyLayer(); 5996 TestEmptyLayer();
6004 TestLayerInMiddleOfViewport(); 5997 TestLayerInMiddleOfViewport();
6005 TestLayerIsLargerThanViewport(); 5998 TestLayerIsLargerThanViewport();
6006 } 5999 }
6007 6000
6008 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { 6001 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) {
6009 viewport_size_ = gfx::Size(1000, 1000); 6002 viewport_size_ = gfx::Size(1000, 1000);
6010 6003
6011 bool software = true; 6004 bool software = true;
6012 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); 6005 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software));
6013 SetResourcelessSoftwareDraw();
6014 6006
6015 // Pending tree to force active_tree size invalid. Not used otherwise. 6007 // Pending tree to force active_tree size invalid. Not used otherwise.
6016 host_impl_->CreatePendingTree(); 6008 host_impl_->CreatePendingTree();
6017 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); 6009 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
6018 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); 6010 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
6019 6011
6020 SetupActiveTreeLayers(); 6012 SetupActiveTreeLayers();
6013 SetResourcelessSoftwareDraw(); // Needed to draw while viewport invalid.
6021 TestEmptyLayer(); 6014 TestEmptyLayer();
6022 TestLayerInMiddleOfViewport(); 6015 TestLayerInMiddleOfViewport();
6023 TestLayerIsLargerThanViewport(); 6016 TestLayerIsLargerThanViewport();
6024 } 6017 }
6025 6018
6026 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) { 6019 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) {
6027 viewport_size_ = gfx::Size(1000, 1000); 6020 viewport_size_ = gfx::Size(1000, 1000);
6028 6021
6029 bool software = true; 6022 bool software = true;
6030 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); 6023 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software));
6031 SetResourcelessSoftwareDraw();
6032 6024
6033 // Set larger viewport and activate it to active tree. 6025 // Set larger viewport and activate it to active tree.
6034 host_impl_->CreatePendingTree(); 6026 host_impl_->CreatePendingTree();
6035 gfx::Size larger_viewport(viewport_size_.width() + 100, 6027 gfx::Size larger_viewport(viewport_size_.width() + 100,
6036 viewport_size_.height() + 100); 6028 viewport_size_.height() + 100);
6037 host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport)); 6029 host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport));
6038 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); 6030 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
6039 host_impl_->ActivateSyncTree(); 6031 host_impl_->ActivateSyncTree();
6040 EXPECT_TRUE(did_activate_pending_tree_); 6032 EXPECT_TRUE(did_activate_pending_tree_);
6041 EXPECT_FALSE(host_impl_->active_tree()->ViewportSizeInvalid()); 6033 EXPECT_FALSE(host_impl_->active_tree()->ViewportSizeInvalid());
6042 6034
6043 // Shrink pending tree viewport without activating. 6035 // Shrink pending tree viewport without activating.
6044 host_impl_->CreatePendingTree(); 6036 host_impl_->CreatePendingTree();
6045 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); 6037 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
6046 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); 6038 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
6047 6039
6048 SetupActiveTreeLayers(); 6040 SetupActiveTreeLayers();
6041 SetResourcelessSoftwareDraw(); // Needed to draw while viewport invalid.
6049 TestEmptyLayer(); 6042 TestEmptyLayer();
6050 TestLayerInMiddleOfViewport(); 6043 TestLayerInMiddleOfViewport();
6051 TestLayerIsLargerThanViewport(); 6044 TestLayerIsLargerThanViewport();
6052 } 6045 }
6053 6046
6054 class FakeDrawableLayerImpl: public LayerImpl { 6047 class FakeDrawableLayerImpl: public LayerImpl {
6055 public: 6048 public:
6056 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { 6049 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
6057 return make_scoped_ptr(new FakeDrawableLayerImpl(tree_impl, id)); 6050 return make_scoped_ptr(new FakeDrawableLayerImpl(tree_impl, id));
6058 } 6051 }
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after
6849 DefaultSettings(), 6842 DefaultSettings(),
6850 FakeOutputSurface::CreateSoftware(make_scoped_ptr(software_device)))); 6843 FakeOutputSurface::CreateSoftware(make_scoped_ptr(software_device))));
6851 host_impl_->SetViewportSize(gfx::Size(50, 50)); 6844 host_impl_->SetViewportSize(gfx::Size(50, 50));
6852 6845
6853 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 6846 SetupScrollAndContentsLayers(gfx::Size(100, 100));
6854 6847
6855 const gfx::Transform external_transform; 6848 const gfx::Transform external_transform;
6856 const gfx::Rect external_viewport; 6849 const gfx::Rect external_viewport;
6857 const gfx::Rect external_clip; 6850 const gfx::Rect external_clip;
6858 const bool resourceless_software_draw = true; 6851 const bool resourceless_software_draw = true;
6859 host_impl_->SetExternalDrawConstraints(external_transform, 6852 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
6860 external_viewport, 6853 external_transform);
6861 external_clip,
6862 external_viewport,
6863 external_transform,
6864 resourceless_software_draw);
6865 6854
6866 EXPECT_EQ(0, software_device->frames_began_); 6855 EXPECT_EQ(0, software_device->frames_began_);
6867 EXPECT_EQ(0, software_device->frames_ended_); 6856 EXPECT_EQ(0, software_device->frames_ended_);
6868 6857
6869 DrawFrame(); 6858 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
6859 resourceless_software_draw);
6870 6860
6871 EXPECT_EQ(1, software_device->frames_began_); 6861 EXPECT_EQ(1, software_device->frames_began_);
6872 EXPECT_EQ(1, software_device->frames_ended_); 6862 EXPECT_EQ(1, software_device->frames_ended_);
6873 6863
6874 // Call another API method that is likely to hit nullptr in this mode. 6864 // Call another API method that is likely to hit nullptr in this mode.
6875 scoped_refptr<base::trace_event::TracedValue> state = 6865 scoped_refptr<base::trace_event::TracedValue> state =
6876 make_scoped_refptr(new base::trace_event::TracedValue()); 6866 make_scoped_refptr(new base::trace_event::TracedValue());
6877 host_impl_->ActivationStateAsValueInto(state.get()); 6867 host_impl_->ActivationStateAsValueInto(state.get());
6878 } 6868 }
6879 6869
6880 TEST_F(LayerTreeHostImplTest, 6870 TEST_F(LayerTreeHostImplTest,
6881 ForcedDrawToSoftwareDeviceSkipsUnsupportedLayers) { 6871 ForcedDrawToSoftwareDeviceSkipsUnsupportedLayers) {
6882 set_reduce_memory_result(false); 6872 set_reduce_memory_result(false);
6883 EXPECT_TRUE(CreateHostImpl(DefaultSettings(), 6873 EXPECT_TRUE(CreateHostImpl(DefaultSettings(),
6884 FakeOutputSurface::CreateSoftware( 6874 FakeOutputSurface::CreateSoftware(
6885 make_scoped_ptr(new CountingSoftwareDevice)))); 6875 make_scoped_ptr(new CountingSoftwareDevice))));
6886 6876
6887 const gfx::Transform external_transform; 6877 const gfx::Transform external_transform;
6888 const gfx::Rect external_viewport; 6878 const gfx::Rect external_viewport;
6889 const gfx::Rect external_clip; 6879 const gfx::Rect external_clip;
6890 const bool resourceless_software_draw = true; 6880 const bool resourceless_software_draw = true;
6891 host_impl_->SetExternalDrawConstraints(external_transform, 6881 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
6892 external_viewport, 6882 external_transform);
6893 external_clip,
6894 external_viewport,
6895 external_transform,
6896 resourceless_software_draw);
6897 6883
6898 // SolidColorLayerImpl will be drawn. 6884 // SolidColorLayerImpl will be drawn.
6899 scoped_ptr<SolidColorLayerImpl> root_layer = 6885 scoped_ptr<SolidColorLayerImpl> root_layer =
6900 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); 6886 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1);
6901 6887
6902 // VideoLayerImpl will not be drawn. 6888 // VideoLayerImpl will not be drawn.
6903 FakeVideoFrameProvider provider; 6889 FakeVideoFrameProvider provider;
6904 scoped_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create( 6890 scoped_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create(
6905 host_impl_->active_tree(), 2, &provider, media::VIDEO_ROTATION_0); 6891 host_impl_->active_tree(), 2, &provider, media::VIDEO_ROTATION_0);
6906 video_layer->SetBounds(gfx::Size(10, 10)); 6892 video_layer->SetBounds(gfx::Size(10, 10));
6907 video_layer->SetDrawsContent(true); 6893 video_layer->SetDrawsContent(true);
6908 root_layer->AddChild(std::move(video_layer)); 6894 root_layer->AddChild(std::move(video_layer));
6909 SetupRootLayerImpl(std::move(root_layer)); 6895 SetupRootLayerImpl(std::move(root_layer));
6910 6896
6911 LayerTreeHostImpl::FrameData frame; 6897 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
6912 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 6898 resourceless_software_draw);
6913 host_impl_->DrawLayers(&frame);
6914 host_impl_->DidDrawAllLayers(frame);
6915 6899
6916 EXPECT_EQ(1u, frame.will_draw_layers.size()); 6900 EXPECT_EQ(1u, last_on_draw_frame_->will_draw_layers.size());
6917 EXPECT_EQ(host_impl_->active_tree()->root_layer(), frame.will_draw_layers[0]); 6901 EXPECT_EQ(host_impl_->active_tree()->root_layer(),
6902 last_on_draw_frame_->will_draw_layers[0]);
6918 } 6903 }
6919 6904
6920 // Checks that we have a non-0 default allocation if we pass a context that 6905 // Checks that we have a non-0 default allocation if we pass a context that
6921 // doesn't support memory management extensions. 6906 // doesn't support memory management extensions.
6922 TEST_F(LayerTreeHostImplTest, DefaultMemoryAllocation) { 6907 TEST_F(LayerTreeHostImplTest, DefaultMemoryAllocation) {
6923 LayerTreeSettings settings = DefaultSettings(); 6908 LayerTreeSettings settings = DefaultSettings();
6924 host_impl_ = LayerTreeHostImpl::Create( 6909 host_impl_ = LayerTreeHostImpl::Create(
6925 settings, this, &task_runner_provider_, &stats_instrumentation_, 6910 settings, this, &task_runner_provider_, &stats_instrumentation_,
6926 &shared_bitmap_manager_, &gpu_memory_buffer_manager_, &task_graph_runner_, 6911 &shared_bitmap_manager_, &gpu_memory_buffer_manager_, &task_graph_runner_,
6927 0); 6912 0);
(...skipping 1501 matching lines...) Expand 10 before | Expand all | Expand 10 after
8429 8414
8430 TEST_F(LayerTreeHostImplTest, ExternalTransformReflectedInNextDraw) { 8415 TEST_F(LayerTreeHostImplTest, ExternalTransformReflectedInNextDraw) {
8431 const gfx::Size layer_size(100, 100); 8416 const gfx::Size layer_size(100, 100);
8432 gfx::Transform external_transform; 8417 gfx::Transform external_transform;
8433 const gfx::Rect external_viewport(layer_size); 8418 const gfx::Rect external_viewport(layer_size);
8434 const gfx::Rect external_clip(layer_size); 8419 const gfx::Rect external_clip(layer_size);
8435 const bool resourceless_software_draw = false; 8420 const bool resourceless_software_draw = false;
8436 LayerImpl* layer = SetupScrollAndContentsLayers(layer_size); 8421 LayerImpl* layer = SetupScrollAndContentsLayers(layer_size);
8437 layer->SetDrawsContent(true); 8422 layer->SetDrawsContent(true);
8438 8423
8439 host_impl_->SetExternalDrawConstraints(external_transform, 8424 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
8440 external_viewport, 8425 external_transform);
8441 external_clip, 8426 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
8442 external_viewport, 8427 resourceless_software_draw);
8443 external_transform,
8444 resourceless_software_draw);
8445 DrawFrame();
8446 EXPECT_TRANSFORMATION_MATRIX_EQ( 8428 EXPECT_TRANSFORMATION_MATRIX_EQ(
8447 external_transform, layer->draw_properties().target_space_transform); 8429 external_transform, layer->draw_properties().target_space_transform);
8448 8430
8449 external_transform.Translate(20, 20); 8431 external_transform.Translate(20, 20);
8450 host_impl_->SetExternalDrawConstraints(external_transform, 8432 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
8451 external_viewport, 8433 external_transform);
8452 external_clip, 8434 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
8453 external_viewport, 8435 resourceless_software_draw);
8454 external_transform,
8455 resourceless_software_draw);
8456 DrawFrame();
8457 EXPECT_TRANSFORMATION_MATRIX_EQ( 8436 EXPECT_TRANSFORMATION_MATRIX_EQ(
8458 external_transform, layer->draw_properties().target_space_transform); 8437 external_transform, layer->draw_properties().target_space_transform);
8459 } 8438 }
8460 8439
8461 TEST_F(LayerTreeHostImplTest, ExternalTransformSetNeedsRedraw) { 8440 TEST_F(LayerTreeHostImplTest, ExternalTransformSetNeedsRedraw) {
8462 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); 8441 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1));
8463 8442
8464 const gfx::Size layer_size(100, 100); 8443 const gfx::Size viewport_size(100, 100);
8465 const gfx::Transform external_transform; 8444 host_impl_->SetViewportSize(viewport_size);
8466 const gfx::Rect external_viewport(layer_size); 8445
8467 const gfx::Rect external_clip1(layer_size); 8446 const gfx::Transform transform_for_tile_priority;
8468 const gfx::Rect external_clip2(50, 50); 8447 const gfx::Transform draw_transform;
8448 const gfx::Rect viewport_for_tile_priority1(viewport_size);
8449 const gfx::Rect viewport_for_tile_priority2(50, 50);
8450 const gfx::Rect draw_viewport(viewport_size);
8451 const gfx::Rect clip(viewport_size);
8469 bool resourceless_software_draw = false; 8452 bool resourceless_software_draw = false;
8470 8453
8471 resourceless_software_draw = false; 8454 // Clear any damage.
8472 host_impl_->SetExternalDrawConstraints( 8455 host_impl_->SetExternalTilePriorityConstraints(viewport_for_tile_priority1,
8473 external_transform, external_viewport, external_clip1, external_viewport, 8456 transform_for_tile_priority);
8474 external_transform, resourceless_software_draw); 8457 host_impl_->OnDraw(draw_transform, draw_viewport, clip,
8475 { 8458 resourceless_software_draw);
8476 // Clear any damage. 8459 last_on_draw_frame_.reset();
8477 LayerTreeHostImpl::FrameData frame;
8478 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame));
8479 host_impl_->DrawLayers(&frame);
8480 host_impl_->DidDrawAllLayers(frame);
8481 host_impl_->SwapBuffers(frame);
8482 }
8483 8460
8484 // Setting new constraints needs redraw. 8461 // Setting new constraints needs redraw.
8485 did_request_redraw_ = false; 8462 did_request_redraw_ = false;
8486 host_impl_->SetExternalDrawConstraints( 8463 host_impl_->SetExternalTilePriorityConstraints(viewport_for_tile_priority2,
8487 external_transform, external_viewport, external_clip2, external_viewport, 8464 transform_for_tile_priority);
8488 external_transform, resourceless_software_draw);
8489 EXPECT_TRUE(did_request_redraw_); 8465 EXPECT_TRUE(did_request_redraw_);
8490 { 8466 host_impl_->OnDraw(draw_transform, draw_viewport, clip,
8491 LayerTreeHostImpl::FrameData frame; 8467 resourceless_software_draw);
8492 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 8468 EXPECT_FALSE(last_on_draw_frame_->has_no_damage);
8493 EXPECT_FALSE(frame.has_no_damage); 8469 }
8494 host_impl_->DrawLayers(&frame); 8470
8495 host_impl_->DidDrawAllLayers(frame); 8471 TEST_F(LayerTreeHostImplTest, OnDrawConstraintSetNeedsRedraw) {
8496 host_impl_->SwapBuffers(frame); 8472 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1));
8473
8474 const gfx::Size viewport_size(100, 100);
8475 host_impl_->SetViewportSize(viewport_size);
8476
8477 const gfx::Transform draw_transform;
8478 const gfx::Rect draw_viewport1(viewport_size);
8479 const gfx::Rect draw_viewport2(50, 50);
8480 const gfx::Rect clip(viewport_size);
8481 bool resourceless_software_draw = false;
8482
8483 // Clear any damage.
8484 host_impl_->OnDraw(draw_transform, draw_viewport1, clip,
8485 resourceless_software_draw);
8486 last_on_draw_frame_.reset();
8487
8488 // Same draw params does not swap.
8489 did_request_redraw_ = false;
8490 host_impl_->OnDraw(draw_transform, draw_viewport1, clip,
8491 resourceless_software_draw);
8492 EXPECT_FALSE(did_request_redraw_);
8493 EXPECT_TRUE(last_on_draw_frame_->has_no_damage);
8494 last_on_draw_frame_.reset();
8495
8496 // Different draw params does swap.
8497 did_request_redraw_ = false;
8498 host_impl_->OnDraw(draw_transform, draw_viewport2, clip,
8499 resourceless_software_draw);
8500 EXPECT_TRUE(did_request_redraw_);
8501 EXPECT_FALSE(last_on_draw_frame_->has_no_damage);
8502 }
8503
8504 class ResourcelessSoftwareLayerTreeHostImplTest : public LayerTreeHostImplTest {
8505 protected:
8506 scoped_ptr<OutputSurface> CreateOutputSurface() override {
8507 return FakeOutputSurface::Create3dWithResourcelessSoftwareSupport();
8497 } 8508 }
8509 };
8498 8510
8499 // Resourceless software draw toggles do not need redraw. Damage is 8511 TEST_F(ResourcelessSoftwareLayerTreeHostImplTest,
8500 // set externally by SynchronousCompositorOutputSurface in this case. 8512 ResourcelessSoftwareSetNeedsRedraw) {
8513 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1));
8501 8514
8502 // Setting resourceless_software_draw do not need redraw. 8515 const gfx::Size viewport_size(100, 100);
8503 did_request_redraw_ = false; 8516 host_impl_->SetViewportSize(viewport_size);
8517
8518 const gfx::Transform draw_transform;
8519 const gfx::Rect draw_viewport(viewport_size);
8520 const gfx::Rect clip(viewport_size);
8521 bool resourceless_software_draw = false;
8522
8523 // Clear any damage.
8524 host_impl_->OnDraw(draw_transform, draw_viewport, clip,
8525 resourceless_software_draw);
8526 last_on_draw_frame_.reset();
8527
8528 // Always swap even if same draw params.
8504 resourceless_software_draw = true; 8529 resourceless_software_draw = true;
8505 host_impl_->SetExternalDrawConstraints( 8530 host_impl_->OnDraw(draw_transform, draw_viewport, clip,
8506 external_transform, external_viewport, external_clip1, external_viewport, 8531 resourceless_software_draw);
8507 external_transform, resourceless_software_draw); 8532 EXPECT_FALSE(last_on_draw_frame_->has_no_damage);
8508 EXPECT_FALSE(did_request_redraw_); 8533 last_on_draw_frame_.reset();
8509 // Can't call PrepareToDrawFrame with no change for resourceless software
8510 // draw.
8511 8534
8512 // Unsetting resourceless_software_draw do not need redraw. 8535 // Next hardware draw has damage.
8513 did_request_redraw_ = false;
8514 resourceless_software_draw = false; 8536 resourceless_software_draw = false;
8515 host_impl_->SetExternalDrawConstraints( 8537 host_impl_->OnDraw(draw_transform, draw_viewport, clip,
8516 external_transform, external_viewport, external_clip2, external_viewport, 8538 resourceless_software_draw);
8517 external_transform, resourceless_software_draw); 8539 EXPECT_FALSE(last_on_draw_frame_->has_no_damage);
8518 EXPECT_FALSE(did_request_redraw_);
8519 {
8520 LayerTreeHostImpl::FrameData frame;
8521 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame));
8522 EXPECT_TRUE(frame.has_no_damage);
8523 }
8524 } 8540 }
8525 8541
8526 TEST_F(LayerTreeHostImplTest, ExternalViewportAffectsVisibleRects) { 8542 TEST_F(LayerTreeHostImplTest, ExternalViewportAffectsVisibleRects) {
8527 const gfx::Size layer_size(100, 100); 8543 const gfx::Size layer_size(100, 100);
8528 SetupScrollAndContentsLayers(layer_size); 8544 SetupScrollAndContentsLayers(layer_size);
8529 LayerImpl* content_layer = host_impl_->active_tree() 8545 LayerImpl* content_layer = host_impl_->active_tree()
8530 ->OuterViewportScrollLayer() 8546 ->OuterViewportScrollLayer()
8531 ->children()[0] 8547 ->children()[0]
8532 .get(); 8548 .get();
8533 RebuildPropertyTrees(); 8549 RebuildPropertyTrees();
8534 8550
8535 bool update_lcd_text = false; 8551 bool update_lcd_text = false;
8536 8552
8537 host_impl_->SetViewportSize(gfx::Size(90, 90)); 8553 host_impl_->SetViewportSize(gfx::Size(90, 90));
8538 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); 8554 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text);
8539 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect()); 8555 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect());
8540 8556
8541 gfx::Transform external_transform; 8557 gfx::Transform external_transform;
8542 gfx::Rect external_viewport(10, 20); 8558 gfx::Rect external_viewport(10, 20);
8543 gfx::Rect external_clip(layer_size); 8559 gfx::Rect external_clip(layer_size);
8544 bool resourceless_software_draw = false; 8560 bool resourceless_software_draw = false;
8545 host_impl_->SetExternalDrawConstraints( 8561 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
8546 external_transform, external_viewport, external_clip, external_viewport, 8562 external_transform);
8547 external_transform, resourceless_software_draw); 8563 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
8548 8564 resourceless_software_draw);
8549 // Visible rects should now be clipped by the external viewport.
8550 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text);
8551 EXPECT_EQ(gfx::Rect(10, 20), content_layer->visible_layer_rect()); 8565 EXPECT_EQ(gfx::Rect(10, 20), content_layer->visible_layer_rect());
8552 8566
8553 // Clear the external viewport. 8567 // Clear the external viewport.
8554 external_viewport = gfx::Rect(); 8568 external_viewport = gfx::Rect();
8555 host_impl_->SetExternalDrawConstraints( 8569 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
8556 external_transform, external_viewport, external_clip, external_viewport, 8570 external_transform);
8557 external_transform, resourceless_software_draw);
8558 8571
8559 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); 8572 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
8573 resourceless_software_draw);
8560 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect()); 8574 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect());
8561 } 8575 }
8562 8576
8563 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsVisibleRects) { 8577 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsVisibleRects) {
8564 const gfx::Size layer_size(100, 100); 8578 const gfx::Size layer_size(100, 100);
8565 SetupScrollAndContentsLayers(layer_size); 8579 SetupScrollAndContentsLayers(layer_size);
8566 LayerImpl* content_layer = host_impl_->active_tree() 8580 LayerImpl* content_layer = host_impl_->active_tree()
8567 ->OuterViewportScrollLayer() 8581 ->OuterViewportScrollLayer()
8568 ->children()[0] 8582 ->children()[0]
8569 .get(); 8583 .get();
8570 RebuildPropertyTrees(); 8584 RebuildPropertyTrees();
8571 8585
8572 bool update_lcd_text = false; 8586 bool update_lcd_text = false;
8573 8587
8574 host_impl_->SetViewportSize(gfx::Size(50, 50)); 8588 host_impl_->SetViewportSize(gfx::Size(50, 50));
8575 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); 8589 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text);
8576 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect()); 8590 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect());
8577 8591
8578 gfx::Transform external_transform; 8592 gfx::Transform external_transform;
8579 external_transform.Translate(10, 10); 8593 external_transform.Translate(10, 10);
8580 external_transform.Scale(2, 2); 8594 external_transform.Scale(2, 2);
8581 gfx::Rect external_viewport; 8595 gfx::Rect external_viewport;
8582 gfx::Rect external_clip(layer_size); 8596 gfx::Rect external_clip(layer_size);
8583 bool resourceless_software_draw = false; 8597 bool resourceless_software_draw = false;
8584 host_impl_->SetExternalDrawConstraints( 8598 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
8585 external_transform, external_viewport, external_clip, external_viewport, 8599 external_transform);
8586 external_transform, resourceless_software_draw);
8587 8600
8588 // Visible rects should now be shifted and scaled because of the external 8601 // Visible rects should now be shifted and scaled because of the external
8589 // transform. 8602 // transform.
8590 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); 8603 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
8604 resourceless_software_draw);
8591 EXPECT_EQ(gfx::Rect(20, 20), content_layer->visible_layer_rect()); 8605 EXPECT_EQ(gfx::Rect(20, 20), content_layer->visible_layer_rect());
8592 8606
8593 // Clear the external transform. 8607 // Clear the external transform.
8594 external_transform = gfx::Transform(); 8608 external_transform = gfx::Transform();
8595 host_impl_->SetExternalDrawConstraints( 8609 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
8596 external_transform, external_viewport, external_clip, external_viewport, 8610 external_transform);
8597 external_transform, resourceless_software_draw);
8598 8611
8599 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); 8612 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
8613 resourceless_software_draw);
8600 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect()); 8614 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect());
8601 } 8615 }
8602 8616
8603 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsSublayerScaleFactor) { 8617 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsSublayerScaleFactor) {
8604 const gfx::Size layer_size(100, 100); 8618 const gfx::Size layer_size(100, 100);
8605 SetupScrollAndContentsLayers(layer_size); 8619 SetupScrollAndContentsLayers(layer_size);
8606 LayerImpl* content_layer = host_impl_->active_tree() 8620 LayerImpl* content_layer = host_impl_->active_tree()
8607 ->OuterViewportScrollLayer() 8621 ->OuterViewportScrollLayer()
8608 ->children()[0] 8622 ->children()[0]
8609 .get(); 8623 .get();
(...skipping 15 matching lines...) Expand all
8625 host_impl_->active_tree()->property_trees()->transform_tree.Node( 8639 host_impl_->active_tree()->property_trees()->transform_tree.Node(
8626 test_layer->transform_tree_index()); 8640 test_layer->transform_tree_index());
8627 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); 8641 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f));
8628 8642
8629 gfx::Transform external_transform; 8643 gfx::Transform external_transform;
8630 external_transform.Translate(10, 10); 8644 external_transform.Translate(10, 10);
8631 external_transform.Scale(2, 2); 8645 external_transform.Scale(2, 2);
8632 gfx::Rect external_viewport; 8646 gfx::Rect external_viewport;
8633 gfx::Rect external_clip(layer_size); 8647 gfx::Rect external_clip(layer_size);
8634 bool resourceless_software_draw = false; 8648 bool resourceless_software_draw = false;
8635 host_impl_->SetExternalDrawConstraints( 8649 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
8636 external_transform, external_viewport, external_clip, external_viewport, 8650 external_transform);
8637 external_transform, resourceless_software_draw);
8638 8651
8639 // Transform node's sublayer scale should include the device transform scale. 8652 // Transform node's sublayer scale should include the device transform scale.
8640 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); 8653 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
8654 resourceless_software_draw);
8641 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( 8655 node = host_impl_->active_tree()->property_trees()->transform_tree.Node(
8642 test_layer->transform_tree_index()); 8656 test_layer->transform_tree_index());
8643 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f)); 8657 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f));
8644 8658
8645 // Clear the external transform. 8659 // Clear the external transform.
8646 external_transform = gfx::Transform(); 8660 external_transform = gfx::Transform();
8647 host_impl_->SetExternalDrawConstraints( 8661 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
8648 external_transform, external_viewport, external_clip, external_viewport, 8662 external_transform);
8649 external_transform, resourceless_software_draw);
8650 8663
8651 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); 8664 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
8665 resourceless_software_draw);
8652 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( 8666 node = host_impl_->active_tree()->property_trees()->transform_tree.Node(
8653 test_layer->transform_tree_index()); 8667 test_layer->transform_tree_index());
8654 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); 8668 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f));
8655 } 8669 }
8656 8670
8657 TEST_F(LayerTreeHostImplTest, ScrollAnimated) { 8671 TEST_F(LayerTreeHostImplTest, ScrollAnimated) {
8658 SetupScrollAndContentsLayers(gfx::Size(100, 200)); 8672 SetupScrollAndContentsLayers(gfx::Size(100, 200));
8659 8673
8660 // Shrink the outer viewport clip layer so that the outer viewport can scroll. 8674 // Shrink the outer viewport clip layer so that the outer viewport can scroll.
8661 host_impl_->OuterViewportScrollLayer()->parent()->SetBounds( 8675 host_impl_->OuterViewportScrollLayer()->parent()->SetBounds(
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
9326 // There should not be any jitter measured till we hit the fixed point hits 9340 // There should not be any jitter measured till we hit the fixed point hits
9327 // threshold. 9341 // threshold.
9328 float expected_jitter = 9342 float expected_jitter =
9329 (i == pending_tree->kFixedPointHitsThreshold) ? 500 : 0; 9343 (i == pending_tree->kFixedPointHitsThreshold) ? 500 : 0;
9330 EXPECT_EQ(jitter, expected_jitter); 9344 EXPECT_EQ(jitter, expected_jitter);
9331 } 9345 }
9332 } 9346 }
9333 9347
9334 } // namespace 9348 } // namespace
9335 } // namespace cc 9349 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698