| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Runs Chromium's IndexedDB performance test. These test: | 5 """Runs Chromium's IndexedDB performance test. These test: |
| 6 | 6 |
| 7 Databases: | 7 Databases: |
| 8 create/delete | 8 create/delete |
| 9 Keys: | 9 Keys: |
| 10 create/delete | 10 create/delete |
| 11 Indexes: | 11 Indexes: |
| 12 create/delete | 12 create/delete |
| 13 Data access: | 13 Data access: |
| 14 Random read/write | 14 Random read/write |
| 15 Sporadic writes | 15 Sporadic writes |
| 16 Read cache | 16 Read cache |
| 17 Cursors: | 17 Cursors: |
| 18 Read & random writes | 18 Read & random writes |
| 19 Walking multiple | 19 Walking multiple |
| 20 Seeking. | 20 Seeking. |
| 21 """ | 21 """ |
| 22 | 22 |
| 23 import json | 23 import json |
| 24 import os | 24 import os |
| 25 | 25 |
| 26 from metrics import memory |
| 27 from metrics import v8_object_stats |
| 26 from telemetry import test | 28 from telemetry import test |
| 27 from telemetry.core import util | 29 from telemetry.core import util |
| 28 from telemetry.page import page_measurement | 30 from telemetry.page import page_measurement |
| 29 from telemetry.page import page_set | 31 from telemetry.page import page_set |
| 30 | 32 |
| 33 _V8_COUNTER_NAMES = [ |
| 34 'V8.OsMemoryAllocated', |
| 35 ] |
| 31 | 36 |
| 32 class _IndexedDbMeasurement(page_measurement.PageMeasurement): | 37 class _IndexedDbMeasurement(page_measurement.PageMeasurement): |
| 33 def MeasurePage(self, _, tab, results): | 38 def __init__(self, *args, **kwargs): |
| 39 super(_IndexedDbMeasurement, self).__init__(*args, **kwargs) |
| 40 self._memory_metric = None |
| 41 self._v8_object_stats_metric = None |
| 42 |
| 43 def DidStartBrowser(self, browser): |
| 44 """Initialize metrics once right after the browser has been launched.""" |
| 45 self._memory_metric = memory.MemoryMetric(browser) |
| 46 self._v8_object_stats_metric = \ |
| 47 v8_object_stats.V8ObjectStatsMetric(_V8_COUNTER_NAMES) |
| 48 |
| 49 def DidNavigateToPage(self, page, tab): |
| 50 self._memory_metric.Start(page, tab) |
| 51 self._v8_object_stats_metric.Start(page, tab) |
| 52 |
| 53 def MeasurePage(self, page, tab, results): |
| 34 tab.WaitForDocumentReadyStateToBeComplete() | 54 tab.WaitForDocumentReadyStateToBeComplete() |
| 35 tab.WaitForJavaScriptExpression( | 55 tab.WaitForJavaScriptExpression( |
| 36 'window.document.cookie.indexOf("__done=1") >= 0', 600) | 56 'window.document.cookie.indexOf("__done=1") >= 0', 600) |
| 37 | 57 |
| 58 self._memory_metric.Stop(page, tab) |
| 59 self._v8_object_stats_metric.Stop(page, tab) |
| 60 |
| 61 self._memory_metric.AddResults(tab, results) |
| 62 self._v8_object_stats_metric.AddResults(tab, results) |
| 63 |
| 38 js_get_results = "JSON.stringify(automation.getResults());" | 64 js_get_results = "JSON.stringify(automation.getResults());" |
| 39 result_dict = json.loads(tab.EvaluateJavaScript(js_get_results)) | 65 result_dict = json.loads(tab.EvaluateJavaScript(js_get_results)) |
| 40 total = 0.0 | 66 total = 0.0 |
| 41 for key in result_dict: | 67 for key in result_dict: |
| 42 if key == 'OverallTestDuration': | 68 if key == 'OverallTestDuration': |
| 43 continue | 69 continue |
| 44 msec = float(result_dict[key]) | 70 msec = float(result_dict[key]) |
| 45 results.Add(key, 'ms', msec, data_type='unimportant') | 71 results.Add(key, 'ms', msec, data_type='unimportant') |
| 46 total += msec | 72 total += msec |
| 47 results.Add('Total', 'ms', total) | 73 results.Add('Total Perf', 'ms', total) |
| 74 |
| 75 def CustomizeBrowserOptions(self, options): |
| 76 memory.MemoryMetric.CustomizeBrowserOptions(options) |
| 77 v8_object_stats.V8ObjectStatsMetric.CustomizeBrowserOptions(options) |
| 48 | 78 |
| 49 class IndexedDb(test.Test): | 79 class IndexedDb(test.Test): |
| 50 """Chromium's IndexedDB Performance tests.""" | 80 """Chromium's IndexedDB Performance tests.""" |
| 51 test = _IndexedDbMeasurement | 81 test = _IndexedDbMeasurement |
| 52 | 82 |
| 53 def CreatePageSet(self, options): | 83 def CreatePageSet(self, options): |
| 54 indexeddb_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test', | 84 indexeddb_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test', |
| 55 'data', 'indexeddb') | 85 'data', 'indexeddb') |
| 56 return page_set.PageSet.FromDict({ | 86 return page_set.PageSet.FromDict({ |
| 57 'pages': [ | 87 'pages': [ |
| 58 { 'url': 'file://perf_test.html' } | 88 { 'url': 'file://perf_test.html' } |
| 59 ] | 89 ] |
| 60 }, indexeddb_dir) | 90 }, indexeddb_dir) |
| OLD | NEW |