Add dropped frame percent metric to video_PlaybackPerf
Currently video_PlaybackPerf has only dropped frame count metric. The
test plays a video for 30 seconds. The number of decoded and dropped
frames may vary in each run. Also, the dropped frame will change when
we change a test video. To have a more stable metric, add dropped
frame percent to video_PlaybackPerf.
BUG=chromium:510019
TEST=run the test on a veyron jerry
Change-Id: I729fd356feadbf6f0c142ddc22f046fe8250413a
Previous-Reviewed-on: https://chromium-review.googlesource.com/285369
(cherry picked from commit 4db6632e2476c6c480950ebb871553ab989421a4)
Reviewed-on: https://chromium-review.googlesource.com/288630
Reviewed-by: Wu-cheng Li <wuchengli@chromium.org>
Commit-Queue: Wu-cheng Li <wuchengli@chromium.org>
Tested-by: Wu-cheng Li <wuchengli@chromium.org>
diff --git a/client/site_tests/video_PlaybackPerf/video_PlaybackPerf.py b/client/site_tests/video_PlaybackPerf/video_PlaybackPerf.py
index 9fd97c6..228d2ac 100644
--- a/client/site_tests/video_PlaybackPerf/video_PlaybackPerf.py
+++ b/client/site_tests/video_PlaybackPerf/video_PlaybackPerf.py
@@ -46,6 +46,7 @@
CPU_USAGE_DESCRIPTION = 'video_cpu_usage_'
DROPPED_FRAMES_DESCRIPTION = 'video_dropped_frames_'
+DROPPED_FRAMES_PERCENT_DESCRIPTION = 'video_dropped_frames_percent_'
POWER_DESCRIPTION = 'video_mean_energy_rate_'
# Minimum battery charge percentage to run the test
@@ -143,8 +144,18 @@
if not power_test:
# Run the video playback dropped frame tests.
keyvals = self.test_dropped_frames(local_path)
- self.log_result(keyvals, DROPPED_FRAMES_DESCRIPTION +
+
+ # Every dictionary value is a tuple. The first element of the tuple
+ # is dropped frames. The second is dropped frames percent.
+ keyvals_dropped_frames = {k: v[0] for k, v in keyvals.iteritems()}
+ keyvals_dropped_frames_percent = {
+ k: v[1] for k, v in keyvals.iteritems()}
+
+ self.log_result(keyvals_dropped_frames, DROPPED_FRAMES_DESCRIPTION +
video_description, 'frames')
+ self.log_result(keyvals_dropped_frames_percent,
+ DROPPED_FRAMES_PERCENT_DESCRIPTION +
+ video_description, 'percent')
# Run the video playback cpu usage tests.
keyvals = self.test_cpu_usage(local_path)
@@ -166,8 +177,23 @@
def get_dropped_frames(cr):
time.sleep(MEASUREMENT_DURATION)
tab = cr.browser.tabs[0]
- return tab.EvaluateJavaScript("document.getElementsByTagName"
- "('video')[0].webkitDroppedFrameCount")
+ decoded_frame_count = tab.EvaluateJavaScript(
+ "document.getElementsByTagName"
+ "('video')[0].webkitDecodedFrameCount")
+ dropped_frame_count = tab.EvaluateJavaScript(
+ "document.getElementsByTagName"
+ "('video')[0].webkitDroppedFrameCount")
+ if decoded_frame_count != 0:
+ dropped_frame_percent = \
+ 100.0 * dropped_frame_count / decoded_frame_count
+ else:
+ logging.error("No frame is decoded. Set drop percent to 100.")
+ dropped_frame_percent = 100.0
+ logging.info("Decoded frames=%d, dropped frames=%d, percent=%f" %
+ (decoded_frame_count,
+ dropped_frame_count,
+ dropped_frame_percent))
+ return (dropped_frame_count, dropped_frame_percent)
return self.test_playback(local_path, get_dropped_frames)