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