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 |