From 8296efb274f6c72ac87ab168b3d74a5d706755e7 Mon Sep 17 00:00:00 2001 From: "shadi@chromium.org" Date: Thu, 26 Dec 2013 22:06:31 +0000 Subject: [PATCH] Report media source metrics independent of media measurement. BUG=None TEST=tools/perf/run_benchmark media.mse_cases Review URL: https://codereview.chromium.org/117803004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@242567 0039d316-1c4b-4281-b951-d872f2087c98 --- tools/perf/benchmarks/media.py | 19 ++++++++++++++- tools/perf/metrics/media.js | 2 +- tools/perf/metrics/media.py | 1 - tools/perf/page_sets/mse_cases.json | 5 +++- tools/perf/page_sets/mse_cases/startup_test.js | 32 ++++++++++++++++++-------- 5 files changed, 45 insertions(+), 14 deletions(-) diff --git a/tools/perf/benchmarks/media.py b/tools/perf/benchmarks/media.py index 6581989b0768..57a7ab4931b1 100644 --- a/tools/perf/benchmarks/media.py +++ b/tools/perf/benchmarks/media.py @@ -4,8 +4,24 @@ import sys -from measurements import media from telemetry import test +from telemetry.page import page_measurement + +from measurements import media + + +class MSEMeasurement(page_measurement.PageMeasurement): + def MeasurePage(self, page, tab, results): + media_metric = tab.EvaluateJavaScript('window.__testMetrics') + trace = media_metric['id'] + metrics = media_metric['metrics'] + for m in metrics: + if isinstance(metrics[m], list): + values = [float(v) for v in metrics[m]] + else: + values = float(metrics[m]) + results.Add(trace, 'ms', values, chart_name=m) + class Media(test.Test): """Obtains media metrics for key user scenarios.""" @@ -38,6 +54,7 @@ class MediaSourceExtensions(test.Test): """Obtains media metrics for key media source extensions functions.""" test = media.Media enabled = not sys.platform.startswith('linux') + test = MSEMeasurement page_set = 'page_sets/mse_cases.json' def CustomizeBrowserOptions(self, options): diff --git a/tools/perf/metrics/media.js b/tools/perf/metrics/media.js index 85b10526da59..b99b5b395760 100644 --- a/tools/perf/metrics/media.js +++ b/tools/perf/metrics/media.js @@ -111,7 +111,7 @@ HTMLMediaMetric.prototype.onPlaying = function(event) { // Playing event can fire more than once if seeking. - if (!this.metrics['time_to_play']) + if (!this.metrics['time_to_play'] && this.playbackTimer) this.metrics['time_to_play'] = this.playbackTimer.stop(); }; diff --git a/tools/perf/metrics/media.py b/tools/perf/metrics/media.py index 57d0c3e7df06..ce2c8ba23d8b 100644 --- a/tools/perf/metrics/media.py +++ b/tools/perf/metrics/media.py @@ -80,5 +80,4 @@ class MediaMetric(Metric): AddOneResult('avg_loop_time', 'ms') AddOneResult('seek', 'ms') - AddOneResult('mse', 'ms') return trace diff --git a/tools/perf/page_sets/mse_cases.json b/tools/perf/page_sets/mse_cases.json index 18e471026011..fb8e4142c231 100644 --- a/tools/perf/page_sets/mse_cases.json +++ b/tools/perf/page_sets/mse_cases.json @@ -1,6 +1,9 @@ { "description": "Media source extensions perf benchmark", - "media_metrics": {"action": "wait", "javascript" : "window.__testDone == true"}, + "navigate_steps" : [ + { "action": "navigate" }, + { "action": "wait", "javascript": "window.__testDone == true" } + ], "pages": [ { "url": "file://mse_cases/startup_test.html?testType=AV" diff --git a/tools/perf/page_sets/mse_cases/startup_test.js b/tools/perf/page_sets/mse_cases/startup_test.js index 2838a25f398f..5225c264257f 100644 --- a/tools/perf/page_sets/mse_cases/startup_test.js +++ b/tools/perf/page_sets/mse_cases/startup_test.js @@ -1,3 +1,12 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +// The file runs a series of Media Source Entensions (MSE) operations on a +// video tag. The test takes several URL parameters described in +//loadTestParams() function. + (function() { function getPerfTimestamp() { return performance.now(); @@ -118,22 +127,24 @@ } function reportTelemetryMediaMetrics(stats, element) { - if (!stats || !window.__getMediaMetric) { - console.error("Stats not collected or could not find getMediaMetric()."); - return; - } - var metric = window.__getMediaMetric(element); - if (!metric) { - console.error("Can not report Telemetry media metrics."); - return - } + var metrics = {}; for (var i = 0; i < stats.length; ++i) { var bar = stats[i]; var label = bar.label.toLowerCase().replace(/\s+|\./g, '_'); var value = (bar.end - bar.start).toFixed(3); console.log("appending to telemetry " + label + " : " + value); - metric.appendMetric("mse_" + label, value); + _AppendMetric(metrics, label, value); } + window.__testMetrics = { + "id": element.id, + "metrics": metrics + }; + } + + function _AppendMetric(metrics, metric, value) { + if (!metrics[metric]) + metrics[metric] = []; + metrics[metric].push(value); } function updateControls(testParams) { @@ -483,4 +494,5 @@ window["setupTest"] = setupTest; window.__testDone = false; + window.__testMetrics = null; })(); -- 2.11.4.GIT