| 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 954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 965 host_impl_->ScrollEnd(); | 965 host_impl_->ScrollEnd(); |
| 966 | 966 |
| 967 scoped_ptr<ScrollAndScaleSet> scroll_info = | 967 scoped_ptr<ScrollAndScaleSet> scroll_info = |
| 968 host_impl_->ProcessScrollDeltas(); | 968 host_impl_->ProcessScrollDeltas(); |
| 969 ExpectContains(*scroll_info.get(), | 969 ExpectContains(*scroll_info.get(), |
| 970 scroll_layer->id(), | 970 scroll_layer->id(), |
| 971 scroll_delta); | 971 scroll_delta); |
| 972 } | 972 } |
| 973 } | 973 } |
| 974 | 974 |
| 975 TEST_F(LayerTreeHostImplTest, ScrollWithSwapPromises) { | |
| 976 ui::LatencyInfo latency_info; | |
| 977 latency_info.trace_id = 1234; | |
| 978 scoped_ptr<SwapPromise> 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(1u, scroll_info->swap_promises.size()); | |
| 990 EXPECT_EQ(latency_info.trace_id, scroll_info->swap_promises[0]->TraceId()); | |
| 991 } | |
| 992 | |
| 993 TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) { | 975 TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) { |
| 994 SetupScrollAndContentsLayers(gfx::Size(100, 100)); | 976 SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
| 995 host_impl_->SetViewportSize(gfx::Size(50, 50)); | 977 host_impl_->SetViewportSize(gfx::Size(50, 50)); |
| 996 DrawFrame(); | 978 DrawFrame(); |
| 997 | 979 |
| 998 LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer(); | 980 LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer(); |
| 999 LayerImpl* container_layer = scroll_layer->scroll_clip_layer(); | 981 LayerImpl* container_layer = scroll_layer->scroll_clip_layer(); |
| 1000 DCHECK(scroll_layer); | 982 DCHECK(scroll_layer); |
| 1001 | 983 |
| 1002 float min_page_scale = 1.f; | 984 float min_page_scale = 1.f; |
| (...skipping 5375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6378 EXPECT_EQ(selection_rect, selection_start_after.viewport_rect); | 6360 EXPECT_EQ(selection_rect, selection_start_after.viewport_rect); |
| 6379 EXPECT_TRUE(selection_start_after.visible); | 6361 EXPECT_TRUE(selection_start_after.visible); |
| 6380 EXPECT_TRUE(selection_start_after.visible); | 6362 EXPECT_TRUE(selection_start_after.visible); |
| 6381 } | 6363 } |
| 6382 | 6364 |
| 6383 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { | 6365 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { |
| 6384 public: | 6366 public: |
| 6385 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, | 6367 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, |
| 6386 LayerTreeHostImpl* layer_tree_host_impl, | 6368 LayerTreeHostImpl* layer_tree_host_impl, |
| 6387 int* set_needs_commit_count, | 6369 int* set_needs_commit_count, |
| 6388 int* set_needs_redraw_count, | 6370 int* set_needs_redraw_count) |
| 6389 int* forward_to_main_count) | |
| 6390 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), | 6371 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), |
| 6391 set_needs_commit_count_(set_needs_commit_count), | 6372 set_needs_commit_count_(set_needs_commit_count), |
| 6392 set_needs_redraw_count_(set_needs_redraw_count), | 6373 set_needs_redraw_count_(set_needs_redraw_count) {} |
| 6393 forward_to_main_count_(forward_to_main_count) {} | |
| 6394 | 6374 |
| 6395 virtual ~SimpleSwapPromiseMonitor() {} | 6375 virtual ~SimpleSwapPromiseMonitor() {} |
| 6396 | 6376 |
| 6397 virtual void OnSetNeedsCommitOnMain() OVERRIDE { | 6377 virtual void OnSetNeedsCommitOnMain() OVERRIDE { |
| 6398 (*set_needs_commit_count_)++; | 6378 (*set_needs_commit_count_)++; |
| 6399 } | 6379 } |
| 6400 | 6380 |
| 6401 virtual void OnSetNeedsRedrawOnImpl() OVERRIDE { | 6381 virtual void OnSetNeedsRedrawOnImpl() OVERRIDE { |
| 6402 (*set_needs_redraw_count_)++; | 6382 (*set_needs_redraw_count_)++; |
| 6403 } | 6383 } |
| 6404 | 6384 |
| 6405 virtual void OnForwardScrollUpdateToMainThreadOnImpl() OVERRIDE { | |
| 6406 (*forward_to_main_count_)++; | |
| 6407 } | |
| 6408 | |
| 6409 private: | 6385 private: |
| 6410 int* set_needs_commit_count_; | 6386 int* set_needs_commit_count_; |
| 6411 int* set_needs_redraw_count_; | 6387 int* set_needs_redraw_count_; |
| 6412 int* forward_to_main_count_; | |
| 6413 }; | 6388 }; |
| 6414 | 6389 |
| 6415 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { | 6390 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { |
| 6416 int set_needs_commit_count = 0; | 6391 int set_needs_commit_count = 0; |
| 6417 int set_needs_redraw_count = 0; | 6392 int set_needs_redraw_count = 0; |
| 6418 int forward_to_main_count = 0; | |
| 6419 | 6393 |
| 6420 { | 6394 { |
| 6421 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | 6395 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
| 6422 new SimpleSwapPromiseMonitor(NULL, | 6396 new SimpleSwapPromiseMonitor(NULL, |
| 6423 host_impl_.get(), | 6397 host_impl_.get(), |
| 6424 &set_needs_commit_count, | 6398 &set_needs_commit_count, |
| 6425 &set_needs_redraw_count, | 6399 &set_needs_redraw_count)); |
| 6426 &forward_to_main_count)); | |
| 6427 host_impl_->SetNeedsRedraw(); | 6400 host_impl_->SetNeedsRedraw(); |
| 6428 EXPECT_EQ(0, set_needs_commit_count); | 6401 EXPECT_EQ(0, set_needs_commit_count); |
| 6429 EXPECT_EQ(1, set_needs_redraw_count); | 6402 EXPECT_EQ(1, set_needs_redraw_count); |
| 6430 EXPECT_EQ(0, forward_to_main_count); | |
| 6431 } | 6403 } |
| 6432 | 6404 |
| 6433 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being | 6405 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being |
| 6434 // monitored. | 6406 // monitored. |
| 6435 host_impl_->SetNeedsRedraw(); | 6407 host_impl_->SetNeedsRedraw(); |
| 6436 EXPECT_EQ(0, set_needs_commit_count); | 6408 EXPECT_EQ(0, set_needs_commit_count); |
| 6437 EXPECT_EQ(1, set_needs_redraw_count); | 6409 EXPECT_EQ(1, set_needs_redraw_count); |
| 6438 EXPECT_EQ(0, forward_to_main_count); | |
| 6439 | 6410 |
| 6440 { | 6411 { |
| 6441 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | 6412 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
| 6442 new SimpleSwapPromiseMonitor(NULL, | 6413 new SimpleSwapPromiseMonitor(NULL, |
| 6443 host_impl_.get(), | 6414 host_impl_.get(), |
| 6444 &set_needs_commit_count, | 6415 &set_needs_commit_count, |
| 6445 &set_needs_redraw_count, | 6416 &set_needs_redraw_count)); |
| 6446 &forward_to_main_count)); | |
| 6447 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10)); | 6417 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10)); |
| 6448 EXPECT_EQ(0, set_needs_commit_count); | 6418 EXPECT_EQ(0, set_needs_commit_count); |
| 6449 EXPECT_EQ(2, set_needs_redraw_count); | 6419 EXPECT_EQ(2, set_needs_redraw_count); |
| 6450 EXPECT_EQ(0, forward_to_main_count); | |
| 6451 } | 6420 } |
| 6452 | 6421 |
| 6453 { | 6422 { |
| 6454 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | 6423 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
| 6455 new SimpleSwapPromiseMonitor(NULL, | 6424 new SimpleSwapPromiseMonitor(NULL, |
| 6456 host_impl_.get(), | 6425 host_impl_.get(), |
| 6457 &set_needs_commit_count, | 6426 &set_needs_commit_count, |
| 6458 &set_needs_redraw_count, | 6427 &set_needs_redraw_count)); |
| 6459 &forward_to_main_count)); | |
| 6460 // Empty damage rect won't signal the monitor. | 6428 // Empty damage rect won't signal the monitor. |
| 6461 host_impl_->SetNeedsRedrawRect(gfx::Rect()); | 6429 host_impl_->SetNeedsRedrawRect(gfx::Rect()); |
| 6462 EXPECT_EQ(0, set_needs_commit_count); | 6430 EXPECT_EQ(0, set_needs_commit_count); |
| 6463 EXPECT_EQ(2, set_needs_redraw_count); | 6431 EXPECT_EQ(2, set_needs_redraw_count); |
| 6464 EXPECT_EQ(0, forward_to_main_count); | |
| 6465 } | |
| 6466 | |
| 6467 { | |
| 6468 set_needs_commit_count = 0; | |
| 6469 set_needs_redraw_count = 0; | |
| 6470 forward_to_main_count = 0; | |
| 6471 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | |
| 6472 new SimpleSwapPromiseMonitor(NULL, | |
| 6473 host_impl_.get(), | |
| 6474 &set_needs_commit_count, | |
| 6475 &set_needs_redraw_count, | |
| 6476 &forward_to_main_count)); | |
| 6477 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100)); | |
| 6478 | |
| 6479 // Scrolling normally should not trigger any forwarding. | |
| 6480 EXPECT_EQ(InputHandler::ScrollStarted, | |
| 6481 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | |
| 6482 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10))); | |
| 6483 host_impl_->ScrollEnd(); | |
| 6484 | |
| 6485 EXPECT_EQ(0, set_needs_commit_count); | |
| 6486 EXPECT_EQ(1, set_needs_redraw_count); | |
| 6487 EXPECT_EQ(0, forward_to_main_count); | |
| 6488 | |
| 6489 // Scrolling with a scroll handler should defer the swap to the main | |
| 6490 // thread. | |
| 6491 scroll_layer->SetHaveScrollEventHandlers(true); | |
| 6492 EXPECT_EQ(InputHandler::ScrollStarted, | |
| 6493 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | |
| 6494 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10))); | |
| 6495 host_impl_->ScrollEnd(); | |
| 6496 | |
| 6497 EXPECT_EQ(0, set_needs_commit_count); | |
| 6498 EXPECT_EQ(2, set_needs_redraw_count); | |
| 6499 EXPECT_EQ(1, forward_to_main_count); | |
| 6500 } | 6432 } |
| 6501 } | 6433 } |
| 6502 | 6434 |
| 6503 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { | 6435 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { |
| 6504 public: | 6436 public: |
| 6505 virtual void SetUp() OVERRIDE { | 6437 virtual void SetUp() OVERRIDE { |
| 6506 LayerTreeSettings settings = DefaultSettings(); | 6438 LayerTreeSettings settings = DefaultSettings(); |
| 6507 settings.calculate_top_controls_position = true; | 6439 settings.calculate_top_controls_position = true; |
| 6508 settings.top_controls_height = top_controls_height_; | 6440 settings.top_controls_height = top_controls_height_; |
| 6509 CreateHostImpl(settings, CreateOutputSurface()); | 6441 CreateHostImpl(settings, CreateOutputSurface()); |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6827 layer_pairs.clear(); | 6759 layer_pairs.clear(); |
| 6828 host_impl_->GetPictureLayerImplPairs(&layer_pairs); | 6760 host_impl_->GetPictureLayerImplPairs(&layer_pairs); |
| 6829 EXPECT_EQ(1u, layer_pairs.size()); | 6761 EXPECT_EQ(1u, layer_pairs.size()); |
| 6830 | 6762 |
| 6831 EXPECT_EQ(active_layer.get(), layer_pairs[0].active); | 6763 EXPECT_EQ(active_layer.get(), layer_pairs[0].active); |
| 6832 EXPECT_EQ(pending_layer.get(), layer_pairs[0].pending); | 6764 EXPECT_EQ(pending_layer.get(), layer_pairs[0].pending); |
| 6833 } | 6765 } |
| 6834 | 6766 |
| 6835 } // namespace | 6767 } // namespace |
| 6836 } // namespace cc | 6768 } // namespace cc |
| OLD | NEW |