<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>
