| 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 <algorithm> | 7 #include <algorithm> | 
| 8 #include <cmath> | 8 #include <cmath> | 
| 9 | 9 | 
| 10 #include "base/bind.h" | 10 #include "base/bind.h" | 
| (...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 938 | 938 | 
| 939     scoped_ptr<ScrollAndScaleSet> scroll_info = | 939     scoped_ptr<ScrollAndScaleSet> scroll_info = | 
| 940         host_impl_->ProcessScrollDeltas(); | 940         host_impl_->ProcessScrollDeltas(); | 
| 941     EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); | 941     EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); | 
| 942 | 942 | 
| 943     EXPECT_EQ(gfx::ScrollOffset(75.0, 75.0).ToString(), | 943     EXPECT_EQ(gfx::ScrollOffset(75.0, 75.0).ToString(), | 
| 944               scroll_layer->MaxScrollOffset().ToString()); | 944               scroll_layer->MaxScrollOffset().ToString()); | 
| 945   } | 945   } | 
| 946 | 946 | 
| 947   // Scrolling after a pinch gesture should always be in local space.  The | 947   // Scrolling after a pinch gesture should always be in local space.  The | 
| 948   // scroll deltas do not have the page scale factor applied. | 948   // scroll deltas have the page scale factor applied. | 
| 949   { | 949   { | 
| 950     host_impl_->active_tree()->SetPageScaleFactorAndLimits( | 950     host_impl_->active_tree()->SetPageScaleFactorAndLimits( | 
| 951         page_scale_factor, min_page_scale, max_page_scale); | 951         page_scale_factor, min_page_scale, max_page_scale); | 
| 952     host_impl_->active_tree()->SetPageScaleDelta(1.f); | 952     host_impl_->active_tree()->SetPageScaleDelta(1.f); | 
| 953     scroll_layer->SetScrollDelta(gfx::Vector2d()); | 953     scroll_layer->SetScrollDelta(gfx::Vector2d()); | 
| 954 | 954 | 
| 955     float page_scale_delta = 2.f; | 955     float page_scale_delta = 2.f; | 
| 956     host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture); | 956     host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture); | 
| 957     host_impl_->PinchGestureBegin(); | 957     host_impl_->PinchGestureBegin(); | 
| 958     host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point()); | 958     host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point()); | 
| 959     host_impl_->PinchGestureEnd(); | 959     host_impl_->PinchGestureEnd(); | 
| 960     host_impl_->ScrollEnd(); | 960     host_impl_->ScrollEnd(); | 
| 961 | 961 | 
| 962     gfx::Vector2d scroll_delta(0, 10); | 962     gfx::Vector2d scroll_delta(0, 10); | 
| 963     EXPECT_EQ(InputHandler::ScrollStarted, | 963     EXPECT_EQ(InputHandler::ScrollStarted, | 
| 964               host_impl_->ScrollBegin(gfx::Point(5, 5), | 964               host_impl_->ScrollBegin(gfx::Point(5, 5), | 
| 965                                       InputHandler::Wheel)); | 965                                       InputHandler::Wheel)); | 
| 966     host_impl_->ScrollBy(gfx::Point(), scroll_delta); | 966     host_impl_->ScrollBy(gfx::Point(), scroll_delta); | 
| 967     host_impl_->ScrollEnd(); | 967     host_impl_->ScrollEnd(); | 
| 968 | 968 | 
| 969     scoped_ptr<ScrollAndScaleSet> scroll_info = | 969     scoped_ptr<ScrollAndScaleSet> scroll_info = | 
| 970         host_impl_->ProcessScrollDeltas(); | 970         host_impl_->ProcessScrollDeltas(); | 
| 971     ExpectContains(*scroll_info.get(), | 971     ExpectContains(*scroll_info.get(), scroll_layer->id(), | 
| 972                    scroll_layer->id(), | 972                    gfx::Vector2d(0, scroll_delta.y() / page_scale_delta)); | 
| 973                    scroll_delta); |  | 
| 974   } | 973   } | 
| 975 } | 974 } | 
| 976 | 975 | 
| 977 TEST_F(LayerTreeHostImplTest, ScrollWithSwapPromises) { | 976 TEST_F(LayerTreeHostImplTest, ScrollWithSwapPromises) { | 
| 978   ui::LatencyInfo latency_info; | 977   ui::LatencyInfo latency_info; | 
| 979   latency_info.trace_id = 1234; | 978   latency_info.trace_id = 1234; | 
| 980   scoped_ptr<SwapPromise> swap_promise( | 979   scoped_ptr<SwapPromise> swap_promise( | 
| 981       new LatencyInfoSwapPromise(latency_info)); | 980       new LatencyInfoSwapPromise(latency_info)); | 
| 982 | 981 | 
| 983   SetupScrollAndContentsLayers(gfx::Size(100, 100)); | 982   SetupScrollAndContentsLayers(gfx::Size(100, 100)); | 
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1388       RenderingStatsInstrumentation* rendering_stats_instrumentation) | 1387       RenderingStatsInstrumentation* rendering_stats_instrumentation) | 
| 1389       : LayerTreeHostImpl(settings, | 1388       : LayerTreeHostImpl(settings, | 
| 1390                           client, | 1389                           client, | 
| 1391                           proxy, | 1390                           proxy, | 
| 1392                           rendering_stats_instrumentation, | 1391                           rendering_stats_instrumentation, | 
| 1393                           manager, | 1392                           manager, | 
| 1394                           NULL, | 1393                           NULL, | 
| 1395                           0) {} | 1394                           0) {} | 
| 1396 | 1395 | 
| 1397   BeginFrameArgs CurrentBeginFrameArgs() const override { | 1396   BeginFrameArgs CurrentBeginFrameArgs() const override { | 
| 1398     return CreateBeginFrameArgsForTesting(fake_current_physical_time_); | 1397     return CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, | 
|  | 1398                                           fake_current_physical_time_); | 
| 1399   } | 1399   } | 
| 1400 | 1400 | 
| 1401   void SetCurrentPhysicalTimeTicksForTest(base::TimeTicks fake_now) { | 1401   void SetCurrentPhysicalTimeTicksForTest(base::TimeTicks fake_now) { | 
| 1402     fake_current_physical_time_ = fake_now; | 1402     fake_current_physical_time_ = fake_now; | 
| 1403   } | 1403   } | 
| 1404 | 1404 | 
| 1405  private: | 1405  private: | 
| 1406   base::TimeTicks fake_current_physical_time_; | 1406   base::TimeTicks fake_current_physical_time_; | 
| 1407 }; | 1407 }; | 
| 1408 | 1408 | 
| (...skipping 2180 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3589                  gfx::Vector2d(0, scroll_delta.y() / scale)); | 3589                  gfx::Vector2d(0, scroll_delta.y() / scale)); | 
| 3590 | 3590 | 
| 3591   // Reset and scroll down with the wheel. | 3591   // Reset and scroll down with the wheel. | 
| 3592   scroll_layer->SetScrollDelta(gfx::Vector2dF()); | 3592   scroll_layer->SetScrollDelta(gfx::Vector2dF()); | 
| 3593   gfx::Vector2d wheel_scroll_delta(0, 10); | 3593   gfx::Vector2d wheel_scroll_delta(0, 10); | 
| 3594   EXPECT_EQ(InputHandler::ScrollStarted, | 3594   EXPECT_EQ(InputHandler::ScrollStarted, | 
| 3595             host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel)); | 3595             host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel)); | 
| 3596   host_impl_->ScrollBy(gfx::Point(), wheel_scroll_delta); | 3596   host_impl_->ScrollBy(gfx::Point(), wheel_scroll_delta); | 
| 3597   host_impl_->ScrollEnd(); | 3597   host_impl_->ScrollEnd(); | 
| 3598 | 3598 | 
| 3599   // The scale should not have been applied to the scroll delta. | 3599   // It should apply the scale factor to the scroll delta for the wheel event. | 
| 3600   scroll_info = host_impl_->ProcessScrollDeltas(); | 3600   scroll_info = host_impl_->ProcessScrollDeltas(); | 
| 3601   ExpectContains(*scroll_info.get(), | 3601   ExpectContains(*scroll_info.get(), | 
| 3602                  scroll_layer->id(), | 3602                  scroll_layer->id(), | 
| 3603                  wheel_scroll_delta); | 3603                  wheel_scroll_delta); | 
| 3604 } | 3604 } | 
| 3605 | 3605 | 
| 3606 TEST_F(LayerTreeHostImplTest, ScrollViewportRounding) { | 3606 TEST_F(LayerTreeHostImplTest, ScrollViewportRounding) { | 
| 3607   int width = 332; | 3607   int width = 332; | 
| 3608   int height = 20; | 3608   int height = 20; | 
| 3609   int scale = 3; | 3609   int scale = 3; | 
| (...skipping 4183 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 7793 | 7793 | 
| 7794   EXPECT_EQ(2u, raw_pending_layer->did_become_active_call_count()); | 7794   EXPECT_EQ(2u, raw_pending_layer->did_become_active_call_count()); | 
| 7795   EXPECT_EQ(1u, raw_mask_layer->did_become_active_call_count()); | 7795   EXPECT_EQ(1u, raw_mask_layer->did_become_active_call_count()); | 
| 7796   EXPECT_EQ(0u, raw_replica_mask_layer->did_become_active_call_count()); | 7796   EXPECT_EQ(0u, raw_replica_mask_layer->did_become_active_call_count()); | 
| 7797   pending_tree->DidBecomeActive(); | 7797   pending_tree->DidBecomeActive(); | 
| 7798   EXPECT_EQ(3u, raw_pending_layer->did_become_active_call_count()); | 7798   EXPECT_EQ(3u, raw_pending_layer->did_become_active_call_count()); | 
| 7799   EXPECT_EQ(2u, raw_mask_layer->did_become_active_call_count()); | 7799   EXPECT_EQ(2u, raw_mask_layer->did_become_active_call_count()); | 
| 7800   EXPECT_EQ(1u, raw_replica_mask_layer->did_become_active_call_count()); | 7800   EXPECT_EQ(1u, raw_replica_mask_layer->did_become_active_call_count()); | 
| 7801 } | 7801 } | 
| 7802 | 7802 | 
|  | 7803 TEST_F(LayerTreeHostImplTest, WheelScrollWithPageScaleFactorOnInnerLayer) { | 
|  | 7804   LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100)); | 
|  | 7805   host_impl_->SetViewportSize(gfx::Size(50, 50)); | 
|  | 7806   DrawFrame(); | 
|  | 7807 | 
|  | 7808   EXPECT_EQ(scroll_layer, host_impl_->InnerViewportScrollLayer()); | 
|  | 7809 | 
|  | 7810   float min_page_scale = 1.f, max_page_scale = 4.f; | 
|  | 7811   float page_scale_factor = 1.f; | 
|  | 7812 | 
|  | 7813   // The scroll deltas should have the page scale factor applied. | 
|  | 7814   { | 
|  | 7815     host_impl_->active_tree()->SetPageScaleFactorAndLimits( | 
|  | 7816         page_scale_factor, min_page_scale, max_page_scale); | 
|  | 7817     host_impl_->active_tree()->SetPageScaleDelta(1.f); | 
|  | 7818     scroll_layer->SetScrollDelta(gfx::Vector2d()); | 
|  | 7819 | 
|  | 7820     float page_scale_delta = 2.f; | 
|  | 7821     host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture); | 
|  | 7822     host_impl_->PinchGestureBegin(); | 
|  | 7823     host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point()); | 
|  | 7824     host_impl_->PinchGestureEnd(); | 
|  | 7825     host_impl_->ScrollEnd(); | 
|  | 7826 | 
|  | 7827     gfx::Vector2dF scroll_delta(0, 5); | 
|  | 7828     EXPECT_EQ(InputHandler::ScrollStarted, | 
|  | 7829               host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel)); | 
|  | 7830     EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->TotalScrollOffset()); | 
|  | 7831 | 
|  | 7832     host_impl_->ScrollBy(gfx::Point(), scroll_delta); | 
|  | 7833     host_impl_->ScrollEnd(); | 
|  | 7834     EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 2.5), scroll_layer->TotalScrollOffset()); | 
|  | 7835   } | 
|  | 7836 } | 
|  | 7837 | 
| 7803 class LayerTreeHostImplCountingLostSurfaces : public LayerTreeHostImplTest { | 7838 class LayerTreeHostImplCountingLostSurfaces : public LayerTreeHostImplTest { | 
| 7804  public: | 7839  public: | 
| 7805   LayerTreeHostImplCountingLostSurfaces() : num_lost_surfaces_(0) {} | 7840   LayerTreeHostImplCountingLostSurfaces() : num_lost_surfaces_(0) {} | 
| 7806   void DidLoseOutputSurfaceOnImplThread() override { num_lost_surfaces_++; } | 7841   void DidLoseOutputSurfaceOnImplThread() override { num_lost_surfaces_++; } | 
| 7807 | 7842 | 
| 7808  protected: | 7843  protected: | 
| 7809   int num_lost_surfaces_; | 7844   int num_lost_surfaces_; | 
| 7810 }; | 7845 }; | 
| 7811 | 7846 | 
| 7812 TEST_F(LayerTreeHostImplCountingLostSurfaces, TwiceLostSurface) { | 7847 TEST_F(LayerTreeHostImplCountingLostSurfaces, TwiceLostSurface) { | 
| 7813   // Really we just need at least one client notification each time | 7848   // Really we just need at least one client notification each time | 
| 7814   // we go from having a valid output surface to not having a valid output | 7849   // we go from having a valid output surface to not having a valid output | 
| 7815   // surface. | 7850   // surface. | 
| 7816   EXPECT_EQ(0, num_lost_surfaces_); | 7851   EXPECT_EQ(0, num_lost_surfaces_); | 
| 7817   host_impl_->DidLoseOutputSurface(); | 7852   host_impl_->DidLoseOutputSurface(); | 
| 7818   EXPECT_EQ(1, num_lost_surfaces_); | 7853   EXPECT_EQ(1, num_lost_surfaces_); | 
| 7819   host_impl_->DidLoseOutputSurface(); | 7854   host_impl_->DidLoseOutputSurface(); | 
| 7820   EXPECT_LE(1, num_lost_surfaces_); | 7855   EXPECT_LE(1, num_lost_surfaces_); | 
| 7821 } | 7856 } | 
| 7822 | 7857 | 
| 7823 }  // namespace | 7858 }  // namespace | 
| 7824 }  // namespace cc | 7859 }  // namespace cc | 
| OLD | NEW | 
|---|