Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 var overallTestStartTime = Date.now(); | 5 var overallTestStartTime = Date.now(); |
| 6 | 6 |
| 7 function testCreateKeysInStores( | 7 function testCreateKeysInStores( |
| 8 numKeys, numStores, payloadLength, onTestComplete) { | 8 numKeys, numStores, payloadLength, onTestComplete) { |
| 9 var testName = "testCreateKeysInStores_" + numKeys + "_" + numStores + "_" + | 9 var testName = "testCreateKeysInStores_" + numKeys + "_" + numStores + "_" + |
| 10 payloadLength; | 10 payloadLength; |
| 11 assert(numKeys >= 0); | 11 assert(numKeys >= 0); |
| 12 assert(numStores >= 1); | 12 assert(numStores >= 1); |
| 13 var objectStoreNames = []; | 13 var objectStoreNames = []; |
| 14 for (var i=0; i < numStores; ++i) { | 14 for (var i=0; i < numStores; ++i) { |
| 15 objectStoreNames.push("store " + i); | 15 objectStoreNames.push("store " + i); |
| 16 } | 16 } |
| 17 var value = stringOfLength(payloadLength); | 17 var value = stringOfLength(payloadLength); |
| 18 var start; | |
| 19 | 18 |
| 20 function onCreated(db) { | 19 function onCreated(db) { |
| 21 automation.setStatus("Constructing transaction."); | 20 automation.setStatus("Constructing transaction."); |
| 22 start = Date.now(); // Ignore the setup time for this test. | 21 var cleanUpFunc = getCleanUpFunc(testName, Date.now(), onTestComplete); |
|
jsbell
2012/07/26 18:23:30
Having the test start time recorded in the call to
ericu
2012/07/26 20:24:11
How about if I call it "getCompletionFunc" instead
| |
| 23 var transaction = getTransaction(db, objectStoreNames, "readwrite", | 22 var transaction = getTransaction(db, objectStoreNames, "readwrite", |
| 24 function() { onTransactionComplete(db); }); | 23 function() { cleanUpFunc(); }); |
| 25 for (var i in objectStoreNames) { | 24 for (var i in objectStoreNames) { |
| 26 var os = transaction.objectStore(objectStoreNames[i]); | 25 var os = transaction.objectStore(objectStoreNames[i]); |
| 27 assert(os); | 26 assert(os); |
| 28 for (var j = 0; j < numKeys; ++j) { | 27 for (var j = 0; j < numKeys; ++j) { |
| 29 os.put("key " + j, value); | 28 os.put(value, "key " + j); |
| 30 } | 29 } |
| 31 } | 30 } |
| 32 } | 31 } |
| 33 function onTransactionComplete(db) { | 32 automation.setStatus("Creating database."); |
| 34 var duration = Date.now() - start; | |
| 35 // Ignore the cleanup time for this test. | |
| 36 automation.addResult(testName, duration); | |
| 37 automation.setStatus("Deleting."); | |
| 38 deleteDatabase(db, onDeleted); | |
| 39 } | |
| 40 function onDeleted() { | |
| 41 automation.setStatus("Deleted."); | |
| 42 onTestComplete(); | |
| 43 } | |
| 44 automation.setStatus("Creating."); | |
| 45 createDatabase(testName, objectStoreNames, onCreated, onError); | 33 createDatabase(testName, objectStoreNames, onCreated, onError); |
| 46 } | 34 } |
| 47 | 35 |
| 36 function testRandomReads(numKeys, numReadsPerTransaction, numTransactions, | |
| 37 useIndex, onTestComplete) { | |
| 38 var indexText = "_bare"; | |
| 39 var indexName; | |
| 40 if (useIndex) { | |
| 41 indexText = "_index"; | |
| 42 indexName = "index"; | |
| 43 } | |
| 44 var testName = "testRandomReads_" + numKeys + "_" + numReadsPerTransaction + | |
| 45 "_" + numTransactions + indexText; | |
| 46 var numTransactionsLeft = numTransactions; | |
| 47 var storeName = "store"; | |
| 48 var objectStoreNames = [storeName]; | |
|
jsbell
2012/07/26 18:23:30
FYI, a single string is acceptable as well as an a
ericu
2012/07/26 20:24:11
I make it a consistent array everywhere so as to k
| |
| 49 var numTransactionsRunning; | |
| 50 | |
| 51 function getKey(i) { | |
| 52 return "key " + i; | |
| 53 } | |
| 54 | |
| 55 function getValue(i) { | |
| 56 return "value " + i; | |
| 57 } | |
| 58 | |
| 59 function onCreated(db) { | |
| 60 automation.setStatus("Setting up test database."); | |
| 61 var transaction = getTransaction(db, objectStoreNames, "readwrite", | |
| 62 function() { onSetupComplete(db); }); | |
| 63 var os = transaction.objectStore(storeName); | |
| 64 assert(os); | |
| 65 for (var j = 0; j < numKeys; ++j) { | |
| 66 os.put(getValue(i), getKey(j)); | |
| 67 } | |
| 68 } | |
| 69 var cleanUpFunc; | |
| 70 function onSetupComplete(db) { | |
| 71 automation.setStatus("Setup complete."); | |
| 72 runOneBatch(db); | |
| 73 cleanUpFunc = getCleanUpFunc(testName, Date.now(), onTestComplete); | |
| 74 } | |
| 75 | |
| 76 function runOneBatch(db) { | |
| 77 if (numTransactionsLeft <= 0) { | |
| 78 return; | |
| 79 } | |
| 80 --numTransactionsLeft; | |
| 81 ++numTransactionsRunning; | |
| 82 var valuesToRead = numReadsPerTransaction; | |
| 83 var transaction = getTransaction(db, objectStoreNames, "readonly", | |
| 84 function() { | |
| 85 assert(!--numTransactionsRunning); | |
| 86 assert(!valuesToRead); | |
| 87 if (numTransactionsLeft <= 0) { | |
| 88 cleanUpFunc(); | |
| 89 } else { | |
| 90 runOneBatch(db); | |
| 91 } | |
| 92 }); | |
| 93 | |
| 94 var queryObject = transaction.objectStore(storeName); | |
| 95 if (useIndex) { | |
| 96 queryObject = queryObject.index(indexName); | |
| 97 } | |
| 98 assert(queryObject); | |
| 99 for (var i = 0; i < numReadsPerTransaction; ++i) { | |
| 100 var rand = Math.floor(Math.random() * numKeys); | |
| 101 var request = queryObject.get(getKey(rand)); | |
| 102 request.onerror = onError; | |
| 103 request.onsuccess = function () { | |
| 104 assert(valuesToRead--); | |
| 105 } | |
| 106 } | |
| 107 } | |
| 108 | |
| 109 automation.setStatus("Creating database."); | |
| 110 var options = {}; | |
| 111 if (useIndex) { | |
| 112 options.indexName = indexName; | |
| 113 options.indexKeyPath = ""; | |
| 114 options.indexIsUnique = true; | |
| 115 options.indexIsMultiEntry = false; | |
| 116 } | |
| 117 createDatabase(testName, objectStoreNames, onCreated, onError, options); | |
|
jsbell
2012/07/26 18:23:30
Might be just a personal thing, but I find tests m
ericu
2012/07/26 20:24:11
I lean the opposite way, and always want everythin
dgrogan
2012/07/26 20:35:58
I like code order = execution order, possibly just
| |
| 118 } | |
| 119 | |
| 48 var tests = [ | 120 var tests = [ |
| 49 [testCreateKeysInStores, 1, 1, 1], | 121 [testCreateKeysInStores, 1, 1, 1], |
| 50 [testCreateKeysInStores, 100, 1, 1], | 122 [testCreateKeysInStores, 100, 1, 1], |
| 51 [testCreateKeysInStores, 1, 100, 1], | 123 [testCreateKeysInStores, 1, 100, 1], |
| 52 [testCreateKeysInStores, 100, 1, 100000] | 124 [testCreateKeysInStores, 100, 1, 10000], |
| 125 [testRandomReads, 1000, 5, 50, false], | |
|
jsbell
2012/07/26 18:23:30
For readability, maybe define a "const" (var kUseI
ericu
2012/07/26 20:24:11
Good idea; done.
| |
| 126 [testRandomReads, 1000, 50, 5, false], | |
| 127 [testRandomReads, 5000, 50, 5, false], | |
| 128 [testRandomReads, 1000, 5, 50, true], | |
| 129 [testRandomReads, 1000, 50, 5, true], | |
| 130 [testRandomReads, 5000, 50, 5, true] | |
| 53 ]; | 131 ]; |
| 54 | 132 |
| 55 var currentTest = 0; | 133 var currentTest = 0; |
| 56 | 134 |
| 57 function runNextTest() { | 135 function runNextTest() { |
| 58 if (currentTest < tests.length) { | 136 if (currentTest < tests.length) { |
| 59 var test = tests[currentTest++].slice(); | 137 var test = tests[currentTest++].slice(); |
| 60 var f = test.shift(); | 138 var f = test.shift(); |
| 61 test.push(runNextTest); | 139 test.push(runNextTest); |
| 62 f.apply(null, test); | 140 f.apply(null, test); |
| 63 } else { | 141 } else { |
| 64 onAllTestsComplete(); | 142 onAllTestsComplete(); |
| 65 } | 143 } |
| 66 } | 144 } |
| 67 | 145 |
| 68 function onAllTestsComplete() { | 146 function onAllTestsComplete() { |
| 69 var overallDuration = Date.now() - overallTestStartTime; | 147 var overallDuration = Date.now() - overallTestStartTime; |
| 70 automation.addResult("OverallTestDuration", overallDuration); | 148 automation.addResult("OverallTestDuration", overallDuration); |
| 71 automation.setDone(); | 149 automation.setDone(); |
| 72 } | 150 } |
| 73 | 151 |
| 74 function test() { | 152 function test() { |
| 75 runNextTest(); | 153 runNextTest(); |
| 76 } | 154 } |
| OLD | NEW |