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 ed38144a118768265f814052be3c820990b3c2f5..5d4d524c8362a1b4a26eb0e151614c7135052057 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( |
+ 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)); |
@@ -6296,10 +6314,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() {} |
@@ -6311,24 +6331,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 |
@@ -6336,16 +6364,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); |
} |
{ |
@@ -6353,11 +6384,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); |
} |
} |