| <!DOCTYPE html> |
| <html> |
| <body> |
| <script src="../../resources/runner.js"></script> |
| <script> |
| |
| const numberOfIterations = 20; |
| const numberOfItems = 10000; |
| const numberOfItemsToDelete = 5000; |
| |
| // Delete database(s) for the test ahead of time. |
| var databaseName = "index-cursor-delete-DB-2"; |
| indexedDB.deleteDatabase(databaseName).onsuccess = function() { |
| startIteration(); |
| } |
| |
| var testGenerator = null; |
| var db = null; |
| var transaction = null; |
| |
| PerfTestRunner.prepareToMeasureValuesAsync({ |
| customIterationCount: numberOfIterations, |
| unit: 'ms', |
| done: function () { |
| transaction = null; |
| db = null; |
| testGenerator = null; |
| PerfTestRunner.gc(); |
| } |
| }); |
| |
| function startIteration() |
| { |
| testGenerator = runIteration(); |
| nextStep(); |
| } |
| |
| function nextStep() |
| { |
| testGenerator.next(); |
| } |
| |
| function *runIteration() |
| { |
| var openRequest = indexedDB.open(databaseName); |
| openRequest.onupgradeneeded = function(event) { |
| db = event.target.result; |
| var objectStore = db.createObjectStore('store', { keyPath: 'uniqueIndexKey' }); |
| objectStore.createIndex('uniqueIndex', 'uniqueIndexKey', { unique: true }); |
| objectStore.createIndex('index', 'indexKey'); |
| } |
| openRequest.onsuccess = nextStep; |
| |
| yield; |
| |
| // Store items for deletion. |
| transaction = db.transaction('store', 'readwrite'); |
| var objectStore = transaction.objectStore('store'); |
| for (var i = 0; i < numberOfItems; ++i) |
| objectStore.put({ value: 'value', uniqueIndexKey: "uniqueIndexKey" + i, indexKey: "index" + (i%2) }); |
| |
| transaction.oncomplete = function(event) { |
| nextStep(); |
| } |
| |
| yield; |
| |
| var startTime = PerfTestRunner.now(); |
| |
| var index = db.transaction('store', 'readwrite').objectStore('store').index('index'); |
| var completedDeletes = 0; |
| index.openCursor(IDBKeyRange.only('index1')).onsuccess = function(event) { |
| var cursor = event.target.result; |
| if(cursor) { |
| cursor.delete().onsuccess = function(event) { |
| if (++completedDeletes == numberOfItemsToDelete) |
| nextStep(); |
| } |
| |
| cursor.continue(); |
| } |
| } |
| |
| yield; |
| |
| if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime)) |
| return; |
| |
| setTimeout(startIteration, 0); |
| } |
| </script> |
| </body> |
| </html> |