Commit b25c33c8 authored by Thomas Guilbert's avatar Thomas Guilbert Committed by Commit Bot

Deflake video tests

This CL makes sure all videos have produced a video frame before
proceeding to the next step of the test, by using the
requestVideoFrameCallback API.

video-object-fit-change.html still has a risk of flaking, since we
cannot use rVFC to be notified on object fits.

Bug: 963141
Change-Id: I17903cb9914977d113c8ba3093e2eb298328141a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2556497
Commit-Queue: Tommy Steimel <steimel@chromium.org>
Reviewed-by: default avatarTommy Steimel <steimel@chromium.org>
Auto-Submit: Thomas Guilbert <tguilbert@chromium.org>
Cr-Commit-Position: refs/heads/master@{#831022}
parent 2ceb952f
...@@ -5033,11 +5033,6 @@ crbug.com/865432 [ Linux ] external/wpt/workers/modules/dedicated-worker-import- ...@@ -5033,11 +5033,6 @@ crbug.com/865432 [ Linux ] external/wpt/workers/modules/dedicated-worker-import-
crbug.com/867532 [ Linux ] external/wpt/workers/modules/dedicated-worker-import-data-url.any.worker.html [ Timeout Pass ] crbug.com/867532 [ Linux ] external/wpt/workers/modules/dedicated-worker-import-data-url.any.worker.html [ Timeout Pass ]
crbug.com/867532 [ Linux ] external/wpt/workers/modules/dedicated-worker-import.any.worker.html [ Timeout Pass ] crbug.com/867532 [ Linux ] external/wpt/workers/modules/dedicated-worker-import.any.worker.html [ Timeout Pass ]
# These video tests seem to take a screenshot too early.
crbug.com/963141 media/video-object-fit.html [ Pass Failure ]
crbug.com/963141 media/video-object-fit-change.html [ Pass Failure ]
crbug.com/963141 media/video-aspect-ratio.html [ Pass Failure ]
# Updated by sheriff 2020-06-01: this one seem flaky on all platforms now. # Updated by sheriff 2020-06-01: this one seem flaky on all platforms now.
# See also: crbug.com/1083564 # See also: crbug.com/1083564
crbug.com/963141 media/controls/video-overlay-cast-light-rendering.html [ Pass Failure ] crbug.com/963141 media/controls/video-overlay-cast-light-rendering.html [ Pass Failure ]
......
...@@ -39,6 +39,17 @@ function setSrcByTagName(tagName, src) { ...@@ -39,6 +39,17 @@ function setSrcByTagName(tagName, src) {
} }
} }
function videoPresentationPromise(video) {
return new Promise(resolve => video.requestVideoFrameCallback(resolve));
}
// This function should be called before setting video.src to guarantee that we
// catch all new frames.
function allVideosPresentedPromise() {
let videos = Array.from(document.getElementsByTagName('video'));
return Promise.all(videos.map(video => videoPresentationPromise(video)));
}
function setSrcById(id, src) { function setSrcById(id, src) {
var element = document.getElementById(id); var element = document.getElementById(id);
if (element) if (element)
......
...@@ -18,14 +18,10 @@ ...@@ -18,14 +18,10 @@
function init() function init()
{ {
var videosPresented = allVideosPresentedPromise();
setSrcByTagName("video", "content/test.ogv"); setSrcByTagName("video", "content/test.ogv");
var totalCount = document.getElementsByTagName('video').length; videosPresented.then(changeStyle);
var count = totalCount;
document.addEventListener("canplaythrough", function () {
if (!--count)
setTimeout(function() { changeStyle(); }, 500);
}, true);
} }
function changeStyle() function changeStyle()
......
...@@ -18,16 +18,10 @@ ...@@ -18,16 +18,10 @@
function init() function init()
{ {
var videosPresented = allVideosPresentedPromise();
setSrcByTagName("video", "content/test.ogv"); setSrcByTagName("video", "content/test.ogv");
var totalCount = document.getElementsByTagName('video').length; videosPresented.then(() => testRunner.notifyDone());
var count = totalCount;
document.addEventListener("canplaythrough", function () {
if (!--count) {
if (window.testRunner)
setTimeout(function() { testRunner.notifyDone(); }, totalCount * 150);
}
}, true);
} }
</script> </script>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment