Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(377)

Unified Diff: tools/perf/metrics/webrtc_stats_unittest.py

Issue 561803002: Implements peer connection stats measurements in WebRTC call test. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@telemetry
Patch Set: Rebased Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/perf/metrics/webrtc_stats.py ('k') | tools/perf/page_sets/webrtc_cases.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/perf/metrics/webrtc_stats_unittest.py
diff --git a/tools/perf/metrics/webrtc_stats_unittest.py b/tools/perf/metrics/webrtc_stats_unittest.py
new file mode 100644
index 0000000000000000000000000000000000000000..8f1fd1fa0f0afc5ecd2e529f16862e49f40e9e38
--- /dev/null
+++ b/tools/perf/metrics/webrtc_stats_unittest.py
@@ -0,0 +1,136 @@
+# 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.
+
+import unittest
+
+from metrics import webrtc_stats
+from telemetry.unittest import simple_mock
+
+
+SAMPLE_JSON = '''
+[[
+ [
+ {
+ "googFrameHeightInput":"480",
+ "googFrameWidthInput":"640",
+ "packetsLost":"-1",
+ "googRtt":"-1",
+ "packetsSent":"0",
+ "bytesSent":"0"
+ },
+ {
+ "audioInputLevel":"2048",
+ "googRtt":"-1",
+ "googCodecName":"opus",
+ "packetsSent":"4",
+ "bytesSent":"0"
+ }
+ ],
+ [
+ {
+ "googFrameHeightInput":"480",
+ "googFrameWidthInput":"640",
+ "packetsLost":"-1",
+ "googRtt":"-1",
+ "packetsSent":"8",
+ "bytesSent":"6291"
+ },
+ {
+ "audioInputLevel":"1878",
+ "googRtt":"-1",
+ "googCodecName":"opus",
+ "packetsSent":"16",
+ "bytesSent":"634"
+ }
+ ]
+],
+[
+ [
+ {
+ "googDecodeMs":"0",
+ "packetsReceived":"8",
+ "googRenderDelayMs":"10",
+ "googMaxDecodeMs":"0"
+ }
+ ],
+ [
+ {
+ "googDecodeMs":"14",
+ "packetsReceived":"1234",
+ "googRenderDelayMs":"102",
+ "googMaxDecodeMs":"150"
+ }
+ ]
+]]
+'''
+
+
+class FakeResults:
+ def __init__(self, current_page):
+ self._received_values = []
+ self._current_page = current_page
+
+ @property
+ def received_values(self):
+ return self._received_values
+
+ @property
+ def current_page(self):
+ return self._current_page
+
+ def AddValue(self, value):
+ self._received_values.append(value)
+
+
+class WebRtcStatsUnittest(unittest.TestCase):
+
+ def _RunMetricOnJson(self, json_to_return):
+ stats_metric = webrtc_stats.WebRtcStatisticsMetric()
+
+ tab = simple_mock.MockObject()
+ page = simple_mock.MockObject()
+
+ stats_metric.Start(page, tab)
+
+ tab.ExpectCall('EvaluateJavaScript',
+ simple_mock.DONT_CARE).WillReturn(json_to_return)
+ stats_metric.Stop(page, tab)
+
+ page.url = simple_mock.MockObject()
+ results = FakeResults(page)
+ stats_metric.AddResults(tab, results)
+ return results
+
+ def testExtractsValuesAsTimeSeries(self):
+ results = self._RunMetricOnJson(SAMPLE_JSON)
+
+ self.assertTrue(results.received_values,
+ 'Expected values for googDecodeMs and others, got none.')
+
+ # TODO(phoglund): this is actually a bug; make the metric clever enough to
+ # distinguish packetsSent on audio from packetsSent on video, etc.
+ self.assertEqual(results.received_values[0].values,
+ [0.0, 4.0, 8.0, 16.0])
+ self.assertEqual(results.received_values[1].values,
+ [8.0, 1234.0])
+
+ def testExtractsInterestingMetricsOnly(self):
+ results = self._RunMetricOnJson(SAMPLE_JSON)
+
+ self.assertEqual(len(results.received_values), 4)
+ self.assertEqual(results.received_values[0].name,
+ 'peer_connection_0_packets_sent',
+ 'The result should be a ListOfScalarValues instance with '
+ 'a name <peer connection id>_<statistic>.')
+ self.assertEqual(results.received_values[1].name,
+ 'peer_connection_1_packets_received')
+ self.assertEqual(results.received_values[2].name,
+ 'peer_connection_1_goog_decode_ms')
+ self.assertEqual(results.received_values[3].name,
+ 'peer_connection_1_goog_max_decode_ms')
+
+ def testReturnsIfJsonIsEmpty(self):
+ results = self._RunMetricOnJson('[]')
+ self.assertFalse(results.received_values)
+
« no previous file with comments | « tools/perf/metrics/webrtc_stats.py ('k') | tools/perf/page_sets/webrtc_cases.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698