OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include "platform/scroll/ScrollAnimatorNone.h" | 30 #include "platform/scroll/ScrollAnimatorNone.h" |
31 | 31 |
32 #include "platform/Logging.h" | 32 #include "platform/Logging.h" |
33 #include "platform/geometry/FloatPoint.h" | 33 #include "platform/geometry/FloatPoint.h" |
34 #include "platform/geometry/IntRect.h" | 34 #include "platform/geometry/IntRect.h" |
35 #include "platform/scroll/ScrollAnimator.h" | 35 #include "platform/scroll/ScrollAnimator.h" |
36 #include "platform/scroll/ScrollableArea.h" | 36 #include "platform/scroll/ScrollableArea.h" |
37 #include <gmock/gmock.h> | 37 #include <gmock/gmock.h> |
38 #include <gtest/gtest.h> | 38 #include <gtest/gtest.h> |
39 | 39 |
| 40 using namespace std; |
40 using namespace WebCore; | 41 using namespace WebCore; |
41 | 42 |
42 using testing::AtLeast; | 43 using testing::AtLeast; |
43 using testing::Return; | 44 using testing::Return; |
44 using testing::_; | 45 using testing::_; |
45 | 46 |
46 class MockScrollableArea : public ScrollableArea { | 47 class MockScrollableArea : public ScrollableArea { |
47 public: | 48 public: |
48 MockScrollableArea(bool scrollAnimatorEnabled) | 49 MockScrollableArea(bool scrollAnimatorEnabled) |
49 : m_scrollAnimatorEnabled(scrollAnimatorEnabled) { } | 50 : m_scrollAnimatorEnabled(scrollAnimatorEnabled) { } |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 double oldDesiredVelocity = m_data->m_desiredVelocity; | 270 double oldDesiredVelocity = m_data->m_desiredVelocity; |
270 double oldTimeLeft = m_data->m_animationTime - (m_data->m_lastAnimationTime
- m_data->m_startTime); | 271 double oldTimeLeft = m_data->m_animationTime - (m_data->m_lastAnimationTime
- m_data->m_startTime); |
271 bool result = m_data->updateDataFromParameters(step, multiplier, scrollableS
ize, currentTime, parameters); | 272 bool result = m_data->updateDataFromParameters(step, multiplier, scrollableS
ize, currentTime, parameters); |
272 if (m_scrollingDown) | 273 if (m_scrollingDown) |
273 EXPECT_LE(oldVelocity, m_data->m_currentVelocity); | 274 EXPECT_LE(oldVelocity, m_data->m_currentVelocity); |
274 else | 275 else |
275 EXPECT_GE(oldVelocity, m_data->m_currentVelocity); | 276 EXPECT_GE(oldVelocity, m_data->m_currentVelocity); |
276 | 277 |
277 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime; | 278 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime; |
278 double timeLeft = m_data->m_animationTime - deltaTime; | 279 double timeLeft = m_data->m_animationTime - deltaTime; |
279 double releaseTimeLeft = std::min(timeLeft, m_data->m_releaseTime); | 280 double releaseTimeLeft = min(timeLeft, m_data->m_releaseTime); |
280 double attackTimeLeft = std::max(0., m_data->m_attackTime - deltaTime); | 281 double attackTimeLeft = max(0., m_data->m_attackTime - deltaTime); |
281 double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTim
eLeft); | 282 double sustainTimeLeft = max(0., timeLeft - releaseTimeLeft - attackTimeLeft
); |
282 | 283 |
283 // If we're getting near the finish, the desired velocity can decrease since
the time left gets increased. | 284 // If we're getting near the finish, the desired velocity can decrease since
the time left gets increased. |
284 if (step * multiplier) { | 285 if (step * multiplier) { |
285 double allowedVelocityDecreaseFactor = 0.99 * oldTimeLeft / timeLeft; | 286 double allowedVelocityDecreaseFactor = 0.99 * oldTimeLeft / timeLeft; |
286 allowedVelocityDecreaseFactor *= allowedVelocityDecreaseFactor; | 287 allowedVelocityDecreaseFactor *= allowedVelocityDecreaseFactor; |
287 if (m_scrollingDown) | 288 if (m_scrollingDown) |
288 EXPECT_LE(oldDesiredVelocity * allowedVelocityDecreaseFactor, m_data
->m_desiredVelocity); | 289 EXPECT_LE(oldDesiredVelocity * allowedVelocityDecreaseFactor, m_data
->m_desiredVelocity); |
289 else | 290 else |
290 EXPECT_GE(oldDesiredVelocity * allowedVelocityDecreaseFactor, m_data
->m_desiredVelocity); | 291 EXPECT_GE(oldDesiredVelocity * allowedVelocityDecreaseFactor, m_data
->m_desiredVelocity); |
291 | 292 |
292 double startPosition = attackTimeLeft ? m_data->m_attackPosition : m_cur
rentPosition; | 293 double startPosition = attackTimeLeft ? m_data->m_attackPosition : m_cur
rentPosition; |
293 double expectedReleasePosition = startPosition + sustainTimeLeft * m_dat
a->m_desiredVelocity; | 294 double expectedReleasePosition = startPosition + sustainTimeLeft * m_dat
a->m_desiredVelocity; |
294 EXPECT_NEAR(expectedReleasePosition, m_data->m_releasePosition, result ?
.0001 : 1); | 295 EXPECT_NEAR(expectedReleasePosition, m_data->m_releasePosition, result ?
.0001 : 1); |
295 } | 296 } |
296 | 297 |
297 return result; | 298 return result; |
298 } | 299 } |
299 | 300 |
300 bool ScrollAnimatorNoneTest::animateScroll(double currentTime) | 301 bool ScrollAnimatorNoneTest::animateScroll(double currentTime) |
301 { | 302 { |
302 double oldPosition = *m_data->m_currentPosition; | 303 double oldPosition = *m_data->m_currentPosition; |
303 bool testEstimatedMaxVelocity = m_data->m_startTime + m_data->m_animationTim
e - m_data->m_lastAnimationTime > m_data->m_releaseTime; | 304 bool testEstimatedMaxVelocity = m_data->m_startTime + m_data->m_animationTim
e - m_data->m_lastAnimationTime > m_data->m_releaseTime; |
304 | 305 |
305 bool result = m_data->animateScroll(currentTime); | 306 bool result = m_data->animateScroll(currentTime); |
306 | 307 |
307 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime; | 308 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime; |
308 double timeLeft = m_data->m_animationTime - deltaTime; | 309 double timeLeft = m_data->m_animationTime - deltaTime; |
309 double releaseTimeLeft = std::min(timeLeft, m_data->m_releaseTime); | 310 double releaseTimeLeft = min(timeLeft, m_data->m_releaseTime); |
310 double attackTimeLeft = std::max(0., m_data->m_attackTime - deltaTime); | 311 double attackTimeLeft = max(0., m_data->m_attackTime - deltaTime); |
311 double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTim
eLeft); | 312 double sustainTimeLeft = max(0., timeLeft - releaseTimeLeft - attackTimeLeft
); |
312 double distanceLeft = m_data->m_desiredPosition - *m_data->m_currentPosition
; | 313 double distanceLeft = m_data->m_desiredPosition - *m_data->m_currentPosition
; |
313 | 314 |
314 if (m_scrollingDown) { | 315 if (m_scrollingDown) { |
315 EXPECT_LE(0, m_data->m_currentVelocity); | 316 EXPECT_LE(0, m_data->m_currentVelocity); |
316 EXPECT_LE(oldPosition, *m_data->m_currentPosition); | 317 EXPECT_LE(oldPosition, *m_data->m_currentPosition); |
317 } else { | 318 } else { |
318 EXPECT_GE(0, m_data->m_currentVelocity); | 319 EXPECT_GE(0, m_data->m_currentVelocity); |
319 EXPECT_GE(oldPosition, *m_data->m_currentPosition); | 320 EXPECT_GE(oldPosition, *m_data->m_currentPosition); |
320 } | 321 } |
321 EXPECT_GE(fabs(m_data->m_desiredVelocity) * 2, fabs(m_data->m_currentVelocit
y)); | 322 EXPECT_GE(fabs(m_data->m_desiredVelocity) * 2, fabs(m_data->m_currentVelocit
y)); |
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1043 EXPECT_TRUE(result); | 1044 EXPECT_TRUE(result); |
1044 result = result && animateScroll(t); | 1045 result = result && animateScroll(t); |
1045 double after = m_currentPosition; | 1046 double after = m_currentPosition; |
1046 EXPECT_GE(before, after); | 1047 EXPECT_GE(before, after); |
1047 | 1048 |
1048 t += kAnimationTime; | 1049 t += kAnimationTime; |
1049 for (; result && t < kEndTime; t += kAnimationTime) | 1050 for (; result && t < kEndTime; t += kAnimationTime) |
1050 result = result && animateScroll(t); | 1051 result = result && animateScroll(t); |
1051 EXPECT_GE(before, m_currentPosition); | 1052 EXPECT_GE(before, m_currentPosition); |
1052 } | 1053 } |
OLD | NEW |