Title: [248947] trunk/PerformanceTests
Revision
248947
Author
sihui_...@apple.com
Date
2019-08-21 10:21:27 -0700 (Wed, 21 Aug 2019)

Log Message

Add some IDB performance tests
https://bugs.webkit.org/show_bug.cgi?id=200906

Reviewed by Geoffrey Garen.

Add test coverage for IDB performance, and organize IDB tests into two categories.

* IndexedDB/basic/index-count-key.html: Added.
* IndexedDB/basic/index-count.html: Added.
* IndexedDB/basic/index-cursor-advance.html: Added.
* IndexedDB/basic/index-cursor-continue.html: Added.
* IndexedDB/basic/index-cursor-continuePrimaryKey.html: Added.
* IndexedDB/basic/index-cursor-delete.html: Added.
* IndexedDB/basic/index-cursor-update.html: Added.
* IndexedDB/basic/index-get.html: Added.
* IndexedDB/basic/index-multientry.html: Renamed from PerformanceTests/IndexedDB/index-multientry.html.
* IndexedDB/basic/objectstore-add.html: Added.
* IndexedDB/basic/objectstore-clear.html: Added.
* IndexedDB/basic/objectstore-count.html: Added.
* IndexedDB/basic/objectstore-cursor-advance.html: Added.
* IndexedDB/basic/objectstore-cursor-continue.html: Added.
* IndexedDB/basic/objectstore-cursor-delete.html: Added.
* IndexedDB/basic/objectstore-cursor-update.html: Added.
* IndexedDB/basic/objectstore-cursor.html: Renamed from PerformanceTests/IndexedDB/objectstore-cursor.html.
* IndexedDB/basic/objectstore-delete.html: Renamed from PerformanceTests/IndexedDB/index-get.html.
* IndexedDB/basic/objectstore-get.html: Added.
* IndexedDB/basic/objectstore-put.html: Renamed from PerformanceTests/IndexedDB/objectstore-get.html.
* IndexedDB/stress/large-array-keys.html: Renamed from PerformanceTests/IndexedDB/large-array-keys.html.
* IndexedDB/stress/large-binary-keys.html: Renamed from PerformanceTests/IndexedDB/large-binary-keys.html.
* IndexedDB/stress/large-number-of-inserts-responsiveness.html: Renamed from PerformanceTests/IndexedDB/large-number-of-inserts-responsiveness.html.
* IndexedDB/stress/large-number-of-inserts.html: Renamed from PerformanceTests/IndexedDB/large-number-of-inserts.html.
* IndexedDB/stress/large-string-keys.html: Renamed from PerformanceTests/IndexedDB/large-string-keys.html.
* Skipped:

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/PerformanceTests/ChangeLog (248946 => 248947)


--- trunk/PerformanceTests/ChangeLog	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/ChangeLog	2019-08-21 17:21:27 UTC (rev 248947)
@@ -1,3 +1,39 @@
+2019-08-21  Sihui Liu  <sihui_...@apple.com>
+
+        Add some IDB performance tests
+        https://bugs.webkit.org/show_bug.cgi?id=200906
+
+        Reviewed by Geoffrey Garen.
+
+        Add test coverage for IDB performance, and organize IDB tests into two categories.
+
+        * IndexedDB/basic/index-count-key.html: Added.
+        * IndexedDB/basic/index-count.html: Added.
+        * IndexedDB/basic/index-cursor-advance.html: Added.
+        * IndexedDB/basic/index-cursor-continue.html: Added.
+        * IndexedDB/basic/index-cursor-continuePrimaryKey.html: Added.
+        * IndexedDB/basic/index-cursor-delete.html: Added.
+        * IndexedDB/basic/index-cursor-update.html: Added.
+        * IndexedDB/basic/index-get.html: Added.
+        * IndexedDB/basic/index-multientry.html: Renamed from PerformanceTests/IndexedDB/index-multientry.html.
+        * IndexedDB/basic/objectstore-add.html: Added.
+        * IndexedDB/basic/objectstore-clear.html: Added.
+        * IndexedDB/basic/objectstore-count.html: Added.
+        * IndexedDB/basic/objectstore-cursor-advance.html: Added.
+        * IndexedDB/basic/objectstore-cursor-continue.html: Added.
+        * IndexedDB/basic/objectstore-cursor-delete.html: Added.
+        * IndexedDB/basic/objectstore-cursor-update.html: Added.
+        * IndexedDB/basic/objectstore-cursor.html: Renamed from PerformanceTests/IndexedDB/objectstore-cursor.html.
+        * IndexedDB/basic/objectstore-delete.html: Renamed from PerformanceTests/IndexedDB/index-get.html.
+        * IndexedDB/basic/objectstore-get.html: Added.
+        * IndexedDB/basic/objectstore-put.html: Renamed from PerformanceTests/IndexedDB/objectstore-get.html.
+        * IndexedDB/stress/large-array-keys.html: Renamed from PerformanceTests/IndexedDB/large-array-keys.html.
+        * IndexedDB/stress/large-binary-keys.html: Renamed from PerformanceTests/IndexedDB/large-binary-keys.html.
+        * IndexedDB/stress/large-number-of-inserts-responsiveness.html: Renamed from PerformanceTests/IndexedDB/large-number-of-inserts-responsiveness.html.
+        * IndexedDB/stress/large-number-of-inserts.html: Renamed from PerformanceTests/IndexedDB/large-number-of-inserts.html.
+        * IndexedDB/stress/large-string-keys.html: Renamed from PerformanceTests/IndexedDB/large-string-keys.html.
+        * Skipped:
+
 2019-08-19  Sihui Liu  <sihui_...@apple.com>
 
         Remove IDB-specific quota

Copied: trunk/PerformanceTests/IndexedDB/basic/index-count-key.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/index-count-key.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/index-count-key.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "index-count-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        transaction = null;
+        db = 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');
+        objectStore.createIndex('index', 'indexKey');
+        for (var i = 0; i < numberOfItems; i++)
+           objectStore.put( { value: 'value', indexKey: "index" + i }, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var index = db.transaction('store').objectStore('store').index('index');
+    var completedCounts = 0;
+    for (var i = 0; i < numberOfItems; i++)
+    {
+        index.count('index' + i)._onsuccess_ = function (event) {
+            if (event.target.result != 1)
+                alert("Expected 1 item for key index" + i);
+
+            if (++completedCounts == numberOfItems)
+                nextStep();
+        };
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/index-count.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/index-count.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/index-count.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "index-count-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        objectStore.createIndex('index', 'indexKey');
+        for (var i = 0; i < numberOfItems; i++)
+           objectStore.put( { value: 'value', indexKey: "index" + i }, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var index = db.transaction('store').objectStore('store').index('index');
+    index.count()._onsuccess_ = function(event) {
+        if (event.target.result != numberOfItems)
+            alert("Expected " + numberOfItems + "items but get " + event.target.result);
+
+        nextStep();
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/index-cursor-advance.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/index-cursor-advance.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/index-cursor-advance.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+const cursorStep = 2;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "index-cursor-advance-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        objectStore.createIndex('index', 'indexKey');
+        for (var i = 0; i < numberOfItems; ++i)
+           objectStore.put({ value: 'value', indexKey: "index" + i }, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var index = db.transaction('store').objectStore('store').index('index');
+    var position = 0;
+    index.openCursor()._onsuccess_ = function(event) {
+        var cursor = event.target.result;
+        if(cursor) {
+            cursor.advance(cursorStep);
+            position += cursorStep;
+        } else {
+            if (position < numberOfItems) 
+                alert("Expected cursor to stop after position" + numberOfItems + ", but stopped at " + position);
+
+            nextStep();
+        }
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/index-cursor-continue.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/index-cursor-continue.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/index-cursor-continue.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "index-cursor-continue-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        objectStore.createIndex('index', 'indexKey');
+        for (var i = 0; i < numberOfItems; ++i)
+           objectStore.put({ value: 'value', indexKey: "index" + i }, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var index = db.transaction('store').objectStore('store').index('index');
+    var position = 0;
+    index.openCursor()._onsuccess_ = function(event) {
+        var cursor = event.target.result;
+        if(cursor) {
+            ++ position;
+            cursor.continue();
+        } else {
+            if (position < numberOfItems) 
+                alert("Expected cursor to stop after position" + numberOfItems + ", but stopped at " + position);
+
+            nextStep();
+        }
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/index-cursor-continuePrimaryKey.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/index-cursor-continuePrimaryKey.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/index-cursor-continuePrimaryKey.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "index-cursor-continue-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        objectStore.createIndex('index', 'indexKey');
+        for (var i = 0; i < numberOfItems; ++i)
+           objectStore.put({ value: 'value', indexKey: 'indexValue' }, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var index = db.transaction('store').objectStore('store').index('index');
+    var primaryKey = 0;
+    index.openCursor()._onsuccess_ = function(event) {
+        var cursor = event.target.result;
+        if(cursor) {
+            ++ primaryKey;
+            cursor.continuePrimaryKey('indexValue', primaryKey);
+        } else {
+            if (primaryKey < numberOfItems) 
+                alert("Expected cursor to visit " + numberOfItems + " items, only got " + primaryKey);
+
+            nextStep();
+        }
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/index-cursor-delete.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/index-cursor-delete.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/index-cursor-delete.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "index-cursor-delete-DB";
+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');
+        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', indexKey: "index" + i }, i);
+
+    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()._onsuccess_ = function(event) {
+        var cursor = event.target.result;
+        if(cursor) {
+            cursor.delete()._onsuccess_ = function(event) {
+                if (++completedDeletes == numberOfItems)
+                    nextStep();
+            }
+
+            cursor.continue();
+        }
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/index-cursor-update.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/index-cursor-update.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/index-cursor-update.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 10;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "index-cursor-update-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        objectStore.createIndex('index', 'indexKey');
+        for (var i = 0; i < numberOfItems; ++i)
+           objectStore.put({ value: 'value', indexKey: "index" + i }, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var index = db.transaction('store', 'readwrite').objectStore('store').index('index');
+    var completedUpdates = 0;
+    index.openCursor()._onsuccess_ = function(event) {
+        var cursor = event.target.result;
+        if(cursor) {
+            cursor.update({ value: Math.random(), indexKey: cursor.key})._onsuccess_ = function(event) {
+                if (++completedUpdates == numberOfItems)
+                    nextStep();
+            }
+
+            cursor.continue();
+        }
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/index-get.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/index-get.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/index-get.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 10;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "index-get-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        objectStore.createIndex('index', 'indexKey');
+        for (var i = 0; i < numberOfItems; i++)
+           objectStore.put( { test: 'yo', indexKey: "index" + i }, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var index = db.transaction('store').objectStore('store').index('index');
+    var completedGets = 0;
+    for (var i = 0; i < numberOfItems; i++) {
+        index.get('index' + i)._onsuccess_ = function (event) {
+            if (event.target.result.test != "yo")
+                alert("Expected 'yo', got '" + event.target.result.test + "'");
+
+            if (++completedGets == numberOfItems)
+                nextStep();
+        };
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/index-multientry.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-multientry.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/index-multientry.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/index-multientry.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+
+// Delete all databases for the test ahead of time.
+var numberDeleted = 0;
+var databaseNamePrefix = "index-multientry-DB-";
+for (var i = 0; i < numberOfIterations + 1; ++i) {
+    req = indexedDB.deleteDatabase(databaseNamePrefix + i);
+    req._onsuccess_ = function() {
+        if (++numberDeleted == numberOfIterations)
+            startIteration();
+    }
+}
+
+var testGenerator = null;
+var db = null;
+var transaction = null;
+var currentIteration = 0;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        transaction = null;
+        db = null;
+        testGenerator = null;
+        PerfTestRunner.gc();
+        ++currentIteration;
+    }
+});
+
+function startIteration()
+{
+    testGenerator = runIteration();
+    nextStep();
+}
+
+function nextStep()
+{
+    testGenerator.next();
+}
+
+var object = { test: 'yo', indexKeys: [] };
+for (var i = 0; i < 5000; i++)
+    object.indexKeys.push('index_no_' + i);
+
+function *runIteration()
+{
+    var startTime = PerfTestRunner.now();
+
+    var openRequest = indexedDB.open(databaseNamePrefix + currentIteration);
+    openRequest._onupgradeneeded_ = function(event) {
+        db = event.target.result;
+        db.createObjectStore('store').createIndex('index', 'indexKeys', { multiEntry: true });
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    transaction = db.transaction('store', 'readwrite');
+    transaction.objectStore('store').put(object, 1);
+    transaction._oncomplete_ = nextStep;
+
+    yield;
+
+    var index = db.transaction('store').objectStore('store').index('index');
+
+    var completedGets = 0;
+    for (var i = 0; i < 1000; i++)
+    {
+        index.get('index_no_' + i)._onsuccess_ = function (event) {
+            if (event.target.result.test != "yo")
+                alert("Expected 'yo', got '" + event.target.result.test + "'");
+
+            if (++completedGets == 1000)
+                nextStep();
+        };
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-add.html (from rev 248946, trunk/PerformanceTests/IndexedDB/objectstore-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-add.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-add.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "objectstore-add-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('store', 'readwrite').objectStore('store');
+    var completedAdds = 0;
+    for (var i = 0; i < numberOfItems; ++i) {
+        objectStore.add("value" + i, i)._onsuccess_ = (function (key) {
+            return function(event) {
+                if (event.target.result != key)
+                    alert("Expected '" + key + "', got '" + event.target.result + "'");
+
+                if (++completedAdds == numberOfItems)
+                    nextStep();
+            }
+        })(i);
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    // Clear the object store so we don't add existing items in the next iteration.
+    objectStore = db.transaction('store', 'readwrite').objectStore('store');
+    objectStore.clear()._onsuccess_ = function(event) {
+        nextStep();
+    }
+
+    yield;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-clear.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-clear.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-clear.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "objectstore-clear-DB";
+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');
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    // Store items for clear.
+    transaction = db.transaction('store', 'readwrite');
+    var objectStore = transaction.objectStore('store');
+    for (var i = 0; i < numberOfItems; ++i) {
+        objectStore.add("value" + i, i);
+    }
+    transaction._oncomplete_ = function(event) {
+        nextStep();
+    }
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    objectStore = db.transaction('store', 'readwrite').objectStore('store');
+    objectStore.clear()._onsuccess_ = function(event) {
+        nextStep();
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-count.html (from rev 248946, trunk/PerformanceTests/IndexedDB/objectstore-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-count.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-count.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "objectstore-count-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        for (var i = 0; i < numberOfItems; ++i)
+           objectStore.put("value" + i, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('store').objectStore('store');
+    objectStore.count()._onsuccess_ = function(event) {
+        if (event.target.result != numberOfItems)
+            alert("Expected " + numberOfItems + "items but get " + event.target.result);
+
+        nextStep();
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-advance.html (from rev 248946, trunk/PerformanceTests/IndexedDB/objectstore-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-advance.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-advance.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+const cursorStep = 2;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "objectstore-curosr-advance-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        for (var i = 0; i < numberOfItems; ++i)
+           objectStore.put("value" + i, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('store').objectStore('store');
+    var expectedKey = 0;
+    objectStore.openCursor()._onsuccess_ = function(event) {
+        var cursor = event.target.result;
+        if(cursor) {
+            if (cursor.key != expectedKey)
+                alert("Expected cursor.key '" + expectedKey + "', got '" + cursor.key + "'");
+
+            expectedKey += cursorStep;
+            cursor.advance(cursorStep);
+        } else {
+            nextStep();
+        }
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-continue.html (from rev 248946, trunk/PerformanceTests/IndexedDB/objectstore-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-continue.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-continue.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "objectstore-curosr-continue-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        for (var i = 0; i < numberOfItems; ++i)
+           objectStore.put("value" + i, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('store').objectStore('store');
+    var expectedKey = 0;
+    objectStore.openCursor()._onsuccess_ = function(event) {
+        var cursor = event.target.result;
+        if(cursor) {
+            if (cursor.key != expectedKey++)
+                alert("Expected cursor.key '" + expectedKey + "', got '" + cursor.key + "'");
+
+            cursor.continue();
+        } else {
+            nextStep();
+        }
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-delete.html (from rev 248946, trunk/PerformanceTests/IndexedDB/objectstore-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-delete.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-delete.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "objectstore-cursor-delete-DB";
+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');
+    }
+    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.add("value" + i, i);
+
+    transaction._oncomplete_ = function(event) {
+        nextStep();
+    }
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    objectStore = db.transaction('store', 'readwrite').objectStore('store');
+    var completedDeletes = 0;
+    objectStore.openCursor()._onsuccess_ = function(event) {
+        var cursor = event.target.result;
+        if(cursor) {
+            cursor.delete()._onsuccess_ = function(event) {
+                if (++completedDeletes == numberOfItems)
+                    nextStep();
+            }
+
+            cursor.continue();
+        }
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-update.html (from rev 248946, trunk/PerformanceTests/IndexedDB/objectstore-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-update.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor-update.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "objectstore-cursor-update-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        for (var i = 0; i < numberOfItems; ++i)
+           objectStore.put("value", i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('store', 'readwrite').objectStore('store');
+    var completedUpdates = 0;
+    objectStore.openCursor()._onsuccess_ = function(event) {
+        var cursor = event.target.result;
+        if(cursor) {
+            cursor.update(Math.random())._onsuccess_ = function(event) {
+                if (++completedUpdates == numberOfItems)
+                    nextStep();
+            }
+
+            cursor.continue();
+        }
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor.html (from rev 248946, trunk/PerformanceTests/IndexedDB/objectstore-cursor.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-cursor.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+var iterationCount = 10;
+
+// Delete all databases for the test ahead of time.
+var databaseName = "objectstore-cursor-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+var currentIteration = 0;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: iterationCount,
+    unit: 'ms',
+    done: function () {
+        db = null;
+        testGenerator = null;
+        PerfTestRunner.gc();
+        ++currentIteration;
+    }
+});
+
+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');
+        for (var i = 0; i < 25000; ++i) {
+            var suffix = ("0000000" + i).slice(-7);
+            objectStore.put("bar_value_" + suffix, "foo_key_" + suffix);
+        }
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+    var cursorRequest = db.transaction('store').objectStore('store').openCursor();
+    var cursorIteration = 0;
+    cursorRequest._onsuccess_ = function(event) {
+        var cursor = event.target.result;
+        if (cursor) {
+            var suffix = ("0000000" + cursorIteration).slice(-7);
+            if (cursor.key != "foo_key_" + suffix)
+                alert("Incorrect value retrieved: " + cursor.key);
+            if (cursor.value != "bar_value_" + suffix)
+                alert("Incorrect value retrieved: " + cursor.key);
+            ++cursorIteration;
+            cursor.continue();
+        } else
+            nextStep();
+    };
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-delete.html (from rev 248946, trunk/PerformanceTests/IndexedDB/index-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-delete.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-delete.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "objectstore-delete-DB";
+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');
+    }
+    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.add("value" + i, i);
+
+    transaction._oncomplete_ = function(event) {
+        nextStep();
+    }
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    objectStore = db.transaction('store', 'readwrite').objectStore('store');
+    var completedDeletes = 0;
+    for (var i = 0; i < numberOfItems; ++i) {
+        objectStore.delete(i)._onsuccess_ = function(event) {
+            if (++completedDeletes == numberOfItems)
+                nextStep();
+        }
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-get.html (from rev 248946, trunk/PerformanceTests/IndexedDB/objectstore-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-get.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-get.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "objectstore-get-DB";
+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');
+        for (var i = 0; i < numberOfItems; ++i)
+           objectStore.put("index" + i, i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('store').objectStore('store');
+    var completedGets = 0;
+    for (var i = 0; i < numberOfItems; ++i) {
+        objectStore.get(i)._onsuccess_ = (function (j) {
+            return function(event) {
+                if (event.target.result != ("index" + j))
+                    alert("Expected 'index" + j + "', got '" + event.target.result + "'");
+
+                if (++completedGets == numberOfItems)
+                    nextStep();
+            }
+        })(i);
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/basic/objectstore-put.html (from rev 248946, trunk/PerformanceTests/IndexedDB/objectstore-get.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/basic/objectstore-put.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/basic/objectstore-put.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+const numberOfIterations = 20;
+const numberOfItems = 5000;
+
+// Delete database(s) for the test ahead of time.
+var databaseName = "objectstore-put-DB";
+indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
+    startIteration();
+}
+
+var testGenerator = null;
+var db = null;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: numberOfIterations,
+    unit: 'ms',
+    done: function () {
+        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');
+        for (var i = 0; i < numberOfItems; ++i)
+           objectStore.put("value", i);
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('store', 'readwrite').objectStore('store');
+    var completedPuts = 0;
+    for (var i = 0; i < numberOfItems; ++i) {
+        objectStore.put(Math.random(), i)._onsuccess_ = (function (key) {
+            return function(event) {
+                if (event.target.result != key)
+                    alert("Expected '" + key + "', got '" + event.target.result + "'");
+
+                if (++completedPuts == numberOfItems)
+                    nextStep();
+            }
+        })(i);
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+</script>
+</body>
+</html>

Deleted: trunk/PerformanceTests/IndexedDB/index-get.html (248946 => 248947)


--- trunk/PerformanceTests/IndexedDB/index-get.html	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/IndexedDB/index-get.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -1,79 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<script>
-
-// Delete database(s) for the test ahead of time.
-var databaseName = "index-get-DB";
-indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
-    startIteration();
-}
-
-var testGenerator = null;
-var db = null;
-var transaction = null;
-
-PerfTestRunner.prepareToMeasureValuesAsync({
-    customIterationCount: 10,
-    unit: 'ms',
-    done: function () {
-        transaction = null;
-        db = null;
-        testGenerator = null;
-        PerfTestRunner.gc();
-    }
-});
-
-function startIteration()
-{
-    testGenerator = runIteration();
-    nextStep();
-}
-
-function nextStep()
-{
-    testGenerator.next();
-}
-
-var numberOfEntries = 5000;
-
-function *runIteration()
-{
-    var openRequest = indexedDB.open(databaseName);
-    openRequest._onupgradeneeded_ = function(event) {
-        db = event.target.result;
-        var objectStore = db.createObjectStore('store');
-        objectStore.createIndex('index', 'indexKey');
-        for (var i = 0; i < numberOfEntries; i++)
-           objectStore.put( { test: 'yo', indexKey: "index" + i }, i);
-    }
-    openRequest._onsuccess_ = nextStep;
-
-    yield;
-
-    var startTime = PerfTestRunner.now();
-
-    var index = db.transaction('store').objectStore('store').index('index');
-    var completedGets = 0;
-    for (var i = 0; i < numberOfEntries; i++)
-    {
-        index.get('index' + i)._onsuccess_ = function (event) {
-            if (event.target.result.test != "yo")
-                alert("Expected 'yo', got '" + event.target.result.test + "'");
-
-            if (++completedGets == numberOfEntries)
-                nextStep();
-        };
-    }
-
-    yield;
-
-    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
-        return;
-
-    setTimeout(startIteration, 0);
-}
-</script>
-</body>
-</html>

Deleted: trunk/PerformanceTests/IndexedDB/index-multientry.html (248946 => 248947)


--- trunk/PerformanceTests/IndexedDB/index-multientry.html	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/IndexedDB/index-multientry.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -1,94 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<script>
-
-var iterationCount = 20;
-var numberDeleted = 0;
-
-// Delete all databases for the test ahead of time.
-var databaseNamePrefix = "index-multientry-DB-";
-for (var i = 0; i < iterationCount + 1; ++i) {
-    req = indexedDB.deleteDatabase(databaseNamePrefix + i);
-    req._onsuccess_ = function() {
-        if (++numberDeleted == iterationCount)
-            startIteration();
-    }
-}
-
-var testGenerator = null;
-var db = null;
-var transaction = null;
-var currentIteration = 0;
-
-PerfTestRunner.prepareToMeasureValuesAsync({
-    customIterationCount: iterationCount,
-    unit: 'ms',
-    done: function () {
-        transaction = null;
-        db = null;
-        testGenerator = null;
-        PerfTestRunner.gc();
-        ++currentIteration;
-    }
-});
-
-function startIteration()
-{
-    testGenerator = runIteration();
-    nextStep();
-}
-
-function nextStep()
-{
-    testGenerator.next();
-}
-
-var object = { test: 'yo', indexKeys: [] };
-for (var i = 0; i < 5000; i++)
-    object.indexKeys.push('index_no_' + i);
-
-function *runIteration()
-{
-    var startTime = PerfTestRunner.now();
-
-    var openRequest = indexedDB.open(databaseNamePrefix + currentIteration);
-    openRequest._onupgradeneeded_ = function(event) {
-        db = event.target.result;
-        db.createObjectStore('store').createIndex('index', 'indexKeys', { multiEntry: true });
-    }
-    openRequest._onsuccess_ = nextStep;
-
-    yield;
-
-    transaction = db.transaction('store', 'readwrite');
-    transaction.objectStore('store').put(object, 1);
-    transaction._oncomplete_ = nextStep;
-
-    yield;
-
-    var index = db.transaction('store').objectStore('store').index('index');
-
-    var completedGets = 0;
-    for (var i = 0; i < 1000; i++)
-    {
-        index.get('index_no_' + i)._onsuccess_ = function (event) {
-            if (event.target.result.test != "yo")
-                alert("Expected 'yo', got '" + event.target.result.test + "'");
-
-            if (++completedGets == 1000)
-                nextStep();
-        };
-    }
-
-    yield;
-
-    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
-        return;
-
-    setTimeout(startIteration, 0);
-}
-</script>
-</body>
-</html>

Deleted: trunk/PerformanceTests/IndexedDB/large-array-keys.html (248946 => 248947)


--- trunk/PerformanceTests/IndexedDB/large-array-keys.html	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/IndexedDB/large-array-keys.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -1,90 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<script>
-
-var iterationCount = 20;
-var numberDeleted = 0;
-
-// Delete all databases for the test ahead of time.
-var databasePrefix = "large-array-keys-DB-";
-for (var i = 0; i < iterationCount + 1; ++i) {
-    indexedDB.deleteDatabase(databasePrefix + i)._onsuccess_ = function() {
-        if (++numberDeleted == iterationCount)
-            startIteration();
-    }
-}
-
-var testGenerator = null;
-var db = null;
-var currentIteration = 0;
-
-PerfTestRunner.prepareToMeasureValuesAsync({
-    customIterationCount: iterationCount,
-    unit: 'ms',
-    done: function () {
-        db = null;
-        testGenerator = null;
-        PerfTestRunner.gc();
-        ++currentIteration;
-    }
-});
-
-function startIteration()
-{
-    testGenerator = runIteration();
-    nextStep();
-}
-
-function nextStep()
-{
-    testGenerator.next();
-}
-
-function createSubArray(count)
-{
-    var array = new Array(count);
-    for (var i = 0; i < count; ++i) {
-        array[i] = createSubArray(count - 1);
-    }
-    return array;
-}
-
-var numberOfSubarrays = 6;
-var array = createSubArray(numberOfSubarrays);
-array.push("variant");
-
-function *runIteration()
-{
-    var openRequest = indexedDB.open(databasePrefix + currentIteration);
-    openRequest._onupgradeneeded_ = function(event) {
-        db = event.target.result;
-        db.createObjectStore('arrays');
-    }
-    openRequest._onsuccess_ = nextStep;
-
-    yield;
-
-    var startTime = PerfTestRunner.now();
-
-    var objectStore = db.transaction('arrays', 'readwrite').objectStore('arrays');
-    objectStore.transaction._oncomplete_ = nextStep;
-
-    var numberOfInserts = 100;
-    for (var i = 0; i < numberOfInserts; ++i) {
-        array[numberOfSubarrays] = i;
-        objectStore.put("Some value!!!", array);
-    }
-
-    yield;
-
-    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
-        return;
-
-    setTimeout(startIteration, 0);
-}
-
-</script>
-</body>
-</html>

Deleted: trunk/PerformanceTests/IndexedDB/large-binary-keys.html (248946 => 248947)


--- trunk/PerformanceTests/IndexedDB/large-binary-keys.html	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/IndexedDB/large-binary-keys.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<script>
-
-var iterationCount = 20;
-var numberDeleted = 0;
-
-// Delete all databases for the test ahead of time.
-var databasePrefix = "large-string-keys-DB-";
-for (var i = 0; i < iterationCount + 1; ++i) {
-    indexedDB.deleteDatabase(databasePrefix + i)._onsuccess_ = function() {
-        if (++numberDeleted == iterationCount)
-            startIteration();
-    }
-}
-
-var testGenerator = null;
-var db = null;
-var currentIteration = 0;
-
-PerfTestRunner.prepareToMeasureValuesAsync({
-    customIterationCount: iterationCount,
-    unit: 'ms',
-    done: function () {
-        db = null;
-        testGenerator = null;
-        PerfTestRunner.gc();
-        ++currentIteration;
-    }
-});
-
-function startIteration()
-{
-    testGenerator = runIteration();
-    nextStep();
-}
-
-function nextStep()
-{
-    testGenerator.next();
-}
-
-var baseString;
-for (var i = 0; i < 100000; ++i)
-    baseString += "abcdefghijklmnopqrstuvwxyz";
-
-var numberOfInserts = 50;
-var array = new Array(numberOfInserts);
-for (var i = 0; i < numberOfInserts; ++i) {
-    array[i] = new ArrayBuffer(2097152);
-    var view = new Int32Array(array[i]);
-    view[view.length - 1] = i;
-}
-
-function *runIteration()
-{
-    var openRequest = indexedDB.open(databasePrefix + currentIteration);
-    openRequest._onupgradeneeded_ = function(event) {
-        db = event.target.result;
-        db.createObjectStore('arrays');
-    }
-    openRequest._onsuccess_ = nextStep;
-
-    yield;
-
-    var startTime = PerfTestRunner.now();
-
-    var objectStore = db.transaction('arrays', 'readwrite').objectStore('arrays');
-    objectStore.transaction._oncomplete_ = nextStep;
-
-    for (var i = 0; i < numberOfInserts; ++i)
-        objectStore.put("Some value!!!", array[i]);
-
-    yield;
-
-    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
-        return;
-
-    setTimeout(startIteration, 0);
-}
-
-</script>
-</body>
-</html>

Deleted: trunk/PerformanceTests/IndexedDB/large-number-of-inserts-responsiveness.html (248946 => 248947)


--- trunk/PerformanceTests/IndexedDB/large-number-of-inserts-responsiveness.html	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/IndexedDB/large-number-of-inserts-responsiveness.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -1,83 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<script>
-
-var iterationCount = 20;
-var numberDeleted = 0;
-
-// Delete all databases for the test ahead of time.
-var databasePrefix = "large-number-of-inserts-responsiveness-DB-";
-for (var i = 0; i < iterationCount + 1; ++i) {
-    indexedDB.deleteDatabase(databasePrefix + i)._onsuccess_ = function() {
-        if (++numberDeleted == iterationCount)
-            startIteration();
-    }
-}
-
-var testGenerator = null;
-var db = null;
-var currentIteration = 0;
-
-PerfTestRunner.prepareToMeasureValuesAsync({
-    customIterationCount: iterationCount,
-    unit: 'ms',
-    done: function () {
-        db = null;
-        largestDelay = 0;
-        testGenerator = null;
-        PerfTestRunner.gc();
-        ++currentIteration;
-    }
-});
-
-function startIteration()
-{
-    testGenerator = runIteration();
-    nextStep();
-}
-
-function nextStep()
-{
-    testGenerator.next();
-}
-
-var numberOfObjects = 50000;
-var objectsToInsert = new Array(numberOfObjects);
-for (var i = 0; i < numberOfObjects; ++i) {
-    objectsToInsert[i] = { data: Math.random() };
-    objectsToInsert[i].id = 'object_' + i;
-}
-
-function *runIteration()
-{
-    var openRequest = indexedDB.open(databasePrefix + currentIteration);
-    openRequest._onupgradeneeded_ = function(event) {
-        db = event.target.result;
-        db.createObjectStore('objects', {keyPath: 'id'});
-    }
-    openRequest._onsuccess_ = nextStep;
-
-    yield;
-
-    var objectStore = db.transaction('objects', 'readwrite').objectStore('objects');
-    objectStore.transaction._oncomplete_ = nextStep;
-    for (var i = 0; i < numberOfObjects; ++i)
-        objectStore.put(objectsToInsert[i]);
-
-    PerfTestRunner.startCheckingResponsiveness();
-
-    yield;
-
-    PerfTestRunner.stopCheckingResponsiveness();
-    
-    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.longestResponsivenessDelay()))
-        return;
-
-    setTimeout(startIteration, 0);
-}
-
-</script>
-</body>
-</html>

Deleted: trunk/PerformanceTests/IndexedDB/large-number-of-inserts.html (248946 => 248947)


--- trunk/PerformanceTests/IndexedDB/large-number-of-inserts.html	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/IndexedDB/large-number-of-inserts.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -1,80 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<script>
-
-var iterationCount = 20;
-var numberDeleted = 0;
-
-// Delete all databases for the test ahead of time.
-var databasePrefix = "large-number-of-inserts-DB-";
-for (var i = 0; i < iterationCount + 1; ++i) {
-    indexedDB.deleteDatabase(databasePrefix + i)._onsuccess_ = function() {
-        if (++numberDeleted == iterationCount)
-            startIteration();
-    }
-}
-
-var testGenerator = null;
-var db = null;
-var currentIteration = 0;
-
-PerfTestRunner.prepareToMeasureValuesAsync({
-    customIterationCount: iterationCount,
-    unit: 'ms',
-    done: function () {
-        db = null;
-        testGenerator = null;
-        PerfTestRunner.gc();
-        ++currentIteration;
-    }
-});
-
-function startIteration()
-{
-    testGenerator = runIteration();
-    nextStep();
-}
-
-function nextStep()
-{
-    testGenerator.next();
-}
-
-var numberOfObjects = 100000;
-var objectsToInsert = new Array(numberOfObjects);
-for (var i = 0; i < numberOfObjects; ++i) {
-    objectsToInsert[i] = { data: Math.random() };
-    objectsToInsert[i].id = 'object_' + i;
-}
-
-function *runIteration()
-{
-    var openRequest = indexedDB.open(databasePrefix + currentIteration);
-    openRequest._onupgradeneeded_ = function(event) {
-        db = event.target.result;
-        db.createObjectStore('objects', {keyPath: 'id'});
-    }
-    openRequest._onsuccess_ = nextStep;
-
-    yield;
-
-    var startTime = PerfTestRunner.now();
-
-    var objectStore = db.transaction('objects', 'readwrite').objectStore('objects');
-    objectStore.transaction._oncomplete_ = nextStep;
-    for (var i = 0; i < numberOfObjects; ++i)
-        objectStore.put(objectsToInsert[i]);
-
-    yield;
-
-    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
-        return;
-
-    setTimeout(startIteration, 0);
-}
-
-</script>
-</body>
-</html>

Deleted: trunk/PerformanceTests/IndexedDB/large-string-keys.html (248946 => 248947)


--- trunk/PerformanceTests/IndexedDB/large-string-keys.html	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/IndexedDB/large-string-keys.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -1,83 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<script>
-
-var iterationCount = 20;
-var numberDeleted = 0;
-
-// Delete all databases for the test ahead of time.
-var databasePrefix = "large-string-keys-DB-";
-for (var i = 0; i < iterationCount + 1; ++i) {
-    indexedDB.deleteDatabase(databasePrefix + i)._onsuccess_ = function() {
-        if (++numberDeleted == iterationCount)
-            startIteration();
-    }
-}
-
-var testGenerator = null;
-var db = null;
-var currentIteration = 0;
-
-PerfTestRunner.prepareToMeasureValuesAsync({
-    customIterationCount: iterationCount,
-    unit: 'ms',
-    done: function () {
-        db = null;
-        testGenerator = null;
-        PerfTestRunner.gc();
-        ++currentIteration;
-    }
-});
-
-function startIteration()
-{
-    testGenerator = runIteration();
-    nextStep();
-}
-
-function nextStep()
-{
-    testGenerator.next();
-}
-
-var baseString;
-for (var i = 0; i < 100000; ++i)
-    baseString += "abcdefghijklmnopqrstuvwxyz";
-
-var numberOfInserts = 10;
-var array = new Array(numberOfInserts);
-for (var i = 0; i < numberOfInserts; ++i)
-    array[i] = baseString + i;
-
-function *runIteration()
-{
-    var openRequest = indexedDB.open(databasePrefix + currentIteration);
-    openRequest._onupgradeneeded_ = function(event) {
-        db = event.target.result;
-        db.createObjectStore('arrays');
-    }
-    openRequest._onsuccess_ = nextStep;
-
-    yield;
-
-    var startTime = PerfTestRunner.now();
-
-    var objectStore = db.transaction('arrays', 'readwrite').objectStore('arrays');
-    objectStore.transaction._oncomplete_ = nextStep;
-
-    for (var i = 0; i < numberOfInserts; ++i)
-        objectStore.put("Some value!!!", array[i]);
-
-    yield;
-
-    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
-        return;
-
-    setTimeout(startIteration, 0);
-}
-
-</script>
-</body>
-</html>

Deleted: trunk/PerformanceTests/IndexedDB/objectstore-cursor.html (248946 => 248947)


--- trunk/PerformanceTests/IndexedDB/objectstore-cursor.html	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/IndexedDB/objectstore-cursor.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -1,82 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<script>
-
-var iterationCount = 10;
-var numberDeleted = 0;
-// Delete all databases for the test ahead of time.
-var databaseName = "objectstore-cursor-DB";
-indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
-    startIteration();
-}
-
-var testGenerator = null;
-var db = null;
-var currentIteration = 0;
-
-PerfTestRunner.prepareToMeasureValuesAsync({
-    customIterationCount: iterationCount,
-    unit: 'ms',
-    done: function () {
-        db = null;
-        testGenerator = null;
-        PerfTestRunner.gc();
-        ++currentIteration;
-    }
-});
-
-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');
-        for (var i = 0; i < 25000; ++i) {
-            var suffix = ("0000000" + i).slice(-7);
-            objectStore.put("bar_value_" + suffix, "foo_key_" + suffix);
-        }
-    }
-    openRequest._onsuccess_ = nextStep;
-
-    yield;
-
-    var startTime = PerfTestRunner.now();
-    var cursorRequest = db.transaction('store').objectStore('store').openCursor();
-    var cursorIteration = 0;
-    cursorRequest._onsuccess_ = function(event) {
-        var cursor = event.target.result;
-        if (cursor) {
-            var suffix = ("0000000" + cursorIteration).slice(-7);
-            if (cursor.key != "foo_key_" + suffix)
-                alert("Incorrect value retrieved: " + cursor.key);
-            if (cursor.value != "bar_value_" + suffix)
-                alert("Incorrect value retrieved: " + cursor.key);
-            ++cursorIteration;
-            cursor.continue();
-        } else
-            nextStep();
-    };
-
-    yield;
-
-    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
-        return;
-
-    setTimeout(startIteration, 0);
-}
-</script>
-</body>
-</html>

Deleted: trunk/PerformanceTests/IndexedDB/objectstore-get.html (248946 => 248947)


--- trunk/PerformanceTests/IndexedDB/objectstore-get.html	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/IndexedDB/objectstore-get.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -1,81 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src=""
-<script>
-
-// Delete database(s) for the test ahead of time.
-var databaseName = "objectstore-get-DB";
-indexedDB.deleteDatabase(databaseName)._onsuccess_ = function() {
-    startIteration();
-}
-
-var testGenerator = null;
-var db = null;
-var transaction = null;
-
-PerfTestRunner.prepareToMeasureValuesAsync({
-    customIterationCount: 20,
-    unit: 'ms',
-    done: function () {
-        transaction = null;
-        db = null;
-        testGenerator = null;
-        PerfTestRunner.gc();
-    }
-});
-
-function startIteration()
-{
-    testGenerator = runIteration();
-    nextStep();
-}
-
-function nextStep()
-{
-    testGenerator.next();
-}
-
-var numberOfEntries = 5000;
-
-function *runIteration()
-{
-    var openRequest = indexedDB.open(databaseName);
-    openRequest._onupgradeneeded_ = function(event) {
-        db = event.target.result;
-        var objectStore = db.createObjectStore('store');
-        for (var i = 0; i < numberOfEntries; ++i)
-           objectStore.put("index" + i, i);
-    }
-    openRequest._onsuccess_ = nextStep;
-
-    yield;
-
-    var startTime = PerfTestRunner.now();
-
-    var objectStore = db.transaction('store').objectStore('store');
-    var completedGets = 0;
-    for (var i = 0; i < numberOfEntries; ++i)
-    {
-        
-        objectStore.get(i)._onsuccess_ = (function (j) {
-            return function(event) {
-                if (event.target.result != ("index" + j))
-                    alert("Expected 'index" + j + "', got '" + event.target.result + "'");
-
-                if (++completedGets == numberOfEntries)
-                    nextStep();
-            }
-        })(i);
-    }
-
-    yield;
-
-    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
-        return;
-
-    setTimeout(startIteration, 0);
-}
-</script>
-</body>
-</html>

Copied: trunk/PerformanceTests/IndexedDB/stress/large-array-keys.html (from rev 248946, trunk/PerformanceTests/IndexedDB/large-array-keys.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/stress/large-array-keys.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/stress/large-array-keys.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+var iterationCount = 20;
+var numberDeleted = 0;
+
+// Delete all databases for the test ahead of time.
+var databasePrefix = "large-array-keys-DB-";
+for (var i = 0; i < iterationCount + 1; ++i) {
+    indexedDB.deleteDatabase(databasePrefix + i)._onsuccess_ = function() {
+        if (++numberDeleted == iterationCount)
+            startIteration();
+    }
+}
+
+var testGenerator = null;
+var db = null;
+var currentIteration = 0;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: iterationCount,
+    unit: 'ms',
+    done: function () {
+        db = null;
+        testGenerator = null;
+        PerfTestRunner.gc();
+        ++currentIteration;
+    }
+});
+
+function startIteration()
+{
+    testGenerator = runIteration();
+    nextStep();
+}
+
+function nextStep()
+{
+    testGenerator.next();
+}
+
+function createSubArray(count)
+{
+    var array = new Array(count);
+    for (var i = 0; i < count; ++i) {
+        array[i] = createSubArray(count - 1);
+    }
+    return array;
+}
+
+var numberOfSubarrays = 6;
+var array = createSubArray(numberOfSubarrays);
+array.push("variant");
+
+function *runIteration()
+{
+    var openRequest = indexedDB.open(databasePrefix + currentIteration);
+    openRequest._onupgradeneeded_ = function(event) {
+        db = event.target.result;
+        db.createObjectStore('arrays');
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('arrays', 'readwrite').objectStore('arrays');
+    objectStore.transaction._oncomplete_ = nextStep;
+
+    var numberOfInserts = 100;
+    for (var i = 0; i < numberOfInserts; ++i) {
+        array[numberOfSubarrays] = i;
+        objectStore.put("Some value!!!", array);
+    }
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/stress/large-binary-keys.html (from rev 248946, trunk/PerformanceTests/IndexedDB/large-binary-keys.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/stress/large-binary-keys.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/stress/large-binary-keys.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+var iterationCount = 20;
+var numberDeleted = 0;
+
+// Delete all databases for the test ahead of time.
+var databasePrefix = "large-string-keys-DB-";
+for (var i = 0; i < iterationCount + 1; ++i) {
+    indexedDB.deleteDatabase(databasePrefix + i)._onsuccess_ = function() {
+        if (++numberDeleted == iterationCount)
+            startIteration();
+    }
+}
+
+var testGenerator = null;
+var db = null;
+var currentIteration = 0;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: iterationCount,
+    unit: 'ms',
+    done: function () {
+        db = null;
+        testGenerator = null;
+        PerfTestRunner.gc();
+        ++currentIteration;
+    }
+});
+
+function startIteration()
+{
+    testGenerator = runIteration();
+    nextStep();
+}
+
+function nextStep()
+{
+    testGenerator.next();
+}
+
+var baseString;
+for (var i = 0; i < 100000; ++i)
+    baseString += "abcdefghijklmnopqrstuvwxyz";
+
+var numberOfInserts = 50;
+var array = new Array(numberOfInserts);
+for (var i = 0; i < numberOfInserts; ++i) {
+    array[i] = new ArrayBuffer(2097152);
+    var view = new Int32Array(array[i]);
+    view[view.length - 1] = i;
+}
+
+function *runIteration()
+{
+    var openRequest = indexedDB.open(databasePrefix + currentIteration);
+    openRequest._onupgradeneeded_ = function(event) {
+        db = event.target.result;
+        db.createObjectStore('arrays');
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('arrays', 'readwrite').objectStore('arrays');
+    objectStore.transaction._oncomplete_ = nextStep;
+
+    for (var i = 0; i < numberOfInserts; ++i)
+        objectStore.put("Some value!!!", array[i]);
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/stress/large-number-of-inserts-responsiveness.html (from rev 248946, trunk/PerformanceTests/IndexedDB/large-number-of-inserts-responsiveness.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/stress/large-number-of-inserts-responsiveness.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/stress/large-number-of-inserts-responsiveness.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+var iterationCount = 20;
+var numberDeleted = 0;
+
+// Delete all databases for the test ahead of time.
+var databasePrefix = "large-number-of-inserts-responsiveness-DB-";
+for (var i = 0; i < iterationCount + 1; ++i) {
+    indexedDB.deleteDatabase(databasePrefix + i)._onsuccess_ = function() {
+        if (++numberDeleted == iterationCount)
+            startIteration();
+    }
+}
+
+var testGenerator = null;
+var db = null;
+var currentIteration = 0;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: iterationCount,
+    unit: 'ms',
+    done: function () {
+        db = null;
+        largestDelay = 0;
+        testGenerator = null;
+        PerfTestRunner.gc();
+        ++currentIteration;
+    }
+});
+
+function startIteration()
+{
+    testGenerator = runIteration();
+    nextStep();
+}
+
+function nextStep()
+{
+    testGenerator.next();
+}
+
+var numberOfObjects = 50000;
+var objectsToInsert = new Array(numberOfObjects);
+for (var i = 0; i < numberOfObjects; ++i) {
+    objectsToInsert[i] = { data: Math.random() };
+    objectsToInsert[i].id = 'object_' + i;
+}
+
+function *runIteration()
+{
+    var openRequest = indexedDB.open(databasePrefix + currentIteration);
+    openRequest._onupgradeneeded_ = function(event) {
+        db = event.target.result;
+        db.createObjectStore('objects', {keyPath: 'id'});
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var objectStore = db.transaction('objects', 'readwrite').objectStore('objects');
+    objectStore.transaction._oncomplete_ = nextStep;
+    for (var i = 0; i < numberOfObjects; ++i)
+        objectStore.put(objectsToInsert[i]);
+
+    PerfTestRunner.startCheckingResponsiveness();
+
+    yield;
+
+    PerfTestRunner.stopCheckingResponsiveness();
+    
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.longestResponsivenessDelay()))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/stress/large-number-of-inserts.html (from rev 248946, trunk/PerformanceTests/IndexedDB/large-number-of-inserts.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/stress/large-number-of-inserts.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/stress/large-number-of-inserts.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+var iterationCount = 20;
+var numberDeleted = 0;
+
+// Delete all databases for the test ahead of time.
+var databasePrefix = "large-number-of-inserts-DB-";
+for (var i = 0; i < iterationCount + 1; ++i) {
+    indexedDB.deleteDatabase(databasePrefix + i)._onsuccess_ = function() {
+        if (++numberDeleted == iterationCount)
+            startIteration();
+    }
+}
+
+var testGenerator = null;
+var db = null;
+var currentIteration = 0;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: iterationCount,
+    unit: 'ms',
+    done: function () {
+        db = null;
+        testGenerator = null;
+        PerfTestRunner.gc();
+        ++currentIteration;
+    }
+});
+
+function startIteration()
+{
+    testGenerator = runIteration();
+    nextStep();
+}
+
+function nextStep()
+{
+    testGenerator.next();
+}
+
+var numberOfObjects = 100000;
+var objectsToInsert = new Array(numberOfObjects);
+for (var i = 0; i < numberOfObjects; ++i) {
+    objectsToInsert[i] = { data: Math.random() };
+    objectsToInsert[i].id = 'object_' + i;
+}
+
+function *runIteration()
+{
+    var openRequest = indexedDB.open(databasePrefix + currentIteration);
+    openRequest._onupgradeneeded_ = function(event) {
+        db = event.target.result;
+        db.createObjectStore('objects', {keyPath: 'id'});
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('objects', 'readwrite').objectStore('objects');
+    objectStore.transaction._oncomplete_ = nextStep;
+    for (var i = 0; i < numberOfObjects; ++i)
+        objectStore.put(objectsToInsert[i]);
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+
+</script>
+</body>
+</html>

Copied: trunk/PerformanceTests/IndexedDB/stress/large-string-keys.html (from rev 248946, trunk/PerformanceTests/IndexedDB/large-string-keys.html) (0 => 248947)


--- trunk/PerformanceTests/IndexedDB/stress/large-string-keys.html	                        (rev 0)
+++ trunk/PerformanceTests/IndexedDB/stress/large-string-keys.html	2019-08-21 17:21:27 UTC (rev 248947)
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+var iterationCount = 20;
+var numberDeleted = 0;
+
+// Delete all databases for the test ahead of time.
+var databasePrefix = "large-string-keys-DB-";
+for (var i = 0; i < iterationCount + 1; ++i) {
+    indexedDB.deleteDatabase(databasePrefix + i)._onsuccess_ = function() {
+        if (++numberDeleted == iterationCount)
+            startIteration();
+    }
+}
+
+var testGenerator = null;
+var db = null;
+var currentIteration = 0;
+
+PerfTestRunner.prepareToMeasureValuesAsync({
+    customIterationCount: iterationCount,
+    unit: 'ms',
+    done: function () {
+        db = null;
+        testGenerator = null;
+        PerfTestRunner.gc();
+        ++currentIteration;
+    }
+});
+
+function startIteration()
+{
+    testGenerator = runIteration();
+    nextStep();
+}
+
+function nextStep()
+{
+    testGenerator.next();
+}
+
+var baseString;
+for (var i = 0; i < 100000; ++i)
+    baseString += "abcdefghijklmnopqrstuvwxyz";
+
+var numberOfInserts = 10;
+var array = new Array(numberOfInserts);
+for (var i = 0; i < numberOfInserts; ++i)
+    array[i] = baseString + i;
+
+function *runIteration()
+{
+    var openRequest = indexedDB.open(databasePrefix + currentIteration);
+    openRequest._onupgradeneeded_ = function(event) {
+        db = event.target.result;
+        db.createObjectStore('arrays');
+    }
+    openRequest._onsuccess_ = nextStep;
+
+    yield;
+
+    var startTime = PerfTestRunner.now();
+
+    var objectStore = db.transaction('arrays', 'readwrite').objectStore('arrays');
+    objectStore.transaction._oncomplete_ = nextStep;
+
+    for (var i = 0; i < numberOfInserts; ++i)
+        objectStore.put("Some value!!!", array[i]);
+
+    yield;
+
+    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
+        return;
+
+    setTimeout(startIteration, 0);
+}
+
+</script>
+</body>
+</html>

Modified: trunk/PerformanceTests/Skipped (248946 => 248947)


--- trunk/PerformanceTests/Skipped	2019-08-21 17:08:47 UTC (rev 248946)
+++ trunk/PerformanceTests/Skipped	2019-08-21 17:21:27 UTC (rev 248947)
@@ -114,10 +114,10 @@
 MediaTime/
 
 # Bugs 167622, 167637, 167638 and 167640 - Some IndexedDB test deadlock on the GTK+ perf bot.
-[GTK] IndexedDB/index-get.html
-[GTK] IndexedDB/large-number-of-inserts.html
-[GTK] IndexedDB/objectstore-cursor.html
-[GTK] IndexedDB/objectstore-get.html
+[GTK] IndexedDB/basic/index-get.html
+[GTK] IndexedDB/stress/large-number-of-inserts.html
+[GTK] IndexedDB/basic/objectstore-cursor.html
+[GTK] IndexedDB/basic/objectstore-get.html
 
 # Bug 167623 - [GTK][EFL] Performance test IndexedDB/large-number-of-inserts-responsiveness.html timeouts.
 [EFL] IndexedDB/large-number-of-inserts-responsiveness.html
@@ -124,7 +124,7 @@
 [GTK] IndexedDB/large-number-of-inserts-responsiveness.html
 
 # Bug 167616 - Performance test IndexedDB/large-binary-keys.html creates a DB of more than 6GB and takes more than 10 minutes to run.
-[GTK] IndexedDB/large-binary-keys.html
+[GTK] IndexedDB/stress/large-binary-keys.html
 
 # REGRESSION (r242911?): High Sierra Release WK2 Perf bot timing out while running IndexedDB/large-number-of-inserts.html
-IndexedDB/large-number-of-inserts.html
+IndexedDB/stress/large-number-of-inserts.html
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to