Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(371)

Side by Side Diff: Source/WebKit/chromium/tests/ScrollAnimatorNoneTest.cpp

Issue 7590014: Merge 92002 - Scroll animation refinements. (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/835/
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/WebCore/platform/ScrollAnimatorNone.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 double curveIntegralAt(ScrollAnimatorNone::Curve, double t); 169 double curveIntegralAt(ScrollAnimatorNone::Curve, double t);
170 double attackArea(ScrollAnimatorNone::Curve, double startT, double endT); 170 double attackArea(ScrollAnimatorNone::Curve, double startT, double endT);
171 double releaseArea(ScrollAnimatorNone::Curve, double startT, double endT); 171 double releaseArea(ScrollAnimatorNone::Curve, double startT, double endT);
172 double attackCurve(ScrollAnimatorNone::Curve, double deltaT, double curveT, double startPosition, double attackPosition); 172 double attackCurve(ScrollAnimatorNone::Curve, double deltaT, double curveT, double startPosition, double attackPosition);
173 double releaseCurve(ScrollAnimatorNone::Curve, double deltaT, double curveT, double releasePosition, double desiredPosition); 173 double releaseCurve(ScrollAnimatorNone::Curve, double deltaT, double curveT, double releasePosition, double desiredPosition);
174 double curveDerivativeAt(ScrollAnimatorNone::Curve, double unitTime); 174 double curveDerivativeAt(ScrollAnimatorNone::Curve, double unitTime);
175 175
176 void curveTestInner(ScrollAnimatorNone::Curve, double step, double time); 176 void curveTestInner(ScrollAnimatorNone::Curve, double step, double time);
177 void curveTest(ScrollAnimatorNone::Curve); 177 void curveTest(ScrollAnimatorNone::Curve);
178 178
179 void checkDesiredPosition(float expectedPosition);
180 void checkSoftLanding(float expectedPosition);
181
179 static double kTickTime; 182 static double kTickTime;
180 static double kAnimationTime; 183 static double kAnimationTime;
181 static double kStartTime; 184 static double kStartTime;
182 static double kEndTime; 185 static double kEndTime;
183 float m_currentPosition; 186 float m_currentPosition;
184 MockScrollAnimatorNone m_mockScrollAnimatorNone; 187 MockScrollAnimatorNone m_mockScrollAnimatorNone;
188 bool m_scrollingDown;
185 ScrollAnimatorNone::PerAxisData* m_data; 189 ScrollAnimatorNone::PerAxisData* m_data;
186 }; 190 };
187 191
188 double ScrollAnimatorNoneTest::kTickTime = 1 / 60.0; 192 double ScrollAnimatorNoneTest::kTickTime = 1 / 60.0;
189 double ScrollAnimatorNoneTest::kAnimationTime = 0.01; 193 double ScrollAnimatorNoneTest::kAnimationTime = 0.01;
190 double ScrollAnimatorNoneTest::kStartTime = 10.0; 194 double ScrollAnimatorNoneTest::kStartTime = 10.0;
191 double ScrollAnimatorNoneTest::kEndTime = 20.0; 195 double ScrollAnimatorNoneTest::kEndTime = 20.0;
192 196
193 void ScrollAnimatorNoneTest::reset() 197 void ScrollAnimatorNoneTest::reset()
194 { 198 {
195 m_data->reset(); 199 m_data->reset();
200 m_scrollingDown = true;
196 } 201 }
197 202
198 bool ScrollAnimatorNoneTest::updateDataFromParameters(ScrollbarOrientation orien tation, float step, float multiplier, float scrollableSize, double currentTime, ScrollAnimatorNone::Parameters* parameters) 203 bool ScrollAnimatorNoneTest::updateDataFromParameters(ScrollbarOrientation orien tation, float step, float multiplier, float scrollableSize, double currentTime, ScrollAnimatorNone::Parameters* parameters)
199 { 204 {
205 m_scrollingDown = (step * multiplier > 0);
206
200 double oldVelocity = m_data->m_currentVelocity; 207 double oldVelocity = m_data->m_currentVelocity;
201 double oldDesiredVelocity = m_data->m_desiredVelocity; 208 double oldDesiredVelocity = m_data->m_desiredVelocity;
202 double oldTimeLeft = m_data->m_animationTime - (m_data->m_lastAnimationTime - m_data->m_startTime); 209 double oldTimeLeft = m_data->m_animationTime - (m_data->m_lastAnimationTime - m_data->m_startTime);
203 bool result = m_data->updateDataFromParameters(orientation, step, multiplier , scrollableSize, currentTime, parameters); 210 bool result = m_data->updateDataFromParameters(orientation, step, multiplier , scrollableSize, currentTime, parameters);
204 EXPECT_LE(oldVelocity, m_data->m_currentVelocity); 211 if (m_scrollingDown)
212 EXPECT_LE(oldVelocity, m_data->m_currentVelocity);
213 else
214 EXPECT_GE(oldVelocity, m_data->m_currentVelocity);
205 215
206 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime; 216 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime;
207 double timeLeft = m_data->m_animationTime - deltaTime; 217 double timeLeft = m_data->m_animationTime - deltaTime;
208 double releaseTimeLeft = std::min(timeLeft, m_data->m_releaseTime); 218 double releaseTimeLeft = std::min(timeLeft, m_data->m_releaseTime);
209 double attackTimeLeft = std::max(0., m_data->m_attackTime - deltaTime); 219 double attackTimeLeft = std::max(0., m_data->m_attackTime - deltaTime);
210 double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTim eLeft); 220 double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTim eLeft);
211 221
212 // If we're getting near the finish, the desired velocity can decrease since the time left gets increased. 222 // If we're getting near the finish, the desired velocity can decrease since the time left gets increased.
213 double allowedVelocityDecreaseFactor = 0.99 * oldTimeLeft / timeLeft; 223 double allowedVelocityDecreaseFactor = 0.99 * oldTimeLeft / timeLeft;
214 allowedVelocityDecreaseFactor *= allowedVelocityDecreaseFactor; 224 allowedVelocityDecreaseFactor *= allowedVelocityDecreaseFactor;
215 EXPECT_LE(oldDesiredVelocity * allowedVelocityDecreaseFactor, m_data->m_desi redVelocity); 225 if (m_scrollingDown)
226 EXPECT_LE(oldDesiredVelocity * allowedVelocityDecreaseFactor, m_data->m_ desiredVelocity);
227 else
228 EXPECT_GE(oldDesiredVelocity * allowedVelocityDecreaseFactor, m_data->m_ desiredVelocity);
216 229
217 double expectedReleasePosition = std::max<double>(m_currentPosition, m_data- >m_attackPosition) + sustainTimeLeft * m_data->m_desiredVelocity; 230 double startPosition = m_scrollingDown ? std::max<double>(m_currentPosition, m_data->m_attackPosition) : std::min<double>(m_currentPosition, m_data->m_attac kPosition);
218 EXPECT_DOUBLE_EQ(expectedReleasePosition, m_data->m_releasePosition); 231 double expectedReleasePosition = startPosition + sustainTimeLeft * m_data->m _desiredVelocity;
232 if (result)
233 EXPECT_DOUBLE_EQ(expectedReleasePosition, m_data->m_releasePosition);
234 else
235 EXPECT_NEAR(expectedReleasePosition, m_data->m_releasePosition, 1);
219 236
220 return result; 237 return result;
221 } 238 }
222 239
223 bool ScrollAnimatorNoneTest::animateScroll(double currentTime) 240 bool ScrollAnimatorNoneTest::animateScroll(double currentTime)
224 { 241 {
225 double oldPosition = *m_data->m_currentPosition; 242 double oldPosition = *m_data->m_currentPosition;
226 bool testEstimatedMaxVelocity = m_data->m_startTime + m_data->m_animationTim e - m_data->m_lastAnimationTime > m_data->m_releaseTime; 243 bool testEstimatedMaxVelocity = m_data->m_startTime + m_data->m_animationTim e - m_data->m_lastAnimationTime > m_data->m_releaseTime;
227 244
228 bool result = m_data->animateScroll(currentTime); 245 bool result = m_data->animateScroll(currentTime);
229 246
230 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime; 247 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime;
231 double timeLeft = m_data->m_animationTime - deltaTime; 248 double timeLeft = m_data->m_animationTime - deltaTime;
232 double releaseTimeLeft = std::min(timeLeft, m_data->m_releaseTime); 249 double releaseTimeLeft = std::min(timeLeft, m_data->m_releaseTime);
233 double attackTimeLeft = std::max(0., m_data->m_attackTime - deltaTime); 250 double attackTimeLeft = std::max(0., m_data->m_attackTime - deltaTime);
234 double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTim eLeft); 251 double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTim eLeft);
235 double distanceLeft = m_data->m_desiredPosition - *m_data->m_currentPosition ; 252 double distanceLeft = m_data->m_desiredPosition - *m_data->m_currentPosition ;
236 253
237 EXPECT_LE(0, m_data->m_currentVelocity); 254 if (m_scrollingDown) {
238 EXPECT_LE(oldPosition, *m_data->m_currentPosition); 255 EXPECT_LE(0, m_data->m_currentVelocity);
239 EXPECT_GE(m_data->m_desiredVelocity * 2, m_data->m_currentVelocity); 256 EXPECT_LE(oldPosition, *m_data->m_currentPosition);
257 } else {
258 EXPECT_GE(0, m_data->m_currentVelocity);
259 EXPECT_GE(oldPosition, *m_data->m_currentPosition);
260 }
261 EXPECT_GE(fabs(m_data->m_desiredVelocity) * 2, fabs(m_data->m_currentVelocit y));
240 if (testEstimatedMaxVelocity) 262 if (testEstimatedMaxVelocity)
241 EXPECT_GE((distanceLeft / sustainTimeLeft) * 1.2, m_data->m_currentVeloc ity); 263 EXPECT_GE(fabs(distanceLeft / sustainTimeLeft) * 1.2, fabs(m_data->m_cur rentVelocity));
242 264
243 return result; 265 return result;
244 } 266 }
245 267
246 double ScrollAnimatorNoneTest::curveIntegralAt(ScrollAnimatorNone::Curve curve, double t) 268 double ScrollAnimatorNoneTest::curveIntegralAt(ScrollAnimatorNone::Curve curve, double t)
247 { 269 {
248 switch (curve) { 270 switch (curve) {
249 case ScrollAnimatorNone::Linear: 271 case ScrollAnimatorNone::Linear:
250 return t * t * t / 3; 272 return t * t * t / 3;
251 case ScrollAnimatorNone::Quadratic: 273 case ScrollAnimatorNone::Quadratic:
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 378
357 void ScrollAnimatorNoneTest::curveTest(ScrollAnimatorNone::Curve curve) 379 void ScrollAnimatorNoneTest::curveTest(ScrollAnimatorNone::Curve curve)
358 { 380 {
359 curveTestInner(curve, 0.01, 0.25); 381 curveTestInner(curve, 0.01, 0.25);
360 curveTestInner(curve, 0.2, 10); 382 curveTestInner(curve, 0.2, 10);
361 curveTestInner(curve, 0.025, 10); 383 curveTestInner(curve, 0.025, 10);
362 curveTestInner(curve, 0.01, 1); 384 curveTestInner(curve, 0.01, 1);
363 curveTestInner(curve, 0.25, 40); 385 curveTestInner(curve, 0.25, 40);
364 } 386 }
365 387
388 void ScrollAnimatorNoneTest::checkDesiredPosition(float expectedPosition)
389 {
390 EXPECT_EQ(expectedPosition, m_data->m_desiredPosition);
391 }
392
393 void ScrollAnimatorNoneTest::checkSoftLanding(float expectedPosition)
394 {
395 EXPECT_EQ(expectedPosition, m_currentPosition);
396 EXPECT_LE(m_data->m_desiredVelocity / 2, m_data->m_currentVelocity);
397 }
398
366 TEST_F(ScrollAnimatorNoneTest, CurveMathLinear) 399 TEST_F(ScrollAnimatorNoneTest, CurveMathLinear)
367 { 400 {
368 curveTest(ScrollAnimatorNone::Linear); 401 curveTest(ScrollAnimatorNone::Linear);
369 } 402 }
370 403
371 TEST_F(ScrollAnimatorNoneTest, CurveMathQuadratic) 404 TEST_F(ScrollAnimatorNoneTest, CurveMathQuadratic)
372 { 405 {
373 curveTest(ScrollAnimatorNone::Quadratic); 406 curveTest(ScrollAnimatorNone::Quadratic);
374 } 407 }
375 408
376 TEST_F(ScrollAnimatorNoneTest, CurveMathCubic) 409 TEST_F(ScrollAnimatorNoneTest, CurveMathCubic)
377 { 410 {
378 curveTest(ScrollAnimatorNone::Cubic); 411 curveTest(ScrollAnimatorNone::Cubic);
379 } 412 }
380 413
381 TEST_F(ScrollAnimatorNoneTest, CurveMathBounce) 414 TEST_F(ScrollAnimatorNoneTest, CurveMathBounce)
382 { 415 {
383 curveTest(ScrollAnimatorNone::Bounce); 416 curveTest(ScrollAnimatorNone::Bounce);
384 } 417 }
385 418
386 TEST_F(ScrollAnimatorNoneTest, ScrollOnceLinear) 419 TEST_F(ScrollAnimatorNoneTest, ScrollOnceLinear)
387 { 420 {
388 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato rNone::Linear, 3 * kTickTime, ScrollAnimatorNone::Linear, 3 * kTickTime); 421 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim atorNone::Linear, 3 * kTickTime, ScrollAnimatorNone::Linear, 3 * kTickTime);
389 422
390 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters); 423 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters);
391 bool result = true; 424 bool result = true;
392 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) 425 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime)
393 result = animateScroll(t); 426 result = animateScroll(t);
394 } 427 }
395 428
396 TEST_F(ScrollAnimatorNoneTest, ScrollOnceQuadratic) 429 TEST_F(ScrollAnimatorNoneTest, ScrollOnceQuadratic)
397 { 430 {
398 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato rNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); 431 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim atorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime );
399 432
400 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters); 433 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters);
401 bool result = true; 434 bool result = true;
402 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) 435 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime)
403 result = animateScroll(t); 436 result = animateScroll(t);
404 } 437 }
405 438
406 TEST_F(ScrollAnimatorNoneTest, ScrollLongQuadratic) 439 TEST_F(ScrollAnimatorNoneTest, ScrollLongQuadratic)
407 { 440 {
408 ScrollAnimatorNone::Parameters parameters(true, 20 * kTickTime, ScrollAnimat orNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); 441 ScrollAnimatorNone::Parameters parameters(true, 20 * kTickTime, 0, ScrollAni matorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTim e);
409 442
410 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters); 443 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters);
411 bool result = true; 444 bool result = true;
412 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) 445 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime)
413 result = animateScroll(t); 446 result = animateScroll(t);
414 } 447 }
415 448
416 TEST_F(ScrollAnimatorNoneTest, ScrollQuadraticNoSustain) 449 TEST_F(ScrollAnimatorNoneTest, ScrollQuadraticNoSustain)
417 { 450 {
418 ScrollAnimatorNone::Parameters parameters(true, 8 * kTickTime, ScrollAnimato rNone::Quadratic, 4 * kTickTime, ScrollAnimatorNone::Quadratic, 4 * kTickTime); 451 ScrollAnimatorNone::Parameters parameters(true, 8 * kTickTime, 0, ScrollAnim atorNone::Quadratic, 4 * kTickTime, ScrollAnimatorNone::Quadratic, 4 * kTickTime );
419 452
420 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters); 453 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters);
421 bool result = true; 454 bool result = true;
422 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) 455 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime)
423 result = animateScroll(t); 456 result = animateScroll(t);
424 } 457 }
425 458
459 TEST_F(ScrollAnimatorNoneTest, ScrollQuadraticSmoothed)
460 {
461 ScrollAnimatorNone::Parameters parameters(true, 8 * kTickTime, 8 * kTickTime , ScrollAnimatorNone::Quadratic, 4 * kTickTime, ScrollAnimatorNone::Quadratic, 4 * kTickTime);
462
463 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters);
464 bool result = true;
465 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime)
466 result = animateScroll(t);
467 }
468
426 TEST_F(ScrollAnimatorNoneTest, ScrollOnceCubic) 469 TEST_F(ScrollAnimatorNoneTest, ScrollOnceCubic)
427 { 470 {
428 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato rNone::Cubic, 3 * kTickTime, ScrollAnimatorNone::Cubic, 3 * kTickTime); 471 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim atorNone::Cubic, 3 * kTickTime, ScrollAnimatorNone::Cubic, 3 * kTickTime);
429 472
430 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters); 473 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters);
431 bool result = true; 474 bool result = true;
432 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) 475 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime)
433 result = animateScroll(t); 476 result = animateScroll(t);
434 } 477 }
435 478
436 TEST_F(ScrollAnimatorNoneTest, ScrollOnceShort) 479 TEST_F(ScrollAnimatorNoneTest, ScrollOnceShort)
437 { 480 {
438 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato rNone::Cubic, 3 * kTickTime, ScrollAnimatorNone::Cubic, 3 * kTickTime); 481 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim atorNone::Cubic, 3 * kTickTime, ScrollAnimatorNone::Cubic, 3 * kTickTime);
439 482
440 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters); 483 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters);
441 bool result = true; 484 bool result = true;
442 for (double t = kStartTime; result && t < kEndTime; t += kTickTime) 485 for (double t = kStartTime; result && t < kEndTime; t += kTickTime)
443 result = animateScroll(t); 486 result = animateScroll(t);
444 } 487 }
445 488
446 TEST_F(ScrollAnimatorNoneTest, ScrollTwiceQuadratic) 489 TEST_F(ScrollAnimatorNoneTest, ScrollTwiceQuadratic)
447 { 490 {
448 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato rNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); 491 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim atorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime );
449 492
450 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters); 493 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters);
451 bool result = true; 494 bool result = true;
452 double t; 495 double t;
453 for (t = kStartTime; result && t < kStartTime + 1.5 * kTickTime; t += kAnima tionTime) 496 for (t = kStartTime; result && t < kStartTime + 1.5 * kTickTime; t += kAnima tionTime)
454 result = animateScroll(t); 497 result = animateScroll(t);
455 498
456 result = result && animateScroll(t); 499 result = result && animateScroll(t);
457 double before = m_currentPosition; 500 double before = m_currentPosition;
458 result = result && updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, t, &parameters); 501 result = result && updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, t, &parameters);
(...skipping 10 matching lines...) Expand all
469 after = m_currentPosition; 512 after = m_currentPosition;
470 EXPECT_NEAR(before, after, 10); 513 EXPECT_NEAR(before, after, 10);
471 514
472 t += kAnimationTime; 515 t += kAnimationTime;
473 for (; result && t < kEndTime; t += kAnimationTime) 516 for (; result && t < kEndTime; t += kAnimationTime)
474 result = animateScroll(t); 517 result = animateScroll(t);
475 } 518 }
476 519
477 TEST_F(ScrollAnimatorNoneTest, ScrollLotsQuadratic) 520 TEST_F(ScrollAnimatorNoneTest, ScrollLotsQuadratic)
478 { 521 {
479 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato rNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); 522 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim atorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime );
480 523
481 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters); 524 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters);
482 bool result = true; 525 bool result = true;
483 double t; 526 double t;
484 for (t = kStartTime; result && t < kStartTime + 1.5 * kTickTime; t += kAnima tionTime) 527 for (t = kStartTime; result && t < kStartTime + 1.5 * kTickTime; t += kAnima tionTime)
485 result = animateScroll(t); 528 result = animateScroll(t);
486 529
487 for (int i = 0; i < 20; ++i) { 530 for (int i = 0; i < 20; ++i) {
488 t += kAnimationTime; 531 t += kAnimationTime;
489 result = result && animateScroll(t); 532 result = result && animateScroll(t);
490 result = result && updateDataFromParameters(VerticalScrollbar, 3, 40, 10 000, t, &parameters); 533 result = result && updateDataFromParameters(VerticalScrollbar, 3, 40, 10 000, t, &parameters);
491 } 534 }
492 535
493 t += kAnimationTime; 536 t += kAnimationTime;
494 for (; result && t < kEndTime; t += kAnimationTime) 537 for (; result && t < kEndTime; t += kAnimationTime)
495 result = result && animateScroll(t); 538 result = result && animateScroll(t);
496 } 539 }
497 540
541 TEST_F(ScrollAnimatorNoneTest, ScrollLotsQuadraticSmoothed)
542 {
543 ScrollAnimatorNone::Parameters parameters(true, 10 * kTickTime, 6 * kTickTim e, ScrollAnimatorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime);
544
545 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, &parame ters);
546 bool result = true;
547 double t;
548 for (t = kStartTime; result && t < kStartTime + 1.5 * kTickTime; t += kAnima tionTime)
549 result = animateScroll(t);
550
551 for (int i = 0; i < 20; ++i) {
552 t += kAnimationTime;
553 result = result && animateScroll(t);
554 result = result && updateDataFromParameters(VerticalScrollbar, 3, 40, 10 000, t, &parameters);
555 }
556
557 t += kAnimationTime;
558 for (; result && t < kEndTime; t += kAnimationTime)
559 result = result && animateScroll(t);
560 }
561
498 TEST_F(ScrollAnimatorNoneTest, ScrollWheelTrace) 562 TEST_F(ScrollAnimatorNoneTest, ScrollWheelTrace)
499 { 563 {
500 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, ScrollAnimat orNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); 564 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, 0, ScrollAni matorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTim e);
501 565
502 // Constructed from an actual scroll wheel trace that exhibited a glitch. 566 // Constructed from an actual scroll wheel trace that exhibited a glitch.
503 bool result = updateDataFromParameters(VerticalScrollbar, 1, 53.33, 1000, 10 0.5781, &parameters); 567 bool result = updateDataFromParameters(VerticalScrollbar, 1, 53.33, 1000, 10 0.5781, &parameters);
504 result = animateScroll(100.5933); 568 result = animateScroll(100.5933);
505 result = result && animateScroll(100.6085); 569 result = result && animateScroll(100.6085);
506 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.6485, &parameters); 570 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.6485, &parameters);
507 result = result && animateScroll(100.6515); 571 result = result && animateScroll(100.6515);
508 result = result && animateScroll(100.6853); 572 result = result && animateScroll(100.6853);
509 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.6863, &parameters); 573 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.6863, &parameters);
510 result = result && animateScroll(100.7005); 574 result = result && animateScroll(100.7005);
511 result = result && animateScroll(100.7157); 575 result = result && animateScroll(100.7157);
512 result = result && animateScroll(100.7312); 576 result = result && animateScroll(100.7312);
513 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.7379, &parameters); 577 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.7379, &parameters);
514 result = result && animateScroll(100.7464); 578 result = result && animateScroll(100.7464);
515 result = result && animateScroll(100.7617); 579 result = result && animateScroll(100.7617);
516 result = result && animateScroll(100.7775); 580 result = result && animateScroll(100.7775);
517 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.7779, &parameters); 581 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.7779, &parameters);
518 for (double t = 100.7928; result && t < 200; t += 0.015) 582 for (double t = 100.7928; result && t < 200; t += 0.015)
519 result = result && animateScroll(t); 583 result = result && animateScroll(t);
520 } 584 }
521 585
586 TEST_F(ScrollAnimatorNoneTest, ScrollWheelTraceSmoothed)
587 {
588 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, 7 * kTickTim e, ScrollAnimatorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime);
589
590 // Constructed from an actual scroll wheel trace that exhibited a glitch.
591 bool result = updateDataFromParameters(VerticalScrollbar, 1, 53.33, 1000, 10 0.5781, &parameters);
592 result = animateScroll(100.5933);
593 result = result && animateScroll(100.6085);
594 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.6485, &parameters);
595 result = result && animateScroll(100.6515);
596 result = result && animateScroll(100.6853);
597 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.6863, &parameters);
598 result = result && animateScroll(100.7005);
599 result = result && animateScroll(100.7157);
600 result = result && animateScroll(100.7312);
601 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.7379, &parameters);
602 result = result && animateScroll(100.7464);
603 result = result && animateScroll(100.7617);
604 result = result && animateScroll(100.7775);
605 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100 0, 100.7779, &parameters);
606 for (double t = 100.7928; result && t < 200; t += 0.015)
607 result = result && animateScroll(t);
608 }
609
522 TEST_F(ScrollAnimatorNoneTest, LinuxTrackPadTrace) 610 TEST_F(ScrollAnimatorNoneTest, LinuxTrackPadTrace)
523 { 611 {
524 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, ScrollAnimat orNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); 612 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, 0, ScrollAni matorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTim e);
525 613
526 bool result = updateDataFromParameters(VerticalScrollbar, 1.00, 60.00, 1000, 100.6863, &parameters); 614 bool result = updateDataFromParameters(VerticalScrollbar, 1.00, 60.00, 1000, 100.6863, &parameters);
527 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.6897, &parameters); 615 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.6897, &parameters);
528 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7001, &parameters); 616 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7001, &parameters);
529 result = result && animateScroll(100.7015); 617 result = result && animateScroll(100.7015);
530 result = result && animateScroll(100.7169); 618 result = result && animateScroll(100.7169);
531 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 40.00, 1000, 100.7179, &parameters); 619 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 40.00, 1000, 100.7179, &parameters);
532 result = result && animateScroll(100.7322); 620 result = result && animateScroll(100.7322);
533 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7332, &parameters); 621 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7332, &parameters);
534 result = result && animateScroll(100.7491); 622 result = result && animateScroll(100.7491);
535 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7519, &parameters); 623 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7519, &parameters);
536 result = result && animateScroll(100.7676); 624 result = result && animateScroll(100.7676);
537 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7698, &parameters); 625 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7698, &parameters);
538 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7830, &parameters); 626 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7830, &parameters);
539 result = result && animateScroll(100.7834); 627 result = result && animateScroll(100.7834);
540 result = result && animateScroll(100.7997); 628 result = result && animateScroll(100.7997);
541 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8019, &parameters); 629 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8019, &parameters);
542 result = result && animateScroll(100.8154); 630 result = result && animateScroll(100.8154);
543 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8241, &parameters); 631 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8241, &parameters);
544 result = result && animateScroll(100.8335); 632 result = result && animateScroll(100.8335);
545 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8465, &parameters); 633 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8465, &parameters);
546 result = result && animateScroll(100.8513); 634 result = result && animateScroll(100.8513);
547 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8623, &parameters); 635 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8623, &parameters);
548 for (double t = 100.8674; result && t < 200; t += 0.015) 636 for (double t = 100.8674; result && t < 200; t += 0.015)
549 result = result && animateScroll(t); 637 result = result && animateScroll(t);
550 } 638 }
551 639
640 TEST_F(ScrollAnimatorNoneTest, LinuxTrackPadTraceSmoothed)
641 {
642 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, 7 * kTickTim e, ScrollAnimatorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime);
643
644 bool result = updateDataFromParameters(VerticalScrollbar, 1.00, 60.00, 1000, 100.6863, &parameters);
645 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.6897, &parameters);
646 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7001, &parameters);
647 result = result && animateScroll(100.7015);
648 result = result && animateScroll(100.7169);
649 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 40.00, 1000, 100.7179, &parameters);
650 result = result && animateScroll(100.7322);
651 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7332, &parameters);
652 result = result && animateScroll(100.7491);
653 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7519, &parameters);
654 result = result && animateScroll(100.7676);
655 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7698, &parameters);
656 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.7830, &parameters);
657 result = result && animateScroll(100.7834);
658 result = result && animateScroll(100.7997);
659 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8019, &parameters);
660 result = result && animateScroll(100.8154);
661 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8241, &parameters);
662 result = result && animateScroll(100.8335);
663 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8465, &parameters);
664 result = result && animateScroll(100.8513);
665 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00, 1000, 100.8623, &parameters);
666 for (double t = 100.8674; result && t < 200; t += 0.015)
667 result = result && animateScroll(t);
668 }
669
670 TEST_F(ScrollAnimatorNoneTest, ScrollDownToBumper)
671 {
672 ScrollAnimatorNone::Parameters parameters(true, 10 * kTickTime, 7 * kTickTim e, ScrollAnimatorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime);
673
674 updateDataFromParameters(VerticalScrollbar, 1, 20, 200, kStartTime, &paramet ers);
675 bool result = true;
676 double t = kStartTime;
677 for (int i = 0; i < 10; ++i) {
678 t += kAnimationTime;
679 result = result && animateScroll(t);
680 updateDataFromParameters(VerticalScrollbar, 1, 20, 200, t, &parameters);
681 }
682 checkDesiredPosition(200);
683
684 t += kAnimationTime;
685 for (; result && t < kEndTime; t += kAnimationTime)
686 result = result && animateScroll(t);
687 checkSoftLanding(200);
688 }
689
690
691 TEST_F(ScrollAnimatorNoneTest, ScrollUpToBumper)
692 {
693 ScrollAnimatorNone::Parameters parameters(true, 10 * kTickTime, 7 * kTickTim e, ScrollAnimatorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime);
694
695 updateDataFromParameters(VerticalScrollbar, 1, -20, 200, kStartTime, &parame ters);
696 bool result = true;
697 double t = kStartTime;
698 for (int i = 0; i < 10; ++i) {
699 t += kAnimationTime;
700 result = result && animateScroll(t);
701 updateDataFromParameters(VerticalScrollbar, 1, -20, 200, t, &parameters) ;
702 }
703 checkDesiredPosition(0);
704
705 t += kAnimationTime;
706 for (; result && t < kEndTime; t += kAnimationTime)
707 result = result && animateScroll(t);
708 checkSoftLanding(0);
709 }
710
552 #endif // ENABLE(SMOOTH_SCROLLING) 711 #endif // ENABLE(SMOOTH_SCROLLING)
OLDNEW
« no previous file with comments | « Source/WebCore/platform/ScrollAnimatorNone.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698