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 telemetry import test 27 from telemetry.core import util 28 from telemetry.page import page_measurement 29 from telemetry.page import page_set 30 31 32 class _IndexedDbMeasurement(page_measurement.PageMeasurement): 33 def MeasurePage(self, _, tab, results): 34 tab.WaitForDocumentReadyStateToBeComplete() 35 tab.WaitForJavaScriptExpression( 36 'window.document.cookie.indexOf("__done=1") >= 0', 600) 37 38 js_get_results = "JSON.stringify(automation.getResults());" 39 result_dict = json.loads(tab.EvaluateJavaScript(js_get_results)) 40 total = 0.0 41 for key in result_dict: 42 if key == 'OverallTestDuration': 43 continue 44 msec = float(result_dict[key]) 45 results.Add(key, 'ms', msec, data_type='unimportant') 46 total += msec 47 results.Add('Total', 'ms', total) 48 49 class IndexedDb(test.Test): 50 """Chromium's IndexedDB Performance tests.""" 51 test = _IndexedDbMeasurement 52 53 def CreatePageSet(self, options): 54 indexeddb_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test', 55 'data', 'indexeddb') 56 return page_set.PageSet.FromDict({ 57 'pages': [ 58 { 'url': 'file://perf_test.html' } 59 ] 60 }, indexeddb_dir) 61