Skip to content

Commit 8a5b62e

Browse files
committed
WebM player will report empty VideoPlaybackQualityMetrics
https://bugs.webkit.org/show_bug.cgi?id=283259 rdar://140068133 Reviewed by Eric Carlson. Hookup MediaPlayerPrivateWebM::videoPlaybackQualityMetrics(). Added test. * LayoutTests/media/video-playback-quality-webm-expected.txt: Added. * LayoutTests/media/video-playback-quality-webm.html: Added. * LayoutTests/platform/mac-wk1/TestExpectations: * Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.h: * Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.mm: (WebCore::MediaPlayerPrivateWebM::videoPlaybackQualityMetrics): Canonical link: https://commits.webkit.org/287046@main
1 parent 33d85c5 commit 8a5b62e

File tree

5 files changed

+73
-0
lines changed

5 files changed

+73
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
EVENT(load)
3+
RUN(video.src = "content/test-vp8.webm")
4+
EVENT(canplaythrough)
5+
RUN(originalQuality = video.getVideoPlaybackQuality())
6+
EXPECTED (originalQuality.totalVideoFrames >= '0') OK
7+
EXPECTED (originalQuality.droppedVideoFrames == '0') OK
8+
EXPECTED (originalQuality.totalFrameDelay == '0') OK
9+
RUN(video.play())
10+
EVENT(playing)
11+
RUN(newQuality = video.getVideoPlaybackQuality())
12+
EXPECTED (newQuality.creationTime > originalQuality.creationTime == 'true') OK
13+
EXPECTED (newQuality.totalVideoFrames >= originalQuality.totalVideoFrames == 'true') OK
14+
EXPECTED (newQuality.totalVideoFrames > '0') OK
15+
EXPECTED (newQuality.droppedVideoFrames >= originalQuality.droppedVideoFrames == 'true') OK
16+
EXPECTED (newQuality.droppedVideoFrames <= originalQuality.totalVideoFrames == 'true') OK
17+
END OF TEST
18+
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>getVideoPlaybackQuality with WebM</title>
5+
<script src="media-file.js"></script>
6+
<script src="video-test.js"></script>
7+
<script>
8+
9+
waitFor(window, 'load').then(async event => {
10+
findMediaElement();
11+
12+
run('video.src = "content/test-vp8.webm"');
13+
await waitFor(video, 'canplaythrough');
14+
15+
run(`originalQuality = video.getVideoPlaybackQuality()`);
16+
testExpected('originalQuality.totalVideoFrames', 0, '>=');
17+
testExpected('originalQuality.droppedVideoFrames', 0);
18+
testExpected('originalQuality.totalFrameDelay', 0);
19+
20+
runWithKeyDown('video.play()');
21+
await waitFor(video, 'playing');
22+
23+
run(`newQuality = video.getVideoPlaybackQuality()`);
24+
testExpected('newQuality.creationTime > originalQuality.creationTime', true);
25+
testExpected('newQuality.totalVideoFrames >= originalQuality.totalVideoFrames', true);
26+
testExpected('newQuality.totalVideoFrames', 0, ">");
27+
testExpected('newQuality.droppedVideoFrames >= originalQuality.droppedVideoFrames', true);
28+
testExpected('newQuality.droppedVideoFrames <= originalQuality.totalVideoFrames', true);
29+
30+
endTest();
31+
});
32+
33+
</script>
34+
</head>
35+
<body>
36+
<video controls preload='auto'></video>
37+
</body>
38+
</html>

LayoutTests/platform/mac-wk1/TestExpectations

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,6 +1157,7 @@ media/media-video-fullrange.html [ Skip ]
11571157
media/media-video-videorange.html [ Skip ]
11581158
media/media-video-fullrange-offscreen.html [ Skip ]
11591159
media/media-video-videorange-offscreen.html [ Skip ]
1160+
media/video-playback-quality-webm.html [ Skip ]
11601161

11611162
# VP9/VP8 are not supported on WK1 and turned off by default
11621163
media/media-source/media-source-vp8-hiddenframes.html [ Skip ]

Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ class MediaPlayerPrivateWebM
198198
bool wirelessVideoPlaybackDisabled() const final { return false; }
199199
#endif
200200

201+
std::optional<VideoPlaybackQualityMetrics> videoPlaybackQualityMetrics() final;
202+
201203
void enqueueSample(Ref<MediaSample>&&, TrackID);
202204
enum class NeedsFlush: bool {
203205
No = 0,

Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.mm

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1987,6 +1987,20 @@ void getSupportedTypes(HashSet<String>& types) const final
19871987
#endif
19881988
}
19891989

1990+
std::optional<VideoPlaybackQualityMetrics> MediaPlayerPrivateWebM::videoPlaybackQualityMetrics()
1991+
{
1992+
if (!m_videoRenderer)
1993+
return std::nullopt;
1994+
1995+
return VideoPlaybackQualityMetrics {
1996+
m_videoRenderer->totalVideoFrames(),
1997+
m_videoRenderer->droppedVideoFrames(),
1998+
m_videoRenderer->corruptedVideoFrames(),
1999+
m_videoRenderer->totalFrameDelay().toDouble(),
2000+
m_videoRenderer->totalDisplayedFrames()
2001+
};
2002+
}
2003+
19902004
} // namespace WebCore
19912005

19922006
#endif // ENABLE(ALTERNATE_WEBM_PLAYER)

0 commit comments

Comments
 (0)