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

Unified Diff: tools/perf/page_sets/indexeddb_perf/perf_test.js

Issue 1238393003: [IndexedDB] Adding traces, perf tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: forgot to start the old test Created 5 years, 3 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
Index: tools/perf/page_sets/indexeddb_perf/perf_test.js
diff --git a/chrome/test/data/indexeddb/perf_test.js b/tools/perf/page_sets/indexeddb_perf/perf_test.js
similarity index 79%
copy from chrome/test/data/indexeddb/perf_test.js
copy to tools/perf/page_sets/indexeddb_perf/perf_test.js
index 853fbbfdf9e897fd26384b5b0dcebc7b09068c0e..3f264505f154eb87f3f0ab711968876d2fc916a8 100644
--- a/chrome/test/data/indexeddb/perf_test.js
+++ b/tools/perf/page_sets/indexeddb_perf/perf_test.js
@@ -16,6 +16,9 @@ var kDontRead = false;
var kAlternateWithReads = true;
var tests = [
+// Create 30 databases, populate them with 20 object stores with 10 items
+// each, and then open them 60 times. Each item is 100 bytes long.
+ [testCreateAndDeleteDatabases, 30, 60, 10, 20, 100],
// Create a single small item in a single object store, then delete everything.
[testCreateAndDeleteDatabase, 1, 1, 1],
// Create many small items in a single object store, then delete everything.
@@ -32,26 +35,31 @@ var tests = [
[testCreateKeysInStores, 1, 1000, 1],
// Create many large items in a single object store.
[testCreateKeysInStores, 1000, 1, 10000],
+
// Read one item per transaction.
- [testRandomReadsAndWrites, 1000, 1, 0, 1000, kDontUseIndex],
+ [testRandomReadsAndWritesWithoutIndex, 1000, 1, 0, 1000],
// Read a few random items in each of many transactions.
- [testRandomReadsAndWrites, 1000, 5, 0, 100, kDontUseIndex],
+ [testRandomReadsAndWritesWithoutIndex, 1000, 5, 0, 100],
// Read many random items in each of a few transactions.
- [testRandomReadsAndWrites, 1000, 500, 0, 5, kDontUseIndex],
+ [testRandomReadsAndWritesWithoutIndex, 1000, 500, 0, 5],
// Read many random items in each of a few transactions, in a large store.
- [testRandomReadsAndWrites, 10000, 500, 0, 5, kDontUseIndex],
+ [testRandomReadsAndWritesWithoutIndex, 10000, 500, 0, 5],
+// Read and write a few random items in each of many transactions.
+ [testRandomReadsAndWritesWithoutIndex, 1000, 5, 5, 50],
+
+// Read one item per transaction.
+ [testRandomReadsAndWritesWithIndex, 1000, 1, 0, 1000],
// Read a few random items from an index, in each of many transactions.
- [testRandomReadsAndWrites, 1000, 5, 0, 100, kUseIndex],
+ [testRandomReadsAndWritesWithIndex, 1000, 5, 0, 100],
// Read many random items from an index, in each of a few transactions.
- [testRandomReadsAndWrites, 1000, 500, 0, 5, kUseIndex],
+ [testRandomReadsAndWritesWithIndex, 1000, 500, 0, 5],
// Read many random items from an index, in each of a few transactions, in a
// large store.
- [testRandomReadsAndWrites, 10000, 500, 0, 5, kUseIndex],
-// Read and write a few random items in each of many transactions.
- [testRandomReadsAndWrites, 1000, 5, 5, 50, kDontUseIndex],
+ [testRandomReadsAndWritesWithIndex, 10000, 500, 0, 5],
// Read and write a few random items, reading from an index, in each of many
// transactions.
- [testRandomReadsAndWrites, 1000, 5, 5, 50, kUseIndex],
+ [testRandomReadsAndWritesWithIndex, 1000, 5, 5, 50],
+
// Read a long, contiguous sequence of an object store via a cursor.
[testCursorReadsAndRandomWrites, kReadDataToo, kDontUseIndex, kDontWrite,
kPlaceholderArg],
@@ -69,14 +77,16 @@ var tests = [
// Read a sequence of an index into an object store via a key cursor.
[testCursorReadsAndRandomWrites, kReadKeysOnly, kUseIndex, kDontWrite,
kPlaceholderArg],
+
// Make a small bunch of batches of reads of the same keys from an object store.
- [testReadCache, 10, kDontUseIndex],
-// Make a bunch of batches of reads of the same keys from an index.
- [testReadCache, 50, kUseIndex],
+ [testReadCacheWithoutIndex, 10],
+// Make a bunch of batches of reads of the same keys from an object store.
+ [testReadCacheWithoutIndex, 50],
// Make a small bunch of batches of reads of the same keys from an object store.
- [testReadCache, 10, kDontUseIndex],
+ [testReadCacheWithIndex, 10],
// Make a bunch of batches of reads of the same keys from an index.
- [testReadCache, 50, kUseIndex],
+ [testReadCacheWithIndex, 50],
+
// Create and delete an index on a store that already contains data [produces
// a timing result for each of creation and deletion].
[testCreateAndDeleteIndex, 5000],
@@ -87,31 +97,74 @@ var tests = [
// you've reached the end of each of them.
[testWalkingMultipleCursors, 50],
// Open an object store cursor, then continue(key) to the last value.
- [testCursorSeeks, 2000, 10, 4, kDontUseIndex],
+ [testCursorSeeksWithoutIndex, 2000, 10, 4],
// Open an index key cursor, then continue(key) to the last value.
- [testCursorSeeks, 2000, 10, 4, kUseIndex],
+ [testCursorSeeksWithIndex, 2000, 10, 4],
];
+
+function testRandomReadsAndWritesWithIndex(
+ numKeys, numReadsPerTransaction, numWritesPerTransaction,
+ numTransactions, onTestComplete) {
+ testRandomReadsAndWrites(numKeys, numReadsPerTransaction,
+ numWritesPerTransaction,
+ numTransactions, true, onTestComplete);
+}
+
+function testRandomReadsAndWritesWithoutIndex(
+ numKeys, numReadsPerTransaction, numWritesPerTransaction,
+ numTransactions, onTestComplete) {
+ testRandomReadsAndWrites(numKeys, numReadsPerTransaction,
+ numWritesPerTransaction,
+ numTransactions, false, onTestComplete);
+}
+
+
+function testReadCacheWithIndex(numTransactions, onTestComplete) {
+ testReadCache(numTransactions, true, onTestComplete);
+}
+
+function testReadCacheWithoutIndex(numTransactions, onTestComplete) {
+ testReadCache(numTransactions, false, onTestComplete)
+}
+
+function testCursorSeeksWithIndex(numKeys, numSeeksPerTransaction,
+ numTransactions, onTestComplete) {
+ testCursorSeeks(numKeys, numSeeksPerTransaction, numTransactions,
+ true, onTestComplete);
+}
+
+function testCursorSeeksWithoutIndex(numKeys, numSeeksPerTransaction,
+ numTransactions, onTestComplete) {
+ testCursorSeeks(numKeys, numSeeksPerTransaction, numTransactions,
+ false, onTestComplete);
+}
+
+
+
var currentTest = 0;
+var testFilter;
+var done = false;
function test() {
+ done = false;
runNextTest();
}
+
function runNextTest() {
- var filter = window.location.hash.slice(1);
- var test, f;
+ var running_test, f;
while (currentTest < tests.length) {
- test = tests[currentTest];
- f = test.shift();
- if (!filter || f.name == filter)
+ running_test = tests[currentTest];
+ f = running_test.shift();
+ if (!testFilter || f.name == testFilter)
break;
++currentTest;
}
if (currentTest < tests.length) {
- test.push(runNextTest);
- f.apply(null, test);
+ running_test.push(runNextTest);
+ f.apply(null, running_test);
++currentTest;
} else {
onAllTestsComplete();
@@ -122,6 +175,88 @@ function onAllTestsComplete() {
var overallDuration = window.performance.now() - overallTestStartTime;
automation.addResult("OverallTestDuration", overallDuration);
automation.setDone();
+ done = true;
+}
+
+function testCreateAndDeleteDatabases(
+ numDatabases, numOpens, numKeys, numStores,
+ payloadLength, onTestComplete) {
+ var testName = getDisplayName(arguments);
+ assert(numOpens >= 1);
+ 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 databases.");
+ var startTime = window.performance.now();
+
+ var numCreated = 0;
+ for (var i = 0; i < numDatabases; i++) {
+ createDatabase(testName + i, objectStoreNames, onCreated, onError);
+ }
+
+ function onCreated(db) {
+ automation.setStatus("Constructing transactions.");
+ var transaction =
+ getTransaction(db, objectStoreNames, "readwrite",
+ function() { openLoop(db, numOpens); });
+ putLinearValues(transaction, objectStoreNames, numKeys, null, getValue);
+ }
+
+ function openLoop(db, timesLeft) {
+ db.close();
+ if (timesLeft == 0) {
+ deleteDatabase(db.name, onDeleted);
+ return;
+ }
+ createDatabase(db.name, objectStoreNames,
+ function(db) { openLoop(db, timesLeft - 1); }, onError)
+ }
+
+ var numDeleted = 0;
+ function onDeleted() {
+ var duration = window.performance.now() - startTime;
+ automation.addResult(testName, duration);
+ automation.setStatus("Deleted database.");
+ if (++numDeleted == numDatabases) {
+ onTestComplete();
+ }
+ }
+}
+
+function testCreateKeysInStores(
+ 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.");
+ createDatabase(testName, objectStoreNames, onCreated, onError);
+
+ function onCreated(db) {
+ automation.setStatus("Constructing transaction.");
+ var completionFunc =
+ getCompletionFunc(db, testName, window.performance.now(),
+ onTestComplete);
+ var transaction =
+ getTransaction(db, objectStoreNames, "readwrite", completionFunc);
+ putLinearValues(transaction, objectStoreNames, numKeys, null, getValue);
+ }
}
// This is the only test that includes database creation and deletion in its
« no previous file with comments | « tools/perf/page_sets/indexeddb_perf/perf_test.html ('k') | tools/telemetry/telemetry/testing/test_page_test_results.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698