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

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: 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 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, ScrollWithSwapPromises) {
975 ui::LatencyInfo latency_info;
976 latency_info.AddLatencyNumber(
977 ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT, 0, 0);
978 scoped_ptr<LatencyInfoSwapPromise> swap_promise(
979 new LatencyInfoSwapPromise(latency_info));
980
981 SetupScrollAndContentsLayers(gfx::Size(100, 100));
982 EXPECT_EQ(InputHandler::ScrollStarted,
983 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
984 host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10));
985 host_impl_->QueueSwapPromiseForMainThreadScrollUpdate(swap_promise.Pass());
986 host_impl_->ScrollEnd();
987
988 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas();
989 EXPECT_EQ(scroll_info->swap_promises.size(), 1u);
990 EXPECT_TRUE(scroll_info->swap_promises[0]->latency_info().FindLatency(
991 ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT, 0, 0));
992 }
993
974 TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) { 994 TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) {
975 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 995 SetupScrollAndContentsLayers(gfx::Size(100, 100));
976 host_impl_->SetViewportSize(gfx::Size(50, 50)); 996 host_impl_->SetViewportSize(gfx::Size(50, 50));
977 DrawFrame(); 997 DrawFrame();
978 998
979 LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer(); 999 LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer();
980 LayerImpl* container_layer = scroll_layer->scroll_clip_layer(); 1000 LayerImpl* container_layer = scroll_layer->scroll_clip_layer();
981 DCHECK(scroll_layer); 1001 DCHECK(scroll_layer);
982 1002
983 float min_page_scale = 1.f; 1003 float min_page_scale = 1.f;
(...skipping 5358 matching lines...) Expand 10 before | Expand all | Expand 10 after
6342 EXPECT_EQ(selection_rect, selection_anchor_after.viewport_rect); 6362 EXPECT_EQ(selection_rect, selection_anchor_after.viewport_rect);
6343 EXPECT_TRUE(selection_anchor_after.visible); 6363 EXPECT_TRUE(selection_anchor_after.visible);
6344 EXPECT_TRUE(selection_anchor_after.visible); 6364 EXPECT_TRUE(selection_anchor_after.visible);
6345 } 6365 }
6346 6366
6347 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { 6367 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor {
6348 public: 6368 public:
6349 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, 6369 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host,
6350 LayerTreeHostImpl* layer_tree_host_impl, 6370 LayerTreeHostImpl* layer_tree_host_impl,
6351 int* set_needs_commit_count, 6371 int* set_needs_commit_count,
6352 int* set_needs_redraw_count) 6372 int* set_needs_redraw_count,
6373 int* forward_to_main_count)
6353 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), 6374 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl),
6354 set_needs_commit_count_(set_needs_commit_count), 6375 set_needs_commit_count_(set_needs_commit_count),
6355 set_needs_redraw_count_(set_needs_redraw_count) {} 6376 set_needs_redraw_count_(set_needs_redraw_count),
6377 forward_to_main_count_(forward_to_main_count) {}
6356 6378
6357 virtual ~SimpleSwapPromiseMonitor() {} 6379 virtual ~SimpleSwapPromiseMonitor() {}
6358 6380
6359 virtual void OnSetNeedsCommitOnMain() OVERRIDE { 6381 virtual void OnSetNeedsCommitOnMain() OVERRIDE {
6360 (*set_needs_commit_count_)++; 6382 (*set_needs_commit_count_)++;
6361 } 6383 }
6362 6384
6363 virtual void OnSetNeedsRedrawOnImpl() OVERRIDE { 6385 virtual void OnSetNeedsRedrawOnImpl() OVERRIDE {
6364 (*set_needs_redraw_count_)++; 6386 (*set_needs_redraw_count_)++;
6365 } 6387 }
6366 6388
6389 virtual void OnForwardScrollUpdateToMainThreadOnImpl() OVERRIDE {
6390 (*forward_to_main_count_)++;
6391 }
6392
6367 private: 6393 private:
6368 int* set_needs_commit_count_; 6394 int* set_needs_commit_count_;
6369 int* set_needs_redraw_count_; 6395 int* set_needs_redraw_count_;
6396 int* forward_to_main_count_;
6370 }; 6397 };
6371 6398
6372 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { 6399 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) {
6373 int set_needs_commit_count = 0; 6400 int set_needs_commit_count = 0;
6374 int set_needs_redraw_count = 0; 6401 int set_needs_redraw_count = 0;
6402 int forward_to_main_count = 0;
6375 6403
6376 { 6404 {
6377 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( 6405 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
6378 new SimpleSwapPromiseMonitor(NULL, 6406 new SimpleSwapPromiseMonitor(NULL,
6379 host_impl_.get(), 6407 host_impl_.get(),
6380 &set_needs_commit_count, 6408 &set_needs_commit_count,
6381 &set_needs_redraw_count)); 6409 &set_needs_redraw_count,
6410 &forward_to_main_count));
6382 host_impl_->SetNeedsRedraw(); 6411 host_impl_->SetNeedsRedraw();
6383 EXPECT_EQ(0, set_needs_commit_count); 6412 EXPECT_EQ(0, set_needs_commit_count);
6384 EXPECT_EQ(1, set_needs_redraw_count); 6413 EXPECT_EQ(1, set_needs_redraw_count);
6414 EXPECT_EQ(0, forward_to_main_count);
6385 } 6415 }
6386 6416
6387 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being 6417 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being
6388 // monitored. 6418 // monitored.
6389 host_impl_->SetNeedsRedraw(); 6419 host_impl_->SetNeedsRedraw();
6390 EXPECT_EQ(0, set_needs_commit_count); 6420 EXPECT_EQ(0, set_needs_commit_count);
6391 EXPECT_EQ(1, set_needs_redraw_count); 6421 EXPECT_EQ(1, set_needs_redraw_count);
6422 EXPECT_EQ(0, forward_to_main_count);
6392 6423
6393 { 6424 {
6394 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( 6425 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
6395 new SimpleSwapPromiseMonitor(NULL, 6426 new SimpleSwapPromiseMonitor(NULL,
6396 host_impl_.get(), 6427 host_impl_.get(),
6397 &set_needs_commit_count, 6428 &set_needs_commit_count,
6398 &set_needs_redraw_count)); 6429 &set_needs_redraw_count,
6430 &forward_to_main_count));
6399 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10)); 6431 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10));
6400 EXPECT_EQ(0, set_needs_commit_count); 6432 EXPECT_EQ(0, set_needs_commit_count);
6401 EXPECT_EQ(2, set_needs_redraw_count); 6433 EXPECT_EQ(2, set_needs_redraw_count);
6434 EXPECT_EQ(0, forward_to_main_count);
6402 } 6435 }
6403 6436
6404 { 6437 {
6405 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( 6438 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
6406 new SimpleSwapPromiseMonitor(NULL, 6439 new SimpleSwapPromiseMonitor(NULL,
6407 host_impl_.get(), 6440 host_impl_.get(),
6408 &set_needs_commit_count, 6441 &set_needs_commit_count,
6409 &set_needs_redraw_count)); 6442 &set_needs_redraw_count,
6443 &forward_to_main_count));
6410 // Empty damage rect won't signal the monitor. 6444 // Empty damage rect won't signal the monitor.
6411 host_impl_->SetNeedsRedrawRect(gfx::Rect()); 6445 host_impl_->SetNeedsRedrawRect(gfx::Rect());
6412 EXPECT_EQ(0, set_needs_commit_count); 6446 EXPECT_EQ(0, set_needs_commit_count);
6413 EXPECT_EQ(2, set_needs_redraw_count); 6447 EXPECT_EQ(2, set_needs_redraw_count);
6448 EXPECT_EQ(0, forward_to_main_count);
6449 }
6450
6451 {
6452 set_needs_commit_count = 0;
6453 set_needs_redraw_count = 0;
6454 forward_to_main_count = 0;
6455 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
6456 new SimpleSwapPromiseMonitor(NULL,
6457 host_impl_.get(),
6458 &set_needs_commit_count,
6459 &set_needs_redraw_count,
6460 &forward_to_main_count));
6461 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100));
6462
6463 // Scrolling normally should not trigger any forwarding.
6464 EXPECT_EQ(InputHandler::ScrollStarted,
6465 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
6466 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)));
6467 host_impl_->ScrollEnd();
6468
6469 EXPECT_EQ(0, set_needs_commit_count);
6470 EXPECT_EQ(1, set_needs_redraw_count);
6471 EXPECT_EQ(0, forward_to_main_count);
6472
6473 // Scrolling with a scroll handler should defer the swap to the main
6474 // thread.
6475 scroll_layer->SetHaveScrollEventHandlers(true);
6476 EXPECT_EQ(InputHandler::ScrollStarted,
6477 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
6478 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)));
6479 host_impl_->ScrollEnd();
6480
6481 EXPECT_EQ(0, set_needs_commit_count);
6482 EXPECT_EQ(2, set_needs_redraw_count);
6483 EXPECT_EQ(1, forward_to_main_count);
6414 } 6484 }
6415 } 6485 }
6416 6486
6417 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { 6487 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest {
6418 public: 6488 public:
6419 virtual void SetUp() OVERRIDE { 6489 virtual void SetUp() OVERRIDE {
6420 LayerTreeSettings settings = DefaultSettings(); 6490 LayerTreeSettings settings = DefaultSettings();
6421 settings.calculate_top_controls_position = true; 6491 settings.calculate_top_controls_position = true;
6422 settings.top_controls_height = top_controls_height_; 6492 settings.top_controls_height = top_controls_height_;
6423 CreateHostImpl(settings, CreateOutputSurface()); 6493 CreateHostImpl(settings, CreateOutputSurface());
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
6650 external_viewport, 6720 external_viewport,
6651 external_clip, 6721 external_clip,
6652 valid_for_tile_management); 6722 valid_for_tile_management);
6653 DrawFrame(); 6723 DrawFrame();
6654 EXPECT_TRANSFORMATION_MATRIX_EQ( 6724 EXPECT_TRANSFORMATION_MATRIX_EQ(
6655 external_transform, layer->draw_properties().target_space_transform); 6725 external_transform, layer->draw_properties().target_space_transform);
6656 } 6726 }
6657 6727
6658 } // namespace 6728 } // namespace
6659 } // namespace cc 6729 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698