chromium/third_party/blink/web_tests/animations/events/compositor-start-event-timing.html

<!doctype html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<style>
.start {
    animation: anim 1ms;
}

@keyframes anim {
    0% {
        transform: translate3d(0, 0, 1px);
    }
    100% {
        transform: translate3d(0, 0, 0);
    }
}
</style>
<body>x
<script>
'use strict';
async_test(function(t) {

  requestAnimationFrame(function() {
    document.body.classList.add('start');

    // Force a style resolve, to ensure the animation is created.
    document.body.offsetTop;

    var animation = document.body.getAnimations()[0];
    requestAnimationFrame(function() {
      if (animation.playState === 'pending') {
        var passed = false;
        document.body.addEventListener('animationstart', function() {
          passed = true;
        });
        document.body.addEventListener('animationend', function() {
          t.step(function() {
            assert_true(passed);
            t.done();
          });
        });
      } else {
        // The animation is no longer pending.

        // We missed the opportunity to add a start event listener
        // before the animation started. This test might flakily
        // pass even if the implementation is incorrect.
        t.done();
      }
    });
  });
});
</script>