| 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 3012 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3023 | 3023 |
| 3024 class TestScrollOffsetDelegate : public LayerScrollOffsetDelegate { | 3024 class TestScrollOffsetDelegate : public LayerScrollOffsetDelegate { |
| 3025 public: | 3025 public: |
| 3026 TestScrollOffsetDelegate() | 3026 TestScrollOffsetDelegate() |
| 3027 : page_scale_factor_(0.f), | 3027 : page_scale_factor_(0.f), |
| 3028 min_page_scale_factor_(-1.f), | 3028 min_page_scale_factor_(-1.f), |
| 3029 max_page_scale_factor_(-1.f) {} | 3029 max_page_scale_factor_(-1.f) {} |
| 3030 | 3030 |
| 3031 virtual ~TestScrollOffsetDelegate() {} | 3031 virtual ~TestScrollOffsetDelegate() {} |
| 3032 | 3032 |
| 3033 virtual void SetMaxScrollOffset( | |
| 3034 const gfx::Vector2dF& max_scroll_offset) OVERRIDE { | |
| 3035 max_scroll_offset_ = max_scroll_offset; | |
| 3036 } | |
| 3037 | |
| 3038 virtual void SetTotalScrollOffset(const gfx::Vector2dF& new_value) OVERRIDE { | 3033 virtual void SetTotalScrollOffset(const gfx::Vector2dF& new_value) OVERRIDE { |
| 3039 last_set_scroll_offset_ = new_value; | 3034 last_set_scroll_offset_ = new_value; |
| 3035 CheckScrollOffsetWithinBounds(); |
| 3040 } | 3036 } |
| 3041 | 3037 |
| 3042 virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE { | 3038 virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE { |
| 3043 return getter_return_value_; | 3039 return getter_return_value_; |
| 3044 } | 3040 } |
| 3045 | 3041 |
| 3046 virtual bool IsExternalFlingActive() const OVERRIDE { return false; } | 3042 virtual bool IsExternalFlingActive() const OVERRIDE { return false; } |
| 3047 | 3043 |
| 3048 virtual void SetTotalPageScaleFactorAndLimits( | 3044 virtual void UpdateRootLayerState(const gfx::Vector2dF& total_scroll_offset, |
| 3049 float page_scale_factor, | 3045 const gfx::Vector2dF& max_scroll_offset, |
| 3050 float min_page_scale_factor, | 3046 const gfx::SizeF& scrollable_size, |
| 3051 float max_page_scale_factor) OVERRIDE { | 3047 float page_scale_factor, |
| 3048 float min_page_scale_factor, |
| 3049 float max_page_scale_factor) OVERRIDE { |
| 3050 last_set_scroll_offset_ = total_scroll_offset; |
| 3051 max_scroll_offset_ = max_scroll_offset; |
| 3052 scrollable_size_ = scrollable_size; |
| 3052 page_scale_factor_ = page_scale_factor; | 3053 page_scale_factor_ = page_scale_factor; |
| 3053 min_page_scale_factor_ = min_page_scale_factor; | 3054 min_page_scale_factor_ = min_page_scale_factor; |
| 3054 max_page_scale_factor_ = max_page_scale_factor; | 3055 max_page_scale_factor_ = max_page_scale_factor; |
| 3055 } | 3056 CheckScrollOffsetWithinBounds(); |
| 3056 | |
| 3057 virtual void SetScrollableSize(const gfx::SizeF& scrollable_size) OVERRIDE { | |
| 3058 scrollable_size_ = scrollable_size; | |
| 3059 } | 3057 } |
| 3060 | 3058 |
| 3061 gfx::Vector2dF last_set_scroll_offset() { | 3059 gfx::Vector2dF last_set_scroll_offset() { |
| 3062 return last_set_scroll_offset_; | 3060 return last_set_scroll_offset_; |
| 3063 } | 3061 } |
| 3064 | 3062 |
| 3065 void set_getter_return_value(const gfx::Vector2dF& value) { | 3063 void set_getter_return_value(const gfx::Vector2dF& value) { |
| 3066 getter_return_value_ = value; | 3064 getter_return_value_ = value; |
| 3067 } | 3065 } |
| 3068 | 3066 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 3080 | 3078 |
| 3081 float min_page_scale_factor() const { | 3079 float min_page_scale_factor() const { |
| 3082 return min_page_scale_factor_; | 3080 return min_page_scale_factor_; |
| 3083 } | 3081 } |
| 3084 | 3082 |
| 3085 float max_page_scale_factor() const { | 3083 float max_page_scale_factor() const { |
| 3086 return max_page_scale_factor_; | 3084 return max_page_scale_factor_; |
| 3087 } | 3085 } |
| 3088 | 3086 |
| 3089 private: | 3087 private: |
| 3088 void CheckScrollOffsetWithinBounds() { |
| 3089 DCHECK(last_set_scroll_offset_.x() <= max_scroll_offset_.x()); |
| 3090 DCHECK(last_set_scroll_offset_.y() <= max_scroll_offset_.y()); |
| 3091 } |
| 3092 |
| 3090 gfx::Vector2dF last_set_scroll_offset_; | 3093 gfx::Vector2dF last_set_scroll_offset_; |
| 3091 gfx::Vector2dF getter_return_value_; | 3094 gfx::Vector2dF getter_return_value_; |
| 3092 gfx::Vector2dF max_scroll_offset_; | 3095 gfx::Vector2dF max_scroll_offset_; |
| 3093 gfx::SizeF scrollable_size_; | 3096 gfx::SizeF scrollable_size_; |
| 3094 float page_scale_factor_; | 3097 float page_scale_factor_; |
| 3095 float min_page_scale_factor_; | 3098 float min_page_scale_factor_; |
| 3096 float max_page_scale_factor_; | 3099 float max_page_scale_factor_; |
| 3097 }; | 3100 }; |
| 3098 | 3101 |
| 3099 TEST_F(LayerTreeHostImplTest, RootLayerScrollOffsetDelegation) { | 3102 TEST_F(LayerTreeHostImplTest, RootLayerScrollOffsetDelegation) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 3127 host_impl_->active_tree()->SetPageScaleDelta(1.5f); | 3130 host_impl_->active_tree()->SetPageScaleDelta(1.5f); |
| 3128 EXPECT_EQ(3.f, scroll_delegate.page_scale_factor()); | 3131 EXPECT_EQ(3.f, scroll_delegate.page_scale_factor()); |
| 3129 EXPECT_EQ(0.5f, scroll_delegate.min_page_scale_factor()); | 3132 EXPECT_EQ(0.5f, scroll_delegate.min_page_scale_factor()); |
| 3130 EXPECT_EQ(4.f, scroll_delegate.max_page_scale_factor()); | 3133 EXPECT_EQ(4.f, scroll_delegate.max_page_scale_factor()); |
| 3131 host_impl_->active_tree()->SetPageScaleDelta(1.f); | 3134 host_impl_->active_tree()->SetPageScaleDelta(1.f); |
| 3132 host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f); | 3135 host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f); |
| 3133 EXPECT_EQ(1.f, scroll_delegate.page_scale_factor()); | 3136 EXPECT_EQ(1.f, scroll_delegate.page_scale_factor()); |
| 3134 EXPECT_EQ(0.5f, scroll_delegate.min_page_scale_factor()); | 3137 EXPECT_EQ(0.5f, scroll_delegate.min_page_scale_factor()); |
| 3135 EXPECT_EQ(4.f, scroll_delegate.max_page_scale_factor()); | 3138 EXPECT_EQ(4.f, scroll_delegate.max_page_scale_factor()); |
| 3136 | 3139 |
| 3140 // The pinch gesture doesn't put the delegate into a state where the scroll |
| 3141 // offset is outside of the scroll range. (this is verified by DCHECKs in the |
| 3142 // delegate). |
| 3143 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture); |
| 3144 host_impl_->PinchGestureBegin(); |
| 3145 host_impl_->PinchGestureUpdate(2.f, gfx::Point()); |
| 3146 host_impl_->PinchGestureUpdate(.5f, gfx::Point()); |
| 3147 host_impl_->PinchGestureEnd(); |
| 3148 host_impl_->ScrollEnd(); |
| 3149 |
| 3137 // Scrolling should be relative to the offset as returned by the delegate. | 3150 // Scrolling should be relative to the offset as returned by the delegate. |
| 3138 gfx::Vector2dF scroll_delta(0.f, 10.f); | 3151 gfx::Vector2dF scroll_delta(0.f, 10.f); |
| 3139 gfx::Vector2dF current_offset(7.f, 8.f); | 3152 gfx::Vector2dF current_offset(7.f, 8.f); |
| 3140 | 3153 |
| 3141 scroll_delegate.set_getter_return_value(current_offset); | 3154 scroll_delegate.set_getter_return_value(current_offset); |
| 3142 EXPECT_EQ(InputHandler::ScrollStarted, | 3155 EXPECT_EQ(InputHandler::ScrollStarted, |
| 3143 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | 3156 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
| 3144 | 3157 |
| 3145 host_impl_->ScrollBy(gfx::Point(), scroll_delta); | 3158 host_impl_->ScrollBy(gfx::Point(), scroll_delta); |
| 3146 EXPECT_EQ(current_offset + scroll_delta, | 3159 EXPECT_EQ(current_offset + scroll_delta, |
| 3147 scroll_delegate.last_set_scroll_offset()); | 3160 scroll_delegate.last_set_scroll_offset()); |
| 3148 | 3161 |
| 3149 current_offset = gfx::Vector2dF(42.f, 41.f); | 3162 current_offset = gfx::Vector2dF(42.f, 41.f); |
| 3150 scroll_delegate.set_getter_return_value(current_offset); | 3163 scroll_delegate.set_getter_return_value(current_offset); |
| 3151 host_impl_->ScrollBy(gfx::Point(), scroll_delta); | 3164 host_impl_->ScrollBy(gfx::Point(), scroll_delta); |
| 3152 EXPECT_EQ(current_offset + scroll_delta, | 3165 EXPECT_EQ(current_offset + scroll_delta, |
| 3153 scroll_delegate.last_set_scroll_offset()); | 3166 scroll_delegate.last_set_scroll_offset()); |
| 3154 host_impl_->ScrollEnd(); | 3167 host_impl_->ScrollEnd(); |
| 3168 scroll_delegate.set_getter_return_value(gfx::Vector2dF()); |
| 3155 | 3169 |
| 3156 // Forces a full tree synchronization and ensures that the scroll delegate | 3170 // Forces a full tree synchronization and ensures that the scroll delegate |
| 3157 // sees the correct size of the new tree. | 3171 // sees the correct size of the new tree. |
| 3158 gfx::Size new_size(42, 24); | 3172 gfx::Size new_size(42, 24); |
| 3159 host_impl_->CreatePendingTree(); | 3173 host_impl_->CreatePendingTree(); |
| 3160 CreateScrollAndContentsLayers(host_impl_->pending_tree(), new_size); | 3174 CreateScrollAndContentsLayers(host_impl_->pending_tree(), new_size); |
| 3161 host_impl_->ActivatePendingTree(); | 3175 host_impl_->ActivatePendingTree(); |
| 3162 EXPECT_EQ(new_size, scroll_delegate.scrollable_size()); | 3176 EXPECT_EQ(new_size, scroll_delegate.scrollable_size()); |
| 3163 | 3177 |
| 3164 // Un-setting the delegate should propagate the delegate's current offset to | 3178 // Un-setting the delegate should propagate the delegate's current offset to |
| (...skipping 3322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6487 // Verify implicit limits are calculated correctly with no overflows | 6501 // Verify implicit limits are calculated correctly with no overflows |
| 6488 host_impl_->SetMemoryPolicy(mem_policy); | 6502 host_impl_->SetMemoryPolicy(mem_policy); |
| 6489 EXPECT_EQ(host_impl_->global_tile_state().hard_memory_limit_in_bytes, | 6503 EXPECT_EQ(host_impl_->global_tile_state().hard_memory_limit_in_bytes, |
| 6490 300u * 1024u * 1024u); | 6504 300u * 1024u * 1024u); |
| 6491 EXPECT_EQ(host_impl_->global_tile_state().soft_memory_limit_in_bytes, | 6505 EXPECT_EQ(host_impl_->global_tile_state().soft_memory_limit_in_bytes, |
| 6492 150u * 1024u * 1024u); | 6506 150u * 1024u * 1024u); |
| 6493 } | 6507 } |
| 6494 | 6508 |
| 6495 } // namespace | 6509 } // namespace |
| 6496 } // namespace cc | 6510 } // namespace cc |
| OLD | NEW |