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 = window.performance.now(); | 5 var overallTestStartTime = window.performance.now(); |
6 var kUseIndex = true; | 6 var kUseIndex = true; |
7 var kDontUseIndex = false; | 7 var kDontUseIndex = false; |
8 var kReadKeysOnly = true; | 8 var kReadKeysOnly = true; |
9 var kReadDataToo = false; | 9 var kReadDataToo = false; |
10 var kWriteToo = true; | 10 var kWriteToo = true; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 // Read a sequence of an object store via a cursor, writing | 62 // Read a sequence of an object store via a cursor, writing |
63 // transformed values into another. | 63 // transformed values into another. |
64 [testCursorReadsAndRandomWrites, kReadDataToo, kDontUseIndex, kWriteToo, | 64 [testCursorReadsAndRandomWrites, kReadDataToo, kDontUseIndex, kWriteToo, |
65 kWriteSameStore], | 65 kWriteSameStore], |
66 // Read a sequence of an index into an object store via a cursor. | 66 // Read a sequence of an index into an object store via a cursor. |
67 [testCursorReadsAndRandomWrites, kReadDataToo, kUseIndex, kDontWrite, | 67 [testCursorReadsAndRandomWrites, kReadDataToo, kUseIndex, kDontWrite, |
68 kPlaceholderArg], | 68 kPlaceholderArg], |
69 // Read a sequence of an index into an object store via a key cursor. | 69 // Read a sequence of an index into an object store via a key cursor. |
70 [testCursorReadsAndRandomWrites, kReadKeysOnly, kUseIndex, kDontWrite, | 70 [testCursorReadsAndRandomWrites, kReadKeysOnly, kUseIndex, kDontWrite, |
71 kPlaceholderArg], | 71 kPlaceholderArg], |
72 // Make batches of random writes into a store, triggered by periodic setTimeout | |
73 // calls. | |
74 [testSporadicWrites, 5, 0, kDontRead], | |
75 // Make large batches of random writes into a store, triggered by periodic | |
76 // setTimeout calls. | |
77 [testSporadicWrites, 50, 0, kDontRead], | |
78 // Make batches of random writes into a store with many indices, triggered by | |
79 // periodic setTimeout calls. | |
80 [testSporadicWrites, 5, 10, kDontRead], | |
81 // Make large batches of random writes into a store with many indices, triggered | |
82 // by periodic setTimeout calls. | |
83 [testSporadicWrites, 50, 10, kDontRead], | |
84 // Make batches of random writes into a store, triggered by periodic setTimeout | |
85 // calls. Intersperse read transactions to test read-write lock conflicts. | |
86 [testSporadicWrites, 5, 0, kAlternateWithReads], | |
87 // Make large batches of random writes into a store, triggered by periodic | |
88 // setTimeout calls. Intersperse read transactions to test read-write lock | |
89 // conflicts. | |
90 [testSporadicWrites, 50, 0, kAlternateWithReads], | |
91 // Make a small bunch of batches of reads of the same keys from an object store. | 72 // Make a small bunch of batches of reads of the same keys from an object store. |
92 [testReadCache, 10, kDontUseIndex], | 73 [testReadCache, 10, kDontUseIndex], |
93 // Make a bunch of batches of reads of the same keys from an index. | 74 // Make a bunch of batches of reads of the same keys from an index. |
94 [testReadCache, 50, kUseIndex], | 75 [testReadCache, 50, kUseIndex], |
95 // Make a small bunch of batches of reads of the same keys from an object store. | 76 // Make a small bunch of batches of reads of the same keys from an object store. |
96 [testReadCache, 10, kDontUseIndex], | 77 [testReadCache, 10, kDontUseIndex], |
97 // Make a bunch of batches of reads of the same keys from an index. | 78 // Make a bunch of batches of reads of the same keys from an index. |
98 [testReadCache, 50, kUseIndex], | 79 [testReadCache, 50, kUseIndex], |
99 // Create and delete an index on a store that already contains data [produces | 80 // Create and delete an index on a store that already contains data [produces |
100 // a timing result for each of creation and deletion]. | 81 // a timing result for each of creation and deletion]. |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 mode = "readwrite"; | 422 mode = "readwrite"; |
442 var transaction = | 423 var transaction = |
443 getTransaction(db, objectStoreNames, mode, completionFunc); | 424 getTransaction(db, objectStoreNames, mode, completionFunc); |
444 | 425 |
445 getValuesFromCursor( | 426 getValuesFromCursor( |
446 transaction, objectStoreNames[0], numReadsPerTransaction, numKeys, | 427 transaction, objectStoreNames[0], numReadsPerTransaction, numKeys, |
447 indexName, getKeyForRead, readKeysOnly, outputStoreName); | 428 indexName, getKeyForRead, readKeysOnly, outputStoreName); |
448 } | 429 } |
449 } | 430 } |
450 | 431 |
451 function testSporadicWrites( | |
452 numOperationsPerTransaction, numIndices, alternateWithReads, | |
453 onTestComplete) { | |
454 var numKeys = 1000; | |
455 // With 30 transactions, spaced 50ms apart, we'll need at least 1.5s. | |
456 var numTransactions = 30; | |
457 if (alternateWithReads) | |
458 numTransactions *= 2; | |
459 var delayBetweenBatches = 50; | |
460 var indexName; | |
461 var testName = getDisplayName(arguments); | |
462 var numTransactionsLeft = numTransactions; | |
463 var objectStoreNames = ["store"]; | |
464 var numTransactionsRunning = 0; | |
465 | |
466 var getValue = getSimpleValue; | |
467 if (numIndices) | |
468 getValue = function (i) { return getNFieldObjectValue(i, numIndices); }; | |
469 | |
470 automation.setStatus("Creating database."); | |
471 var options = []; | |
472 for (var i=0; i < numIndices; ++i) { | |
473 var o = {}; | |
474 o.indexName = "index " + i; | |
475 o.indexKeyPath = getNFieldName(i); | |
476 o.indexIsUnique = false; | |
477 o.indexIsMultiEntry = false; | |
478 options.push(o); | |
479 } | |
480 createDatabase(testName, objectStoreNames, onCreated, onError, options); | |
481 | |
482 function onCreated(db) { | |
483 automation.setStatus("Setting up test database."); | |
484 var transaction = getTransaction(db, objectStoreNames, "readwrite", | |
485 function() { onSetupComplete(db); }); | |
486 putLinearValues(transaction, objectStoreNames, numKeys, getSimpleKey, | |
487 getValue); | |
488 } | |
489 var completionFunc; | |
490 function onSetupComplete(db) { | |
491 automation.setStatus("Setup complete."); | |
492 completionFunc = | |
493 getCompletionFunc(db, testName, window.performance.now(), | |
494 onTestComplete); | |
495 runOneBatch(db); | |
496 } | |
497 | |
498 function runOneBatch(db) { | |
499 assert(numTransactionsLeft); | |
500 if (--numTransactionsLeft) { | |
501 setTimeout(function () { runOneBatch(db); }, delayBetweenBatches); | |
502 } | |
503 | |
504 var mode, transaction; | |
505 if (alternateWithReads) { | |
506 ++numTransactionsRunning; | |
507 transaction = | |
508 getTransaction(db, objectStoreNames, "readonly", batchComplete); | |
509 getRandomValues(transaction, objectStoreNames, | |
510 numOperationsPerTransaction, numKeys); | |
511 } | |
512 ++numTransactionsRunning; | |
513 transaction = | |
514 getTransaction(db, objectStoreNames, "readwrite", batchComplete); | |
515 putRandomValues(transaction, objectStoreNames, numOperationsPerTransaction, | |
516 numKeys); | |
517 | |
518 function batchComplete() { | |
519 assert(numTransactionsRunning); | |
520 if (!--numTransactionsRunning && !numTransactionsLeft) | |
521 completionFunc(); | |
522 } | |
523 } | |
524 } | |
525 | |
526 function testWalkingMultipleCursors(numCursors, onTestComplete) { | 432 function testWalkingMultipleCursors(numCursors, onTestComplete) { |
527 var numKeys = 1000; | 433 var numKeys = 1000; |
528 var numHitsPerKey = 10; | 434 var numHitsPerKey = 10; |
529 var testName = getDisplayName(arguments); | 435 var testName = getDisplayName(arguments); |
530 var objectStoreNames = ["input store"]; | 436 var objectStoreNames = ["input store"]; |
531 var indexName = "index name"; | 437 var indexName = "index name"; |
532 var getKey = getSimpleKey; | 438 var getKey = getSimpleKey; |
533 var getValue = getIndexableValue; | 439 var getValue = getIndexableValue; |
534 | 440 |
535 automation.setStatus("Creating database."); | 441 automation.setStatus("Creating database."); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
673 request.onerror = onError; | 579 request.onerror = onError; |
674 request.onsuccess = function() { | 580 request.onsuccess = function() { |
675 var cursor = request.result; | 581 var cursor = request.result; |
676 if (cursor && first) { | 582 if (cursor && first) { |
677 first = false; | 583 first = false; |
678 cursor.continue(getKey(numKeys - 1)); | 584 cursor.continue(getKey(numKeys - 1)); |
679 } | 585 } |
680 }; | 586 }; |
681 } | 587 } |
682 } | 588 } |
OLD | NEW |