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..106355fd994009c078806023f057e676ced64e30 100644 |
--- a/chrome/test/data/indexeddb/perf_test.js |
+++ b/chrome/test/data/indexeddb/perf_test.js |
@@ -9,8 +9,23 @@ var kReadKeysOnly = true; |
var kReadDataToo = false; |
var kWriteToo = true; |
var kDontWrite = false; |
+var kWriteSameStore = true; |
+var kWriteDifferentStore = false; |
+var kPlaceholderArg = false; |
var tests = [ |
+ /* These tests give crazy results, and the fourth times out. |
+ * See crbug.com/140123. |
+ |
+// Create a few small items in a single object store, then delete everything. |
+ [testCreateAndDeleteDatabase, 4, 1, 1], |
+// Create a few small items in a single object store, then delete everything. |
+ [testCreateAndDeleteDatabase, 3, 1, 1], |
+// Create a couple small items in a single object store, then delete everything. |
+ [testCreateAndDeleteDatabase, 2, 1, 1], |
+// Create a single small items in a single object store, then delete everything. |
+ [testCreateAndDeleteDatabase, 1, 1, 1], |
+ */ |
// 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 +53,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 +109,45 @@ function onAllTestsComplete() { |
automation.setDone(); |
} |
+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", onValuesWritten); |
+ putLinearValues(transaction, objectStoreNames, numKeys, null, getValue); |
+ } |
+ |
+ function onValuesWritten() { |
+ automation.setStatus("Deleting database."); |
+ deleteDatabase(testName, onDeleted); |
jsbell
2012/08/01 23:05:26
Need to call db.close() before deleteDatabase() or
ericu
2012/08/01 23:39:43
Added onblocked.
|
+ } |
+ |
+ 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); |
@@ -222,22 +284,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) { |
@@ -275,14 +343,14 @@ function testCursorReadsAndRandomWrites( |
var completionFunc = |
getCompletionFunc(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); |
} |
} |