Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1670)

Unified Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 365463003: Implement scroll handler latency tracking (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review comments. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}
}

Powered by Google App Engine
This is Rietveld 408576698