OLD | NEW |
---|---|
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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
84 LayerTreeHostImplTest() | 85 LayerTreeHostImplTest() |
85 : task_runner_provider_(base::ThreadTaskRunnerHandle::Get()), | 86 : task_runner_provider_(base::ThreadTaskRunnerHandle::Get()), |
86 always_main_thread_blocked_(&task_runner_provider_), | 87 always_main_thread_blocked_(&task_runner_provider_), |
87 on_can_draw_state_changed_called_(false), | 88 on_can_draw_state_changed_called_(false), |
88 did_notify_ready_to_activate_(false), | 89 did_notify_ready_to_activate_(false), |
89 did_request_commit_(false), | 90 did_request_commit_(false), |
90 did_request_redraw_(false), | 91 did_request_redraw_(false), |
91 did_request_next_frame_(false), | 92 did_request_next_frame_(false), |
92 did_request_prepare_tiles_(false), | 93 did_request_prepare_tiles_(false), |
93 did_complete_page_scale_animation_(false), | 94 did_complete_page_scale_animation_(false), |
94 reduce_memory_result_(true) { | 95 reduce_memory_result_(true), |
96 skip_draw_layers_in_on_draw_(false) { | |
95 media::InitializeMediaLibrary(); | 97 media::InitializeMediaLibrary(); |
96 } | 98 } |
97 | 99 |
98 LayerTreeSettings DefaultSettings() { | 100 LayerTreeSettings DefaultSettings() { |
99 LayerTreeSettings settings; | 101 LayerTreeSettings settings; |
100 settings.minimum_occlusion_tracking_size = gfx::Size(); | 102 settings.minimum_occlusion_tracking_size = gfx::Size(); |
101 settings.renderer_settings.texture_id_allocation_chunk_size = 1; | 103 settings.renderer_settings.texture_id_allocation_chunk_size = 1; |
102 settings.gpu_rasterization_enabled = true; | 104 settings.gpu_rasterization_enabled = true; |
103 settings.verify_property_trees = true; | 105 settings.verify_property_trees = true; |
104 return settings; | 106 return settings; |
105 } | 107 } |
106 | 108 |
107 void SetUp() override { | 109 void SetUp() override { |
108 CreateHostImpl(DefaultSettings(), CreateOutputSurface()); | 110 CreateHostImpl(DefaultSettings(), CreateOutputSurface()); |
109 } | 111 } |
110 | 112 |
111 void TearDown() override {} | 113 void TearDown() override {} |
112 | 114 |
113 void UpdateRendererCapabilitiesOnImplThread() override {} | 115 void UpdateRendererCapabilitiesOnImplThread() override {} |
114 void DidLoseOutputSurfaceOnImplThread() override {} | 116 void DidLoseOutputSurfaceOnImplThread() override {} |
115 void CommitVSyncParameters(base::TimeTicks timebase, | 117 void CommitVSyncParameters(base::TimeTicks timebase, |
116 base::TimeDelta interval) override {} | 118 base::TimeDelta interval) override {} |
117 void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override {} | 119 void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override {} |
118 void DidSwapBuffersOnImplThread() override {} | 120 void DidSwapBuffersOnImplThread() override {} |
119 void DidSwapBuffersCompleteOnImplThread() override {} | 121 void DidSwapBuffersCompleteOnImplThread() override {} |
120 void OnResourcelessSoftareDrawStateChanged(bool resourceless_draw) override {} | |
121 void OnCanDrawStateChanged(bool can_draw) override { | 122 void OnCanDrawStateChanged(bool can_draw) override { |
122 on_can_draw_state_changed_called_ = true; | 123 on_can_draw_state_changed_called_ = true; |
123 } | 124 } |
124 void NotifyReadyToActivate() override { | 125 void NotifyReadyToActivate() override { |
125 did_notify_ready_to_activate_ = true; | 126 did_notify_ready_to_activate_ = true; |
126 host_impl_->ActivateSyncTree(); | 127 host_impl_->ActivateSyncTree(); |
127 } | 128 } |
128 void NotifyReadyToDraw() override {} | 129 void NotifyReadyToDraw() override {} |
129 void SetNeedsRedrawOnImplThread() override { did_request_redraw_ = true; } | 130 void SetNeedsRedrawOnImplThread() override { did_request_redraw_ = true; } |
130 void SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) override { | 131 void SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) override { |
(...skipping 15 matching lines...) Expand all Loading... | |
146 base::TimeDelta delay) override { | 147 base::TimeDelta delay) override { |
147 animation_task_ = task; | 148 animation_task_ = task; |
148 requested_animation_delay_ = delay; | 149 requested_animation_delay_ = delay; |
149 } | 150 } |
150 void DidActivateSyncTree() override {} | 151 void DidActivateSyncTree() override {} |
151 void WillPrepareTiles() override {} | 152 void WillPrepareTiles() override {} |
152 void DidPrepareTiles() override {} | 153 void DidPrepareTiles() override {} |
153 void DidCompletePageScaleAnimationOnImplThread() override { | 154 void DidCompletePageScaleAnimationOnImplThread() override { |
154 did_complete_page_scale_animation_ = true; | 155 did_complete_page_scale_animation_ = true; |
155 } | 156 } |
156 void OnDrawForOutputSurface() override {} | 157 void OnDrawForOutputSurface(bool resourceless_software_draw) override { |
158 scoped_ptr<LayerTreeHostImpl::FrameData> frame( | |
159 new LayerTreeHostImpl::FrameData); | |
160 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(frame.get())); | |
161 last_on_draw_render_passes_.clear(); | |
162 RenderPass::CopyAll(frame->render_passes, &last_on_draw_render_passes_); | |
163 if (!skip_draw_layers_in_on_draw_) | |
164 host_impl_->DrawLayers(frame.get()); | |
165 host_impl_->DidDrawAllLayers(*frame); | |
166 host_impl_->SwapBuffers(*frame); | |
167 last_on_draw_frame_ = std::move(frame); | |
168 } | |
157 void PostFrameTimingEventsOnImplThread( | 169 void PostFrameTimingEventsOnImplThread( |
158 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, | 170 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, |
159 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) | 171 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) |
160 override {} | 172 override {} |
161 | 173 |
162 void set_reduce_memory_result(bool reduce_memory_result) { | 174 void set_reduce_memory_result(bool reduce_memory_result) { |
163 reduce_memory_result_ = reduce_memory_result; | 175 reduce_memory_result_ = reduce_memory_result; |
164 } | 176 } |
165 | 177 |
166 virtual bool CreateHostImpl(const LayerTreeSettings& settings, | 178 virtual bool CreateHostImpl(const LayerTreeSettings& settings, |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
377 RebuildPropertyTrees(); | 389 RebuildPropertyTrees(); |
378 return host_impl_->PrepareToDraw(frame); | 390 return host_impl_->PrepareToDraw(frame); |
379 } | 391 } |
380 | 392 |
381 void pinch_zoom_pan_viewport_forces_commit_redraw(float device_scale_factor); | 393 void pinch_zoom_pan_viewport_forces_commit_redraw(float device_scale_factor); |
382 void pinch_zoom_pan_viewport_test(float device_scale_factor); | 394 void pinch_zoom_pan_viewport_test(float device_scale_factor); |
383 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); | 395 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); |
384 void pinch_zoom_pan_viewport_and_scroll_boundary_test( | 396 void pinch_zoom_pan_viewport_and_scroll_boundary_test( |
385 float device_scale_factor); | 397 float device_scale_factor); |
386 | 398 |
387 void CheckNotifyCalledIfCanDrawChanged(bool always_draw) { | |
388 // Note: It is not possible to disable the renderer once it has been set, | |
389 // so we do not need to test that disabling the renderer notifies us | |
390 // that can_draw changed. | |
391 EXPECT_FALSE(host_impl_->CanDraw()); | |
392 on_can_draw_state_changed_called_ = false; | |
393 | |
394 // Set up the root layer, which allows us to draw. | |
395 SetupScrollAndContentsLayers(gfx::Size(100, 100)); | |
396 EXPECT_TRUE(host_impl_->CanDraw()); | |
397 EXPECT_TRUE(on_can_draw_state_changed_called_); | |
398 on_can_draw_state_changed_called_ = false; | |
399 | |
400 // Toggle the root layer to make sure it toggles can_draw | |
401 host_impl_->active_tree()->SetRootLayer(nullptr); | |
402 EXPECT_FALSE(host_impl_->CanDraw()); | |
403 EXPECT_TRUE(on_can_draw_state_changed_called_); | |
404 on_can_draw_state_changed_called_ = false; | |
405 | |
406 SetupScrollAndContentsLayers(gfx::Size(100, 100)); | |
407 EXPECT_TRUE(host_impl_->CanDraw()); | |
408 EXPECT_TRUE(on_can_draw_state_changed_called_); | |
409 on_can_draw_state_changed_called_ = false; | |
410 | |
411 // Toggle the device viewport size to make sure it toggles can_draw. | |
412 host_impl_->SetViewportSize(gfx::Size()); | |
413 if (always_draw) { | |
414 EXPECT_TRUE(host_impl_->CanDraw()); | |
415 } else { | |
416 EXPECT_FALSE(host_impl_->CanDraw()); | |
417 } | |
418 EXPECT_TRUE(on_can_draw_state_changed_called_); | |
419 on_can_draw_state_changed_called_ = false; | |
420 | |
421 host_impl_->SetViewportSize(gfx::Size(100, 100)); | |
422 EXPECT_TRUE(host_impl_->CanDraw()); | |
423 EXPECT_TRUE(on_can_draw_state_changed_called_); | |
424 on_can_draw_state_changed_called_ = false; | |
425 } | |
426 | |
427 void SetupMouseMoveAtWithDeviceScale(float device_scale_factor); | 399 void SetupMouseMoveAtWithDeviceScale(float device_scale_factor); |
428 | 400 |
429 protected: | 401 protected: |
430 virtual scoped_ptr<OutputSurface> CreateOutputSurface() { | 402 virtual scoped_ptr<OutputSurface> CreateOutputSurface() { |
431 return FakeOutputSurface::Create3d(); | 403 return FakeOutputSurface::Create3d(); |
432 } | 404 } |
433 | 405 |
434 void DrawOneFrame() { | 406 void DrawOneFrame() { |
435 LayerTreeHostImpl::FrameData frame_data; | 407 LayerTreeHostImpl::FrameData frame_data; |
436 PrepareToDrawFrame(&frame_data); | 408 PrepareToDrawFrame(&frame_data); |
(...skipping 12 matching lines...) Expand all Loading... | |
449 bool on_can_draw_state_changed_called_; | 421 bool on_can_draw_state_changed_called_; |
450 bool did_notify_ready_to_activate_; | 422 bool did_notify_ready_to_activate_; |
451 bool did_request_commit_; | 423 bool did_request_commit_; |
452 bool did_request_redraw_; | 424 bool did_request_redraw_; |
453 bool did_request_next_frame_; | 425 bool did_request_next_frame_; |
454 bool did_request_prepare_tiles_; | 426 bool did_request_prepare_tiles_; |
455 bool did_complete_page_scale_animation_; | 427 bool did_complete_page_scale_animation_; |
456 bool reduce_memory_result_; | 428 bool reduce_memory_result_; |
457 base::Closure animation_task_; | 429 base::Closure animation_task_; |
458 base::TimeDelta requested_animation_delay_; | 430 base::TimeDelta requested_animation_delay_; |
431 bool skip_draw_layers_in_on_draw_; | |
432 scoped_ptr<LayerTreeHostImpl::FrameData> last_on_draw_frame_; | |
433 RenderPassList last_on_draw_render_passes_; | |
459 }; | 434 }; |
460 | 435 |
461 // A test fixture for new animation timelines tests. | 436 // A test fixture for new animation timelines tests. |
462 class LayerTreeHostImplTimelinesTest : public LayerTreeHostImplTest { | 437 class LayerTreeHostImplTimelinesTest : public LayerTreeHostImplTest { |
463 public: | 438 public: |
464 void SetUp() override { | 439 void SetUp() override { |
465 LayerTreeSettings settings = DefaultSettings(); | 440 LayerTreeSettings settings = DefaultSettings(); |
466 settings.use_compositor_animation_timelines = true; | 441 settings.use_compositor_animation_timelines = true; |
467 CreateHostImpl(settings, CreateOutputSurface()); | 442 CreateHostImpl(settings, CreateOutputSurface()); |
468 } | 443 } |
469 }; | 444 }; |
470 | 445 |
471 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) { | 446 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) { |
472 bool always_draw = false; | 447 // Note: It is not possible to disable the renderer once it has been set, |
473 CheckNotifyCalledIfCanDrawChanged(always_draw); | 448 // so we do not need to test that disabling the renderer notifies us |
449 // that can_draw changed. | |
450 EXPECT_FALSE(host_impl_->CanDraw()); | |
451 on_can_draw_state_changed_called_ = false; | |
452 | |
453 // Set up the root layer, which allows us to draw. | |
454 SetupScrollAndContentsLayers(gfx::Size(100, 100)); | |
455 EXPECT_TRUE(host_impl_->CanDraw()); | |
456 EXPECT_TRUE(on_can_draw_state_changed_called_); | |
457 on_can_draw_state_changed_called_ = false; | |
458 | |
459 // Toggle the root layer to make sure it toggles can_draw | |
460 host_impl_->active_tree()->SetRootLayer(nullptr); | |
461 EXPECT_FALSE(host_impl_->CanDraw()); | |
462 EXPECT_TRUE(on_can_draw_state_changed_called_); | |
463 on_can_draw_state_changed_called_ = false; | |
464 | |
465 SetupScrollAndContentsLayers(gfx::Size(100, 100)); | |
466 EXPECT_TRUE(host_impl_->CanDraw()); | |
467 EXPECT_TRUE(on_can_draw_state_changed_called_); | |
468 on_can_draw_state_changed_called_ = false; | |
469 | |
470 // Toggle the device viewport size to make sure it toggles can_draw. | |
471 host_impl_->SetViewportSize(gfx::Size()); | |
472 EXPECT_FALSE(host_impl_->CanDraw()); | |
473 EXPECT_TRUE(on_can_draw_state_changed_called_); | |
474 on_can_draw_state_changed_called_ = false; | |
475 | |
476 host_impl_->SetViewportSize(gfx::Size(100, 100)); | |
477 EXPECT_TRUE(host_impl_->CanDraw()); | |
478 EXPECT_TRUE(on_can_draw_state_changed_called_); | |
479 on_can_draw_state_changed_called_ = false; | |
474 } | 480 } |
475 | 481 |
476 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) { | 482 TEST_F(LayerTreeHostImplTest, ResourcelessDrawWithEmptyViewport) { |
477 CreateHostImpl(DefaultSettings(), | 483 CreateHostImpl(DefaultSettings(), |
478 FakeOutputSurface::CreateSoftware( | 484 FakeOutputSurface::CreateSoftware( |
479 make_scoped_ptr(new SoftwareOutputDevice()))); | 485 make_scoped_ptr(new SoftwareOutputDevice()))); |
480 const gfx::Transform external_transform; | 486 SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
481 const gfx::Rect external_viewport; | 487 EXPECT_TRUE(host_impl_->CanDraw()); |
482 const gfx::Rect external_clip; | 488 host_impl_->SetViewportSize(gfx::Size()); |
489 EXPECT_FALSE(host_impl_->CanDraw()); | |
490 | |
491 FakeOutputSurface* fake_output_surface = | |
492 static_cast<FakeOutputSurface*>(host_impl_->output_surface()); | |
493 EXPECT_EQ(fake_output_surface->num_sent_frames(), 0u); | |
494 gfx::Transform identity; | |
495 gfx::Rect viewport(100, 100); | |
483 const bool resourceless_software_draw = true; | 496 const bool resourceless_software_draw = true; |
484 host_impl_->SetExternalDrawConstraints( | 497 host_impl_->OnDraw(identity, viewport, viewport, resourceless_software_draw); |
485 external_transform, external_viewport, external_clip, external_viewport, | 498 ASSERT_EQ(fake_output_surface->num_sent_frames(), 1u); |
486 external_transform, resourceless_software_draw); | 499 EXPECT_EQ(gfx::SizeF(100.f, 100.f), |
487 | 500 fake_output_surface->last_sent_frame().metadata.root_layer_size); |
488 bool always_draw = true; | |
489 CheckNotifyCalledIfCanDrawChanged(always_draw); | |
490 } | 501 } |
491 | 502 |
492 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) { | 503 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) { |
493 ASSERT_FALSE(host_impl_->active_tree()->root_layer()); | 504 ASSERT_FALSE(host_impl_->active_tree()->root_layer()); |
494 | 505 |
495 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); | 506 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); |
496 ASSERT_EQ(scroll_info->scrolls.size(), 0u); | 507 ASSERT_EQ(scroll_info->scrolls.size(), 0u); |
497 } | 508 } |
498 | 509 |
499 TEST_F(LayerTreeHostImplTest, ScrollDeltaTreeButNoChanges) { | 510 TEST_F(LayerTreeHostImplTest, ScrollDeltaTreeButNoChanges) { |
(...skipping 2875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3375 TEST_F(LayerTreeHostImplTest, | 3386 TEST_F(LayerTreeHostImplTest, |
3376 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { | 3387 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { |
3377 CreateHostImpl(DefaultSettings(), | 3388 CreateHostImpl(DefaultSettings(), |
3378 FakeOutputSurface::CreateSoftware( | 3389 FakeOutputSurface::CreateSoftware( |
3379 make_scoped_ptr(new SoftwareOutputDevice()))); | 3390 make_scoped_ptr(new SoftwareOutputDevice()))); |
3380 | 3391 |
3381 const gfx::Transform external_transform; | 3392 const gfx::Transform external_transform; |
3382 const gfx::Rect external_viewport; | 3393 const gfx::Rect external_viewport; |
3383 const gfx::Rect external_clip; | 3394 const gfx::Rect external_clip; |
3384 const bool resourceless_software_draw = true; | 3395 const bool resourceless_software_draw = true; |
3385 host_impl_->SetExternalDrawConstraints( | 3396 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
3386 external_transform, external_viewport, external_clip, external_viewport, | 3397 external_transform); |
3387 external_transform, resourceless_software_draw); | |
3388 | 3398 |
3389 std::vector<PrepareToDrawSuccessTestCase> cases; | 3399 std::vector<PrepareToDrawSuccessTestCase> cases; |
3390 | 3400 |
3391 // 0. Default case. | 3401 // 0. Default case. |
3392 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); | 3402 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); |
3393 // 1. Animation with missing tile. | 3403 // 1. Animation with missing tile. |
3394 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); | 3404 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); |
3395 cases.back().layer_between.has_missing_tile = true; | 3405 cases.back().layer_between.has_missing_tile = true; |
3396 cases.back().layer_between.is_animating = true; | 3406 cases.back().layer_between.is_animating = true; |
3397 // 2. High res required with incomplete tile. | 3407 // 2. High res required with incomplete tile. |
3398 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); | 3408 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); |
3399 cases.back().high_res_required = true; | 3409 cases.back().high_res_required = true; |
3400 cases.back().layer_between.has_incomplete_tile = true; | 3410 cases.back().layer_between.has_incomplete_tile = true; |
3401 // 3. High res required with missing tile. | 3411 // 3. High res required with missing tile. |
3402 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); | 3412 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); |
3403 cases.back().high_res_required = true; | 3413 cases.back().high_res_required = true; |
3404 cases.back().layer_between.has_missing_tile = true; | 3414 cases.back().layer_between.has_missing_tile = true; |
3405 | 3415 |
3406 host_impl_->active_tree()->SetRootLayer( | 3416 host_impl_->active_tree()->SetRootLayer( |
3407 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); | 3417 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); |
3408 DidDrawCheckLayer* root = | 3418 DidDrawCheckLayer* root = |
3409 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 3419 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
3410 root->SetForceRenderSurface(true); | 3420 root->SetForceRenderSurface(true); |
3411 | 3421 |
3412 LayerTreeHostImpl::FrameData frame; | 3422 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
3413 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | 3423 resourceless_software_draw); |
3414 host_impl_->DrawLayers(&frame); | |
3415 host_impl_->DidDrawAllLayers(frame); | |
3416 host_impl_->SwapBuffers(frame); | |
3417 | 3424 |
3418 for (size_t i = 0; i < cases.size(); ++i) { | 3425 for (size_t i = 0; i < cases.size(); ++i) { |
3419 const auto& testcase = cases[i]; | 3426 const auto& testcase = cases[i]; |
3420 std::vector<LayerImpl*> to_remove; | 3427 std::vector<LayerImpl*> to_remove; |
3421 for (const auto& child : root->children()) | 3428 for (const auto& child : root->children()) |
3422 to_remove.push_back(child.get()); | 3429 to_remove.push_back(child.get()); |
3423 for (auto* child : to_remove) | 3430 for (auto* child : to_remove) |
3424 root->RemoveChild(child); | 3431 root->RemoveChild(child); |
3425 | 3432 |
3426 std::ostringstream scope; | 3433 std::ostringstream scope; |
(...skipping 23 matching lines...) Expand all Loading... | |
3450 testcase.layer_after.has_incomplete_tile, | 3457 testcase.layer_after.has_incomplete_tile, |
3451 testcase.layer_after.is_animating, host_impl_->resource_provider())); | 3458 testcase.layer_after.is_animating, host_impl_->resource_provider())); |
3452 DidDrawCheckLayer* after = | 3459 DidDrawCheckLayer* after = |
3453 static_cast<DidDrawCheckLayer*>(root->children().back().get()); | 3460 static_cast<DidDrawCheckLayer*>(root->children().back().get()); |
3454 if (testcase.layer_after.has_copy_request) | 3461 if (testcase.layer_after.has_copy_request) |
3455 after->AddCopyRequest(); | 3462 after->AddCopyRequest(); |
3456 | 3463 |
3457 if (testcase.high_res_required) | 3464 if (testcase.high_res_required) |
3458 host_impl_->SetRequiresHighResToDraw(); | 3465 host_impl_->SetRequiresHighResToDraw(); |
3459 | 3466 |
3460 LayerTreeHostImpl::FrameData frame; | 3467 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
3461 EXPECT_EQ(testcase.expected_result, PrepareToDrawFrame(&frame)); | 3468 resourceless_software_draw); |
3462 host_impl_->DrawLayers(&frame); | |
3463 host_impl_->DidDrawAllLayers(frame); | |
3464 host_impl_->SwapBuffers(frame); | |
3465 } | 3469 } |
3466 } | 3470 } |
3467 | 3471 |
3468 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { | 3472 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { |
3469 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); | 3473 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); |
3470 root->SetScrollClipLayer(Layer::INVALID_ID); | 3474 root->SetScrollClipLayer(Layer::INVALID_ID); |
3471 root->SetForceRenderSurface(true); | 3475 root->SetForceRenderSurface(true); |
3472 host_impl_->active_tree()->SetRootLayer(std::move(root)); | 3476 host_impl_->active_tree()->SetRootLayer(std::move(root)); |
3473 DrawFrame(); | 3477 DrawFrame(); |
3474 | 3478 |
(...skipping 2368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5843 | 5847 |
5844 EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list)); | 5848 EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list)); |
5845 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5849 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
5846 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); | 5850 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); |
5847 | 5851 |
5848 VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list); | 5852 VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list); |
5849 host_impl_->DidDrawAllLayers(frame); | 5853 host_impl_->DidDrawAllLayers(frame); |
5850 } | 5854 } |
5851 | 5855 |
5852 // Expect fullscreen gutter rect. | 5856 // Expect fullscreen gutter rect. |
5853 void TestEmptyLayer() { | 5857 void SetUpEmptylayer() { |
5854 gfx::Rect layer_rect(0, 0, 0, 0); | 5858 gfx::Rect layer_rect(0, 0, 0, 0); |
5855 child_->SetPosition(gfx::PointF(layer_rect.origin())); | 5859 child_->SetPosition(gfx::PointF(layer_rect.origin())); |
5856 child_->SetBounds(layer_rect.size()); | 5860 child_->SetBounds(layer_rect.size()); |
5857 child_->SetQuadRect(gfx::Rect(layer_rect.size())); | 5861 child_->SetQuadRect(gfx::Rect(layer_rect.size())); |
5858 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); | 5862 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); |
5863 } | |
5859 | 5864 |
5865 void VerifyEmptyLayerRenderPasses(const RenderPassList& render_passes) { | |
5866 ASSERT_EQ(1u, render_passes.size()); | |
5867 | |
5868 EXPECT_EQ(1u, CountGutterQuads(render_passes[0]->quad_list)); | |
5869 EXPECT_EQ(1u, render_passes[0]->quad_list.size()); | |
5870 ValidateTextureDrawQuads(render_passes[0]->quad_list); | |
5871 | |
5872 VerifyQuadsExactlyCoverViewport(render_passes[0]->quad_list); | |
5873 } | |
5874 | |
5875 void TestEmptyLayer() { | |
5876 SetUpEmptylayer(); | |
5860 LayerTreeHostImpl::FrameData frame; | 5877 LayerTreeHostImpl::FrameData frame; |
5861 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | 5878 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); |
5862 ASSERT_EQ(1u, frame.render_passes.size()); | 5879 VerifyEmptyLayerRenderPasses(frame.render_passes); |
5863 | |
5864 EXPECT_EQ(1u, CountGutterQuads(frame.render_passes[0]->quad_list)); | |
5865 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); | |
5866 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); | |
5867 | |
5868 VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list); | |
5869 host_impl_->DidDrawAllLayers(frame); | 5880 host_impl_->DidDrawAllLayers(frame); |
5870 } | 5881 } |
5871 | 5882 |
5883 void TestEmptyLayerWithOnDraw() { | |
5884 SetUpEmptylayer(); | |
5885 gfx::Transform identity; | |
5886 gfx::Rect viewport(viewport_size_); | |
5887 bool resourceless_software_draw = true; | |
5888 host_impl_->OnDraw(identity, viewport, viewport, | |
5889 resourceless_software_draw); | |
5890 VerifyEmptyLayerRenderPasses(last_on_draw_render_passes_); | |
5891 } | |
5892 | |
5872 // Expect four surrounding gutter rects. | 5893 // Expect four surrounding gutter rects. |
5873 void TestLayerInMiddleOfViewport() { | 5894 void SetUpLayerInMiddleOfViewport() { |
5874 gfx::Rect layer_rect(500, 500, 200, 200); | 5895 gfx::Rect layer_rect(500, 500, 200, 200); |
5875 child_->SetPosition(gfx::PointF(layer_rect.origin())); | 5896 child_->SetPosition(gfx::PointF(layer_rect.origin())); |
5876 child_->SetBounds(layer_rect.size()); | 5897 child_->SetBounds(layer_rect.size()); |
5877 child_->SetQuadRect(gfx::Rect(layer_rect.size())); | 5898 child_->SetQuadRect(gfx::Rect(layer_rect.size())); |
5878 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); | 5899 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); |
5900 } | |
5879 | 5901 |
5902 void VerifyLayerInMiddleOfViewport(const RenderPassList& render_passes) { | |
5903 ASSERT_EQ(1u, render_passes.size()); | |
5904 | |
5905 EXPECT_EQ(4u, CountGutterQuads(render_passes[0]->quad_list)); | |
5906 EXPECT_EQ(5u, render_passes[0]->quad_list.size()); | |
5907 ValidateTextureDrawQuads(render_passes[0]->quad_list); | |
5908 | |
5909 VerifyQuadsExactlyCoverViewport(render_passes[0]->quad_list); | |
5910 } | |
5911 | |
5912 void TestLayerInMiddleOfViewport() { | |
5913 SetUpLayerInMiddleOfViewport(); | |
5880 LayerTreeHostImpl::FrameData frame; | 5914 LayerTreeHostImpl::FrameData frame; |
5881 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | 5915 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); |
5882 ASSERT_EQ(1u, frame.render_passes.size()); | 5916 VerifyLayerInMiddleOfViewport(frame.render_passes); |
5883 | |
5884 EXPECT_EQ(4u, CountGutterQuads(frame.render_passes[0]->quad_list)); | |
5885 EXPECT_EQ(5u, frame.render_passes[0]->quad_list.size()); | |
5886 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); | |
5887 | |
5888 VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list); | |
5889 host_impl_->DidDrawAllLayers(frame); | 5917 host_impl_->DidDrawAllLayers(frame); |
5890 } | 5918 } |
5891 | 5919 |
5920 void TestLayerInMiddleOfViewportWithOnDraw() { | |
5921 SetUpLayerInMiddleOfViewport(); | |
5922 gfx::Transform identity; | |
5923 gfx::Rect viewport(viewport_size_); | |
5924 bool resourceless_software_draw = true; | |
5925 host_impl_->OnDraw(identity, viewport, viewport, | |
5926 resourceless_software_draw); | |
5927 VerifyLayerInMiddleOfViewport(last_on_draw_render_passes_); | |
5928 } | |
5929 | |
5892 // Expect no gutter rects. | 5930 // Expect no gutter rects. |
5893 void TestLayerIsLargerThanViewport() { | 5931 void SetUpLayerIsLargerThanViewport() { |
5894 gfx::Rect layer_rect(viewport_size_.width() + 10, | 5932 gfx::Rect layer_rect(viewport_size_.width() + 10, |
5895 viewport_size_.height() + 10); | 5933 viewport_size_.height() + 10); |
5896 child_->SetPosition(gfx::PointF(layer_rect.origin())); | 5934 child_->SetPosition(gfx::PointF(layer_rect.origin())); |
5897 child_->SetBounds(layer_rect.size()); | 5935 child_->SetBounds(layer_rect.size()); |
5898 child_->SetQuadRect(gfx::Rect(layer_rect.size())); | 5936 child_->SetQuadRect(gfx::Rect(layer_rect.size())); |
5899 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); | 5937 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); |
5938 } | |
5900 | 5939 |
5940 void VerifyLayerIsLargerThanViewport(const RenderPassList& render_passes) { | |
5941 ASSERT_EQ(1u, render_passes.size()); | |
5942 | |
5943 EXPECT_EQ(0u, CountGutterQuads(render_passes[0]->quad_list)); | |
5944 EXPECT_EQ(1u, render_passes[0]->quad_list.size()); | |
5945 ValidateTextureDrawQuads(render_passes[0]->quad_list); | |
5946 } | |
5947 | |
5948 void TestLayerIsLargerThanViewport() { | |
5949 SetUpLayerIsLargerThanViewport(); | |
5901 LayerTreeHostImpl::FrameData frame; | 5950 LayerTreeHostImpl::FrameData frame; |
5902 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | 5951 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); |
5903 ASSERT_EQ(1u, frame.render_passes.size()); | 5952 VerifyLayerIsLargerThanViewport(frame.render_passes); |
5953 host_impl_->DidDrawAllLayers(frame); | |
5954 } | |
5904 | 5955 |
5905 EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list)); | 5956 void TestLayerIsLargerThanViewportWithOnDraw() { |
5906 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5957 SetUpLayerIsLargerThanViewport(); |
5907 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); | 5958 gfx::Transform identity; |
5908 | 5959 gfx::Rect viewport(viewport_size_); |
5909 host_impl_->DidDrawAllLayers(frame); | 5960 bool resourceless_software_draw = true; |
5961 host_impl_->OnDraw(identity, viewport, viewport, | |
5962 resourceless_software_draw); | |
5963 VerifyLayerIsLargerThanViewport(last_on_draw_render_passes_); | |
5910 } | 5964 } |
5911 | 5965 |
5912 void DidActivateSyncTree() override { did_activate_pending_tree_ = true; } | 5966 void DidActivateSyncTree() override { did_activate_pending_tree_ = true; } |
5913 | 5967 |
5914 void set_gutter_quad_material(DrawQuad::Material material) { | 5968 void set_gutter_quad_material(DrawQuad::Material material) { |
5915 gutter_quad_material_ = material; | 5969 gutter_quad_material_ = material; |
5916 } | 5970 } |
5917 void set_gutter_texture_size(const gfx::Size& gutter_texture_size) { | 5971 void set_gutter_texture_size(const gfx::Size& gutter_texture_size) { |
5918 gutter_texture_size_ = gutter_texture_size; | 5972 gutter_texture_size_ = gutter_texture_size; |
5919 } | 5973 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5952 texture_quad->uv_bottom_right.y(), | 6006 texture_quad->uv_bottom_right.y(), |
5953 texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); | 6007 texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); |
5954 } | 6008 } |
5955 } | 6009 } |
5956 | 6010 |
5957 gfx::Size DipSizeToPixelSize(const gfx::Size& size) { | 6011 gfx::Size DipSizeToPixelSize(const gfx::Size& size) { |
5958 return gfx::ScaleToRoundedSize( | 6012 return gfx::ScaleToRoundedSize( |
5959 size, host_impl_->active_tree()->device_scale_factor()); | 6013 size, host_impl_->active_tree()->device_scale_factor()); |
5960 } | 6014 } |
5961 | 6015 |
5962 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; | |
5967 host_impl_->SetExternalDrawConstraints( | |
5968 external_transform, external_viewport, external_clip, external_viewport, | |
5969 external_transform, resourceless_software_draw); | |
5970 } | |
5971 | |
5972 DrawQuad::Material gutter_quad_material_; | 6016 DrawQuad::Material gutter_quad_material_; |
5973 gfx::Size gutter_texture_size_; | 6017 gfx::Size gutter_texture_size_; |
5974 gfx::Size viewport_size_; | 6018 gfx::Size viewport_size_; |
5975 BlendStateCheckLayer* child_; | 6019 BlendStateCheckLayer* child_; |
5976 bool did_activate_pending_tree_; | 6020 bool did_activate_pending_tree_; |
5977 }; | 6021 }; |
5978 | 6022 |
5979 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { | 6023 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { |
5980 viewport_size_ = gfx::Size(1000, 1000); | 6024 viewport_size_ = gfx::Size(1000, 1000); |
5981 | 6025 |
(...skipping 18 matching lines...) Expand all Loading... | |
6000 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); | 6044 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); |
6001 SetupActiveTreeLayers(); | 6045 SetupActiveTreeLayers(); |
6002 TestLayerCoversFullViewport(); | 6046 TestLayerCoversFullViewport(); |
6003 TestEmptyLayer(); | 6047 TestEmptyLayer(); |
6004 TestLayerInMiddleOfViewport(); | 6048 TestLayerInMiddleOfViewport(); |
6005 TestLayerIsLargerThanViewport(); | 6049 TestLayerIsLargerThanViewport(); |
6006 } | 6050 } |
6007 | 6051 |
6008 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { | 6052 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { |
6009 viewport_size_ = gfx::Size(1000, 1000); | 6053 viewport_size_ = gfx::Size(1000, 1000); |
6054 skip_draw_layers_in_on_draw_ = true; // Resourceless can't draw tiled quads. | |
6010 | 6055 |
6011 bool software = true; | 6056 bool software = true; |
6012 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); | 6057 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); |
6013 SetResourcelessSoftwareDraw(); | |
6014 | 6058 |
6015 // Pending tree to force active_tree size invalid. Not used otherwise. | 6059 // Pending tree to force active_tree size invalid. Not used otherwise. |
6016 host_impl_->CreatePendingTree(); | 6060 host_impl_->CreatePendingTree(); |
6017 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); | 6061 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); |
6018 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); | 6062 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); |
6019 | 6063 |
6020 SetupActiveTreeLayers(); | 6064 SetupActiveTreeLayers(); |
6021 TestEmptyLayer(); | 6065 TestEmptyLayerWithOnDraw(); |
danakj
2015/12/16 23:57:53
It would be nice to wrap each of these Test calls
boliu
2015/12/17 00:14:07
Done. Copied EXPECT_SCOPED define from scheduler_u
danakj
2015/12/17 00:31:24
Oh I thot it was a general gtest thing. Well, cool
| |
6022 TestLayerInMiddleOfViewport(); | 6066 TestLayerInMiddleOfViewportWithOnDraw(); |
6023 TestLayerIsLargerThanViewport(); | 6067 TestLayerIsLargerThanViewportWithOnDraw(); |
6024 } | 6068 } |
6025 | 6069 |
6026 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) { | 6070 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) { |
6027 viewport_size_ = gfx::Size(1000, 1000); | 6071 viewport_size_ = gfx::Size(1000, 1000); |
6072 skip_draw_layers_in_on_draw_ = true; // Resourceless can't draw tiled quads. | |
6028 | 6073 |
6029 bool software = true; | 6074 bool software = true; |
6030 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); | 6075 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); |
6031 SetResourcelessSoftwareDraw(); | |
6032 | 6076 |
6033 // Set larger viewport and activate it to active tree. | 6077 // Set larger viewport and activate it to active tree. |
6034 host_impl_->CreatePendingTree(); | 6078 host_impl_->CreatePendingTree(); |
6035 gfx::Size larger_viewport(viewport_size_.width() + 100, | 6079 gfx::Size larger_viewport(viewport_size_.width() + 100, |
6036 viewport_size_.height() + 100); | 6080 viewport_size_.height() + 100); |
6037 host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport)); | 6081 host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport)); |
6038 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); | 6082 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); |
6039 host_impl_->ActivateSyncTree(); | 6083 host_impl_->ActivateSyncTree(); |
6040 EXPECT_TRUE(did_activate_pending_tree_); | 6084 EXPECT_TRUE(did_activate_pending_tree_); |
6041 EXPECT_FALSE(host_impl_->active_tree()->ViewportSizeInvalid()); | 6085 EXPECT_FALSE(host_impl_->active_tree()->ViewportSizeInvalid()); |
6042 | 6086 |
6043 // Shrink pending tree viewport without activating. | 6087 // Shrink pending tree viewport without activating. |
6044 host_impl_->CreatePendingTree(); | 6088 host_impl_->CreatePendingTree(); |
6045 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); | 6089 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); |
6046 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); | 6090 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); |
6047 | 6091 |
6048 SetupActiveTreeLayers(); | 6092 SetupActiveTreeLayers(); |
6049 TestEmptyLayer(); | 6093 TestEmptyLayerWithOnDraw(); |
6050 TestLayerInMiddleOfViewport(); | 6094 TestLayerInMiddleOfViewportWithOnDraw(); |
6051 TestLayerIsLargerThanViewport(); | 6095 TestLayerIsLargerThanViewportWithOnDraw(); |
6052 } | 6096 } |
6053 | 6097 |
6054 class FakeDrawableLayerImpl: public LayerImpl { | 6098 class FakeDrawableLayerImpl: public LayerImpl { |
6055 public: | 6099 public: |
6056 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { | 6100 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { |
6057 return make_scoped_ptr(new FakeDrawableLayerImpl(tree_impl, id)); | 6101 return make_scoped_ptr(new FakeDrawableLayerImpl(tree_impl, id)); |
6058 } | 6102 } |
6059 protected: | 6103 protected: |
6060 FakeDrawableLayerImpl(LayerTreeImpl* tree_impl, int id) | 6104 FakeDrawableLayerImpl(LayerTreeImpl* tree_impl, int id) |
6061 : LayerImpl(tree_impl, id) {} | 6105 : LayerImpl(tree_impl, id) {} |
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6849 DefaultSettings(), | 6893 DefaultSettings(), |
6850 FakeOutputSurface::CreateSoftware(make_scoped_ptr(software_device)))); | 6894 FakeOutputSurface::CreateSoftware(make_scoped_ptr(software_device)))); |
6851 host_impl_->SetViewportSize(gfx::Size(50, 50)); | 6895 host_impl_->SetViewportSize(gfx::Size(50, 50)); |
6852 | 6896 |
6853 SetupScrollAndContentsLayers(gfx::Size(100, 100)); | 6897 SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
6854 | 6898 |
6855 const gfx::Transform external_transform; | 6899 const gfx::Transform external_transform; |
6856 const gfx::Rect external_viewport; | 6900 const gfx::Rect external_viewport; |
6857 const gfx::Rect external_clip; | 6901 const gfx::Rect external_clip; |
6858 const bool resourceless_software_draw = true; | 6902 const bool resourceless_software_draw = true; |
6859 host_impl_->SetExternalDrawConstraints(external_transform, | 6903 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
6860 external_viewport, | 6904 external_transform); |
6861 external_clip, | |
6862 external_viewport, | |
6863 external_transform, | |
6864 resourceless_software_draw); | |
6865 | 6905 |
6866 EXPECT_EQ(0, software_device->frames_began_); | 6906 EXPECT_EQ(0, software_device->frames_began_); |
6867 EXPECT_EQ(0, software_device->frames_ended_); | 6907 EXPECT_EQ(0, software_device->frames_ended_); |
6868 | 6908 |
6869 DrawFrame(); | 6909 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
6910 resourceless_software_draw); | |
6870 | 6911 |
6871 EXPECT_EQ(1, software_device->frames_began_); | 6912 EXPECT_EQ(1, software_device->frames_began_); |
6872 EXPECT_EQ(1, software_device->frames_ended_); | 6913 EXPECT_EQ(1, software_device->frames_ended_); |
6873 | 6914 |
6874 // Call another API method that is likely to hit nullptr in this mode. | 6915 // Call another API method that is likely to hit nullptr in this mode. |
6875 scoped_refptr<base::trace_event::TracedValue> state = | 6916 scoped_refptr<base::trace_event::TracedValue> state = |
6876 make_scoped_refptr(new base::trace_event::TracedValue()); | 6917 make_scoped_refptr(new base::trace_event::TracedValue()); |
6877 host_impl_->ActivationStateAsValueInto(state.get()); | 6918 host_impl_->ActivationStateAsValueInto(state.get()); |
6878 } | 6919 } |
6879 | 6920 |
6880 TEST_F(LayerTreeHostImplTest, | 6921 TEST_F(LayerTreeHostImplTest, |
6881 ForcedDrawToSoftwareDeviceSkipsUnsupportedLayers) { | 6922 ForcedDrawToSoftwareDeviceSkipsUnsupportedLayers) { |
6882 set_reduce_memory_result(false); | 6923 set_reduce_memory_result(false); |
6883 EXPECT_TRUE(CreateHostImpl(DefaultSettings(), | 6924 EXPECT_TRUE(CreateHostImpl(DefaultSettings(), |
6884 FakeOutputSurface::CreateSoftware( | 6925 FakeOutputSurface::CreateSoftware( |
6885 make_scoped_ptr(new CountingSoftwareDevice)))); | 6926 make_scoped_ptr(new CountingSoftwareDevice)))); |
6886 | 6927 |
6887 const gfx::Transform external_transform; | 6928 const gfx::Transform external_transform; |
6888 const gfx::Rect external_viewport; | 6929 const gfx::Rect external_viewport; |
6889 const gfx::Rect external_clip; | 6930 const gfx::Rect external_clip; |
6890 const bool resourceless_software_draw = true; | 6931 const bool resourceless_software_draw = true; |
6891 host_impl_->SetExternalDrawConstraints(external_transform, | 6932 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
6892 external_viewport, | 6933 external_transform); |
6893 external_clip, | |
6894 external_viewport, | |
6895 external_transform, | |
6896 resourceless_software_draw); | |
6897 | 6934 |
6898 // SolidColorLayerImpl will be drawn. | 6935 // SolidColorLayerImpl will be drawn. |
6899 scoped_ptr<SolidColorLayerImpl> root_layer = | 6936 scoped_ptr<SolidColorLayerImpl> root_layer = |
6900 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); | 6937 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); |
6901 | 6938 |
6902 // VideoLayerImpl will not be drawn. | 6939 // VideoLayerImpl will not be drawn. |
6903 FakeVideoFrameProvider provider; | 6940 FakeVideoFrameProvider provider; |
6904 scoped_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create( | 6941 scoped_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create( |
6905 host_impl_->active_tree(), 2, &provider, media::VIDEO_ROTATION_0); | 6942 host_impl_->active_tree(), 2, &provider, media::VIDEO_ROTATION_0); |
6906 video_layer->SetBounds(gfx::Size(10, 10)); | 6943 video_layer->SetBounds(gfx::Size(10, 10)); |
6907 video_layer->SetDrawsContent(true); | 6944 video_layer->SetDrawsContent(true); |
6908 root_layer->AddChild(std::move(video_layer)); | 6945 root_layer->AddChild(std::move(video_layer)); |
6909 SetupRootLayerImpl(std::move(root_layer)); | 6946 SetupRootLayerImpl(std::move(root_layer)); |
6910 | 6947 |
6911 LayerTreeHostImpl::FrameData frame; | 6948 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
6912 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | 6949 resourceless_software_draw); |
6913 host_impl_->DrawLayers(&frame); | |
6914 host_impl_->DidDrawAllLayers(frame); | |
6915 | 6950 |
6916 EXPECT_EQ(1u, frame.will_draw_layers.size()); | 6951 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]); | 6952 EXPECT_EQ(host_impl_->active_tree()->root_layer(), |
6953 last_on_draw_frame_->will_draw_layers[0]); | |
6918 } | 6954 } |
6919 | 6955 |
6920 // Checks that we have a non-0 default allocation if we pass a context that | 6956 // Checks that we have a non-0 default allocation if we pass a context that |
6921 // doesn't support memory management extensions. | 6957 // doesn't support memory management extensions. |
6922 TEST_F(LayerTreeHostImplTest, DefaultMemoryAllocation) { | 6958 TEST_F(LayerTreeHostImplTest, DefaultMemoryAllocation) { |
6923 LayerTreeSettings settings = DefaultSettings(); | 6959 LayerTreeSettings settings = DefaultSettings(); |
6924 host_impl_ = LayerTreeHostImpl::Create( | 6960 host_impl_ = LayerTreeHostImpl::Create( |
6925 settings, this, &task_runner_provider_, &stats_instrumentation_, | 6961 settings, this, &task_runner_provider_, &stats_instrumentation_, |
6926 &shared_bitmap_manager_, &gpu_memory_buffer_manager_, &task_graph_runner_, | 6962 &shared_bitmap_manager_, &gpu_memory_buffer_manager_, &task_graph_runner_, |
6927 0); | 6963 0); |
(...skipping 1501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8429 | 8465 |
8430 TEST_F(LayerTreeHostImplTest, ExternalTransformReflectedInNextDraw) { | 8466 TEST_F(LayerTreeHostImplTest, ExternalTransformReflectedInNextDraw) { |
8431 const gfx::Size layer_size(100, 100); | 8467 const gfx::Size layer_size(100, 100); |
8432 gfx::Transform external_transform; | 8468 gfx::Transform external_transform; |
8433 const gfx::Rect external_viewport(layer_size); | 8469 const gfx::Rect external_viewport(layer_size); |
8434 const gfx::Rect external_clip(layer_size); | 8470 const gfx::Rect external_clip(layer_size); |
8435 const bool resourceless_software_draw = false; | 8471 const bool resourceless_software_draw = false; |
8436 LayerImpl* layer = SetupScrollAndContentsLayers(layer_size); | 8472 LayerImpl* layer = SetupScrollAndContentsLayers(layer_size); |
8437 layer->SetDrawsContent(true); | 8473 layer->SetDrawsContent(true); |
8438 | 8474 |
8439 host_impl_->SetExternalDrawConstraints(external_transform, | 8475 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
8440 external_viewport, | 8476 external_transform); |
8441 external_clip, | 8477 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
8442 external_viewport, | 8478 resourceless_software_draw); |
8443 external_transform, | |
8444 resourceless_software_draw); | |
8445 DrawFrame(); | |
8446 EXPECT_TRANSFORMATION_MATRIX_EQ( | 8479 EXPECT_TRANSFORMATION_MATRIX_EQ( |
8447 external_transform, layer->draw_properties().target_space_transform); | 8480 external_transform, layer->draw_properties().target_space_transform); |
8448 | 8481 |
8449 external_transform.Translate(20, 20); | 8482 external_transform.Translate(20, 20); |
8450 host_impl_->SetExternalDrawConstraints(external_transform, | 8483 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
8451 external_viewport, | 8484 external_transform); |
8452 external_clip, | 8485 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
8453 external_viewport, | 8486 resourceless_software_draw); |
8454 external_transform, | |
8455 resourceless_software_draw); | |
8456 DrawFrame(); | |
8457 EXPECT_TRANSFORMATION_MATRIX_EQ( | 8487 EXPECT_TRANSFORMATION_MATRIX_EQ( |
8458 external_transform, layer->draw_properties().target_space_transform); | 8488 external_transform, layer->draw_properties().target_space_transform); |
8459 } | 8489 } |
8460 | 8490 |
8461 TEST_F(LayerTreeHostImplTest, ExternalTransformSetNeedsRedraw) { | 8491 TEST_F(LayerTreeHostImplTest, ExternalTransformSetNeedsRedraw) { |
8462 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); | 8492 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); |
8463 | 8493 |
8464 const gfx::Size layer_size(100, 100); | 8494 const gfx::Size viewport_size(100, 100); |
8465 const gfx::Transform external_transform; | 8495 host_impl_->SetViewportSize(viewport_size); |
8466 const gfx::Rect external_viewport(layer_size); | 8496 |
8467 const gfx::Rect external_clip1(layer_size); | 8497 const gfx::Transform transform_for_tile_priority; |
8468 const gfx::Rect external_clip2(50, 50); | 8498 const gfx::Transform draw_transform; |
8499 const gfx::Rect viewport_for_tile_priority1(viewport_size); | |
8500 const gfx::Rect viewport_for_tile_priority2(50, 50); | |
8501 const gfx::Rect draw_viewport(viewport_size); | |
8502 const gfx::Rect clip(viewport_size); | |
8469 bool resourceless_software_draw = false; | 8503 bool resourceless_software_draw = false; |
8470 | 8504 |
8471 resourceless_software_draw = false; | 8505 // Clear any damage. |
8472 host_impl_->SetExternalDrawConstraints( | 8506 host_impl_->SetExternalTilePriorityConstraints(viewport_for_tile_priority1, |
8473 external_transform, external_viewport, external_clip1, external_viewport, | 8507 transform_for_tile_priority); |
8474 external_transform, resourceless_software_draw); | 8508 host_impl_->OnDraw(draw_transform, draw_viewport, clip, |
8475 { | 8509 resourceless_software_draw); |
8476 // Clear any damage. | 8510 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 | 8511 |
8484 // Setting new constraints needs redraw. | 8512 // Setting new constraints needs redraw. |
8485 did_request_redraw_ = false; | 8513 did_request_redraw_ = false; |
8486 host_impl_->SetExternalDrawConstraints( | 8514 host_impl_->SetExternalTilePriorityConstraints(viewport_for_tile_priority2, |
8487 external_transform, external_viewport, external_clip2, external_viewport, | 8515 transform_for_tile_priority); |
8488 external_transform, resourceless_software_draw); | |
8489 EXPECT_TRUE(did_request_redraw_); | 8516 EXPECT_TRUE(did_request_redraw_); |
8490 { | 8517 host_impl_->OnDraw(draw_transform, draw_viewport, clip, |
8491 LayerTreeHostImpl::FrameData frame; | 8518 resourceless_software_draw); |
8492 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | 8519 EXPECT_FALSE(last_on_draw_frame_->has_no_damage); |
8493 EXPECT_FALSE(frame.has_no_damage); | 8520 } |
8494 host_impl_->DrawLayers(&frame); | 8521 |
8495 host_impl_->DidDrawAllLayers(frame); | 8522 TEST_F(LayerTreeHostImplTest, OnDrawConstraintSetNeedsRedraw) { |
8496 host_impl_->SwapBuffers(frame); | 8523 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); |
8524 | |
8525 const gfx::Size viewport_size(100, 100); | |
8526 host_impl_->SetViewportSize(viewport_size); | |
8527 | |
8528 const gfx::Transform draw_transform; | |
8529 const gfx::Rect draw_viewport1(viewport_size); | |
8530 const gfx::Rect draw_viewport2(50, 50); | |
8531 const gfx::Rect clip(viewport_size); | |
8532 bool resourceless_software_draw = false; | |
8533 | |
8534 // Clear any damage. | |
8535 host_impl_->OnDraw(draw_transform, draw_viewport1, clip, | |
8536 resourceless_software_draw); | |
8537 last_on_draw_frame_.reset(); | |
8538 | |
8539 // Same draw params does not swap. | |
8540 did_request_redraw_ = false; | |
8541 host_impl_->OnDraw(draw_transform, draw_viewport1, clip, | |
8542 resourceless_software_draw); | |
8543 EXPECT_FALSE(did_request_redraw_); | |
8544 EXPECT_TRUE(last_on_draw_frame_->has_no_damage); | |
8545 last_on_draw_frame_.reset(); | |
8546 | |
8547 // Different draw params does swap. | |
8548 did_request_redraw_ = false; | |
8549 host_impl_->OnDraw(draw_transform, draw_viewport2, clip, | |
8550 resourceless_software_draw); | |
8551 EXPECT_TRUE(did_request_redraw_); | |
8552 EXPECT_FALSE(last_on_draw_frame_->has_no_damage); | |
8553 } | |
8554 | |
8555 class ResourcelessSoftwareLayerTreeHostImplTest : public LayerTreeHostImplTest { | |
8556 protected: | |
8557 scoped_ptr<OutputSurface> CreateOutputSurface() override { | |
8558 return FakeOutputSurface::Create3dWithResourcelessSoftwareSupport(); | |
8497 } | 8559 } |
8560 }; | |
8498 | 8561 |
8499 // Resourceless software draw toggles do not need redraw. Damage is | 8562 TEST_F(ResourcelessSoftwareLayerTreeHostImplTest, |
8500 // set externally by SynchronousCompositorOutputSurface in this case. | 8563 ResourcelessSoftwareSetNeedsRedraw) { |
8564 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); | |
8501 | 8565 |
8502 // Setting resourceless_software_draw do not need redraw. | 8566 const gfx::Size viewport_size(100, 100); |
8503 did_request_redraw_ = false; | 8567 host_impl_->SetViewportSize(viewport_size); |
8568 | |
8569 const gfx::Transform draw_transform; | |
8570 const gfx::Rect draw_viewport(viewport_size); | |
8571 const gfx::Rect clip(viewport_size); | |
8572 bool resourceless_software_draw = false; | |
8573 | |
8574 // Clear any damage. | |
8575 host_impl_->OnDraw(draw_transform, draw_viewport, clip, | |
8576 resourceless_software_draw); | |
8577 last_on_draw_frame_.reset(); | |
8578 | |
8579 // Always swap even if same draw params. | |
8504 resourceless_software_draw = true; | 8580 resourceless_software_draw = true; |
8505 host_impl_->SetExternalDrawConstraints( | 8581 host_impl_->OnDraw(draw_transform, draw_viewport, clip, |
8506 external_transform, external_viewport, external_clip1, external_viewport, | 8582 resourceless_software_draw); |
8507 external_transform, resourceless_software_draw); | 8583 EXPECT_FALSE(last_on_draw_frame_->has_no_damage); |
8508 EXPECT_FALSE(did_request_redraw_); | 8584 last_on_draw_frame_.reset(); |
8509 // Can't call PrepareToDrawFrame with no change for resourceless software | |
8510 // draw. | |
8511 | 8585 |
8512 // Unsetting resourceless_software_draw do not need redraw. | 8586 // Next hardware draw has damage. |
8513 did_request_redraw_ = false; | |
8514 resourceless_software_draw = false; | 8587 resourceless_software_draw = false; |
8515 host_impl_->SetExternalDrawConstraints( | 8588 host_impl_->OnDraw(draw_transform, draw_viewport, clip, |
8516 external_transform, external_viewport, external_clip2, external_viewport, | 8589 resourceless_software_draw); |
8517 external_transform, resourceless_software_draw); | 8590 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 } | 8591 } |
8525 | 8592 |
8526 TEST_F(LayerTreeHostImplTest, ExternalViewportAffectsVisibleRects) { | 8593 TEST_F(LayerTreeHostImplTest, ExternalViewportAffectsVisibleRects) { |
8527 const gfx::Size layer_size(100, 100); | 8594 const gfx::Size layer_size(100, 100); |
8528 SetupScrollAndContentsLayers(layer_size); | 8595 SetupScrollAndContentsLayers(layer_size); |
8529 LayerImpl* content_layer = host_impl_->active_tree() | 8596 LayerImpl* content_layer = host_impl_->active_tree() |
8530 ->OuterViewportScrollLayer() | 8597 ->OuterViewportScrollLayer() |
8531 ->children()[0] | 8598 ->children()[0] |
8532 .get(); | 8599 .get(); |
8533 RebuildPropertyTrees(); | 8600 RebuildPropertyTrees(); |
8534 | 8601 |
8535 bool update_lcd_text = false; | 8602 bool update_lcd_text = false; |
8536 | 8603 |
8537 host_impl_->SetViewportSize(gfx::Size(90, 90)); | 8604 host_impl_->SetViewportSize(gfx::Size(90, 90)); |
8538 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8605 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); |
8539 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect()); | 8606 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect()); |
8540 | 8607 |
8541 gfx::Transform external_transform; | 8608 gfx::Transform external_transform; |
8542 gfx::Rect external_viewport(10, 20); | 8609 gfx::Rect external_viewport(10, 20); |
8543 gfx::Rect external_clip(layer_size); | 8610 gfx::Rect external_clip(layer_size); |
8544 bool resourceless_software_draw = false; | 8611 bool resourceless_software_draw = false; |
8545 host_impl_->SetExternalDrawConstraints( | 8612 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
8546 external_transform, external_viewport, external_clip, external_viewport, | 8613 external_transform); |
8547 external_transform, resourceless_software_draw); | 8614 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
8548 | 8615 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()); | 8616 EXPECT_EQ(gfx::Rect(10, 20), content_layer->visible_layer_rect()); |
8552 | 8617 |
8553 // Clear the external viewport. | 8618 // Clear the external viewport. |
8554 external_viewport = gfx::Rect(); | 8619 external_viewport = gfx::Rect(); |
8555 host_impl_->SetExternalDrawConstraints( | 8620 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
8556 external_transform, external_viewport, external_clip, external_viewport, | 8621 external_transform); |
8557 external_transform, resourceless_software_draw); | |
8558 | 8622 |
8559 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8623 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
8624 resourceless_software_draw); | |
8560 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect()); | 8625 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect()); |
8561 } | 8626 } |
8562 | 8627 |
8563 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsVisibleRects) { | 8628 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsVisibleRects) { |
8564 const gfx::Size layer_size(100, 100); | 8629 const gfx::Size layer_size(100, 100); |
8565 SetupScrollAndContentsLayers(layer_size); | 8630 SetupScrollAndContentsLayers(layer_size); |
8566 LayerImpl* content_layer = host_impl_->active_tree() | 8631 LayerImpl* content_layer = host_impl_->active_tree() |
8567 ->OuterViewportScrollLayer() | 8632 ->OuterViewportScrollLayer() |
8568 ->children()[0] | 8633 ->children()[0] |
8569 .get(); | 8634 .get(); |
8570 RebuildPropertyTrees(); | 8635 RebuildPropertyTrees(); |
8571 | 8636 |
8572 bool update_lcd_text = false; | 8637 bool update_lcd_text = false; |
8573 | 8638 |
8574 host_impl_->SetViewportSize(gfx::Size(50, 50)); | 8639 host_impl_->SetViewportSize(gfx::Size(50, 50)); |
8575 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8640 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); |
8576 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect()); | 8641 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect()); |
8577 | 8642 |
8578 gfx::Transform external_transform; | 8643 gfx::Transform external_transform; |
8579 external_transform.Translate(10, 10); | 8644 external_transform.Translate(10, 10); |
8580 external_transform.Scale(2, 2); | 8645 external_transform.Scale(2, 2); |
8581 gfx::Rect external_viewport; | 8646 gfx::Rect external_viewport; |
8582 gfx::Rect external_clip(layer_size); | 8647 gfx::Rect external_clip(layer_size); |
8583 bool resourceless_software_draw = false; | 8648 bool resourceless_software_draw = false; |
8584 host_impl_->SetExternalDrawConstraints( | 8649 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
8585 external_transform, external_viewport, external_clip, external_viewport, | 8650 external_transform); |
8586 external_transform, resourceless_software_draw); | |
8587 | 8651 |
8588 // Visible rects should now be shifted and scaled because of the external | 8652 // Visible rects should now be shifted and scaled because of the external |
8589 // transform. | 8653 // transform. |
8590 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8654 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
8655 resourceless_software_draw); | |
8591 EXPECT_EQ(gfx::Rect(20, 20), content_layer->visible_layer_rect()); | 8656 EXPECT_EQ(gfx::Rect(20, 20), content_layer->visible_layer_rect()); |
8592 | 8657 |
8593 // Clear the external transform. | 8658 // Clear the external transform. |
8594 external_transform = gfx::Transform(); | 8659 external_transform = gfx::Transform(); |
8595 host_impl_->SetExternalDrawConstraints( | 8660 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
8596 external_transform, external_viewport, external_clip, external_viewport, | 8661 external_transform); |
8597 external_transform, resourceless_software_draw); | |
8598 | 8662 |
8599 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8663 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
8664 resourceless_software_draw); | |
8600 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect()); | 8665 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect()); |
8601 } | 8666 } |
8602 | 8667 |
8603 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsSublayerScaleFactor) { | 8668 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsSublayerScaleFactor) { |
8604 const gfx::Size layer_size(100, 100); | 8669 const gfx::Size layer_size(100, 100); |
8605 SetupScrollAndContentsLayers(layer_size); | 8670 SetupScrollAndContentsLayers(layer_size); |
8606 LayerImpl* content_layer = host_impl_->active_tree() | 8671 LayerImpl* content_layer = host_impl_->active_tree() |
8607 ->OuterViewportScrollLayer() | 8672 ->OuterViewportScrollLayer() |
8608 ->children()[0] | 8673 ->children()[0] |
8609 .get(); | 8674 .get(); |
(...skipping 15 matching lines...) Expand all Loading... | |
8625 host_impl_->active_tree()->property_trees()->transform_tree.Node( | 8690 host_impl_->active_tree()->property_trees()->transform_tree.Node( |
8626 test_layer->transform_tree_index()); | 8691 test_layer->transform_tree_index()); |
8627 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); | 8692 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); |
8628 | 8693 |
8629 gfx::Transform external_transform; | 8694 gfx::Transform external_transform; |
8630 external_transform.Translate(10, 10); | 8695 external_transform.Translate(10, 10); |
8631 external_transform.Scale(2, 2); | 8696 external_transform.Scale(2, 2); |
8632 gfx::Rect external_viewport; | 8697 gfx::Rect external_viewport; |
8633 gfx::Rect external_clip(layer_size); | 8698 gfx::Rect external_clip(layer_size); |
8634 bool resourceless_software_draw = false; | 8699 bool resourceless_software_draw = false; |
8635 host_impl_->SetExternalDrawConstraints( | 8700 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
8636 external_transform, external_viewport, external_clip, external_viewport, | 8701 external_transform); |
8637 external_transform, resourceless_software_draw); | |
8638 | 8702 |
8639 // Transform node's sublayer scale should include the device transform scale. | 8703 // Transform node's sublayer scale should include the device transform scale. |
8640 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8704 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
8705 resourceless_software_draw); | |
8641 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( | 8706 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( |
8642 test_layer->transform_tree_index()); | 8707 test_layer->transform_tree_index()); |
8643 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f)); | 8708 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f)); |
8644 | 8709 |
8645 // Clear the external transform. | 8710 // Clear the external transform. |
8646 external_transform = gfx::Transform(); | 8711 external_transform = gfx::Transform(); |
8647 host_impl_->SetExternalDrawConstraints( | 8712 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
8648 external_transform, external_viewport, external_clip, external_viewport, | 8713 external_transform); |
8649 external_transform, resourceless_software_draw); | |
8650 | 8714 |
8651 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8715 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
8716 resourceless_software_draw); | |
8652 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( | 8717 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( |
8653 test_layer->transform_tree_index()); | 8718 test_layer->transform_tree_index()); |
8654 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); | 8719 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); |
8655 } | 8720 } |
8656 | 8721 |
8657 TEST_F(LayerTreeHostImplTest, ScrollAnimated) { | 8722 TEST_F(LayerTreeHostImplTest, ScrollAnimated) { |
8658 SetupScrollAndContentsLayers(gfx::Size(100, 200)); | 8723 SetupScrollAndContentsLayers(gfx::Size(100, 200)); |
8659 | 8724 |
8660 // Shrink the outer viewport clip layer so that the outer viewport can scroll. | 8725 // Shrink the outer viewport clip layer so that the outer viewport can scroll. |
8661 host_impl_->OuterViewportScrollLayer()->parent()->SetBounds( | 8726 host_impl_->OuterViewportScrollLayer()->parent()->SetBounds( |
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9326 // There should not be any jitter measured till we hit the fixed point hits | 9391 // There should not be any jitter measured till we hit the fixed point hits |
9327 // threshold. | 9392 // threshold. |
9328 float expected_jitter = | 9393 float expected_jitter = |
9329 (i == pending_tree->kFixedPointHitsThreshold) ? 500 : 0; | 9394 (i == pending_tree->kFixedPointHitsThreshold) ? 500 : 0; |
9330 EXPECT_EQ(jitter, expected_jitter); | 9395 EXPECT_EQ(jitter, expected_jitter); |
9331 } | 9396 } |
9332 } | 9397 } |
9333 | 9398 |
9334 } // namespace | 9399 } // namespace |
9335 } // namespace cc | 9400 } // namespace cc |
OLD | NEW |