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 <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 953 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
964 host_impl_->ScrollEnd(); | 964 host_impl_->ScrollEnd(); |
965 | 965 |
966 scoped_ptr<ScrollAndScaleSet> scroll_info = | 966 scoped_ptr<ScrollAndScaleSet> scroll_info = |
967 host_impl_->ProcessScrollDeltas(); | 967 host_impl_->ProcessScrollDeltas(); |
968 ExpectContains(*scroll_info.get(), | 968 ExpectContains(*scroll_info.get(), |
969 scroll_layer->id(), | 969 scroll_layer->id(), |
970 scroll_delta); | 970 scroll_delta); |
971 } | 971 } |
972 } | 972 } |
973 | 973 |
| 974 TEST_F(LayerTreeHostImplTest, ScrollWithSwapPromises) { |
| 975 ui::LatencyInfo latency_info; |
| 976 latency_info.AddLatencyNumber( |
| 977 ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT, 0, 0); |
| 978 scoped_ptr<LatencyInfoSwapPromise> swap_promise( |
| 979 new LatencyInfoSwapPromise(latency_info)); |
| 980 |
| 981 SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
| 982 EXPECT_EQ(InputHandler::ScrollStarted, |
| 983 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
| 984 host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)); |
| 985 host_impl_->QueueSwapPromiseForMainThreadScrollUpdate(swap_promise.Pass()); |
| 986 host_impl_->ScrollEnd(); |
| 987 |
| 988 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); |
| 989 EXPECT_EQ(scroll_info->swap_promises.size(), 1u); |
| 990 EXPECT_TRUE(scroll_info->swap_promises[0]->latency_info().FindLatency( |
| 991 ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT, 0, 0)); |
| 992 } |
| 993 |
974 TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) { | 994 TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) { |
975 SetupScrollAndContentsLayers(gfx::Size(100, 100)); | 995 SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
976 host_impl_->SetViewportSize(gfx::Size(50, 50)); | 996 host_impl_->SetViewportSize(gfx::Size(50, 50)); |
977 DrawFrame(); | 997 DrawFrame(); |
978 | 998 |
979 LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer(); | 999 LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer(); |
980 LayerImpl* container_layer = scroll_layer->scroll_clip_layer(); | 1000 LayerImpl* container_layer = scroll_layer->scroll_clip_layer(); |
981 DCHECK(scroll_layer); | 1001 DCHECK(scroll_layer); |
982 | 1002 |
983 float min_page_scale = 1.f; | 1003 float min_page_scale = 1.f; |
(...skipping 5358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6342 EXPECT_EQ(selection_rect, selection_anchor_after.viewport_rect); | 6362 EXPECT_EQ(selection_rect, selection_anchor_after.viewport_rect); |
6343 EXPECT_TRUE(selection_anchor_after.visible); | 6363 EXPECT_TRUE(selection_anchor_after.visible); |
6344 EXPECT_TRUE(selection_anchor_after.visible); | 6364 EXPECT_TRUE(selection_anchor_after.visible); |
6345 } | 6365 } |
6346 | 6366 |
6347 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { | 6367 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { |
6348 public: | 6368 public: |
6349 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, | 6369 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, |
6350 LayerTreeHostImpl* layer_tree_host_impl, | 6370 LayerTreeHostImpl* layer_tree_host_impl, |
6351 int* set_needs_commit_count, | 6371 int* set_needs_commit_count, |
6352 int* set_needs_redraw_count) | 6372 int* set_needs_redraw_count, |
| 6373 int* forward_to_main_count) |
6353 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), | 6374 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), |
6354 set_needs_commit_count_(set_needs_commit_count), | 6375 set_needs_commit_count_(set_needs_commit_count), |
6355 set_needs_redraw_count_(set_needs_redraw_count) {} | 6376 set_needs_redraw_count_(set_needs_redraw_count), |
| 6377 forward_to_main_count_(forward_to_main_count) {} |
6356 | 6378 |
6357 virtual ~SimpleSwapPromiseMonitor() {} | 6379 virtual ~SimpleSwapPromiseMonitor() {} |
6358 | 6380 |
6359 virtual void OnSetNeedsCommitOnMain() OVERRIDE { | 6381 virtual void OnSetNeedsCommitOnMain() OVERRIDE { |
6360 (*set_needs_commit_count_)++; | 6382 (*set_needs_commit_count_)++; |
6361 } | 6383 } |
6362 | 6384 |
6363 virtual void OnSetNeedsRedrawOnImpl() OVERRIDE { | 6385 virtual void OnSetNeedsRedrawOnImpl() OVERRIDE { |
6364 (*set_needs_redraw_count_)++; | 6386 (*set_needs_redraw_count_)++; |
6365 } | 6387 } |
6366 | 6388 |
| 6389 virtual void OnForwardScrollUpdateToMainThreadOnImpl() OVERRIDE { |
| 6390 (*forward_to_main_count_)++; |
| 6391 } |
| 6392 |
6367 private: | 6393 private: |
6368 int* set_needs_commit_count_; | 6394 int* set_needs_commit_count_; |
6369 int* set_needs_redraw_count_; | 6395 int* set_needs_redraw_count_; |
| 6396 int* forward_to_main_count_; |
6370 }; | 6397 }; |
6371 | 6398 |
6372 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { | 6399 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { |
6373 int set_needs_commit_count = 0; | 6400 int set_needs_commit_count = 0; |
6374 int set_needs_redraw_count = 0; | 6401 int set_needs_redraw_count = 0; |
| 6402 int forward_to_main_count = 0; |
6375 | 6403 |
6376 { | 6404 { |
6377 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | 6405 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
6378 new SimpleSwapPromiseMonitor(NULL, | 6406 new SimpleSwapPromiseMonitor(NULL, |
6379 host_impl_.get(), | 6407 host_impl_.get(), |
6380 &set_needs_commit_count, | 6408 &set_needs_commit_count, |
6381 &set_needs_redraw_count)); | 6409 &set_needs_redraw_count, |
| 6410 &forward_to_main_count)); |
6382 host_impl_->SetNeedsRedraw(); | 6411 host_impl_->SetNeedsRedraw(); |
6383 EXPECT_EQ(0, set_needs_commit_count); | 6412 EXPECT_EQ(0, set_needs_commit_count); |
6384 EXPECT_EQ(1, set_needs_redraw_count); | 6413 EXPECT_EQ(1, set_needs_redraw_count); |
| 6414 EXPECT_EQ(0, forward_to_main_count); |
6385 } | 6415 } |
6386 | 6416 |
6387 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being | 6417 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being |
6388 // monitored. | 6418 // monitored. |
6389 host_impl_->SetNeedsRedraw(); | 6419 host_impl_->SetNeedsRedraw(); |
6390 EXPECT_EQ(0, set_needs_commit_count); | 6420 EXPECT_EQ(0, set_needs_commit_count); |
6391 EXPECT_EQ(1, set_needs_redraw_count); | 6421 EXPECT_EQ(1, set_needs_redraw_count); |
| 6422 EXPECT_EQ(0, forward_to_main_count); |
6392 | 6423 |
6393 { | 6424 { |
6394 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | 6425 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
6395 new SimpleSwapPromiseMonitor(NULL, | 6426 new SimpleSwapPromiseMonitor(NULL, |
6396 host_impl_.get(), | 6427 host_impl_.get(), |
6397 &set_needs_commit_count, | 6428 &set_needs_commit_count, |
6398 &set_needs_redraw_count)); | 6429 &set_needs_redraw_count, |
| 6430 &forward_to_main_count)); |
6399 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10)); | 6431 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10)); |
6400 EXPECT_EQ(0, set_needs_commit_count); | 6432 EXPECT_EQ(0, set_needs_commit_count); |
6401 EXPECT_EQ(2, set_needs_redraw_count); | 6433 EXPECT_EQ(2, set_needs_redraw_count); |
| 6434 EXPECT_EQ(0, forward_to_main_count); |
6402 } | 6435 } |
6403 | 6436 |
6404 { | 6437 { |
6405 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | 6438 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
6406 new SimpleSwapPromiseMonitor(NULL, | 6439 new SimpleSwapPromiseMonitor(NULL, |
6407 host_impl_.get(), | 6440 host_impl_.get(), |
6408 &set_needs_commit_count, | 6441 &set_needs_commit_count, |
6409 &set_needs_redraw_count)); | 6442 &set_needs_redraw_count, |
| 6443 &forward_to_main_count)); |
6410 // Empty damage rect won't signal the monitor. | 6444 // Empty damage rect won't signal the monitor. |
6411 host_impl_->SetNeedsRedrawRect(gfx::Rect()); | 6445 host_impl_->SetNeedsRedrawRect(gfx::Rect()); |
6412 EXPECT_EQ(0, set_needs_commit_count); | 6446 EXPECT_EQ(0, set_needs_commit_count); |
6413 EXPECT_EQ(2, set_needs_redraw_count); | 6447 EXPECT_EQ(2, set_needs_redraw_count); |
| 6448 EXPECT_EQ(0, forward_to_main_count); |
| 6449 } |
| 6450 |
| 6451 { |
| 6452 set_needs_commit_count = 0; |
| 6453 set_needs_redraw_count = 0; |
| 6454 forward_to_main_count = 0; |
| 6455 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
| 6456 new SimpleSwapPromiseMonitor(NULL, |
| 6457 host_impl_.get(), |
| 6458 &set_needs_commit_count, |
| 6459 &set_needs_redraw_count, |
| 6460 &forward_to_main_count)); |
| 6461 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
| 6462 |
| 6463 // Scrolling normally should not trigger any forwarding. |
| 6464 EXPECT_EQ(InputHandler::ScrollStarted, |
| 6465 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
| 6466 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10))); |
| 6467 host_impl_->ScrollEnd(); |
| 6468 |
| 6469 EXPECT_EQ(0, set_needs_commit_count); |
| 6470 EXPECT_EQ(1, set_needs_redraw_count); |
| 6471 EXPECT_EQ(0, forward_to_main_count); |
| 6472 |
| 6473 // Scrolling with a scroll handler should defer the swap to the main |
| 6474 // thread. |
| 6475 scroll_layer->SetHaveScrollEventHandlers(true); |
| 6476 EXPECT_EQ(InputHandler::ScrollStarted, |
| 6477 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
| 6478 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10))); |
| 6479 host_impl_->ScrollEnd(); |
| 6480 |
| 6481 EXPECT_EQ(0, set_needs_commit_count); |
| 6482 EXPECT_EQ(2, set_needs_redraw_count); |
| 6483 EXPECT_EQ(1, forward_to_main_count); |
6414 } | 6484 } |
6415 } | 6485 } |
6416 | 6486 |
6417 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { | 6487 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { |
6418 public: | 6488 public: |
6419 virtual void SetUp() OVERRIDE { | 6489 virtual void SetUp() OVERRIDE { |
6420 LayerTreeSettings settings = DefaultSettings(); | 6490 LayerTreeSettings settings = DefaultSettings(); |
6421 settings.calculate_top_controls_position = true; | 6491 settings.calculate_top_controls_position = true; |
6422 settings.top_controls_height = top_controls_height_; | 6492 settings.top_controls_height = top_controls_height_; |
6423 CreateHostImpl(settings, CreateOutputSurface()); | 6493 CreateHostImpl(settings, CreateOutputSurface()); |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6650 external_viewport, | 6720 external_viewport, |
6651 external_clip, | 6721 external_clip, |
6652 valid_for_tile_management); | 6722 valid_for_tile_management); |
6653 DrawFrame(); | 6723 DrawFrame(); |
6654 EXPECT_TRANSFORMATION_MATRIX_EQ( | 6724 EXPECT_TRANSFORMATION_MATRIX_EQ( |
6655 external_transform, layer->draw_properties().target_space_transform); | 6725 external_transform, layer->draw_properties().target_space_transform); |
6656 } | 6726 } |
6657 | 6727 |
6658 } // namespace | 6728 } // namespace |
6659 } // namespace cc | 6729 } // namespace cc |
OLD | NEW |