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