Skip to content

Commit

Permalink
Create new list for paced animation values
Browse files Browse the repository at this point in the history
SVGAnimationElement::calculateKeyTimesForCalcModePaced() used to
overwrite the data passed in by the user. This commit fixes the
issue and there are now two lists stored, one with the user data
and one with the key times for paced.

This is a bug fix and should only affect SVGAnimationElements,
there will be an increase in memory usage, especially for animation
intensive scenes. Can be avoided by changing to a CPU heavy approach,
but this will probably be more energy efficient for mobile devices.

Bug: 231525
Change-Id: Ief9bbb8c6d1133d0041ad2c8f5a3d63f9ddcde90
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1757825
Reviewed-by: Fredrik Söderquist <[email protected]>
Commit-Queue: Edvard Thörnros <[email protected]>
Cr-Commit-Position: refs/heads/master@{#687651}
  • Loading branch information
Edvard Thörnros authored and chromium-wpt-export-bot committed Aug 16, 2019
1 parent f47ff91 commit 6ee2743
Showing 1 changed file with 37 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<!doctype html>
<title>Paced value animation doesn't overwrite keyTimes</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<meta charset="utf-8">
<link rel="author" title="Edvard Thörnros" href="mailto:[email protected]">
<link rel="help" href="https://www.w3.org/TR/SMIL20/animation.html#animationNS-animateMotionElement">
<link rel="bug" href="https://bugs.chromium.org/p/chromium/issues/detail?id=231525&hotlist_id=5524&sort=%20rank%20-ID">

<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="500" height="500">
<rect x="151" y="1" width="98" height="98" fill="red"/>
<rect id="rect" x="0" y="0" width="100" height="100" fill="green">
<animate id="animate1" attributeName="x" dur="10s" calcMode="paced" values="100; 150; 200;" keyTimes="0; 0.2; 1"/>
</rect>
</svg>

<script>
async_test(function(t) {
window.onload = t.step_func(function() {
let svg = document.getElementById('svg');
let animate1 = document.getElementById('animate1');
let rect = document.getElementById('rect');
t.step_timeout(function() {
// animate1's keyTimes should not be affected by starting with calcMode=paced
animate1.setAttribute('calcMode', 'linear');
svg.pauseAnimations();
svg.setCurrentTime(2);
window.requestAnimationFrame(t.step_func(function() {
window.requestAnimationFrame(t.step_func_done(function() {
assert_approx_equals(rect.x.animVal.value, 150, 5);
}));
}));
}, 10);
});
});
</script>

0 comments on commit 6ee2743

Please sign in to comment.