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