haikuwebkit/LayoutTests/animations/animation-direction-reverse...

124 lines
3.6 KiB
HTML
Raw Permalink Normal View History

Support reverse and alternate-reverse in CA animations https://bugs.webkit.org/show_bug.cgi?id=78041 Reviewed by Beth Dakin. Source/WebCore: CoreAnimation does not natively support reverse and alternate-reverse animation directions so we need to flip the animation values (keyframe keys and timing functions) that we send to GraphicsLayerCA. Unfortunately this code adds a lot of conditionals because it isn't as simple as reversing the order of keys. You also now have a different alignment of timing functions to the reversed list. New tests to cover the two new directions, making sure the timing functions are correctly inverted, and exercising fill modes. Tests: animations/animation-direction-reverse-fill-mode-hardware.html animations/animation-direction-reverse-fill-mode.html animations/animation-direction-reverse-hardware-opacity.html animations/animation-direction-reverse-hardware.html animations/animation-direction-reverse-non-hardware.html animations/animation-direction-reverse-timing-functions-hardware.html animations/animation-direction-reverse-timing-functions.html * platform/graphics/ca/GraphicsLayerCA.cpp: Handle the previously unsupported animation directions, reversing the list of values and keytimes that would be used to create the CA Animation. (WebCore::GraphicsLayerCA::addAnimation): Do not create an animation if on Windows and using a reverse direction. (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes): (WebCore::GraphicsLayerCA::setupAnimation): (WebCore::GraphicsLayerCA::setAnimationEndpoints): (WebCore::GraphicsLayerCA::setAnimationKeyframes): (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints): (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes): (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints): (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes): * platform/graphics/ca/PlatformCAAnimation.h: (PlatformCAAnimation): Pass through a flag that tells the CA Animation that it should invert the timing functions. * platform/graphics/ca/mac/PlatformCAAnimationMac.mm: (toCAMediaTimingFunction): Add a parameter that will invert the timing function coefficients if necessary. (PlatformCAAnimation::setTimingFunction): (PlatformCAAnimation::setTimingFunctions): * platform/graphics/ca/win/PlatformCAAnimationWin.cpp: (toCACFTimingFunction): New unused parameter. LayoutTests: Tests support for reverse and alternate-reverse animations on CoreAnimation objects, as well as filling out some of the software animator tests. There are three variables to exercise: reverse vs forward direction animations, whether reversed timing functions are inverted correctly, and that fill mode respects the direction of animation. Refactored the animation test helper class so we could reuse property parsing and evaluation. * animations/animation-direction-reverse-fill-mode-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware.html: Added. * animations/animation-direction-reverse-fill-mode.html: Added. * animations/animation-direction-reverse-hardware-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity.html: Added. * animations/animation-direction-reverse-hardware.html: Added. * animations/animation-direction-reverse-non-hardware-expected.txt: Added. * animations/animation-direction-reverse-non-hardware.html: Added. * animations/animation-direction-reverse-timing-functions-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware.html: Added. * animations/animation-direction-reverse-timing-functions.html: Added. * animations/resources/animation-test-helpers.js: (checkExpectedValue): (getPropertyValue): (comparePropertyValue): Canonical link: https://commits.webkit.org/102664@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@115540 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-04-28 04:59:53 +00:00
<!doctype html>
<html lang="en">
<head>
<title>Test animation direction reverse with fill modes</title>
<style>
.box {
position: relative;
left: 100px;
top: 10px;
height: 100px;
width: 100px;
-webkit-animation-delay: 0.1s;
Safari mis-applies "animation-fill-mode: forwards" when using fractional iteration count https://bugs.webkit.org/show_bug.cgi?id=146996 Reviewed by Dean Jackson. Source/WebCore: animation-fill-mode: forwards with fractional iteration counts always snapped to 1 or 0, depending on direction. Fix to compute the fill-forward state from the correct keyframes. If filling forwards, AnimationBase::progress() sets the elapsed time to the duration, then uses fractionalTime() to handle animation direction mapping. If the fractionalTime is integral, we can return early, avoiding the cost of mapping through timing functions. Tested by existing tests. * page/animation/AnimationBase.cpp: (WebCore::AnimationBase::progress): (WebCore::AnimationBase::getElapsedTime): * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty): It was possible to end up with prevIndex == nextIndex with reverse animations, which resulted in divide-by-zero when computing scale. Fix by picking a nextIndex that is different from prevIndex. LayoutTests: Progressions, improved tests. * animations/animation-direction-reverse-fill-mode-expected.txt: New results; this is a progression. * animations/animation-direction-reverse-fill-mode.html: Use a shorter animation. Fixed results. * animations/fill-mode-iteration-count-non-integer-expected.txt: * animations/fill-mode-iteration-count-non-integer.html: Use iteration counts that are not multiplies of 0.5, so the test can differentiation between forward and backwards states. Add a non-linear timing function to check that fill-forwards consults the timing functions. Don't print exact succeeding results because they may have floating point values. * animations/fill-mode-reverse-expected.txt: New results; this is a progression. * animations/fill-mode-reverse.html: Fixed results, use gray. Canonical link: https://commits.webkit.org/165201@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@187121 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-07-21 21:19:20 +00:00
-webkit-animation-duration: 0.5s;
Support reverse and alternate-reverse in CA animations https://bugs.webkit.org/show_bug.cgi?id=78041 Reviewed by Beth Dakin. Source/WebCore: CoreAnimation does not natively support reverse and alternate-reverse animation directions so we need to flip the animation values (keyframe keys and timing functions) that we send to GraphicsLayerCA. Unfortunately this code adds a lot of conditionals because it isn't as simple as reversing the order of keys. You also now have a different alignment of timing functions to the reversed list. New tests to cover the two new directions, making sure the timing functions are correctly inverted, and exercising fill modes. Tests: animations/animation-direction-reverse-fill-mode-hardware.html animations/animation-direction-reverse-fill-mode.html animations/animation-direction-reverse-hardware-opacity.html animations/animation-direction-reverse-hardware.html animations/animation-direction-reverse-non-hardware.html animations/animation-direction-reverse-timing-functions-hardware.html animations/animation-direction-reverse-timing-functions.html * platform/graphics/ca/GraphicsLayerCA.cpp: Handle the previously unsupported animation directions, reversing the list of values and keytimes that would be used to create the CA Animation. (WebCore::GraphicsLayerCA::addAnimation): Do not create an animation if on Windows and using a reverse direction. (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes): (WebCore::GraphicsLayerCA::setupAnimation): (WebCore::GraphicsLayerCA::setAnimationEndpoints): (WebCore::GraphicsLayerCA::setAnimationKeyframes): (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints): (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes): (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints): (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes): * platform/graphics/ca/PlatformCAAnimation.h: (PlatformCAAnimation): Pass through a flag that tells the CA Animation that it should invert the timing functions. * platform/graphics/ca/mac/PlatformCAAnimationMac.mm: (toCAMediaTimingFunction): Add a parameter that will invert the timing function coefficients if necessary. (PlatformCAAnimation::setTimingFunction): (PlatformCAAnimation::setTimingFunctions): * platform/graphics/ca/win/PlatformCAAnimationWin.cpp: (toCACFTimingFunction): New unused parameter. LayoutTests: Tests support for reverse and alternate-reverse animations on CoreAnimation objects, as well as filling out some of the software animator tests. There are three variables to exercise: reverse vs forward direction animations, whether reversed timing functions are inverted correctly, and that fill mode respects the direction of animation. Refactored the animation test helper class so we could reuse property parsing and evaluation. * animations/animation-direction-reverse-fill-mode-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware.html: Added. * animations/animation-direction-reverse-fill-mode.html: Added. * animations/animation-direction-reverse-hardware-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity.html: Added. * animations/animation-direction-reverse-hardware.html: Added. * animations/animation-direction-reverse-non-hardware-expected.txt: Added. * animations/animation-direction-reverse-non-hardware.html: Added. * animations/animation-direction-reverse-timing-functions-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware.html: Added. * animations/animation-direction-reverse-timing-functions.html: Added. * animations/resources/animation-test-helpers.js: (checkExpectedValue): (getPropertyValue): (comparePropertyValue): Canonical link: https://commits.webkit.org/102664@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@115540 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-04-28 04:59:53 +00:00
-webkit-animation-timing-function: linear;
-webkit-animation-name: anim;
-webkit-animation-direction: reverse;
}
@-webkit-keyframes anim {
from { left: 200px; }
to { left: 300px; }
}
#a {
background-color: blue;
-webkit-animation-fill-mode: none;
}
#b {
background-color: red;
-webkit-animation-fill-mode: backwards;
}
#c {
background-color: green;
-webkit-animation-fill-mode: forwards;
}
#d {
background-color: yellow;
-webkit-animation-fill-mode: both;
}
#e {
Safari mis-applies "animation-fill-mode: forwards" when using fractional iteration count https://bugs.webkit.org/show_bug.cgi?id=146996 Reviewed by Dean Jackson. Source/WebCore: animation-fill-mode: forwards with fractional iteration counts always snapped to 1 or 0, depending on direction. Fix to compute the fill-forward state from the correct keyframes. If filling forwards, AnimationBase::progress() sets the elapsed time to the duration, then uses fractionalTime() to handle animation direction mapping. If the fractionalTime is integral, we can return early, avoiding the cost of mapping through timing functions. Tested by existing tests. * page/animation/AnimationBase.cpp: (WebCore::AnimationBase::progress): (WebCore::AnimationBase::getElapsedTime): * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty): It was possible to end up with prevIndex == nextIndex with reverse animations, which resulted in divide-by-zero when computing scale. Fix by picking a nextIndex that is different from prevIndex. LayoutTests: Progressions, improved tests. * animations/animation-direction-reverse-fill-mode-expected.txt: New results; this is a progression. * animations/animation-direction-reverse-fill-mode.html: Use a shorter animation. Fixed results. * animations/fill-mode-iteration-count-non-integer-expected.txt: * animations/fill-mode-iteration-count-non-integer.html: Use iteration counts that are not multiplies of 0.5, so the test can differentiation between forward and backwards states. Add a non-linear timing function to check that fill-forwards consults the timing functions. Don't print exact succeeding results because they may have floating point values. * animations/fill-mode-reverse-expected.txt: New results; this is a progression. * animations/fill-mode-reverse.html: Fixed results, use gray. Canonical link: https://commits.webkit.org/165201@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@187121 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-07-21 21:19:20 +00:00
background-color: gray;
Support reverse and alternate-reverse in CA animations https://bugs.webkit.org/show_bug.cgi?id=78041 Reviewed by Beth Dakin. Source/WebCore: CoreAnimation does not natively support reverse and alternate-reverse animation directions so we need to flip the animation values (keyframe keys and timing functions) that we send to GraphicsLayerCA. Unfortunately this code adds a lot of conditionals because it isn't as simple as reversing the order of keys. You also now have a different alignment of timing functions to the reversed list. New tests to cover the two new directions, making sure the timing functions are correctly inverted, and exercising fill modes. Tests: animations/animation-direction-reverse-fill-mode-hardware.html animations/animation-direction-reverse-fill-mode.html animations/animation-direction-reverse-hardware-opacity.html animations/animation-direction-reverse-hardware.html animations/animation-direction-reverse-non-hardware.html animations/animation-direction-reverse-timing-functions-hardware.html animations/animation-direction-reverse-timing-functions.html * platform/graphics/ca/GraphicsLayerCA.cpp: Handle the previously unsupported animation directions, reversing the list of values and keytimes that would be used to create the CA Animation. (WebCore::GraphicsLayerCA::addAnimation): Do not create an animation if on Windows and using a reverse direction. (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes): (WebCore::GraphicsLayerCA::setupAnimation): (WebCore::GraphicsLayerCA::setAnimationEndpoints): (WebCore::GraphicsLayerCA::setAnimationKeyframes): (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints): (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes): (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints): (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes): * platform/graphics/ca/PlatformCAAnimation.h: (PlatformCAAnimation): Pass through a flag that tells the CA Animation that it should invert the timing functions. * platform/graphics/ca/mac/PlatformCAAnimationMac.mm: (toCAMediaTimingFunction): Add a parameter that will invert the timing function coefficients if necessary. (PlatformCAAnimation::setTimingFunction): (PlatformCAAnimation::setTimingFunctions): * platform/graphics/ca/win/PlatformCAAnimationWin.cpp: (toCACFTimingFunction): New unused parameter. LayoutTests: Tests support for reverse and alternate-reverse animations on CoreAnimation objects, as well as filling out some of the software animator tests. There are three variables to exercise: reverse vs forward direction animations, whether reversed timing functions are inverted correctly, and that fill mode respects the direction of animation. Refactored the animation test helper class so we could reuse property parsing and evaluation. * animations/animation-direction-reverse-fill-mode-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware.html: Added. * animations/animation-direction-reverse-fill-mode.html: Added. * animations/animation-direction-reverse-hardware-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity.html: Added. * animations/animation-direction-reverse-hardware.html: Added. * animations/animation-direction-reverse-non-hardware-expected.txt: Added. * animations/animation-direction-reverse-non-hardware.html: Added. * animations/animation-direction-reverse-timing-functions-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware.html: Added. * animations/animation-direction-reverse-timing-functions.html: Added. * animations/resources/animation-test-helpers.js: (checkExpectedValue): (getPropertyValue): (comparePropertyValue): Canonical link: https://commits.webkit.org/102664@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@115540 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-04-28 04:59:53 +00:00
-webkit-animation-fill-mode: both;
-webkit-animation-iteration-count: 2;
-webkit-animation-direction: alternate-reverse;
}
</style>
<script src="resources/animation-test-helpers.js"></script>
<script type="text/javascript" charset="utf-8">
const numAnims = 5;
var animsFinished = 0;
const allowance = 5;
const expectedValues = [
{id: "a", start: 100, end: 100},
{id: "b", start: 300, end: 100},
Safari mis-applies "animation-fill-mode: forwards" when using fractional iteration count https://bugs.webkit.org/show_bug.cgi?id=146996 Reviewed by Dean Jackson. Source/WebCore: animation-fill-mode: forwards with fractional iteration counts always snapped to 1 or 0, depending on direction. Fix to compute the fill-forward state from the correct keyframes. If filling forwards, AnimationBase::progress() sets the elapsed time to the duration, then uses fractionalTime() to handle animation direction mapping. If the fractionalTime is integral, we can return early, avoiding the cost of mapping through timing functions. Tested by existing tests. * page/animation/AnimationBase.cpp: (WebCore::AnimationBase::progress): (WebCore::AnimationBase::getElapsedTime): * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty): It was possible to end up with prevIndex == nextIndex with reverse animations, which resulted in divide-by-zero when computing scale. Fix by picking a nextIndex that is different from prevIndex. LayoutTests: Progressions, improved tests. * animations/animation-direction-reverse-fill-mode-expected.txt: New results; this is a progression. * animations/animation-direction-reverse-fill-mode.html: Use a shorter animation. Fixed results. * animations/fill-mode-iteration-count-non-integer-expected.txt: * animations/fill-mode-iteration-count-non-integer.html: Use iteration counts that are not multiplies of 0.5, so the test can differentiation between forward and backwards states. Add a non-linear timing function to check that fill-forwards consults the timing functions. Don't print exact succeeding results because they may have floating point values. * animations/fill-mode-reverse-expected.txt: New results; this is a progression. * animations/fill-mode-reverse.html: Fixed results, use gray. Canonical link: https://commits.webkit.org/165201@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@187121 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-07-21 21:19:20 +00:00
{id: "c", start: 100, end: 200},
{id: "d", start: 300, end: 200},
Support reverse and alternate-reverse in CA animations https://bugs.webkit.org/show_bug.cgi?id=78041 Reviewed by Beth Dakin. Source/WebCore: CoreAnimation does not natively support reverse and alternate-reverse animation directions so we need to flip the animation values (keyframe keys and timing functions) that we send to GraphicsLayerCA. Unfortunately this code adds a lot of conditionals because it isn't as simple as reversing the order of keys. You also now have a different alignment of timing functions to the reversed list. New tests to cover the two new directions, making sure the timing functions are correctly inverted, and exercising fill modes. Tests: animations/animation-direction-reverse-fill-mode-hardware.html animations/animation-direction-reverse-fill-mode.html animations/animation-direction-reverse-hardware-opacity.html animations/animation-direction-reverse-hardware.html animations/animation-direction-reverse-non-hardware.html animations/animation-direction-reverse-timing-functions-hardware.html animations/animation-direction-reverse-timing-functions.html * platform/graphics/ca/GraphicsLayerCA.cpp: Handle the previously unsupported animation directions, reversing the list of values and keytimes that would be used to create the CA Animation. (WebCore::GraphicsLayerCA::addAnimation): Do not create an animation if on Windows and using a reverse direction. (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes): (WebCore::GraphicsLayerCA::setupAnimation): (WebCore::GraphicsLayerCA::setAnimationEndpoints): (WebCore::GraphicsLayerCA::setAnimationKeyframes): (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints): (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes): (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints): (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes): * platform/graphics/ca/PlatformCAAnimation.h: (PlatformCAAnimation): Pass through a flag that tells the CA Animation that it should invert the timing functions. * platform/graphics/ca/mac/PlatformCAAnimationMac.mm: (toCAMediaTimingFunction): Add a parameter that will invert the timing function coefficients if necessary. (PlatformCAAnimation::setTimingFunction): (PlatformCAAnimation::setTimingFunctions): * platform/graphics/ca/win/PlatformCAAnimationWin.cpp: (toCACFTimingFunction): New unused parameter. LayoutTests: Tests support for reverse and alternate-reverse animations on CoreAnimation objects, as well as filling out some of the software animator tests. There are three variables to exercise: reverse vs forward direction animations, whether reversed timing functions are inverted correctly, and that fill mode respects the direction of animation. Refactored the animation test helper class so we could reuse property parsing and evaluation. * animations/animation-direction-reverse-fill-mode-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware.html: Added. * animations/animation-direction-reverse-fill-mode.html: Added. * animations/animation-direction-reverse-hardware-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity.html: Added. * animations/animation-direction-reverse-hardware.html: Added. * animations/animation-direction-reverse-non-hardware-expected.txt: Added. * animations/animation-direction-reverse-non-hardware.html: Added. * animations/animation-direction-reverse-timing-functions-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware.html: Added. * animations/animation-direction-reverse-timing-functions.html: Added. * animations/resources/animation-test-helpers.js: (checkExpectedValue): (getPropertyValue): (comparePropertyValue): Canonical link: https://commits.webkit.org/102664@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@115540 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-04-28 04:59:53 +00:00
{id: "e", start: 300, end: 300}
];
var result = "";
Clean up accessibility & animations tests to stop calling testRunner.waitUntilDone() twice <https://webkit.org/b/167598> Reviewed by Alexey Proskuryakov. * accessibility/frame-disconnect-textmarker-cache-crash.html: * accessibility/loading-iframe-sends-notification.html: * accessibility/mac/combobox-activedescendant-notifications.html: * accessibility/mac/ordered-textmarker-crash.html: * accessibility/mac/stale-textmarker-crash.html: * accessibility/notification-listeners.html: * accessibility/scroll-to-global-point-iframe-nested.html: * accessibility/scroll-to-global-point-iframe.html: * accessibility/scroll-to-make-visible-iframe.html: * accessibility/svg-element-press.html: - Remove call to testRunner.waitUntilDone() since window.jsTestIsAsync is set to true, and thus waitUntilDone() is called from either js-test.js or js-test-post.js. * animations/animation-delay-changed.html: * animations/change-keyframes-name.html: * animations/font-variations/font-variation-settings-order.html: * animations/font-variations/font-variation-settings-unlike.html: * animations/font-variations/font-variation-settings.html: * animations/longhand-timing-function.html: * animations/transition-and-animation-3.html: * animations/unanimated-style.html: - Remove call to testRunner.waitUntilDone() since that's moved into animation-test-helpers.js. * animations/resources/animation-test-helpers.js: (runAnimationTest): Call testRunner.waitUntilDone() when this script resource is included instead of when runAnimationTest() is called since runAnimationTest() expects it to be set anyway. * animations/animation-direction-reverse-fill-mode-hardware.html: * animations/animation-direction-reverse-fill-mode.html: * animations/animation-hit-test-transform.html: * animations/animation-hit-test.html: * animations/animation-internals-api-multiple-keyframes.html: * animations/animation-internals-api.html: * animations/change-transform-style-during-animation.html: * animations/keyframes-iteration-count-non-integer.html: - Remove call to testRunner.waitUntilDone() since that now happens when loading animation-test-helpers.js. These tests don't currently call runAnimationTest(), but they manage their own state by calling testRunner.notifyDone() themselves. * animations/crash-on-removing-animation.html: * animations/resources/crash-on-removing-animation-window.html: Copied from LayoutTests/animations/crash-on-removing-animation.html. - Split this test into a main resource and a window resource. Previously testRunner.waitUntilDone() was being called twice when js-test-post.js was loaded in the main window and then loaded a second time when the window was opened. The new resource file doesn't load either js-test-pre.js or js-test-post.js, avoiding the duplicate call. Canonical link: https://commits.webkit.org/184787@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211573 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-02 18:55:23 +00:00
if (window.testRunner)
Use testRunner instead of layoutTestController in animations tests https://bugs.webkit.org/show_bug.cgi?id=88757 Reviewed by Tony Chang. * animations/3d/change-transform-in-end-event.html: * animations/3d/replace-filling-transform.html: * animations/3d/state-at-end-event-transform.html: * animations/3d/transform-origin-vs-functions.html: * animations/animation-add-events-in-handler.html: * animations/animation-border-overflow.html: * animations/animation-controller-drt-api.html: * animations/animation-direction-reverse-fill-mode-hardware.html: * animations/animation-direction-reverse-fill-mode.html: * animations/animation-drt-api-multiple-keyframes.html: * animations/animation-drt-api.html: * animations/animation-end-event-destroy-renderer.html: * animations/animation-end-event-short-iterations.html: * animations/animation-hit-test-transform.html: * animations/animation-hit-test.html: * animations/animation-iteration-event-destroy-renderer.html: * animations/animation-matrix-negative-scale-unmatrix.html: * animations/animation-on-inline-crash.html: * animations/animation-shorthand-overriding.html: * animations/animation-shorthand-removed.html: * animations/animation-shorthand.html: * animations/animation-start-event-destroy-renderer.html: * animations/animation-welcome-safari.html: * animations/body-removal-crash.html: * animations/change-keyframes-name.html: * animations/change-transform-style-during-animation.html: * animations/combo-transform-translate+scale.html: * animations/empty-keyframes.html: * animations/fill-mode-forwards.html: * animations/fill-mode-iteration-count-non-integer.html: * animations/fill-mode-missing-from-to-keyframes.html: * animations/fill-mode-multiple-keyframes.html: * animations/fill-mode-removed.html: * animations/fill-mode-reverse.html: * animations/fill-mode-transform.html: * animations/fill-mode.html: * animations/fill-unset-properties.html: * animations/font-size-using-ems.html-disabled: * animations/import-crash.html: * animations/keyframe-timing-functions-transform.html: * animations/keyframe-timing-functions2.html: * animations/keyframes-iteration-count-non-integer.html: * animations/longhand-timing-function.html: * animations/missing-from-to-transforms.html: * animations/missing-from-to.html: * animations/pause-crash.html: * animations/resources/animation-test-helpers.js: (checkExpectedValue): (endTest): * animations/state-at-end-event.html: * animations/suspend-resume-animation-events.html: * animations/suspend-transform-animation.html: * animations/transition-and-animation-3.html: * animations/unanimated-style.html: Canonical link: https://commits.webkit.org/106621@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@119985 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-11 17:22:07 +00:00
testRunner.dumpAsText();
Support reverse and alternate-reverse in CA animations https://bugs.webkit.org/show_bug.cgi?id=78041 Reviewed by Beth Dakin. Source/WebCore: CoreAnimation does not natively support reverse and alternate-reverse animation directions so we need to flip the animation values (keyframe keys and timing functions) that we send to GraphicsLayerCA. Unfortunately this code adds a lot of conditionals because it isn't as simple as reversing the order of keys. You also now have a different alignment of timing functions to the reversed list. New tests to cover the two new directions, making sure the timing functions are correctly inverted, and exercising fill modes. Tests: animations/animation-direction-reverse-fill-mode-hardware.html animations/animation-direction-reverse-fill-mode.html animations/animation-direction-reverse-hardware-opacity.html animations/animation-direction-reverse-hardware.html animations/animation-direction-reverse-non-hardware.html animations/animation-direction-reverse-timing-functions-hardware.html animations/animation-direction-reverse-timing-functions.html * platform/graphics/ca/GraphicsLayerCA.cpp: Handle the previously unsupported animation directions, reversing the list of values and keytimes that would be used to create the CA Animation. (WebCore::GraphicsLayerCA::addAnimation): Do not create an animation if on Windows and using a reverse direction. (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes): (WebCore::GraphicsLayerCA::setupAnimation): (WebCore::GraphicsLayerCA::setAnimationEndpoints): (WebCore::GraphicsLayerCA::setAnimationKeyframes): (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints): (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes): (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints): (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes): * platform/graphics/ca/PlatformCAAnimation.h: (PlatformCAAnimation): Pass through a flag that tells the CA Animation that it should invert the timing functions. * platform/graphics/ca/mac/PlatformCAAnimationMac.mm: (toCAMediaTimingFunction): Add a parameter that will invert the timing function coefficients if necessary. (PlatformCAAnimation::setTimingFunction): (PlatformCAAnimation::setTimingFunctions): * platform/graphics/ca/win/PlatformCAAnimationWin.cpp: (toCACFTimingFunction): New unused parameter. LayoutTests: Tests support for reverse and alternate-reverse animations on CoreAnimation objects, as well as filling out some of the software animator tests. There are three variables to exercise: reverse vs forward direction animations, whether reversed timing functions are inverted correctly, and that fill mode respects the direction of animation. Refactored the animation test helper class so we could reuse property parsing and evaluation. * animations/animation-direction-reverse-fill-mode-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware.html: Added. * animations/animation-direction-reverse-fill-mode.html: Added. * animations/animation-direction-reverse-hardware-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity.html: Added. * animations/animation-direction-reverse-hardware.html: Added. * animations/animation-direction-reverse-non-hardware-expected.txt: Added. * animations/animation-direction-reverse-non-hardware.html: Added. * animations/animation-direction-reverse-timing-functions-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware.html: Added. * animations/animation-direction-reverse-timing-functions.html: Added. * animations/resources/animation-test-helpers.js: (checkExpectedValue): (getPropertyValue): (comparePropertyValue): Canonical link: https://commits.webkit.org/102664@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@115540 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-04-28 04:59:53 +00:00
function animationEnded(event) {
if (++animsFinished == numAnims) {
setTimeout(endTest, 0); // This call to setTimeout should be ok in the test environment
// since we're just giving style a chance to resolve.
}
};
function endTest() {
for (var i = 0; i < expectedValues.length; i++) {
var realValue = getPropertyValue("left", expectedValues[i].id);
var expectedValue = expectedValues[i].end;
if (comparePropertyValue("left", realValue, expectedValue, allowance))
result += "PASS";
else
result += "FAIL";
result += " - end of animation - id: " + expectedValues[i].id + " expected: " + expectedValue + " actual: " + realValue + "<br>";
}
document.getElementById('result').innerHTML = result;
Use testRunner instead of layoutTestController in animations tests https://bugs.webkit.org/show_bug.cgi?id=88757 Reviewed by Tony Chang. * animations/3d/change-transform-in-end-event.html: * animations/3d/replace-filling-transform.html: * animations/3d/state-at-end-event-transform.html: * animations/3d/transform-origin-vs-functions.html: * animations/animation-add-events-in-handler.html: * animations/animation-border-overflow.html: * animations/animation-controller-drt-api.html: * animations/animation-direction-reverse-fill-mode-hardware.html: * animations/animation-direction-reverse-fill-mode.html: * animations/animation-drt-api-multiple-keyframes.html: * animations/animation-drt-api.html: * animations/animation-end-event-destroy-renderer.html: * animations/animation-end-event-short-iterations.html: * animations/animation-hit-test-transform.html: * animations/animation-hit-test.html: * animations/animation-iteration-event-destroy-renderer.html: * animations/animation-matrix-negative-scale-unmatrix.html: * animations/animation-on-inline-crash.html: * animations/animation-shorthand-overriding.html: * animations/animation-shorthand-removed.html: * animations/animation-shorthand.html: * animations/animation-start-event-destroy-renderer.html: * animations/animation-welcome-safari.html: * animations/body-removal-crash.html: * animations/change-keyframes-name.html: * animations/change-transform-style-during-animation.html: * animations/combo-transform-translate+scale.html: * animations/empty-keyframes.html: * animations/fill-mode-forwards.html: * animations/fill-mode-iteration-count-non-integer.html: * animations/fill-mode-missing-from-to-keyframes.html: * animations/fill-mode-multiple-keyframes.html: * animations/fill-mode-removed.html: * animations/fill-mode-reverse.html: * animations/fill-mode-transform.html: * animations/fill-mode.html: * animations/fill-unset-properties.html: * animations/font-size-using-ems.html-disabled: * animations/import-crash.html: * animations/keyframe-timing-functions-transform.html: * animations/keyframe-timing-functions2.html: * animations/keyframes-iteration-count-non-integer.html: * animations/longhand-timing-function.html: * animations/missing-from-to-transforms.html: * animations/missing-from-to.html: * animations/pause-crash.html: * animations/resources/animation-test-helpers.js: (checkExpectedValue): (endTest): * animations/state-at-end-event.html: * animations/suspend-resume-animation-events.html: * animations/suspend-transform-animation.html: * animations/transition-and-animation-3.html: * animations/unanimated-style.html: Canonical link: https://commits.webkit.org/106621@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@119985 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-11 17:22:07 +00:00
if (window.testRunner)
testRunner.notifyDone();
Support reverse and alternate-reverse in CA animations https://bugs.webkit.org/show_bug.cgi?id=78041 Reviewed by Beth Dakin. Source/WebCore: CoreAnimation does not natively support reverse and alternate-reverse animation directions so we need to flip the animation values (keyframe keys and timing functions) that we send to GraphicsLayerCA. Unfortunately this code adds a lot of conditionals because it isn't as simple as reversing the order of keys. You also now have a different alignment of timing functions to the reversed list. New tests to cover the two new directions, making sure the timing functions are correctly inverted, and exercising fill modes. Tests: animations/animation-direction-reverse-fill-mode-hardware.html animations/animation-direction-reverse-fill-mode.html animations/animation-direction-reverse-hardware-opacity.html animations/animation-direction-reverse-hardware.html animations/animation-direction-reverse-non-hardware.html animations/animation-direction-reverse-timing-functions-hardware.html animations/animation-direction-reverse-timing-functions.html * platform/graphics/ca/GraphicsLayerCA.cpp: Handle the previously unsupported animation directions, reversing the list of values and keytimes that would be used to create the CA Animation. (WebCore::GraphicsLayerCA::addAnimation): Do not create an animation if on Windows and using a reverse direction. (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes): (WebCore::GraphicsLayerCA::setupAnimation): (WebCore::GraphicsLayerCA::setAnimationEndpoints): (WebCore::GraphicsLayerCA::setAnimationKeyframes): (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints): (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes): (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints): (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes): * platform/graphics/ca/PlatformCAAnimation.h: (PlatformCAAnimation): Pass through a flag that tells the CA Animation that it should invert the timing functions. * platform/graphics/ca/mac/PlatformCAAnimationMac.mm: (toCAMediaTimingFunction): Add a parameter that will invert the timing function coefficients if necessary. (PlatformCAAnimation::setTimingFunction): (PlatformCAAnimation::setTimingFunctions): * platform/graphics/ca/win/PlatformCAAnimationWin.cpp: (toCACFTimingFunction): New unused parameter. LayoutTests: Tests support for reverse and alternate-reverse animations on CoreAnimation objects, as well as filling out some of the software animator tests. There are three variables to exercise: reverse vs forward direction animations, whether reversed timing functions are inverted correctly, and that fill mode respects the direction of animation. Refactored the animation test helper class so we could reuse property parsing and evaluation. * animations/animation-direction-reverse-fill-mode-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware.html: Added. * animations/animation-direction-reverse-fill-mode.html: Added. * animations/animation-direction-reverse-hardware-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity.html: Added. * animations/animation-direction-reverse-hardware.html: Added. * animations/animation-direction-reverse-non-hardware-expected.txt: Added. * animations/animation-direction-reverse-non-hardware.html: Added. * animations/animation-direction-reverse-timing-functions-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware.html: Added. * animations/animation-direction-reverse-timing-functions.html: Added. * animations/resources/animation-test-helpers.js: (checkExpectedValue): (getPropertyValue): (comparePropertyValue): Canonical link: https://commits.webkit.org/102664@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@115540 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-04-28 04:59:53 +00:00
}
window.onload = function () {
for (var i = 0; i < expectedValues.length; i++) {
var realValue = getPropertyValue("left", expectedValues[i].id);
var expectedValue = expectedValues[i].start;
if (comparePropertyValue("left", realValue, expectedValue, allowance))
result += "PASS";
else
result += "FAIL";
result += " - start of animation - id: " + expectedValues[i].id + " expected: " + expectedValue + " actual: " + realValue + "<br>";
}
document.addEventListener("webkitAnimationEnd", animationEnded, false);
};
</script>
</head>
<body>
This test performs an animation of the left property with four different
fill modes. It animates over 0.1 second with a 0.1 second delay.
It takes snapshots at document load and the end of the animation.
<div id="a" class="box">
None
</div>
<div id="b" class="box">
Backwards
</div>
<div id="c" class="box">
Forwards
</div>
<div id="d" class="box">
Both
</div>
<div id="e" class="box">
Both iterating
</div>
<div id="result">
</div>
</body>
</html>