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

Side by Side Diff: chrome/test/data/indexeddb/perf_shared.js

Issue 10790041: Add IDB perf tests for random read, with and without an index. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rolled in code review feedback Created 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/test/data/indexeddb/perf_test.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 window.indexedDB = window.indexedDB || window.webkitIndexedDB || 5 window.indexedDB = window.indexedDB || window.webkitIndexedDB ||
6 window.mozIndexedDB || window.msIndexedDB; 6 window.mozIndexedDB || window.msIndexedDB;
7 7
8 var automation = { 8 var automation = {
9 results: {} 9 results: {}
10 }; 10 };
(...skipping 22 matching lines...) Expand all
33 33
34 function assert(t) { 34 function assert(t) {
35 if (!t) { 35 if (!t) {
36 var e = new Error("Assertion failed!"); 36 var e = new Error("Assertion failed!");
37 console.log(e.stack); 37 console.log(e.stack);
38 throw e; 38 throw e;
39 } 39 }
40 } 40 }
41 41
42 function onError(e) { 42 function onError(e) {
43 console.log(e); 43 var s = "Caught error.";
44 if (e.target && e.target.webkitErrorMessage)
45 s += "\n" + e.target.webkitErrorMessage;
46 console.log(s);
47 automation.setStatus(s);
44 e.stopPropagation(); 48 e.stopPropagation();
45 throw new Error(e); 49 throw new Error(e);
46 } 50 }
47 51
48 var version = 2; // The version with our object stores. 52 var version = 2; // The version with our object stores.
49 var db;
50 53
51 function createDatabase(name, objectStores, handler, errorHandler) { 54 // Valid options fields:
55 // indexName: the name of an index to create on each object store
56 // indexKeyPath: likewise
57 // indexIsUnique: the "unique" option for IDBIndexParameters
58 // indexIsMultiEntry: the "multiEntry" option for IDBIndexParameters
59 //
60 function createDatabase(
61 name, objectStoreNames, handler, errorHandler, options) {
52 var openRequest = indexedDB.open(name, version); 62 var openRequest = indexedDB.open(name, version);
53 openRequest.onblocked = errorHandler; 63 openRequest.onblocked = errorHandler;
54 function createObjectStores(db) { 64 function createObjectStores(db) {
55 for (var store in objectStores) { 65 for (var store in objectStoreNames) {
56 var name = objectStores[store]; 66 var name = objectStoreNames[store];
57 assert(!db.objectStoreNames.contains(name)); 67 assert(!db.objectStoreNames.contains(name));
58 db.createObjectStore(name); 68 var os = db.createObjectStore(name);
69 if (options && options.indexName) {
70 assert('indexKeyPath' in options);
71 os.createIndex(options.indexName, options.indexKeyPath,
72 { unique: options.indexIsUnique,
73 multiEntry: options.indexIsMultiEntry });
74 }
59 } 75 }
60 } 76 }
61 openRequest.onupgradeneeded = function(ev) { 77 openRequest.onupgradeneeded = function(ev) {
62 // TODO: This is the spec-compliant path, which doesn't yet work in Chrome, 78 // TODO: This is the spec-compliant path, which doesn't yet work in Chrome,
63 // and isn't yet tested, as this function won't currently be called. 79 // and isn't yet tested, as this function won't currently be called.
64 assert(openRequest == ev.target); 80 assert(openRequest == ev.target);
65 db = openRequest.result; 81 createObjectStores(openRequest.result);
66 createObjectStores(db);
67 // onsuccess will get called after this exits. 82 // onsuccess will get called after this exits.
68 }; 83 };
69 openRequest.onsuccess = function(ev) { 84 openRequest.onsuccess = function(ev) {
70 assert(openRequest == ev.target); 85 assert(openRequest == ev.target);
71 db = openRequest.result; 86 var db = openRequest.result;
72 db.onerror = function(ev) { 87 db.onerror = function(ev) {
73 console.log("db error", arguments, openRequest.webkitErrorMessage); 88 console.log("db error", arguments, openRequest.webkitErrorMessage);
74 errorHandler(); 89 errorHandler();
75 } 90 };
76 if (db.version != version) { 91 if (db.version != version) {
77 // This is the current Chrome path. 92 // This is the current Chrome path.
78 var setVersionRequest = db.setVersion(version); 93 var setVersionRequest = db.setVersion(version);
79 setVersionRequest.onfailure = errorHandler; 94 setVersionRequest.onfailure = errorHandler;
80 setVersionRequest.onsuccess = 95 setVersionRequest.onsuccess = function(e) {
81 function(e) { 96 assert(setVersionRequest == e.target);
82 assert(setVersionRequest == e.target); 97 createObjectStores(db);
83 createObjectStores(db); 98 var versionTransaction = setVersionRequest.result;
84 var versionTransaction = setVersionRequest.result; 99 versionTransaction.oncomplete = function() {handler(db); };
85 versionTransaction.oncomplete = function() {handler(db); }; 100 versionTransaction.onerror = onError;
86 versionTransaction.onerror = onError; 101 };
87 }
88 } else { 102 } else {
89 handler(db); 103 handler(db);
90 } 104 }
91 } 105 }
92 } 106 }
93 107
94 function getTransaction(db, objectStoreNames, mode, opt_handler) { 108 function getTransaction(db, objectStoreNames, mode, opt_handler) {
95 var transaction = db.transaction(objectStoreNames, mode); 109 var transaction = db.transaction(objectStoreNames, mode);
96 transaction.onerror = onError; 110 transaction.onerror = onError;
97 transaction.onabort = onError; 111 transaction.onabort = onError;
98 if (opt_handler) { 112 if (opt_handler) {
99 transaction.oncomplete = opt_handler; 113 transaction.oncomplete = opt_handler;
100 } 114 }
101 return transaction; 115 return transaction;
102 } 116 }
103 117
104 function deleteDatabase(name, opt_handler) { 118 function deleteDatabase(name, opt_handler) {
105 var deleteRequest = indexedDB.deleteDatabase(name); 119 var deleteRequest = indexedDB.deleteDatabase(name);
106 deleteRequest.onerror = onError; 120 deleteRequest.onerror = onError;
107 if (opt_handler) { 121 if (opt_handler) {
108 deleteRequest.onsuccess = opt_handler; 122 deleteRequest.onsuccess = opt_handler;
109 } 123 }
110 } 124 }
111 125
112 function cleanUp(opt_handler) { 126 function getCompletionFunc(testName, startTime, onTestComplete) {
113 if (db) { 127 function onDeleted() {
114 deleteDatabase(db, opt_handler); 128 automation.setStatus("Deleted database.");
115 db = null; 129 onTestComplete();
130 }
131 return function() {
132 var duration = Date.now() - startTime;
133 // Ignore the cleanup time for this test.
134 automation.addResult(testName, duration);
135 automation.setStatus("Deleting database.");
136 // TODO: Turn on actual deletion; for now it's way too slow.
137 // deleteDatabase(testName, onDeleted);
138 onTestComplete();
116 } 139 }
117 } 140 }
118 141
119 function stringOfLength(n) { 142 function stringOfLength(n) {
120 assert(n > 0); 143 assert(n > 0);
121 assert(n == Math.floor(n)); 144 assert(n == Math.floor(n));
122 return new Array(n + 1).join('0'); 145 return new Array(n + 1).join('0');
123 } 146 }
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/indexeddb/perf_test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698