Index: tools/perf/benchmarks/service_worker.py |
diff --git a/tools/perf/benchmarks/service_worker.py b/tools/perf/benchmarks/service_worker.py |
index 625c4fbfa45a5f4601d67610de06ec5aa30d67d4..880a920da1ea87d85aba94c955f29558695a217b 100644 |
--- a/tools/perf/benchmarks/service_worker.py |
+++ b/tools/perf/benchmarks/service_worker.py |
@@ -15,6 +15,7 @@ from telemetry.timeline import async_slice as async_slice_module |
from telemetry.timeline import slice as slice_module |
from telemetry.value import scalar |
+ |
class _ServiceWorkerTimelineMetric(object): |
def AddResultsOfCounters(self, process, counter_regex_string, results): |
counter_filter = re.compile(counter_regex_string) |
@@ -82,6 +83,8 @@ class _ServiceWorkerTimelineMetric(object): |
class _ServiceWorkerMeasurement(page_test.PageTest): |
+ """Measure Speed Index and TRACE_EVENTs""" |
+ |
def __init__(self, *args, **kwargs): |
super(_ServiceWorkerMeasurement, self).__init__(*args, **kwargs) |
self._timeline_controller = timeline_controller.TimelineController() |
@@ -99,17 +102,9 @@ class _ServiceWorkerMeasurement(page_test.PageTest): |
self._speed_index.Start(page, tab) |
def ValidateAndMeasurePage(self, page, tab, results): |
- tab.WaitForJavaScriptExpression( |
- '(window.done == null) ? ' + |
- '(document.readyState == "complete") : window.done', 40) |
+ tab.WaitForDocumentReadyStateToBeComplete(40) |
self._timeline_controller.Stop(tab) |
- # Measure JavaScript-land |
- json = tab.EvaluateJavaScript('window.results || {}') |
- for key, value in json.iteritems(): |
- results.AddValue(scalar.ScalarValue( |
- results.current_page, key, value['units'], value['value'])) |
- |
# Retrieve TRACE_EVENTs |
timeline_metric = _ServiceWorkerTimelineMetric() |
browser_process = self._timeline_controller.model.browser_process |
@@ -138,8 +133,55 @@ class _ServiceWorkerMeasurement(page_test.PageTest): |
chart_prefix += '_later' |
self._speed_index.AddResults(tab, results, chart_prefix) |
+ |
+class _ServiceWorkerMicroBenchmarkMeasurement(page_test.PageTest): |
+ """Measure JS land values and TRACE_EVENTs""" |
+ |
+ def __init__(self, *args, **kwargs): |
+ super(_ServiceWorkerMicroBenchmarkMeasurement, self).__init__(*args, |
+ **kwargs) |
+ self._timeline_controller = timeline_controller.TimelineController() |
+ |
+ def CustomizeBrowserOptions(self, options): |
+ options.AppendExtraBrowserArgs([ |
+ '--enable-experimental-web-platform-features' |
+ ]) |
+ |
+ def WillNavigateToPage(self, page, tab): |
+ self._timeline_controller.SetUp(page, tab) |
+ self._timeline_controller.Start(tab) |
+ |
+ def ValidateAndMeasurePage(self, page, tab, results): |
+ tab.WaitForJavaScriptExpression('window.done', 40) |
+ self._timeline_controller.Stop(tab) |
+ |
+ # Measure JavaScript-land |
+ json = tab.EvaluateJavaScript('window.results || {}') |
+ for key, value in json.iteritems(): |
+ results.AddValue(scalar.ScalarValue( |
+ results.current_page, key, value['units'], value['value'])) |
+ |
+ # Retrieve TRACE_EVENTs |
+ timeline_metric = _ServiceWorkerTimelineMetric() |
+ browser_process = self._timeline_controller.model.browser_process |
+ filter_text = '(RegisterServiceWorker|'\ |
+ 'UnregisterServiceWorker|'\ |
+ 'ProcessAllocate|'\ |
+ 'FindRegistrationForDocument|'\ |
+ 'DispatchFetchEvent)' |
+ timeline_metric.AddResultsOfEvents( |
+ browser_process, 'IOThread', filter_text , results) |
+ |
+ |
@benchmark.Enabled('android') |
class ServiceWorkerPerfTest(benchmark.Benchmark): |
- """Performance test on pages controlled by ServiceWorker""" |
+ """Performance test on public applications using ServiceWorker""" |
test = _ServiceWorkerMeasurement |
page_set = page_sets.ServiceWorkerPageSet |
+ |
+ |
+@benchmark.Enabled('android') |
+class ServiceWorkerMicroBenchmarkPerfTest(benchmark.Benchmark): |
+ """Service Worker performance test using a micro benchmark page set""" |
+ test = _ServiceWorkerMicroBenchmarkMeasurement |
+ page_set = page_sets.ServiceWorkerMicroBenchmarkPageSet |