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); |
} |
} |