Revision de277f72555a8613d1d38a9a6df270d16621ac89 authored by Chris Nardi on 29 March 2018, 23:23:28 UTC, committed by Chris Nardi on 29 March 2018, 23:23:28 UTC
Many spec links were in shortlink form (e.g. https://drafts.csswg.org/cssom/ instead of https://drafts.csswg.org/cssom-1/). However, build.py did not pick up these spec links, as it assumed that the only spec links could be in longhand form with the spec version. Update build.py to consider shortlinks when building.
1 parent 7991f4b
Raw File
mediasource-getvideoplaybackquality.html
<!DOCTYPE html>
<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<html>
    <head>
        <title>HTMLVideoElement.getVideoPlaybackQuality() test cases.</title>
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
        <script src="mediasource-util.js"></script>
    </head>
    <body>
        <div id="log"></div>
        <script>
          mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
          {
              var previousQuality = mediaElement.getVideoPlaybackQuality();
              var timeUpdateCount = 0;
              mediaElement.addEventListener("timeupdate", test.step_func(function (e)
              {
                  var videoElement = e.target;
                  var newQuality = videoElement.getVideoPlaybackQuality();
                  var now = window.performance.now();

                  assert_not_equals(previousQuality, newQuality,
                    "New quality object is different from the previous one");
                  assert_greater_than(newQuality.creationTime, previousQuality.creationTime,
                    "creationTime increases monotonically");
                  assert_approx_equals(newQuality.creationTime, now, 100,
                    "creationTime roughly equals current time");

                  assert_greater_than_equal(newQuality.totalVideoFrames, 0, "totalVideoFrames >= 0");
                  assert_greater_than_equal(newQuality.totalVideoFrames, previousQuality.totalVideoFrames,
                    "totalVideoFrames increases monotonically");
                  assert_less_than(newQuality.totalVideoFrames, 300,
                    "totalVideoFrames should remain low as duration is less than 10s and framerate less than 30fps");

                  assert_greater_than_equal(newQuality.droppedVideoFrames, 0, "droppedVideoFrames >= 0");
                  assert_greater_than_equal(newQuality.droppedVideoFrames, previousQuality.droppedVideoFrames,
                    "droppedVideoFrames increases monotonically");
                  assert_less_than_equal(newQuality.droppedVideoFrames, newQuality.totalVideoFrames,
                    "droppedVideoFrames is only a portion of totalVideoFrames");

                  assert_greater_than_equal(newQuality.corruptedVideoFrames, 0, "corruptedVideoFrames >= 0");
                  assert_greater_than_equal(newQuality.corruptedVideoFrames, previousQuality.corruptedVideoFrames,
                    "corruptedVideoFrames increases monotonically");
                  assert_less_than_equal(newQuality.corruptedVideoFrames, newQuality.totalVideoFrames,
                    "corruptedVideoFrames is only a portion of totalVideoFrames");

                  previousQuality = newQuality;
                  timeUpdateCount++;
              }));

              mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));

              sourceBuffer.appendBuffer(mediaData);
              test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');

              test.waitForExpectedEvents(function()
              {
                  assert_false(sourceBuffer.updating, "updating");
                  mediaSource.endOfStream();
                  assert_less_than(mediaSource.duration, 10, "duration");
                  mediaElement.play();
                  test.expectEvent(mediaElement, 'ended', 'mediaElement');
              });

              test.waitForExpectedEvents(function()
              {
                  assert_greater_than(timeUpdateCount, 2, "timeUpdateCount");
                  test.done();
              });
          }, "Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API");


          mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
          {
              var previousQuality = mediaElement.getVideoPlaybackQuality();
              var timeUpdateCount = 0;
              var startTime = 0;
              mediaElement.addEventListener("timeupdate", test.step_func(function (e)
              {
                  var videoElement = e.target;
                  var newQuality = videoElement.getVideoPlaybackQuality();
                  var now = window.performance.now();

                  assert_greater_than_equal(newQuality.totalFrameDelay, 0, "totalFrameDelay >= 0");
                  assert_greater_than_equal(newQuality.totalFrameDelay, previousQuality.totalFrameDelay,
                    "totalFrameDelay increases monotonically");
                  assert_less_than(newQuality.totalFrameDelay, (now - startTime) / 1000,
                    "totalFrameDelay does not exceed the time elapsed since playback started");

                  previousQuality = newQuality;
                  timeUpdateCount++;
              }));

              mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));

              sourceBuffer.appendBuffer(mediaData);
              test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
              test.waitForExpectedEvents(function()
              {
                  assert_false(sourceBuffer.updating, "updating");
                  mediaSource.endOfStream();
                  assert_less_than(mediaSource.duration, 10, "duration");
                  startTime = window.performance.now();
                  mediaElement.play();
                  test.expectEvent(mediaElement, 'ended', 'mediaElement');
              });

              test.waitForExpectedEvents(function()
              {
                  assert_greater_than(timeUpdateCount, 2, "timeUpdateCount");
                  test.done();
              });
          }, "Test the totalFrameDelay attribute of HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API");
        </script>
    </body>
</html>
back to top