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

Unified 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, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/test/data/indexeddb/perf_test.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/data/indexeddb/perf_shared.js
diff --git a/chrome/test/data/indexeddb/perf_shared.js b/chrome/test/data/indexeddb/perf_shared.js
index 9e8b3201801bacafe11219e34fe779034289288f..0d42f9287859f785f5514cbea8dfd51da96f6986 100644
--- a/chrome/test/data/indexeddb/perf_shared.js
+++ b/chrome/test/data/indexeddb/perf_shared.js
@@ -40,51 +40,65 @@ function assert(t) {
}
function onError(e) {
- console.log(e);
+ var s = "Caught error.";
+ if (e.target && e.target.webkitErrorMessage)
+ s += "\n" + e.target.webkitErrorMessage;
+ console.log(s);
+ automation.setStatus(s);
e.stopPropagation();
throw new Error(e);
}
var version = 2; // The version with our object stores.
-var db;
-function createDatabase(name, objectStores, handler, errorHandler) {
+// Valid options fields:
+// indexName: the name of an index to create on each object store
+// indexKeyPath: likewise
+// indexIsUnique: the "unique" option for IDBIndexParameters
+// indexIsMultiEntry: the "multiEntry" option for IDBIndexParameters
+//
+function createDatabase(
+ name, objectStoreNames, handler, errorHandler, options) {
var openRequest = indexedDB.open(name, version);
openRequest.onblocked = errorHandler;
function createObjectStores(db) {
- for (var store in objectStores) {
- var name = objectStores[store];
+ for (var store in objectStoreNames) {
+ var name = objectStoreNames[store];
assert(!db.objectStoreNames.contains(name));
- db.createObjectStore(name);
+ var os = db.createObjectStore(name);
+ if (options && options.indexName) {
+ assert('indexKeyPath' in options);
+ os.createIndex(options.indexName, options.indexKeyPath,
+ { unique: options.indexIsUnique,
+ multiEntry: options.indexIsMultiEntry });
+ }
}
}
openRequest.onupgradeneeded = function(ev) {
// TODO: This is the spec-compliant path, which doesn't yet work in Chrome,
// and isn't yet tested, as this function won't currently be called.
assert(openRequest == ev.target);
- db = openRequest.result;
- createObjectStores(db);
+ createObjectStores(openRequest.result);
// onsuccess will get called after this exits.
};
openRequest.onsuccess = function(ev) {
assert(openRequest == ev.target);
- db = openRequest.result;
+ var db = openRequest.result;
db.onerror = function(ev) {
console.log("db error", arguments, openRequest.webkitErrorMessage);
errorHandler();
- }
+ };
if (db.version != version) {
// This is the current Chrome path.
var setVersionRequest = db.setVersion(version);
setVersionRequest.onfailure = errorHandler;
- setVersionRequest.onsuccess =
- function(e) {
- assert(setVersionRequest == e.target);
- createObjectStores(db);
- var versionTransaction = setVersionRequest.result;
- versionTransaction.oncomplete = function() {handler(db); };
- versionTransaction.onerror = onError;
- }
+ setVersionRequest.onsuccess = function(e) {
+ assert(setVersionRequest == e.target);
+ createObjectStores(db);
+ var versionTransaction = setVersionRequest.result;
+ versionTransaction.oncomplete = function() {handler(db); };
+ versionTransaction.onerror = onError;
+ };
} else {
handler(db);
}
@@ -109,10 +123,19 @@ function deleteDatabase(name, opt_handler) {
}
}
-function cleanUp(opt_handler) {
- if (db) {
- deleteDatabase(db, opt_handler);
- db = null;
+function getCompletionFunc(testName, startTime, onTestComplete) {
+ function onDeleted() {
+ automation.setStatus("Deleted database.");
+ onTestComplete();
+ }
+ return function() {
+ var duration = Date.now() - startTime;
+ // Ignore the cleanup time for this test.
+ automation.addResult(testName, duration);
+ automation.setStatus("Deleting database.");
+ // TODO: Turn on actual deletion; for now it's way too slow.
+ // deleteDatabase(testName, onDeleted);
+ onTestComplete();
}
}
« 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