Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/scroll_offset_animation_curve.h" | 5 #include "cc/animation/scroll_offset_animation_curve.h" |
| 6 | 6 |
| 7 #include "cc/animation/timing_function.h" | 7 #include "cc/animation/timing_function.h" |
| 8 #include "cc/base/time_util.h" | 8 #include "cc/base/time_util.h" |
| 9 #include "cc/test/geometry_test_utils.h" | 9 #include "cc/test/geometry_test_utils.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 250 gfx::Vector2dF(0.f, 500.f), | 250 gfx::Vector2dF(0.f, 500.f), |
| 251 ScrollOffsetAnimationCurve::DurationBehavior::INVERSE_DELTA, | 251 ScrollOffsetAnimationCurve::DurationBehavior::INVERSE_DELTA, |
| 252 base::TimeDelta::FromSecondsD(0.01)) | 252 base::TimeDelta::FromSecondsD(0.01)) |
| 253 .InSecondsF(); | 253 .InSecondsF(); |
| 254 EXPECT_EQ(duration, curve->Duration().InSecondsF()); | 254 EXPECT_EQ(duration, curve->Duration().InSecondsF()); |
| 255 | 255 |
| 256 EXPECT_VECTOR2DF_EQ(gfx::ScrollOffset(0.f, 500.f), | 256 EXPECT_VECTOR2DF_EQ(gfx::ScrollOffset(0.f, 500.f), |
| 257 curve->GetValue(base::TimeDelta::FromSecondsD(1.0))); | 257 curve->GetValue(base::TimeDelta::FromSecondsD(1.0))); |
| 258 } | 258 } |
| 259 | 259 |
| 260 // This test verifies that if the last segment duration is zero, ::updateTarget | |
|
ajuma
2016/09/13 14:51:32
nit: "UpdateTarget"
ymalik
2016/09/13 17:56:41
Done.
| |
| 261 // simply updates the total animation duration see crbug.com/645317. | |
| 262 TEST(ScrollOffsetAnimationCurveTest, UpdateTargetZeroLastSegmentDuration) { | |
| 263 std::unique_ptr<ScrollOffsetAnimationCurve> curve( | |
| 264 ScrollOffsetAnimationCurve::Create( | |
| 265 gfx::ScrollOffset(0.f, 100.f), | |
| 266 CubicBezierTimingFunction::CreatePreset( | |
| 267 CubicBezierTimingFunction::EaseType::EASE_IN_OUT), | |
| 268 ScrollOffsetAnimationCurve::DurationBehavior::INVERSE_DELTA)); | |
| 269 double duration_in_seconds = kInverseDeltaMaxDuration / kDurationDivisor; | |
| 270 double delay_in_seconds = 0.02; | |
| 271 double curve_duration = duration_in_seconds - delay_in_seconds; | |
| 272 | |
| 273 curve->SetInitialValue(gfx::ScrollOffset(), | |
| 274 base::TimeDelta::FromSecondsD(delay_in_seconds)); | |
| 275 EXPECT_NEAR(curve_duration, curve->Duration().InSecondsF(), 0.0002f); | |
| 276 | |
| 277 // Re-target 1, this should set last_retarget_ to 0.05. | |
| 278 gfx::ScrollOffset new_delta = | |
| 279 gfx::ScrollOffset(0.f, 200.f) - | |
| 280 curve->GetValue(base::TimeDelta::FromSecondsD(0.05)); | |
| 281 double expected_duration = | |
| 282 ScrollOffsetAnimationCurve::SegmentDuration( | |
| 283 gfx::Vector2dF(new_delta.x(), new_delta.y()), | |
| 284 ScrollOffsetAnimationCurve::DurationBehavior::INVERSE_DELTA, | |
| 285 base::TimeDelta()) | |
| 286 .InSecondsF() + | |
| 287 0.05; | |
| 288 curve->UpdateTarget(0.05, gfx::ScrollOffset(0.f, 200.f)); | |
| 289 EXPECT_NEAR(expected_duration, curve->Duration().InSecondsF(), 0.0002f); | |
| 290 | |
| 291 // Re-target 2, this should set total_animation_duration to t, which is | |
| 292 // last_retarget_. This is what would cause the DCHECK failure in | |
| 293 // crbug.com/645317. | |
| 294 curve->UpdateTarget(-0.145, gfx::ScrollOffset(0.f, 300.f)); | |
| 295 EXPECT_NEAR(0.05, curve->Duration().InSecondsF(), 0.0002f); | |
| 296 | |
| 297 // Re-target 3, this should set total_animation_duration based on new_delta. | |
| 298 new_delta = gfx::ScrollOffset(0.f, 500.f) - | |
| 299 curve->GetValue(base::TimeDelta::FromSecondsD(0.05)); | |
| 300 expected_duration = | |
| 301 ScrollOffsetAnimationCurve::SegmentDuration( | |
| 302 gfx::Vector2dF(new_delta.x(), new_delta.y()), | |
| 303 ScrollOffsetAnimationCurve::DurationBehavior::INVERSE_DELTA, | |
| 304 base::TimeDelta()) | |
| 305 .InSecondsF(); | |
| 306 curve->UpdateTarget(-0.1, gfx::ScrollOffset(0.f, 500.f)); | |
| 307 EXPECT_NEAR(expected_duration, curve->Duration().InSecondsF(), 0.0002f); | |
| 308 } | |
| 309 | |
| 260 } // namespace | 310 } // namespace |
| 261 } // namespace cc | 311 } // namespace cc |
| OLD | NEW |