OLD | NEW |
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 954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
965 host_impl_->ScrollEnd(); | 965 host_impl_->ScrollEnd(); |
966 | 966 |
967 scoped_ptr<ScrollAndScaleSet> scroll_info = | 967 scoped_ptr<ScrollAndScaleSet> scroll_info = |
968 host_impl_->ProcessScrollDeltas(); | 968 host_impl_->ProcessScrollDeltas(); |
969 ExpectContains(*scroll_info.get(), | 969 ExpectContains(*scroll_info.get(), |
970 scroll_layer->id(), | 970 scroll_layer->id(), |
971 scroll_delta); | 971 scroll_delta); |
972 } | 972 } |
973 } | 973 } |
974 | 974 |
975 TEST_F(LayerTreeHostImplTest, ScrollWithSwapPromises) { | |
976 ui::LatencyInfo latency_info; | |
977 latency_info.trace_id = 1234; | |
978 scoped_ptr<SwapPromise> 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(1u, scroll_info->swap_promises.size()); | |
990 EXPECT_EQ(latency_info.trace_id, scroll_info->swap_promises[0]->TraceId()); | |
991 } | |
992 | |
993 TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) { | 975 TEST_F(LayerTreeHostImplTest, MasksToBoundsDoesntClobberInnerContainerSize) { |
994 SetupScrollAndContentsLayers(gfx::Size(100, 100)); | 976 SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
995 host_impl_->SetViewportSize(gfx::Size(50, 50)); | 977 host_impl_->SetViewportSize(gfx::Size(50, 50)); |
996 DrawFrame(); | 978 DrawFrame(); |
997 | 979 |
998 LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer(); | 980 LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer(); |
999 LayerImpl* container_layer = scroll_layer->scroll_clip_layer(); | 981 LayerImpl* container_layer = scroll_layer->scroll_clip_layer(); |
1000 DCHECK(scroll_layer); | 982 DCHECK(scroll_layer); |
1001 | 983 |
1002 float min_page_scale = 1.f; | 984 float min_page_scale = 1.f; |
(...skipping 5375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6378 EXPECT_EQ(selection_rect, selection_start_after.viewport_rect); | 6360 EXPECT_EQ(selection_rect, selection_start_after.viewport_rect); |
6379 EXPECT_TRUE(selection_start_after.visible); | 6361 EXPECT_TRUE(selection_start_after.visible); |
6380 EXPECT_TRUE(selection_start_after.visible); | 6362 EXPECT_TRUE(selection_start_after.visible); |
6381 } | 6363 } |
6382 | 6364 |
6383 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { | 6365 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { |
6384 public: | 6366 public: |
6385 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, | 6367 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, |
6386 LayerTreeHostImpl* layer_tree_host_impl, | 6368 LayerTreeHostImpl* layer_tree_host_impl, |
6387 int* set_needs_commit_count, | 6369 int* set_needs_commit_count, |
6388 int* set_needs_redraw_count, | 6370 int* set_needs_redraw_count) |
6389 int* forward_to_main_count) | |
6390 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), | 6371 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), |
6391 set_needs_commit_count_(set_needs_commit_count), | 6372 set_needs_commit_count_(set_needs_commit_count), |
6392 set_needs_redraw_count_(set_needs_redraw_count), | 6373 set_needs_redraw_count_(set_needs_redraw_count) {} |
6393 forward_to_main_count_(forward_to_main_count) {} | |
6394 | 6374 |
6395 virtual ~SimpleSwapPromiseMonitor() {} | 6375 virtual ~SimpleSwapPromiseMonitor() {} |
6396 | 6376 |
6397 virtual void OnSetNeedsCommitOnMain() OVERRIDE { | 6377 virtual void OnSetNeedsCommitOnMain() OVERRIDE { |
6398 (*set_needs_commit_count_)++; | 6378 (*set_needs_commit_count_)++; |
6399 } | 6379 } |
6400 | 6380 |
6401 virtual void OnSetNeedsRedrawOnImpl() OVERRIDE { | 6381 virtual void OnSetNeedsRedrawOnImpl() OVERRIDE { |
6402 (*set_needs_redraw_count_)++; | 6382 (*set_needs_redraw_count_)++; |
6403 } | 6383 } |
6404 | 6384 |
6405 virtual void OnForwardScrollUpdateToMainThreadOnImpl() OVERRIDE { | |
6406 (*forward_to_main_count_)++; | |
6407 } | |
6408 | |
6409 private: | 6385 private: |
6410 int* set_needs_commit_count_; | 6386 int* set_needs_commit_count_; |
6411 int* set_needs_redraw_count_; | 6387 int* set_needs_redraw_count_; |
6412 int* forward_to_main_count_; | |
6413 }; | 6388 }; |
6414 | 6389 |
6415 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { | 6390 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { |
6416 int set_needs_commit_count = 0; | 6391 int set_needs_commit_count = 0; |
6417 int set_needs_redraw_count = 0; | 6392 int set_needs_redraw_count = 0; |
6418 int forward_to_main_count = 0; | |
6419 | 6393 |
6420 { | 6394 { |
6421 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | 6395 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
6422 new SimpleSwapPromiseMonitor(NULL, | 6396 new SimpleSwapPromiseMonitor(NULL, |
6423 host_impl_.get(), | 6397 host_impl_.get(), |
6424 &set_needs_commit_count, | 6398 &set_needs_commit_count, |
6425 &set_needs_redraw_count, | 6399 &set_needs_redraw_count)); |
6426 &forward_to_main_count)); | |
6427 host_impl_->SetNeedsRedraw(); | 6400 host_impl_->SetNeedsRedraw(); |
6428 EXPECT_EQ(0, set_needs_commit_count); | 6401 EXPECT_EQ(0, set_needs_commit_count); |
6429 EXPECT_EQ(1, set_needs_redraw_count); | 6402 EXPECT_EQ(1, set_needs_redraw_count); |
6430 EXPECT_EQ(0, forward_to_main_count); | |
6431 } | 6403 } |
6432 | 6404 |
6433 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being | 6405 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being |
6434 // monitored. | 6406 // monitored. |
6435 host_impl_->SetNeedsRedraw(); | 6407 host_impl_->SetNeedsRedraw(); |
6436 EXPECT_EQ(0, set_needs_commit_count); | 6408 EXPECT_EQ(0, set_needs_commit_count); |
6437 EXPECT_EQ(1, set_needs_redraw_count); | 6409 EXPECT_EQ(1, set_needs_redraw_count); |
6438 EXPECT_EQ(0, forward_to_main_count); | |
6439 | 6410 |
6440 { | 6411 { |
6441 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | 6412 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
6442 new SimpleSwapPromiseMonitor(NULL, | 6413 new SimpleSwapPromiseMonitor(NULL, |
6443 host_impl_.get(), | 6414 host_impl_.get(), |
6444 &set_needs_commit_count, | 6415 &set_needs_commit_count, |
6445 &set_needs_redraw_count, | 6416 &set_needs_redraw_count)); |
6446 &forward_to_main_count)); | |
6447 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10)); | 6417 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10)); |
6448 EXPECT_EQ(0, set_needs_commit_count); | 6418 EXPECT_EQ(0, set_needs_commit_count); |
6449 EXPECT_EQ(2, set_needs_redraw_count); | 6419 EXPECT_EQ(2, set_needs_redraw_count); |
6450 EXPECT_EQ(0, forward_to_main_count); | |
6451 } | 6420 } |
6452 | 6421 |
6453 { | 6422 { |
6454 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | 6423 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
6455 new SimpleSwapPromiseMonitor(NULL, | 6424 new SimpleSwapPromiseMonitor(NULL, |
6456 host_impl_.get(), | 6425 host_impl_.get(), |
6457 &set_needs_commit_count, | 6426 &set_needs_commit_count, |
6458 &set_needs_redraw_count, | 6427 &set_needs_redraw_count)); |
6459 &forward_to_main_count)); | |
6460 // Empty damage rect won't signal the monitor. | 6428 // Empty damage rect won't signal the monitor. |
6461 host_impl_->SetNeedsRedrawRect(gfx::Rect()); | 6429 host_impl_->SetNeedsRedrawRect(gfx::Rect()); |
6462 EXPECT_EQ(0, set_needs_commit_count); | 6430 EXPECT_EQ(0, set_needs_commit_count); |
6463 EXPECT_EQ(2, set_needs_redraw_count); | 6431 EXPECT_EQ(2, set_needs_redraw_count); |
6464 EXPECT_EQ(0, forward_to_main_count); | |
6465 } | |
6466 | |
6467 { | |
6468 set_needs_commit_count = 0; | |
6469 set_needs_redraw_count = 0; | |
6470 forward_to_main_count = 0; | |
6471 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | |
6472 new SimpleSwapPromiseMonitor(NULL, | |
6473 host_impl_.get(), | |
6474 &set_needs_commit_count, | |
6475 &set_needs_redraw_count, | |
6476 &forward_to_main_count)); | |
6477 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100)); | |
6478 | |
6479 // Scrolling normally should not trigger any forwarding. | |
6480 EXPECT_EQ(InputHandler::ScrollStarted, | |
6481 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | |
6482 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10))); | |
6483 host_impl_->ScrollEnd(); | |
6484 | |
6485 EXPECT_EQ(0, set_needs_commit_count); | |
6486 EXPECT_EQ(1, set_needs_redraw_count); | |
6487 EXPECT_EQ(0, forward_to_main_count); | |
6488 | |
6489 // Scrolling with a scroll handler should defer the swap to the main | |
6490 // thread. | |
6491 scroll_layer->SetHaveScrollEventHandlers(true); | |
6492 EXPECT_EQ(InputHandler::ScrollStarted, | |
6493 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | |
6494 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10))); | |
6495 host_impl_->ScrollEnd(); | |
6496 | |
6497 EXPECT_EQ(0, set_needs_commit_count); | |
6498 EXPECT_EQ(2, set_needs_redraw_count); | |
6499 EXPECT_EQ(1, forward_to_main_count); | |
6500 } | 6432 } |
6501 } | 6433 } |
6502 | 6434 |
6503 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { | 6435 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { |
6504 public: | 6436 public: |
6505 virtual void SetUp() OVERRIDE { | 6437 virtual void SetUp() OVERRIDE { |
6506 LayerTreeSettings settings = DefaultSettings(); | 6438 LayerTreeSettings settings = DefaultSettings(); |
6507 settings.calculate_top_controls_position = true; | 6439 settings.calculate_top_controls_position = true; |
6508 settings.top_controls_height = top_controls_height_; | 6440 settings.top_controls_height = top_controls_height_; |
6509 CreateHostImpl(settings, CreateOutputSurface()); | 6441 CreateHostImpl(settings, CreateOutputSurface()); |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6827 layer_pairs.clear(); | 6759 layer_pairs.clear(); |
6828 host_impl_->GetPictureLayerImplPairs(&layer_pairs); | 6760 host_impl_->GetPictureLayerImplPairs(&layer_pairs); |
6829 EXPECT_EQ(1u, layer_pairs.size()); | 6761 EXPECT_EQ(1u, layer_pairs.size()); |
6830 | 6762 |
6831 EXPECT_EQ(active_layer.get(), layer_pairs[0].active); | 6763 EXPECT_EQ(active_layer.get(), layer_pairs[0].active); |
6832 EXPECT_EQ(pending_layer.get(), layer_pairs[0].pending); | 6764 EXPECT_EQ(pending_layer.get(), layer_pairs[0].pending); |
6833 } | 6765 } |
6834 | 6766 |
6835 } // namespace | 6767 } // namespace |
6836 } // namespace cc | 6768 } // namespace cc |
OLD | NEW |