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

Unified Diff: chrome/test/data/indexeddb/perf_test.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 | « 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 9e3bbab38da5f4d22ff10ddc776f0fb018953e9a..49a257fa90520b74ca49a827ca206e83a8e05e2d 100644
--- a/chrome/test/data/indexeddb/perf_test.js
+++ b/chrome/test/data/indexeddb/perf_test.js
@@ -15,41 +15,123 @@ function testCreateKeysInStores(
objectStoreNames.push("store " + i);
}
var value = stringOfLength(payloadLength);
- var start;
function onCreated(db) {
automation.setStatus("Constructing transaction.");
- start = Date.now(); // Ignore the setup time for this test.
+ var completionFunc =
+ getCompletionFunc(testName, Date.now(), onTestComplete);
var transaction = getTransaction(db, objectStoreNames, "readwrite",
- function() { onTransactionComplete(db); });
+ function() { completionFunc(); });
for (var i in objectStoreNames) {
var os = transaction.objectStore(objectStoreNames[i]);
assert(os);
for (var j = 0; j < numKeys; ++j) {
- os.put("key " + j, value);
+ os.put(value, "key " + j);
}
}
}
- function onTransactionComplete(db) {
- var duration = Date.now() - start;
- // Ignore the cleanup time for this test.
- automation.addResult(testName, duration);
- automation.setStatus("Deleting.");
- deleteDatabase(db, onDeleted);
+ automation.setStatus("Creating database.");
+ createDatabase(testName, objectStoreNames, onCreated, onError);
+}
+
+function testRandomReads(numKeys, numReadsPerTransaction, numTransactions,
+ useIndex, onTestComplete) {
+ var indexText = "_bare";
+ var indexName;
+ if (useIndex) {
+ indexText = "_index";
+ indexName = "index";
}
- function onDeleted() {
- automation.setStatus("Deleted.");
- onTestComplete();
+ var testName = "testRandomReads_" + numKeys + "_" + numReadsPerTransaction +
+ "_" + numTransactions + indexText;
+ var numTransactionsLeft = numTransactions;
+ var storeName = "store";
+ var objectStoreNames = [storeName];
+ var numTransactionsRunning;
+
+ function getKey(i) {
+ return "key " + i;
}
- automation.setStatus("Creating.");
- createDatabase(testName, objectStoreNames, onCreated, onError);
+
+ function getValue(i) {
+ return "value " + i;
+ }
+
+ function onCreated(db) {
+ automation.setStatus("Setting up test database.");
+ var transaction = getTransaction(db, objectStoreNames, "readwrite",
+ function() { onSetupComplete(db); });
+ var os = transaction.objectStore(storeName);
+ assert(os);
+ for (var j = 0; j < numKeys; ++j) {
+ os.put(getValue(i), getKey(j));
+ }
+ }
+ var completionFunc;
+ function onSetupComplete(db) {
+ automation.setStatus("Setup complete.");
+ runOneBatch(db);
+ completionFunc = getCompletionFunc(testName, Date.now(), onTestComplete);
+ }
+
+ function runOneBatch(db) {
+ if (numTransactionsLeft <= 0) {
+ return;
+ }
+ --numTransactionsLeft;
+ ++numTransactionsRunning;
+ var valuesToRead = numReadsPerTransaction;
+ var transaction = getTransaction(db, objectStoreNames, "readonly",
+ function() {
+ assert(!--numTransactionsRunning);
+ assert(!valuesToRead);
+ if (numTransactionsLeft <= 0) {
+ completionFunc();
+ } else {
+ runOneBatch(db);
+ }
+ });
+
+ var queryObject = transaction.objectStore(storeName);
+ if (useIndex) {
+ queryObject = queryObject.index(indexName);
+ }
+ assert(queryObject);
+ for (var i = 0; i < numReadsPerTransaction; ++i) {
+ var rand = Math.floor(Math.random() * numKeys);
+ var request = queryObject.get(getKey(rand));
+ request.onerror = onError;
+ request.onsuccess = function () {
+ assert(valuesToRead--);
+ }
+ }
+ }
+
+ automation.setStatus("Creating database.");
+ var options = {};
+ if (useIndex) {
+ options.indexName = indexName;
+ options.indexKeyPath = "";
+ options.indexIsUnique = true;
+ options.indexIsMultiEntry = false;
+ }
+ createDatabase(testName, objectStoreNames, onCreated, onError, options);
}
+var kUseIndex = true;
+var kDontUseIndex = false;
+
var tests = [
- [testCreateKeysInStores, 1, 1, 1],
- [testCreateKeysInStores, 100, 1, 1],
- [testCreateKeysInStores, 1, 100, 1],
- [testCreateKeysInStores, 100, 1, 100000]
+ [testCreateKeysInStores, 1, 1, 1],
+ [testCreateKeysInStores, 100, 1, 1],
+ [testCreateKeysInStores, 1, 100, 1],
+ [testCreateKeysInStores, 100, 1, 10000],
+ [testRandomReads, 1000, 5, 50, kDontUseIndex],
+ [testRandomReads, 1000, 50, 5, kDontUseIndex],
+ [testRandomReads, 5000, 50, 5, kDontUseIndex],
+ [testRandomReads, 1000, 5, 50, kUseIndex],
+ [testRandomReads, 1000, 50, 5, kUseIndex],
+ [testRandomReads, 5000, 50, 5, kUseIndex]
];
var currentTest = 0;
« 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