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

Unified Diff: chrome/test/data/indexeddb/perf_shared.js

Issue 10803029: Add read/write tests, index creation/deletion test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged out, fixed indexed writes. 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') | chrome/test/data/indexeddb/perf_test.js » ('J')
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 69f74b1e5256b668bb3322855bfd2c08ec9961d9..c2ee3ae742a1788a9d99392805bc85f6d41e7a13 100644
--- a/chrome/test/data/indexeddb/perf_shared.js
+++ b/chrome/test/data/indexeddb/perf_shared.js
@@ -49,17 +49,17 @@ function onError(e) {
throw new Error(e);
}
-var version = 2; // The version with our object stores.
-var db;
+var baseVersion = 2; // The version with our object stores.
+var curVersion;
// Valid options fields:
// indexName: the name of an index to create on each object store
-// indexKeyPath: likewise
+// indexKeyPath: the key path for that index
// indexIsUnique: the "unique" option for IDBIndexParameters
// indexIsMultiEntry: the "multiEntry" option for IDBIndexParameters
//
function createDatabase(name, objectStores, handler, errorHandler, options) {
- var openRequest = indexedDB.open(name, version);
+ var openRequest = indexedDB.open(name, baseVersion);
openRequest.onblocked = errorHandler;
function createObjectStores(db) {
for (var store in objectStores) {
@@ -78,27 +78,28 @@ function createDatabase(name, objectStores, handler, errorHandler, options) {
// 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;
+ var db = openRequest.result;
jsbell 2012/07/26 18:52:41 Ignore my comment in the previous review.
createObjectStores(db);
// 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) {
+ if (db.version != baseVersion) {
// This is the current Chrome path.
- var setVersionRequest = db.setVersion(version);
- setVersionRequest.onfailure = errorHandler;
+ var setVersionRequest = db.setVersion(baseVersion);
+ setVersionRequest.onerror = errorHandler;
setVersionRequest.onsuccess =
function(e) {
+ curVersion = db.version;
assert(setVersionRequest == e.target);
createObjectStores(db);
var versionTransaction = setVersionRequest.result;
- versionTransaction.oncomplete = function() {handler(db); };
+ versionTransaction.oncomplete = function() { handler(db); };
versionTransaction.onerror = onError;
}
} else {
@@ -107,6 +108,41 @@ function createDatabase(name, objectStores, handler, errorHandler, options) {
}
}
+// You must close all database connections before calling this.
+function alterObjectStores(
+ name, objectStoreNames, func, handler, errorHandler) {
+ var version = curVersion + 1;
+ var openRequest = indexedDB.open(name, version);
+ openRequest.onblocked = errorHandler;
+ // TODO: This won't work in Firefox yet; see above in createDatabase.
jsbell 2012/07/26 18:52:41 I wrote an upgradeneeded shim for the current vers
ericu 2012/07/26 21:03:12 I'll consider adding that in a later CL, especiall
+ openRequest.onsuccess = function(ev) {
+ assert(openRequest == ev.target);
+ var db = openRequest.result;
+ db.onerror = function(ev) {
+ console.log("error altering db", arguments,
+ openRequest.webkitErrorMessage);
+ errorHandler();
+ }
+ if (db.version != version) {
+ var setVersionRequest = db.setVersion(version);
+ setVersionRequest.onerror = errorHandler;
+ setVersionRequest.onsuccess =
+ function(e) {
+ curVersion = db.version;
+ assert(setVersionRequest == e.target);
+ var versionTransaction = setVersionRequest.result;
+ versionTransaction.oncomplete = function() { handler(db); };
+ versionTransaction.onerror = onError;
+ for (var store in objectStoreNames) {
+ func(versionTransaction.objectStore(objectStoreNames[store]));
+ }
+ }
+ } else {
+ errorHandler();
+ }
+ }
+}
+
function getTransaction(db, objectStoreNames, mode, opt_handler) {
var transaction = db.transaction(objectStoreNames, mode);
transaction.onerror = onError;
@@ -141,6 +177,70 @@ function getCleanUpFunc(testName, startTime, onTestComplete) {
}
}
+function getDisplayName(args) {
+ return getDisplayName.caller.name + "_" +
+ Array.prototype.slice.call(args, 0, args.length - 1).join("_");
jsbell 2012/07/26 18:52:41 Cute. :) Maybe a comment that last argument is ass
ericu 2012/07/26 21:03:12 Done.
+}
+
+function getSimpleKey(i) {
+ return "key " + i;
+}
+
+function getSimpleValue(i) {
+ return "value " + i;
+}
+
+function putLinearValues(
+ transaction, objectStoreNames, numKeys, getKey, getValue) {
+ if (!getKey)
+ getKey = getSimpleKey;
+ if (!getValue)
+ getValue = getSimpleValue;
+ for (var i in objectStoreNames) {
+ var os = transaction.objectStore(objectStoreNames[i]);
jsbell 2012/07/26 18:52:41 This will throw if not found, never return null. S
ericu 2012/07/26 21:03:13 Removed. It'll fail quickly enough anyway.
+ assert(os);
+ for (var j = 0; j < numKeys; ++j) {
+ var request = os.put(getValue(j), getKey(j));
+ request.onerror = onError;
+ }
+ }
+}
+
+function getRandomValues(
+ transaction, objectStoreNames, numReads, numKeys, indexName, getKey) {
+ if (!getKey)
+ getKey = getSimpleKey;
+ for (var i in objectStoreNames) {
+ var os = transaction.objectStore(objectStoreNames[i]);
+ assert(os);
+ var queryObject = os;
jsbell 2012/07/26 18:52:41 FYI, in the IDB spec itself this (a store or index
ericu 2012/07/26 21:03:13 Sounds good; changed to "source".
+ if (indexName)
+ queryObject = queryObject.index(indexName);
+ for (var j = 0; j < numReads; ++j) {
+ var rand = Math.floor(Math.random() * numKeys);
+ var request = queryObject.get(getKey(rand));
+ request.onerror = onError;
+ }
+ }
+}
+
+function putRandomValues(
+ transaction, objectStoreNames, numPuts, numKeys, getKey, getValue) {
+ if (!getKey)
+ getKey = getSimpleKey;
+ if (!getValue)
+ getValue = getSimpleValue;
+ for (var i in objectStoreNames) {
+ var os = transaction.objectStore(objectStoreNames[i]);
+ assert(os);
+ for (var j = 0; j < numPuts; ++j) {
+ var rand = Math.floor(Math.random() * numKeys);
+ var request = os.put(getValue(rand), getKey(rand));
+ request.onerror = onError;
+ }
+ }
+}
+
function stringOfLength(n) {
assert(n > 0);
assert(n == Math.floor(n));
« no previous file with comments | « no previous file | chrome/test/data/indexeddb/perf_test.js » ('j') | chrome/test/data/indexeddb/perf_test.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698