chromium/third_party/blink/manual_tests/animation/compositor-animation-same-property.html

<html>
<style>
div {
    position: relative;
    height: 100px;
    width: 100px;
    background: yellow;
}
</style>
<body>
<p>
Each section below has two boxes, the top runs on the main thread, the bottom
on the compositor.
</p><p>
This test is successful if the boxes are mostly in sync and all finish at the
same time.
</p>
<hr>

Add second translate animation on timeout (with fill=forwards)
<br>
<div id="test1_blink">BLINK THREAD</div>
<div id="test1_impl">IMPL THREAD</div>
<hr>

Add second translate animation on timeout if first one was paused earlier
<br>
<div id="test2_blink">BLINK THREAD</div>
<div id="test2_impl">IMPL THREAD</div>
<hr>

Add second translate animation on timeout if first one was finished earlier
<br>
<div id="test3_blink">BLINK THREAD</div>
<div id="test3_impl">IMPL THREAD</div>
<hr>

Add second translate animation on timeout if first higher-priority one was paused earlier
<br>
<div id="test4_blink">BLINK THREAD</div>
<div id="test4_impl">IMPL THREAD</div>
<hr>

<script>
var leftKeyframes = [
    {left: '100px'},
    {left: '600px'}
    ];
var translateKeyframes = [
    {transform: 'translateX(100px)'},
    {transform: 'translateX(600px)'}
    ];

var leftKeyframes2 = [
    {left: '600px'},
    {left: '700px'}
    ];
var translateKeyframes2 = [
    {transform: 'translateX(600px)'},
    {transform: 'translateX(700px)'}
    ];

var player1_blink = test1_blink.animate(leftKeyframes, {
        duration: 5000,
        delay: 100,
        fill: 'forwards'
    });
var player1_impl = test1_impl.animate(translateKeyframes, {
        duration: 5000,
        delay: 100,
        fill: 'forwards'
    });

var player2_blink = test2_blink.animate(leftKeyframes, {
        duration: 5000,
        delay: 100,
    });
var player2_impl = test2_impl.animate(translateKeyframes, {
        duration: 5000,
        delay: 100,
    });

var player3_blink = test3_blink.animate(leftKeyframes, {
        duration: 5000,
        delay: 100,
    });
var player3_impl = test3_impl.animate(translateKeyframes, {
        duration: 5000,
        delay: 100,
    });

// Create detached lower-priority second player with short animation
var player4_blink2 = test4_blink.animate(leftKeyframes2, {
        duration: 1000,
        delay: 500,
    });
player4_blink2.cancel();
var player4_impl2 = test4_impl.animate(translateKeyframes2, {
        duration: 1000,
        delay: 500,
    });
player4_impl2.cancel();

var player4_blink = test4_blink.animate(leftKeyframes, {
        duration: 5000,
        delay: 100,
    });
var player4_impl = test4_impl.animate(translateKeyframes, {
        duration: 5000,
        delay: 100,
    });

setTimeout(function() {
    player2_blink.pause();
    player2_impl.pause();

    player3_blink.finish();
    player3_impl.finish();

    player4_blink.pause();
    player4_impl.pause();
}, 1500);

setTimeout(function() {
    var player1_blink2 = test1_blink.animate(leftKeyframes2, {
            duration: 1000,
            delay: 500,
            fill: 'forwards'
        });
    var player1_impl2 = test1_impl.animate(translateKeyframes2, {
            duration: 1000,
            delay: 500,
            fill: 'forwards'
        });

    var player2_blink2 = test2_blink.animate(leftKeyframes2, {
            duration: 1000,
            delay: 500,
        });
    var player2_impl2 = test2_impl.animate(translateKeyframes2, {
            duration: 1000,
            delay: 500,
        });

    var player3_blink2 = test3_blink.animate(leftKeyframes2, {
            duration: 1000,
            delay: 500,
        });
    var player3_impl2 = test3_impl.animate(translateKeyframes2, {
            duration: 1000,
            delay: 500,
        });

    player4_blink2.play();
    player4_impl2.play();
}, 2500);
</script>
</body>
</html>