Commit 69601f7f authored by Emircan Uysaler's avatar Emircan Uysaler Committed by Commit Bot

Add WebRtcVideoDisplayPerfBrowserTest

This test creates a WebRTC peer connection between two tabs and measures the trace
events added on the tab receiving remote video. It does connection with different
codecs to create the different scenarios of HW decode(texture) and SW decode(memory).
Based on these events, it provides stats about the lifetime of a video frame that
is played in a MediaStream backed <video> tag.

The plan is to run this test on WebRTC Chromium bots and make it available for other
projects that are very sensitive about display latency.

Bug: 818352
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel
Change-Id: I023bea19c9e2271d153f1062d0ec73624c96148b
Reviewed-on: https://chromium-review.googlesource.com/947418Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: default avatardanakj <danakj@chromium.org>
Reviewed-by: default avatarTommi <tommi@chromium.org>
Reviewed-by: default avatarSergey Ulanov <sergeyu@chromium.org>
Reviewed-by: default avatarPatrik Höglund <phoglund@chromium.org>
Commit-Queue: Emircan Uysaler <emircan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#541698}
parent 25c274e6
...@@ -609,6 +609,9 @@ void VideoResourceUpdater::ObtainFrameResources( ...@@ -609,6 +609,9 @@ void VideoResourceUpdater::ObtainFrameResources(
resource_ids.push_back(resource_id); resource_ids.push_back(resource_id);
} }
} }
TRACE_EVENT_INSTANT1("media", "VideoResourceUpdater::ObtainFrameResources",
TRACE_EVENT_SCOPE_THREAD, "Timestamp",
video_frame->timestamp().InMicroseconds());
} }
void VideoResourceUpdater::ReleaseFrameResources() { void VideoResourceUpdater::ReleaseFrameResources() {
......
...@@ -575,6 +575,7 @@ test("browser_tests") { ...@@ -575,6 +575,7 @@ test("browser_tests") {
"../browser/media/webrtc/webrtc_rtp_browsertest.cc", "../browser/media/webrtc/webrtc_rtp_browsertest.cc",
"../browser/media/webrtc/webrtc_simulcast_browsertest.cc", "../browser/media/webrtc/webrtc_simulcast_browsertest.cc",
"../browser/media/webrtc/webrtc_stats_perf_browsertest.cc", "../browser/media/webrtc/webrtc_stats_perf_browsertest.cc",
"../browser/media/webrtc/webrtc_video_display_perf_browsertest.cc",
"../browser/media/webrtc/webrtc_video_quality_browsertest.cc", "../browser/media/webrtc/webrtc_video_quality_browsertest.cc",
"../browser/media/webrtc/webrtc_webcam_browsertest.cc", "../browser/media/webrtc/webrtc_webcam_browsertest.cc",
"../browser/media/wv_test_license_server_config.cc", "../browser/media/wv_test_license_server_config.cc",
...@@ -1767,6 +1768,7 @@ test("browser_tests") { ...@@ -1767,6 +1768,7 @@ test("browser_tests") {
"../browser/media/webrtc/webrtc_rtp_browsertest.cc", "../browser/media/webrtc/webrtc_rtp_browsertest.cc",
"../browser/media/webrtc/webrtc_simulcast_browsertest.cc", "../browser/media/webrtc/webrtc_simulcast_browsertest.cc",
"../browser/media/webrtc/webrtc_stats_perf_browsertest.cc", "../browser/media/webrtc/webrtc_stats_perf_browsertest.cc",
"../browser/media/webrtc/webrtc_video_display_perf_browsertest.cc",
"../browser/media/webrtc/webrtc_video_quality_browsertest.cc", "../browser/media/webrtc/webrtc_video_quality_browsertest.cc",
"../browser/media/webrtc/webrtc_webcam_browsertest.cc", "../browser/media/webrtc/webrtc_webcam_browsertest.cc",
] ]
......
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>WebRTC Automated Test</title>
<script type="text/javascript" src="test_functions.js"></script>
<script type="text/javascript" src="peerconnection.js"></script>
<script type="text/javascript" src="munge_sdp.js"></script>
<script type="text/javascript" src="getusermedia.js"></script>
<script type="text/javascript" src="video_detector.js"></script>
<script type="text/javascript" src="indexeddb.js"></script>
</head>
<body>
<table border="0">
<tr>
<td>Remote Video</td>
</tr>
<tr>
<td>
<video id="remote-view" autoplay="autoplay"></video>
</td>
</tr>
</table>
<video id="local-view" style="display:none"></video>
</body>
</html>
...@@ -209,6 +209,9 @@ void WebMediaPlayerMSCompositor::EnqueueFrame( ...@@ -209,6 +209,9 @@ void WebMediaPlayerMSCompositor::EnqueueFrame(
scoped_refptr<media::VideoFrame> frame) { scoped_refptr<media::VideoFrame> frame) {
DCHECK(io_task_runner_->BelongsToCurrentThread()); DCHECK(io_task_runner_->BelongsToCurrentThread());
base::AutoLock auto_lock(current_frame_lock_); base::AutoLock auto_lock(current_frame_lock_);
TRACE_EVENT_INSTANT1("media", "WebMediaPlayerMSCompositor::EnqueueFrame",
TRACE_EVENT_SCOPE_THREAD, "Timestamp",
frame->timestamp().InMicroseconds());
++total_frame_count_; ++total_frame_count_;
// With algorithm off, just let |current_frame_| hold the incoming |frame|. // With algorithm off, just let |current_frame_| hold the incoming |frame|.
...@@ -301,6 +304,9 @@ bool WebMediaPlayerMSCompositor::HasCurrentFrame() { ...@@ -301,6 +304,9 @@ bool WebMediaPlayerMSCompositor::HasCurrentFrame() {
scoped_refptr<media::VideoFrame> WebMediaPlayerMSCompositor::GetCurrentFrame() { scoped_refptr<media::VideoFrame> WebMediaPlayerMSCompositor::GetCurrentFrame() {
DVLOG(3) << __func__; DVLOG(3) << __func__;
base::AutoLock auto_lock(current_frame_lock_); base::AutoLock auto_lock(current_frame_lock_);
TRACE_EVENT_INSTANT1("media", "WebMediaPlayerMSCompositor::GetCurrentFrame",
TRACE_EVENT_SCOPE_THREAD, "Timestamp",
current_frame_->timestamp().InMicroseconds());
current_frame_used_by_compositor_ = true; current_frame_used_by_compositor_ = true;
return current_frame_; return current_frame_;
} }
...@@ -396,6 +402,9 @@ void WebMediaPlayerMSCompositor::Render(base::TimeTicks deadline_min, ...@@ -396,6 +402,9 @@ void WebMediaPlayerMSCompositor::Render(base::TimeTicks deadline_min,
void WebMediaPlayerMSCompositor::SetCurrentFrame( void WebMediaPlayerMSCompositor::SetCurrentFrame(
const scoped_refptr<media::VideoFrame>& frame) { const scoped_refptr<media::VideoFrame>& frame) {
current_frame_lock_.AssertAcquired(); current_frame_lock_.AssertAcquired();
TRACE_EVENT_INSTANT1("media", "WebMediaPlayerMSCompositor::SetCurrentFrame",
TRACE_EVENT_SCOPE_THREAD, "Timestamp",
frame->timestamp().InMicroseconds());
if (!current_frame_used_by_compositor_) if (!current_frame_used_by_compositor_)
++dropped_frame_count_; ++dropped_frame_count_;
......
...@@ -103,15 +103,16 @@ void MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate::OnFrame( ...@@ -103,15 +103,16 @@ void MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate::OnFrame(
const base::TimeTicks render_time = const base::TimeTicks render_time =
base::TimeTicks() + incoming_timestamp + time_diff_; base::TimeTicks() + incoming_timestamp + time_diff_;
TRACE_EVENT1("webrtc", "RemoteVideoSourceDelegate::RenderFrame",
"Ideal Render Instant", render_time.ToInternalValue());
CHECK_NE(media::kNoTimestamp, incoming_timestamp); CHECK_NE(media::kNoTimestamp, incoming_timestamp);
if (start_timestamp_ == media::kNoTimestamp) if (start_timestamp_ == media::kNoTimestamp)
start_timestamp_ = incoming_timestamp; start_timestamp_ = incoming_timestamp;
const base::TimeDelta elapsed_timestamp = const base::TimeDelta elapsed_timestamp =
incoming_timestamp - start_timestamp_; incoming_timestamp - start_timestamp_;
TRACE_EVENT2("webrtc", "RemoteVideoSourceDelegate::RenderFrame",
"Ideal Render Instant", render_time.ToInternalValue(),
"Timestamp", elapsed_timestamp.InMicroseconds());
scoped_refptr<media::VideoFrame> video_frame; scoped_refptr<media::VideoFrame> video_frame;
scoped_refptr<webrtc::VideoFrameBuffer> buffer( scoped_refptr<webrtc::VideoFrameBuffer> buffer(
incoming_frame.video_frame_buffer()); incoming_frame.video_frame_buffer());
......
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