| 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 Read cache | 15 Read cache |
| 16 Cursors: | 16 Cursors: |
| 17 Read & random writes | 17 Read & random writes |
| 18 Walking multiple | 18 Walking multiple |
| 19 Seeking. | 19 Seeking. |
| 20 """ | 20 """ |
| 21 | 21 |
| 22 import json | 22 import json |
| 23 import os | 23 import os |
| 24 | 24 |
| 25 from core import perf_benchmark | 25 from core import perf_benchmark |
| 26 | 26 |
| 27 from telemetry import page as page_module |
| 28 from telemetry import story |
| 27 from telemetry.core import util | 29 from telemetry.core import util |
| 28 from telemetry import page as page_module | |
| 29 from telemetry.page import page_test | 30 from telemetry.page import page_test |
| 30 from telemetry import story | |
| 31 from telemetry.value import scalar | 31 from telemetry.value import scalar |
| 32 | 32 |
| 33 from metrics import memory | 33 from metrics import memory |
| 34 from metrics import power | 34 from metrics import power |
| 35 | 35 |
| 36 import page_sets |
| 37 |
| 38 from telemetry.timeline import tracing_category_filter |
| 39 from telemetry.web_perf import timeline_based_measurement |
| 40 |
| 41 |
| 42 IDB_CATEGORY = 'IndexedDB' |
| 43 TIMELINE_REQUIRED_CATEGORY = 'blink.console' |
| 36 | 44 |
| 37 class _IndexedDbMeasurement(page_test.PageTest): | 45 class _IndexedDbMeasurement(page_test.PageTest): |
| 38 def __init__(self): | 46 def __init__(self): |
| 39 super(_IndexedDbMeasurement, self).__init__() | 47 super(_IndexedDbMeasurement, self).__init__() |
| 40 self._memory_metric = None | 48 self._memory_metric = None |
| 41 self._power_metric = None | 49 self._power_metric = None |
| 42 | 50 |
| 43 def WillStartBrowser(self, platform): | 51 def WillStartBrowser(self, platform): |
| 44 """Initialize metrics once right before the browser has been launched.""" | 52 """Initialize metrics once right before the browser has been launched.""" |
| 45 self._power_metric = power.PowerMetric(platform) | 53 self._power_metric = power.PowerMetric(platform) |
| 46 | 54 |
| 47 def DidStartBrowser(self, browser): | 55 def DidStartBrowser(self, browser): |
| 48 """Initialize metrics once right after the browser has been launched.""" | 56 """Initialize metrics once right after the browser has been launched.""" |
| 49 self._memory_metric = memory.MemoryMetric(browser) | 57 self._memory_metric = memory.MemoryMetric(browser) |
| 50 | 58 |
| 51 def DidNavigateToPage(self, page, tab): | 59 def DidNavigateToPage(self, page, tab): |
| 52 self._memory_metric.Start(page, tab) | 60 self._memory_metric.Start(page, tab) |
| 53 self._power_metric.Start(page, tab) | 61 self._power_metric.Start(page, tab) |
| 54 | 62 |
| 55 def ValidateAndMeasurePage(self, page, tab, results): | 63 def ValidateAndMeasurePage(self, page, tab, results): |
| 56 tab.WaitForDocumentReadyStateToBeComplete() | 64 tab.WaitForDocumentReadyStateToBeComplete() |
| 57 tab.WaitForJavaScriptExpression( | 65 tab.WaitForJavaScriptExpression('window.done', 600) |
| 58 'window.document.cookie.indexOf("__done=1") >= 0', 600) | |
| 59 | 66 |
| 60 self._power_metric.Stop(page, tab) | 67 self._power_metric.Stop(page, tab) |
| 61 self._memory_metric.Stop(page, tab) | 68 self._memory_metric.Stop(page, tab) |
| 62 | 69 |
| 63 self._memory_metric.AddResults(tab, results) | 70 self._memory_metric.AddResults(tab, results) |
| 64 self._power_metric.AddResults(tab, results) | 71 self._power_metric.AddResults(tab, results) |
| 65 | 72 |
| 66 js_get_results = "JSON.stringify(automation.getResults());" | 73 js_get_results = "JSON.stringify(automation.getResults());" |
| 67 result_dict = json.loads(tab.EvaluateJavaScript(js_get_results)) | 74 result_dict = json.loads(tab.EvaluateJavaScript(js_get_results)) |
| 68 total = 0.0 | 75 total = 0.0 |
| 69 for key in result_dict: | 76 for key in result_dict: |
| 70 if key == 'OverallTestDuration': | 77 if key == 'OverallTestDuration': |
| 71 continue | 78 continue |
| 72 msec = float(result_dict[key]) | 79 msec = float(result_dict[key]) |
| 73 results.AddValue(scalar.ScalarValue( | 80 results.AddValue(scalar.ScalarValue( |
| 74 results.current_page, key, 'ms', msec, important=False)) | 81 results.current_page, key, 'ms', msec, important=False)) |
| 75 | 82 |
| 76 total += msec | 83 total += msec |
| 77 results.AddValue(scalar.ScalarValue( | 84 results.AddValue(scalar.ScalarValue( |
| 78 results.current_page, 'Total Perf', 'ms', total)) | 85 results.current_page, 'Total Perf', 'ms', total)) |
| 79 | 86 |
| 80 | 87 |
| 81 def CustomizeBrowserOptions(self, options): | 88 def CustomizeBrowserOptions(self, options): |
| 82 memory.MemoryMetric.CustomizeBrowserOptions(options) | 89 memory.MemoryMetric.CustomizeBrowserOptions(options) |
| 83 power.PowerMetric.CustomizeBrowserOptions(options) | 90 power.PowerMetric.CustomizeBrowserOptions(options) |
| 84 | 91 |
| 85 class IndexedDb(perf_benchmark.PerfBenchmark): | 92 |
| 93 class IndexedDbOriginal(perf_benchmark.PerfBenchmark): |
| 86 """Chromium's IndexedDB Performance tests.""" | 94 """Chromium's IndexedDB Performance tests.""" |
| 87 test = _IndexedDbMeasurement | 95 test = _IndexedDbMeasurement |
| 88 | 96 |
| 89 @classmethod | 97 @classmethod |
| 90 def Name(cls): | 98 def Name(cls): |
| 91 return 'indexeddb_perf' | 99 return 'indexeddb_perf' |
| 92 | 100 |
| 93 def CreateStorySet(self, options): | 101 def CreateStorySet(self, options): |
| 94 indexeddb_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test', | 102 indexeddb_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test', |
| 95 'data', 'indexeddb') | 103 'data', 'indexeddb') |
| 96 ps = story.StorySet(base_dir=indexeddb_dir) | 104 ps = story.StorySet(base_dir=indexeddb_dir) |
| 97 ps.AddStory(page_module.Page('file://perf_test.html', ps, ps.base_dir)) | 105 ps.AddStory(page_module.Page('file://perf_test.html', ps, ps.base_dir)) |
| 98 return ps | 106 return ps |
| 107 |
| 108 |
| 109 class IndexedDbOriginalSectioned(perf_benchmark.PerfBenchmark): |
| 110 """Chromium's IndexedDB Performance tests.""" |
| 111 test = _IndexedDbMeasurement |
| 112 page_set = page_sets.IndexedDBEndurePageSet |
| 113 |
| 114 @classmethod |
| 115 def Name(cls): |
| 116 return 'storage.indexeddb_endure' |
| 117 |
| 118 |
| 119 class IndexedDbTracing(perf_benchmark.PerfBenchmark): |
| 120 """IndexedDB Performance tests that use tracing.""" |
| 121 page_set = page_sets.IndexedDBEndurePageSet |
| 122 |
| 123 def CreateTimelineBasedMeasurementOptions(self): |
| 124 cat_filter = tracing_category_filter.CreateMinimalOverheadFilter() |
| 125 cat_filter.AddIncludedCategory(IDB_CATEGORY) |
| 126 cat_filter.AddIncludedCategory(TIMELINE_REQUIRED_CATEGORY) |
| 127 |
| 128 return timeline_based_measurement.Options( |
| 129 overhead_level=cat_filter) |
| 130 |
| 131 @classmethod |
| 132 def Name(cls): |
| 133 return 'storage.indexeddb_endure_tracing' |
| 134 |
| 135 @classmethod |
| 136 def ValueCanBeAddedPredicate(cls, value, is_first_result): |
| 137 return 'idb' in value.name |
| OLD | NEW |