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