Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: tools/perf/benchmarks/indexeddb_perf.py

Issue 1238393003: [IndexedDB] Adding traces, perf tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698