Chromium Code Reviews| Index: cc/trees/layer_tree_host_impl_unittest.cc |
| diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc |
| index 90c0a579488be3f289325796bc645bef2a865cb1..de6d575322ff07420ee0c55a0d9d396140ea311d 100644 |
| --- a/cc/trees/layer_tree_host_impl_unittest.cc |
| +++ b/cc/trees/layer_tree_host_impl_unittest.cc |
| @@ -971,6 +971,24 @@ TEST_F(LayerTreeHostImplTest, ImplPinchZoom) { |
| } |
| } |
| +TEST_F(LayerTreeHostImplTest, ScrollWithLatencyInfo) { |
| + ui::LatencyInfo latency_info; |
| + latency_info.AddLatencyNumber( |
| + ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT, 0, 0); |
| + |
| + SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
| + EXPECT_EQ(InputHandler::ScrollStarted, |
| + host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
| + host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)); |
| + host_impl_->QueueScrollUpdateLatencyInfo(latency_info); |
| + host_impl_->ScrollEnd(); |
| + |
| + scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); |
| + ASSERT_EQ(scroll_info->latency_infos.size(), 1u); |
| + ASSERT_TRUE(scroll_info->latency_infos[0].FindLatency( |
|
danakj
2014/07/08 16:49:07
use EXPECT
Sami
2014/07/09 13:28:55
Done.
|
| + ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT, 0, 0)); |
| +} |
| + |
| TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) { |
| SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
| host_impl_->SetViewportSize(gfx::Size(50, 50)); |
| @@ -6349,10 +6367,12 @@ class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { |
| SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, |
| LayerTreeHostImpl* layer_tree_host_impl, |
| int* set_needs_commit_count, |
| - int* set_needs_redraw_count) |
| + int* set_needs_redraw_count, |
| + int* forward_to_main_count) |
| : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), |
| set_needs_commit_count_(set_needs_commit_count), |
| - set_needs_redraw_count_(set_needs_redraw_count) {} |
| + set_needs_redraw_count_(set_needs_redraw_count), |
| + forward_to_main_count_(forward_to_main_count) {} |
| virtual ~SimpleSwapPromiseMonitor() {} |
| @@ -6364,24 +6384,32 @@ class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { |
| (*set_needs_redraw_count_)++; |
| } |
| + virtual void OnForwardScrollUpdateToMainThreadOnImpl() OVERRIDE { |
| + (*forward_to_main_count_)++; |
| + } |
| + |
| private: |
| int* set_needs_commit_count_; |
| int* set_needs_redraw_count_; |
| + int* forward_to_main_count_; |
| }; |
| TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { |
| int set_needs_commit_count = 0; |
| int set_needs_redraw_count = 0; |
| + int forward_to_main_count = 0; |
| { |
| scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
| new SimpleSwapPromiseMonitor(NULL, |
| host_impl_.get(), |
| &set_needs_commit_count, |
| - &set_needs_redraw_count)); |
| + &set_needs_redraw_count, |
| + &forward_to_main_count)); |
| host_impl_->SetNeedsRedraw(); |
| EXPECT_EQ(0, set_needs_commit_count); |
| EXPECT_EQ(1, set_needs_redraw_count); |
| + EXPECT_EQ(0, forward_to_main_count); |
| } |
| // Now the monitor is destroyed, SetNeedsRedraw() is no longer being |
| @@ -6389,16 +6417,19 @@ TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { |
| host_impl_->SetNeedsRedraw(); |
| EXPECT_EQ(0, set_needs_commit_count); |
| EXPECT_EQ(1, set_needs_redraw_count); |
| + EXPECT_EQ(0, forward_to_main_count); |
| { |
| scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
| new SimpleSwapPromiseMonitor(NULL, |
| host_impl_.get(), |
| &set_needs_commit_count, |
| - &set_needs_redraw_count)); |
| + &set_needs_redraw_count, |
| + &forward_to_main_count)); |
| host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10)); |
| EXPECT_EQ(0, set_needs_commit_count); |
| EXPECT_EQ(2, set_needs_redraw_count); |
| + EXPECT_EQ(0, forward_to_main_count); |
| } |
| { |
| @@ -6406,11 +6437,48 @@ TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { |
| new SimpleSwapPromiseMonitor(NULL, |
| host_impl_.get(), |
| &set_needs_commit_count, |
| - &set_needs_redraw_count)); |
| + &set_needs_redraw_count, |
| + &forward_to_main_count)); |
| // Empty damage rect won't signal the monitor. |
| host_impl_->SetNeedsRedrawRect(gfx::Rect()); |
| EXPECT_EQ(0, set_needs_commit_count); |
| EXPECT_EQ(2, set_needs_redraw_count); |
| + EXPECT_EQ(0, forward_to_main_count); |
| + } |
| + |
| + { |
| + set_needs_commit_count = 0; |
| + set_needs_redraw_count = 0; |
| + forward_to_main_count = 0; |
| + scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
| + new SimpleSwapPromiseMonitor(NULL, |
| + host_impl_.get(), |
| + &set_needs_commit_count, |
| + &set_needs_redraw_count, |
| + &forward_to_main_count)); |
| + LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
| + |
| + // Scrolling normally should not trigger any forwarding. |
| + EXPECT_EQ(InputHandler::ScrollStarted, |
| + host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
| + EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10))); |
| + host_impl_->ScrollEnd(); |
| + |
| + EXPECT_EQ(0, set_needs_commit_count); |
| + EXPECT_EQ(1, set_needs_redraw_count); |
| + EXPECT_EQ(0, forward_to_main_count); |
| + |
| + // Scrolling with a scroll handler should defer the swap to the main |
| + // thread. |
| + scroll_layer->SetHaveScrollEventHandlers(true); |
| + EXPECT_EQ(InputHandler::ScrollStarted, |
| + host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
| + EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10))); |
| + host_impl_->ScrollEnd(); |
| + |
| + EXPECT_EQ(0, set_needs_commit_count); |
| + EXPECT_EQ(2, set_needs_redraw_count); |
| + EXPECT_EQ(1, forward_to_main_count); |
| } |
| } |