1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 """Runs Chromium's IndexedDB performance test. These test:
26 from metrics import memory
27 from metrics import power
28 from metrics import v8_object_stats
29 from telemetry import test
30 from telemetry.core import util
31 from telemetry.page import page_measurement
32 from telemetry.page import page_set
35 'V8.OsMemoryAllocated',
38 class _IndexedDbMeasurement(page_measurement.PageMeasurement):
39 def __init__(self, *args, **kwargs):
40 super(_IndexedDbMeasurement, self).__init__(*args, **kwargs)
41 self._memory_metric = None
42 self._power_metric = power.PowerMetric()
43 self._v8_object_stats_metric = None
45 def DidStartBrowser(self, browser):
46 """Initialize metrics once right after the browser has been launched."""
47 self._memory_metric = memory.MemoryMetric(browser)
48 self._v8_object_stats_metric = (
49 v8_object_stats.V8ObjectStatsMetric(_V8_COUNTER_NAMES))
51 def DidNavigateToPage(self, page, tab):
52 self._memory_metric.Start(page, tab)
53 self._power_metric.Start(page, tab)
54 self._v8_object_stats_metric.Start(page, tab)
56 def MeasurePage(self, page, tab, results):
57 tab.WaitForDocumentReadyStateToBeComplete()
58 tab.WaitForJavaScriptExpression(
59 'window.document.cookie.indexOf("__done=1") >= 0', 600)
61 self._power_metric.Stop(page, tab)
62 self._memory_metric.Stop(page, tab)
63 self._v8_object_stats_metric.Stop(page, tab)
65 self._memory_metric.AddResults(tab, results)
66 self._power_metric.AddResults(tab, results)
67 self._v8_object_stats_metric.AddResults(tab, results)
69 js_get_results = "JSON.stringify(automation.getResults());"
70 result_dict = json.loads(tab.EvaluateJavaScript(js_get_results))
72 for key in result_dict:
73 if key == 'OverallTestDuration':
75 msec = float(result_dict[key])
76 results.Add(key, 'ms', msec, data_type='unimportant')
78 results.Add('Total Perf', 'ms', total)
80 def CustomizeBrowserOptions(self, options):
81 memory.MemoryMetric.CustomizeBrowserOptions(options)
82 power.PowerMetric.CustomizeBrowserOptions(options)
83 v8_object_stats.V8ObjectStatsMetric.CustomizeBrowserOptions(options)
85 class IndexedDb(test.Test):
86 """Chromium's IndexedDB Performance tests."""
87 test = _IndexedDbMeasurement
89 def CreatePageSet(self, options):
90 indexeddb_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test',
92 ps = page_set.PageSet(file_path=indexeddb_dir)
93 ps.AddPageWithDefaultRunNavigate('file://perf_test.html')