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

Side by Side 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: 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 953 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 host_impl_->ScrollEnd(); 964 host_impl_->ScrollEnd();
965 965
966 scoped_ptr<ScrollAndScaleSet> scroll_info = 966 scoped_ptr<ScrollAndScaleSet> scroll_info =
967 host_impl_->ProcessScrollDeltas(); 967 host_impl_->ProcessScrollDeltas();
968 ExpectContains(*scroll_info.get(), 968 ExpectContains(*scroll_info.get(),
969 scroll_layer->id(), 969 scroll_layer->id(),
970 scroll_delta); 970 scroll_delta);
971 } 971 }
972 } 972 }
973 973
974 TEST_F(LayerTreeHostImplTest, ScrollWithLatencyInfo) {
975 ui::LatencyInfo latency_info;
976 latency_info.AddLatencyNumber(
977 ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT, 0, 0);
978
979 SetupScrollAndContentsLayers(gfx::Size(100, 100));
980 EXPECT_EQ(InputHandler::ScrollStarted,
981 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
982 host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10));
983 host_impl_->QueueScrollUpdateLatencyInfo(latency_info);
984 host_impl_->ScrollEnd();
985
986 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas();
987 ASSERT_EQ(scroll_info->latency_infos.size(), 1u);
988 ASSERT_TRUE(scroll_info->latency_infos[0].FindLatency(
989 ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT, 0, 0));
990 }
991
974 TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) { 992 TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) {
975 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 993 SetupScrollAndContentsLayers(gfx::Size(100, 100));
976 host_impl_->SetViewportSize(gfx::Size(50, 50)); 994 host_impl_->SetViewportSize(gfx::Size(50, 50));
977 DrawFrame(); 995 DrawFrame();
978 996
979 LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer(); 997 LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer();
980 LayerImpl* container_layer = scroll_layer->scroll_clip_layer(); 998 LayerImpl* container_layer = scroll_layer->scroll_clip_layer();
981 DCHECK(scroll_layer); 999 DCHECK(scroll_layer);
982 1000
983 float min_page_scale = 1.f; 1001 float min_page_scale = 1.f;
(...skipping 5305 matching lines...) Expand 10 before | Expand all | Expand 10 after
6289 EXPECT_EQ(1u, metadata_latency_after.size()); 6307 EXPECT_EQ(1u, metadata_latency_after.size());
6290 EXPECT_TRUE(metadata_latency_after[0].FindLatency( 6308 EXPECT_TRUE(metadata_latency_after[0].FindLatency(
6291 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, NULL)); 6309 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, NULL));
6292 } 6310 }
6293 6311
6294 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { 6312 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor {
6295 public: 6313 public:
6296 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, 6314 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host,
6297 LayerTreeHostImpl* layer_tree_host_impl, 6315 LayerTreeHostImpl* layer_tree_host_impl,
6298 int* set_needs_commit_count, 6316 int* set_needs_commit_count,
6299 int* set_needs_redraw_count) 6317 int* set_needs_redraw_count,
6318 int* forward_to_main_count)
6300 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), 6319 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl),
6301 set_needs_commit_count_(set_needs_commit_count), 6320 set_needs_commit_count_(set_needs_commit_count),
6302 set_needs_redraw_count_(set_needs_redraw_count) {} 6321 set_needs_redraw_count_(set_needs_redraw_count),
6322 forward_to_main_count_(forward_to_main_count) {}
6303 6323
6304 virtual ~SimpleSwapPromiseMonitor() {} 6324 virtual ~SimpleSwapPromiseMonitor() {}
6305 6325
6306 virtual void OnSetNeedsCommitOnMain() OVERRIDE { 6326 virtual void OnSetNeedsCommitOnMain() OVERRIDE {
6307 (*set_needs_commit_count_)++; 6327 (*set_needs_commit_count_)++;
6308 } 6328 }
6309 6329
6310 virtual void OnSetNeedsRedrawOnImpl() OVERRIDE { 6330 virtual void OnSetNeedsRedrawOnImpl() OVERRIDE {
6311 (*set_needs_redraw_count_)++; 6331 (*set_needs_redraw_count_)++;
6312 } 6332 }
6313 6333
6334 virtual void OnForwardScrollUpdateToMainThreadOnImpl() OVERRIDE {
6335 (*forward_to_main_count_)++;
6336 }
6337
6314 private: 6338 private:
6315 int* set_needs_commit_count_; 6339 int* set_needs_commit_count_;
6316 int* set_needs_redraw_count_; 6340 int* set_needs_redraw_count_;
6341 int* forward_to_main_count_;
6317 }; 6342 };
6318 6343
6319 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { 6344 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) {
6320 int set_needs_commit_count = 0; 6345 int set_needs_commit_count = 0;
6321 int set_needs_redraw_count = 0; 6346 int set_needs_redraw_count = 0;
6347 int forward_to_main_count = 0;
6322 6348
6323 { 6349 {
6324 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( 6350 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
6325 new SimpleSwapPromiseMonitor(NULL, 6351 new SimpleSwapPromiseMonitor(NULL,
6326 host_impl_.get(), 6352 host_impl_.get(),
6327 &set_needs_commit_count, 6353 &set_needs_commit_count,
6328 &set_needs_redraw_count)); 6354 &set_needs_redraw_count,
6355 &forward_to_main_count));
6329 host_impl_->SetNeedsRedraw(); 6356 host_impl_->SetNeedsRedraw();
6330 EXPECT_EQ(0, set_needs_commit_count); 6357 EXPECT_EQ(0, set_needs_commit_count);
6331 EXPECT_EQ(1, set_needs_redraw_count); 6358 EXPECT_EQ(1, set_needs_redraw_count);
6359 EXPECT_EQ(0, forward_to_main_count);
6332 } 6360 }
6333 6361
6334 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being 6362 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being
6335 // monitored. 6363 // monitored.
6336 host_impl_->SetNeedsRedraw(); 6364 host_impl_->SetNeedsRedraw();
6337 EXPECT_EQ(0, set_needs_commit_count); 6365 EXPECT_EQ(0, set_needs_commit_count);
6338 EXPECT_EQ(1, set_needs_redraw_count); 6366 EXPECT_EQ(1, set_needs_redraw_count);
6367 EXPECT_EQ(0, forward_to_main_count);
6339 6368
6340 { 6369 {
6341 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( 6370 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
6342 new SimpleSwapPromiseMonitor(NULL, 6371 new SimpleSwapPromiseMonitor(NULL,
6343 host_impl_.get(), 6372 host_impl_.get(),
6344 &set_needs_commit_count, 6373 &set_needs_commit_count,
6345 &set_needs_redraw_count)); 6374 &set_needs_redraw_count,
6375 &forward_to_main_count));
6346 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10)); 6376 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10));
6347 EXPECT_EQ(0, set_needs_commit_count); 6377 EXPECT_EQ(0, set_needs_commit_count);
6348 EXPECT_EQ(2, set_needs_redraw_count); 6378 EXPECT_EQ(2, set_needs_redraw_count);
6379 EXPECT_EQ(0, forward_to_main_count);
6349 } 6380 }
6350 6381
6351 { 6382 {
6352 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( 6383 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
6353 new SimpleSwapPromiseMonitor(NULL, 6384 new SimpleSwapPromiseMonitor(NULL,
6354 host_impl_.get(), 6385 host_impl_.get(),
6355 &set_needs_commit_count, 6386 &set_needs_commit_count,
6356 &set_needs_redraw_count)); 6387 &set_needs_redraw_count,
6388 &forward_to_main_count));
6357 // Empty damage rect won't signal the monitor. 6389 // Empty damage rect won't signal the monitor.
6358 host_impl_->SetNeedsRedrawRect(gfx::Rect()); 6390 host_impl_->SetNeedsRedrawRect(gfx::Rect());
6359 EXPECT_EQ(0, set_needs_commit_count); 6391 EXPECT_EQ(0, set_needs_commit_count);
6360 EXPECT_EQ(2, set_needs_redraw_count); 6392 EXPECT_EQ(2, set_needs_redraw_count);
6393 EXPECT_EQ(0, forward_to_main_count);
6394 }
6395
6396 {
6397 set_needs_commit_count = 0;
6398 set_needs_redraw_count = 0;
6399 forward_to_main_count = 0;
6400 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
6401 new SimpleSwapPromiseMonitor(NULL,
6402 host_impl_.get(),
6403 &set_needs_commit_count,
6404 &set_needs_redraw_count,
6405 &forward_to_main_count));
6406 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100));
6407
6408 // Scrolling normally should not trigger any forwarding.
6409 EXPECT_EQ(InputHandler::ScrollStarted,
6410 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
6411 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)));
6412 host_impl_->ScrollEnd();
6413
6414 EXPECT_EQ(0, set_needs_commit_count);
6415 EXPECT_EQ(1, set_needs_redraw_count);
6416 EXPECT_EQ(0, forward_to_main_count);
6417
6418 // Scrolling with a scroll handler should defer the swap to the main
6419 // thread.
6420 scroll_layer->SetHaveScrollEventHandlers(true);
6421 EXPECT_EQ(InputHandler::ScrollStarted,
6422 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
6423 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)));
6424 host_impl_->ScrollEnd();
6425
6426 EXPECT_EQ(0, set_needs_commit_count);
6427 EXPECT_EQ(2, set_needs_redraw_count);
6428 EXPECT_EQ(1, forward_to_main_count);
6361 } 6429 }
6362 } 6430 }
6363 6431
6364 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { 6432 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest {
6365 public: 6433 public:
6366 virtual void SetUp() OVERRIDE { 6434 virtual void SetUp() OVERRIDE {
6367 LayerTreeSettings settings = DefaultSettings(); 6435 LayerTreeSettings settings = DefaultSettings();
6368 settings.calculate_top_controls_position = true; 6436 settings.calculate_top_controls_position = true;
6369 settings.top_controls_height = top_controls_height_; 6437 settings.top_controls_height = top_controls_height_;
6370 CreateHostImpl(settings, CreateOutputSurface()); 6438 CreateHostImpl(settings, CreateOutputSurface());
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
6597 external_viewport, 6665 external_viewport,
6598 external_clip, 6666 external_clip,
6599 valid_for_tile_management); 6667 valid_for_tile_management);
6600 DrawFrame(); 6668 DrawFrame();
6601 EXPECT_TRANSFORMATION_MATRIX_EQ( 6669 EXPECT_TRANSFORMATION_MATRIX_EQ(
6602 external_transform, layer->draw_properties().target_space_transform); 6670 external_transform, layer->draw_properties().target_space_transform);
6603 } 6671 }
6604 6672
6605 } // namespace 6673 } // namespace
6606 } // namespace cc 6674 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698