<!doctype html>
<meta charset=utf-8>
<title>Animation.frameRate</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../imported/w3c/web-platform-tests/web-animations/testcommon.js"></script>
<body>
<script>
'use strict';

promise_test(async t => {
    const timestamps = [];
    const numberOfTimestamps = 4;

    const frameRate = 30;
    const timing = { duration: 10_000, iterations: Infinity };

    const label1 = "one";
    const label2 = "two";

    await new Promise(resolve => {
        let numberOfCallbacks = 0;

        const animations = [];

        const addTimestamp = label => {
            timestamps.push({ label, value: document.timeline.currentTime });
            if (timestamps.length == numberOfTimestamps)
                resolve();
        };

        const addAnimation = label => {
            const animation = document.timeline.animate(progress => addTimestamp(label), timing);
            animation.frameRate = frameRate;
            animations.push(animation);
            t.add_cleanup(() => animation.cancel());
        };

        // Add one animation now.
        addAnimation(label1);

        // And another one in a different frame
        requestAnimationFrame(() => addAnimation(label2));
    });

    assert_equals(timestamps.length, numberOfTimestamps, "The expected number of timestamps were recorded");

    assert_equals(timestamps[0].label, label1, `The first timestamp was for animation "${label1}"`);
    assert_equals(timestamps[1].label, label2, `The second timestamp was for animation "${label2}"`);
    assert_equals(timestamps[2].label, label1, `The third timestamp was for animation "${label1}"`);
    assert_equals(timestamps[3].label, label2, `The fourth timestamp was for animation "${label2}"`);

    assert_not_equals(timestamps[0].value, timestamps[1].value, "The first two do not match");
    assert_equals(timestamps[2].value, timestamps[3].value, "The last two timestamps match");
    assert_not_equals(timestamps[0].value, timestamps[3].value, "The first and last timestamps don't match");
}, "Animations with the same frameRate started separately fire at the same timeline time");

</script>
</body>
