OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/animation/scrollbar_animation_controller_linear_fade.h" | 5 #include "cc/animation/scrollbar_animation_controller_linear_fade.h" |
6 | 6 |
7 #include "cc/layers/solid_color_scrollbar_layer_impl.h" | 7 #include "cc/layers/solid_color_scrollbar_layer_impl.h" |
8 #include "cc/test/fake_impl_proxy.h" | 8 #include "cc/test/fake_impl_proxy.h" |
9 #include "cc/test/fake_layer_tree_host_impl.h" | 9 #include "cc/test/fake_layer_tree_host_impl.h" |
10 #include "cc/test/test_shared_bitmap_manager.h" | 10 #include "cc/test/test_shared_bitmap_manager.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 | 12 |
13 namespace cc { | 13 namespace cc { |
14 namespace { | 14 namespace { |
15 | 15 |
16 class ScrollbarAnimationControllerLinearFadeTest | 16 class ScrollbarAnimationControllerLinearFadeTest |
17 : public testing::Test, | 17 : public testing::Test, |
18 public ScrollbarAnimationControllerClient { | 18 public ScrollbarAnimationControllerClient { |
19 public: | 19 public: |
20 ScrollbarAnimationControllerLinearFadeTest() | 20 ScrollbarAnimationControllerLinearFadeTest() |
21 : host_impl_(&proxy_, &shared_bitmap_manager_), needs_frame_count_(0) {} | 21 : host_impl_(&proxy_, &shared_bitmap_manager_), needs_frame_count_(0) {} |
22 | 22 |
23 virtual void PostDelayedScrollbarFade(const base::Closure& start_fade, | 23 virtual void PostDelayedScrollbarFade(const base::Closure& start_fade, |
24 base::TimeDelta delay) override { | 24 base::TimeDelta delay) override { |
25 start_fade_ = start_fade; | 25 start_fade_ = start_fade; |
| 26 delay_ = delay; |
26 } | 27 } |
27 virtual void SetNeedsScrollbarAnimationFrame() override { | 28 virtual void SetNeedsScrollbarAnimationFrame() override { |
28 needs_frame_count_++; | 29 needs_frame_count_++; |
29 } | 30 } |
30 | 31 |
31 protected: | 32 protected: |
32 virtual void SetUp() { | 33 virtual void SetUp() { |
33 const int kThumbThickness = 10; | 34 const int kThumbThickness = 10; |
34 const int kTrackStart = 0; | 35 const int kTrackStart = 0; |
35 const bool kIsLeftSideVerticalScrollbar = false; | 36 const bool kIsLeftSideVerticalScrollbar = false; |
(...skipping 16 matching lines...) Expand all Loading... |
52 | 53 |
53 scrollbar_layer_->SetScrollLayerAndClipLayerByIds(scroll_layer_ptr->id(), | 54 scrollbar_layer_->SetScrollLayerAndClipLayerByIds(scroll_layer_ptr->id(), |
54 clip_layer_->id()); | 55 clip_layer_->id()); |
55 clip_layer_->SetBounds(gfx::Size(100, 100)); | 56 clip_layer_->SetBounds(gfx::Size(100, 100)); |
56 scroll_layer_ptr->SetBounds(gfx::Size(50, 50)); | 57 scroll_layer_ptr->SetBounds(gfx::Size(50, 50)); |
57 | 58 |
58 scrollbar_controller_ = ScrollbarAnimationControllerLinearFade::Create( | 59 scrollbar_controller_ = ScrollbarAnimationControllerLinearFade::Create( |
59 scroll_layer_ptr, | 60 scroll_layer_ptr, |
60 this, | 61 this, |
61 base::TimeDelta::FromSeconds(2), | 62 base::TimeDelta::FromSeconds(2), |
| 63 base::TimeDelta::FromSeconds(5), |
62 base::TimeDelta::FromSeconds(3)); | 64 base::TimeDelta::FromSeconds(3)); |
63 } | 65 } |
64 | 66 |
65 FakeImplProxy proxy_; | 67 FakeImplProxy proxy_; |
66 TestSharedBitmapManager shared_bitmap_manager_; | 68 TestSharedBitmapManager shared_bitmap_manager_; |
67 FakeLayerTreeHostImpl host_impl_; | 69 FakeLayerTreeHostImpl host_impl_; |
68 scoped_ptr<ScrollbarAnimationControllerLinearFade> scrollbar_controller_; | 70 scoped_ptr<ScrollbarAnimationControllerLinearFade> scrollbar_controller_; |
69 scoped_ptr<LayerImpl> clip_layer_; | 71 scoped_ptr<LayerImpl> clip_layer_; |
70 scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar_layer_; | 72 scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar_layer_; |
71 | 73 |
72 base::Closure start_fade_; | 74 base::Closure start_fade_; |
| 75 base::TimeDelta delay_; |
73 int needs_frame_count_; | 76 int needs_frame_count_; |
74 }; | 77 }; |
75 | 78 |
| 79 TEST_F(ScrollbarAnimationControllerLinearFadeTest, DelayAnimationOnResize) { |
| 80 scrollbar_layer_->SetOpacity(0.0f); |
| 81 scrollbar_controller_->DidScrollBegin(); |
| 82 scrollbar_controller_->DidScrollUpdate(true); |
| 83 scrollbar_controller_->DidScrollEnd(); |
| 84 // Normal Animation delay of 2 seconds. |
| 85 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
| 86 EXPECT_EQ(delay_, base::TimeDelta::FromSeconds(2)); |
| 87 |
| 88 scrollbar_layer_->SetOpacity(0.0f); |
| 89 scrollbar_controller_->DidScrollUpdate(true); |
| 90 // Delay animation on resize to 5 seconds. |
| 91 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
| 92 EXPECT_EQ(delay_, base::TimeDelta::FromSeconds(5)); |
| 93 } |
| 94 |
76 TEST_F(ScrollbarAnimationControllerLinearFadeTest, HiddenInBegin) { | 95 TEST_F(ScrollbarAnimationControllerLinearFadeTest, HiddenInBegin) { |
77 scrollbar_layer_->SetOpacity(0.0f); | 96 scrollbar_layer_->SetOpacity(0.0f); |
78 scrollbar_controller_->Animate(base::TimeTicks()); | 97 scrollbar_controller_->Animate(base::TimeTicks()); |
79 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); | 98 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); |
80 EXPECT_EQ(0, needs_frame_count_); | 99 EXPECT_EQ(0, needs_frame_count_); |
81 } | 100 } |
82 | 101 |
83 TEST_F(ScrollbarAnimationControllerLinearFadeTest, | 102 TEST_F(ScrollbarAnimationControllerLinearFadeTest, |
84 HiddenAfterNonScrollingGesture) { | 103 HiddenAfterNonScrollingGesture) { |
85 scrollbar_layer_->SetOpacity(0.0f); | 104 scrollbar_layer_->SetOpacity(0.0f); |
(...skipping 12 matching lines...) Expand all Loading... |
98 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); | 117 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); |
99 | 118 |
100 EXPECT_EQ(0, needs_frame_count_); | 119 EXPECT_EQ(0, needs_frame_count_); |
101 } | 120 } |
102 | 121 |
103 TEST_F(ScrollbarAnimationControllerLinearFadeTest, AwakenByScrollingGesture) { | 122 TEST_F(ScrollbarAnimationControllerLinearFadeTest, AwakenByScrollingGesture) { |
104 base::TimeTicks time; | 123 base::TimeTicks time; |
105 time += base::TimeDelta::FromSeconds(1); | 124 time += base::TimeDelta::FromSeconds(1); |
106 scrollbar_controller_->DidScrollBegin(); | 125 scrollbar_controller_->DidScrollBegin(); |
107 | 126 |
108 scrollbar_controller_->DidScrollUpdate(); | 127 scrollbar_controller_->DidScrollUpdate(false); |
109 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); | 128 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
110 | 129 |
111 EXPECT_TRUE(start_fade_.Equals(base::Closure())); | 130 EXPECT_TRUE(start_fade_.Equals(base::Closure())); |
112 | 131 |
113 time += base::TimeDelta::FromSeconds(100); | 132 time += base::TimeDelta::FromSeconds(100); |
114 scrollbar_controller_->Animate(time); | 133 scrollbar_controller_->Animate(time); |
115 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); | 134 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
116 scrollbar_controller_->DidScrollEnd(); | 135 scrollbar_controller_->DidScrollEnd(); |
117 start_fade_.Run(); | 136 start_fade_.Run(); |
118 | 137 |
119 time += base::TimeDelta::FromSeconds(2); | 138 time += base::TimeDelta::FromSeconds(2); |
120 scrollbar_controller_->Animate(time); | 139 scrollbar_controller_->Animate(time); |
121 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); | 140 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
122 | 141 |
123 time += base::TimeDelta::FromSeconds(1); | 142 time += base::TimeDelta::FromSeconds(1); |
124 scrollbar_controller_->Animate(time); | 143 scrollbar_controller_->Animate(time); |
125 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); | 144 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); |
126 | 145 |
127 time += base::TimeDelta::FromSeconds(1); | 146 time += base::TimeDelta::FromSeconds(1); |
128 scrollbar_controller_->Animate(time); | 147 scrollbar_controller_->Animate(time); |
129 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); | 148 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); |
130 | 149 |
131 time += base::TimeDelta::FromSeconds(1); | 150 time += base::TimeDelta::FromSeconds(1); |
132 | 151 |
133 scrollbar_controller_->DidScrollBegin(); | 152 scrollbar_controller_->DidScrollBegin(); |
134 scrollbar_controller_->DidScrollUpdate(); | 153 scrollbar_controller_->DidScrollUpdate(false); |
135 scrollbar_controller_->DidScrollEnd(); | 154 scrollbar_controller_->DidScrollEnd(); |
136 start_fade_.Run(); | 155 start_fade_.Run(); |
137 | 156 |
138 time += base::TimeDelta::FromSeconds(2); | 157 time += base::TimeDelta::FromSeconds(2); |
139 scrollbar_controller_->Animate(time); | 158 scrollbar_controller_->Animate(time); |
140 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); | 159 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
141 | 160 |
142 time += base::TimeDelta::FromSeconds(1); | 161 time += base::TimeDelta::FromSeconds(1); |
143 scrollbar_controller_->Animate(time); | 162 scrollbar_controller_->Animate(time); |
144 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); | 163 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); |
145 | 164 |
146 time += base::TimeDelta::FromSeconds(1); | 165 time += base::TimeDelta::FromSeconds(1); |
147 scrollbar_controller_->Animate(time); | 166 scrollbar_controller_->Animate(time); |
148 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); | 167 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); |
149 | 168 |
150 time += base::TimeDelta::FromSeconds(1); | 169 time += base::TimeDelta::FromSeconds(1); |
151 scrollbar_controller_->Animate(time); | 170 scrollbar_controller_->Animate(time); |
152 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); | 171 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); |
153 | 172 |
154 EXPECT_EQ(8, needs_frame_count_); | 173 EXPECT_EQ(8, needs_frame_count_); |
155 } | 174 } |
156 | 175 |
157 TEST_F(ScrollbarAnimationControllerLinearFadeTest, AwakenByProgrammaticScroll) { | 176 TEST_F(ScrollbarAnimationControllerLinearFadeTest, AwakenByProgrammaticScroll) { |
158 base::TimeTicks time; | 177 base::TimeTicks time; |
159 time += base::TimeDelta::FromSeconds(1); | 178 time += base::TimeDelta::FromSeconds(1); |
160 scrollbar_controller_->DidScrollUpdate(); | 179 scrollbar_controller_->DidScrollUpdate(false); |
161 start_fade_.Run(); | 180 start_fade_.Run(); |
162 scrollbar_controller_->Animate(time); | 181 scrollbar_controller_->Animate(time); |
163 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); | 182 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
164 | 183 |
165 time += base::TimeDelta::FromSeconds(1); | 184 time += base::TimeDelta::FromSeconds(1); |
166 scrollbar_controller_->Animate(time); | 185 scrollbar_controller_->Animate(time); |
167 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); | 186 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); |
168 scrollbar_controller_->DidScrollUpdate(); | 187 scrollbar_controller_->DidScrollUpdate(false); |
169 start_fade_.Run(); | 188 start_fade_.Run(); |
170 | 189 |
171 time += base::TimeDelta::FromSeconds(1); | 190 time += base::TimeDelta::FromSeconds(1); |
172 scrollbar_controller_->Animate(time); | 191 scrollbar_controller_->Animate(time); |
173 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); | 192 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
174 | 193 |
175 time += base::TimeDelta::FromSeconds(1); | 194 time += base::TimeDelta::FromSeconds(1); |
176 scrollbar_controller_->Animate(time); | 195 scrollbar_controller_->Animate(time); |
177 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); | 196 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); |
178 | 197 |
179 time += base::TimeDelta::FromSeconds(1); | 198 time += base::TimeDelta::FromSeconds(1); |
180 scrollbar_controller_->Animate(time); | 199 scrollbar_controller_->Animate(time); |
181 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); | 200 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); |
182 | 201 |
183 time += base::TimeDelta::FromSeconds(1); | 202 time += base::TimeDelta::FromSeconds(1); |
184 scrollbar_controller_->DidScrollUpdate(); | 203 scrollbar_controller_->DidScrollUpdate(false); |
185 start_fade_.Run(); | 204 start_fade_.Run(); |
186 time += base::TimeDelta::FromSeconds(1); | 205 time += base::TimeDelta::FromSeconds(1); |
187 scrollbar_controller_->Animate(time); | 206 scrollbar_controller_->Animate(time); |
188 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); | 207 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
189 | 208 |
190 time += base::TimeDelta::FromSeconds(1); | 209 time += base::TimeDelta::FromSeconds(1); |
191 scrollbar_controller_->Animate(time); | 210 scrollbar_controller_->Animate(time); |
192 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); | 211 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); |
193 | 212 |
194 time += base::TimeDelta::FromSeconds(1); | 213 time += base::TimeDelta::FromSeconds(1); |
195 scrollbar_controller_->Animate(time); | 214 scrollbar_controller_->Animate(time); |
196 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); | 215 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); |
197 | 216 |
198 time += base::TimeDelta::FromSeconds(1); | 217 time += base::TimeDelta::FromSeconds(1); |
199 scrollbar_controller_->Animate(time); | 218 scrollbar_controller_->Animate(time); |
200 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); | 219 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); |
201 | 220 |
202 EXPECT_EQ(11, needs_frame_count_); | 221 EXPECT_EQ(11, needs_frame_count_); |
203 } | 222 } |
204 | 223 |
205 TEST_F(ScrollbarAnimationControllerLinearFadeTest, | 224 TEST_F(ScrollbarAnimationControllerLinearFadeTest, |
206 AnimationPreservedByNonScrollingGesture) { | 225 AnimationPreservedByNonScrollingGesture) { |
207 base::TimeTicks time; | 226 base::TimeTicks time; |
208 time += base::TimeDelta::FromSeconds(1); | 227 time += base::TimeDelta::FromSeconds(1); |
209 scrollbar_controller_->DidScrollUpdate(); | 228 scrollbar_controller_->DidScrollUpdate(false); |
210 start_fade_.Run(); | 229 start_fade_.Run(); |
211 scrollbar_controller_->Animate(time); | 230 scrollbar_controller_->Animate(time); |
212 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); | 231 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
213 | 232 |
214 time += base::TimeDelta::FromSeconds(1); | 233 time += base::TimeDelta::FromSeconds(1); |
215 scrollbar_controller_->Animate(time); | 234 scrollbar_controller_->Animate(time); |
216 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); | 235 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); |
217 | 236 |
218 scrollbar_controller_->DidScrollBegin(); | 237 scrollbar_controller_->DidScrollBegin(); |
219 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); | 238 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); |
(...skipping 11 matching lines...) Expand all Loading... |
231 | 250 |
232 scrollbar_controller_->Animate(time); | 251 scrollbar_controller_->Animate(time); |
233 | 252 |
234 EXPECT_EQ(4, needs_frame_count_); | 253 EXPECT_EQ(4, needs_frame_count_); |
235 } | 254 } |
236 | 255 |
237 TEST_F(ScrollbarAnimationControllerLinearFadeTest, | 256 TEST_F(ScrollbarAnimationControllerLinearFadeTest, |
238 AnimationOverriddenByScrollingGesture) { | 257 AnimationOverriddenByScrollingGesture) { |
239 base::TimeTicks time; | 258 base::TimeTicks time; |
240 time += base::TimeDelta::FromSeconds(1); | 259 time += base::TimeDelta::FromSeconds(1); |
241 scrollbar_controller_->DidScrollUpdate(); | 260 scrollbar_controller_->DidScrollUpdate(false); |
242 start_fade_.Run(); | 261 start_fade_.Run(); |
243 scrollbar_controller_->Animate(time); | 262 scrollbar_controller_->Animate(time); |
244 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); | 263 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); |
245 | 264 |
246 time += base::TimeDelta::FromSeconds(1); | 265 time += base::TimeDelta::FromSeconds(1); |
247 scrollbar_controller_->Animate(time); | 266 scrollbar_controller_->Animate(time); |
248 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); | 267 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); |
249 | 268 |
250 scrollbar_controller_->DidScrollBegin(); | 269 scrollbar_controller_->DidScrollBegin(); |
251 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); | 270 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); |
252 | 271 |
253 time += base::TimeDelta::FromSeconds(1); | 272 time += base::TimeDelta::FromSeconds(1); |
254 scrollbar_controller_->Animate(time); | 273 scrollbar_controller_->Animate(time); |
255 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); | 274 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); |
256 | 275 |
257 time += base::TimeDelta::FromSeconds(1); | 276 time += base::TimeDelta::FromSeconds(1); |
258 scrollbar_controller_->DidScrollUpdate(); | 277 scrollbar_controller_->DidScrollUpdate(false); |
259 EXPECT_FLOAT_EQ(1, scrollbar_layer_->opacity()); | 278 EXPECT_FLOAT_EQ(1, scrollbar_layer_->opacity()); |
260 | 279 |
261 time += base::TimeDelta::FromSeconds(1); | 280 time += base::TimeDelta::FromSeconds(1); |
262 scrollbar_controller_->DidScrollEnd(); | 281 scrollbar_controller_->DidScrollEnd(); |
263 EXPECT_FLOAT_EQ(1, scrollbar_layer_->opacity()); | 282 EXPECT_FLOAT_EQ(1, scrollbar_layer_->opacity()); |
264 } | 283 } |
265 | 284 |
266 } // namespace | 285 } // namespace |
267 } // namespace cc | 286 } // namespace cc |
OLD | NEW |