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

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

Issue 10836063: Add deletion test, cursor read with writeback to same store. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add onblocked handler for deleteDatabase 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 | « chrome/test/data/indexeddb/perf_shared.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/data/indexeddb/perf_test.js
diff --git a/chrome/test/data/indexeddb/perf_test.js b/chrome/test/data/indexeddb/perf_test.js
index 75b193c2421289c375e8cac81675e39f00bb3aee..7f8ecbe060f3302aa461a24aca15065011d2c05b 100644
--- a/chrome/test/data/indexeddb/perf_test.js
+++ b/chrome/test/data/indexeddb/perf_test.js
@@ -9,8 +9,19 @@ var kReadKeysOnly = true;
var kReadDataToo = false;
var kWriteToo = true;
var kDontWrite = false;
+var kWriteSameStore = true;
+var kWriteDifferentStore = false;
+var kPlaceholderArg = false;
var tests = [
+// Create a single small item in a single object store, then delete everything.
+ [testCreateAndDeleteDatabase, 1, 1, 1],
+// Create a single small item in a single object store, then delete everything.
+ [testCreateAndDeleteDatabase, 100, 1, 1],
+// Create a single small item in a single object store, then delete everything.
+ [testCreateAndDeleteDatabase, 1, 100, 1],
+// Create a single small item in a single object store, then delete everything.
+ [testCreateAndDeleteDatabase, 100, 1, 10000],
// Create a single small item in a single object store.
[testCreateKeysInStores, 1, 1, 1],
// Create many small items in a single object store.
@@ -38,14 +49,22 @@ var tests = [
// transactions.
[testRandomReadsAndWrites, 1000, 5, 5, 50, kUseIndex],
// Read a long, contiguous sequence of an object store via a cursor.
- [testCursorReadsAndRandomWrites, kReadDataToo, kDontUseIndex, kDontWrite],
+ [testCursorReadsAndRandomWrites, kReadDataToo, kDontUseIndex, kDontWrite,
+ kPlaceholderArg],
// Read a sequence of an object store via a cursor, writing
// transformed values into another.
- [testCursorReadsAndRandomWrites, kReadDataToo, kDontUseIndex, kWriteToo],
+ [testCursorReadsAndRandomWrites, kReadDataToo, kDontUseIndex, kWriteToo,
+ kWriteDifferentStore],
+// Read a sequence of an object store via a cursor, writing
+// transformed values into another.
+ [testCursorReadsAndRandomWrites, kReadDataToo, kDontUseIndex, kWriteToo,
+ kWriteSameStore],
// Read a sequence of an index into an object store via a cursor.
- [testCursorReadsAndRandomWrites, kReadDataToo, kUseIndex, kDontWrite],
+ [testCursorReadsAndRandomWrites, kReadDataToo, kUseIndex, kDontWrite,
+ kPlaceholderArg],
// Read a sequence of an index into an object store via a key cursor.
- [testCursorReadsAndRandomWrites, kReadKeysOnly, kUseIndex, kDontWrite],
+ [testCursorReadsAndRandomWrites, kReadKeysOnly, kUseIndex, kDontWrite,
+ kPlaceholderArg],
// Make batches of random writes into a store, triggered by periodic setTimeout
// calls.
[testSporadicWrites, 5, 0],
@@ -86,6 +105,52 @@ function onAllTestsComplete() {
automation.setDone();
}
+// This is the only test that includes database creation and deletion in its
+// results; the others just test specific operations. To see only the
+// creation/deletion without the specific operations used to build up the data
+// in the object stores here, subtract off the results of
+// testCreateKeysInStores.
+function testCreateAndDeleteDatabase(
+ numKeys, numStores, payloadLength, onTestComplete) {
+ var testName = getDisplayName(arguments);
+ assert(numKeys >= 0);
+ assert(numStores >= 1);
+ var objectStoreNames = [];
+ for (var i=0; i < numStores; ++i) {
+ objectStoreNames.push("store " + i);
+ }
+ var value = stringOfLength(payloadLength);
+ function getValue() {
+ return value;
+ }
+
+ automation.setStatus("Creating database.");
+ var startTime = Date.now();
+
+ createDatabase(testName, objectStoreNames, onCreated, onError);
+
+ function onCreated(db) {
+ automation.setStatus("Constructing transaction.");
+ var transaction =
+ getTransaction(db, objectStoreNames, "readwrite",
+ function() { onValuesWritten(db); });
+ putLinearValues(transaction, objectStoreNames, numKeys, null, getValue);
+ }
+
+ function onValuesWritten(db) {
+ automation.setStatus("Deleting database.");
+ db.close();
+ deleteDatabase(testName, onDeleted);
+ }
+
+ function onDeleted() {
+ var duration = Date.now() - startTime;
+ automation.addResult(testName, duration);
+ automation.setStatus("Deleted database.");
+ onTestComplete();
+ }
+}
+
function testCreateKeysInStores(
numKeys, numStores, payloadLength, onTestComplete) {
var testName = getDisplayName(arguments);
@@ -106,7 +171,7 @@ function testCreateKeysInStores(
function onCreated(db) {
automation.setStatus("Constructing transaction.");
var completionFunc =
- getCompletionFunc(testName, Date.now(), onTestComplete);
+ getCompletionFunc(db, testName, Date.now(), onTestComplete);
var transaction =
getTransaction(db, objectStoreNames, "readwrite", completionFunc);
putLinearValues(transaction, objectStoreNames, numKeys, null, getValue);
@@ -147,7 +212,8 @@ function testRandomReadsAndWrites(
var completionFunc;
function onSetupComplete(db) {
automation.setStatus("Setup complete.");
- completionFunc = getCompletionFunc(testName, Date.now(), onTestComplete);
+ completionFunc =
+ getCompletionFunc(db, testName, Date.now(), onTestComplete);
runOneBatch(db);
}
@@ -212,7 +278,7 @@ function testCreateAndDeleteIndex(numKeys, onTestComplete) {
var indexCreationCompleteTime = Date.now();
automation.addResult("testCreateIndex",
indexCreationCompleteTime - startTime);
- completionFunc = getCompletionFunc("testDeleteIndex",
+ completionFunc = getCompletionFunc(db, "testDeleteIndex",
indexCreationCompleteTime, onTestComplete);
var f = function(objectStore) {
objectStore.deleteIndex("index");
@@ -222,22 +288,28 @@ function testCreateAndDeleteIndex(numKeys, onTestComplete) {
}
}
-// TODO: Add a version that writes back to the same store, to see how that
-// affects cursor speed w.r.t. invalidated caches.
function testCursorReadsAndRandomWrites(
- readKeysOnly, useIndexForReads, writeToAnotherStore, onTestComplete) {
+ readKeysOnly, useIndexForReads, writeAlso, sameStoreForWrites,
+ onTestComplete) {
// There's no key cursor unless you're reading from an index.
assert(useIndexForReads || !readKeysOnly);
// If we're writing to another store, having an index would constrain our
// writes, as we create both object stores with the same configurations.
// We could do that if needed, but it's simpler not to.
- assert(!useIndexForReads || !writeToAnotherStore);
+ assert(!useIndexForReads || !writeAlso);
var numKeys = 1000;
var numReadsPerTransaction = 100;
var testName = getDisplayName(arguments);
var objectStoreNames = ["input store"];
- if (writeToAnotherStore)
- objectStoreNames.push("output store");
+ var outputStoreName;
+ if (writeAlso) {
+ if (sameStoreForWrites) {
+ outputStoreName = objectStoreNames[0];
+ } else {
+ outputStoreName = "output store";
+ objectStoreNames.push(outputStoreName);
+ }
+ }
var getKeyForRead = getSimpleKey;
var indexName;
if (useIndexForReads) {
@@ -273,16 +345,16 @@ function testCursorReadsAndRandomWrites(
function onSetupComplete(db) {
automation.setStatus("Setup complete.");
var completionFunc =
- getCompletionFunc(testName, Date.now(), onTestComplete);
+ getCompletionFunc(db, testName, Date.now(), onTestComplete);
var mode = "readonly";
- if (writeToAnotherStore)
+ if (writeAlso)
mode = "readwrite";
var transaction =
getTransaction(db, objectStoreNames, mode, completionFunc);
getValuesFromCursor(
transaction, objectStoreNames[0], numReadsPerTransaction, numKeys,
- indexName, getKeyForRead, readKeysOnly, objectStoreNames[1]);
+ indexName, getKeyForRead, readKeysOnly, outputStoreName);
}
}
@@ -324,7 +396,8 @@ function testSporadicWrites(
var completionFunc;
function onSetupComplete(db) {
automation.setStatus("Setup complete.");
- completionFunc = getCompletionFunc(testName, Date.now(), onTestComplete);
+ completionFunc =
+ getCompletionFunc(db, testName, Date.now(), onTestComplete);
runOneBatch(db);
}
« no previous file with comments | « chrome/test/data/indexeddb/perf_shared.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698