From 65582ba98d9707d7af33a21e5bf08c212a53c681 Mon Sep 17 00:00:00 2001 From: Issack John Date: Wed, 6 May 2026 08:53:00 -0700 Subject: [PATCH 1/3] Address IndexedDB deletion review comments --- .../javascript-wc-indexeddb/README.md | 1 + .../dist/src/storage/base-storage-manager.js | 5 ++- .../dist/src/workload-test.mjs | 44 +++++++++++-------- .../src/storage/base-storage-manager.js | 5 ++- .../src/workload-test.mjs | 44 +++++++++++-------- 5 files changed, 61 insertions(+), 38 deletions(-) diff --git a/experimental/javascript-wc-indexeddb/README.md b/experimental/javascript-wc-indexeddb/README.md index 57a74c9ba..25da1b460 100644 --- a/experimental/javascript-wc-indexeddb/README.md +++ b/experimental/javascript-wc-indexeddb/README.md @@ -28,6 +28,7 @@ The measured time stops when the last item has been marked as completed, it does The benchmarks runs a loop of 10 iterations. On each iteration the 10 items in the current page are deleted (from the DOM and the database), and the "Previous page" button is clicked. When moving to the previous page the previous 10 items are loaded from the database, this is included in the measured time. +Each page waits for its delete operations to finish before loading the previous page so the delete/write and read work is ordered consistently. ## Storage Options diff --git a/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js b/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js index eab407d64..b100b8364 100644 --- a/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js +++ b/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js @@ -36,7 +36,10 @@ class BaseStorageManager { } _handleRemoveComplete() { - if (++this.finishedDeletions === numberOfItemsToAdd) { + const deletedItems = ++this.finishedDeletions; + window.dispatchEvent(new CustomEvent(promisesEventsNames.deleteItem, { detail: { deletedItems } })); + + if (deletedItems === numberOfItemsToAdd) { this.db.close(); window.dispatchEvent(new CustomEvent(promisesEventsNames.delete, {})); } diff --git a/experimental/javascript-wc-indexeddb/dist/src/workload-test.mjs b/experimental/javascript-wc-indexeddb/dist/src/workload-test.mjs index 47f5a3364..841bf3bc8 100644 --- a/experimental/javascript-wc-indexeddb/dist/src/workload-test.mjs +++ b/experimental/javascript-wc-indexeddb/dist/src/workload-test.mjs @@ -10,6 +10,7 @@ export const promisesEventsNames = { add: "db-add-completed", toggle: "db-toggle-completed", delete: "db-delete-completed", + deleteItem: "db-delete-item-completed", }; const addPromise = new Promise((resolve) => { @@ -18,9 +19,26 @@ const addPromise = new Promise((resolve) => { const togglePromise = new Promise((resolve) => { window.addEventListener(promisesEventsNames.toggle, () => resolve()); }); -const deletePromise = new Promise((resolve) => { - window.addEventListener(promisesEventsNames.delete, () => resolve()); -}); + +function waitForPreviousPageLoaded() { + return new Promise((resolve) => { + window.addEventListener("previous-page-loaded", resolve, { once: true }); + }); +} + +function waitForDeletedItemsCount(expectedDeletedItems) { + return new Promise((resolve) => { + const handleDeleteItemCompleted = (event) => { + if (event.detail.deletedItems < expectedDeletedItems) + return; + + window.removeEventListener(promisesEventsNames.deleteItem, handleDeleteItemCompleted); + resolve(); + }; + + window.addEventListener(promisesEventsNames.deleteItem, handleDeleteItemCompleted); + }); +} const suites = { default: new BenchmarkSuite("indexeddb", [ @@ -65,34 +83,24 @@ const suites = { new BenchmarkStep("DeletingAllItems", async () => { const numberOfItemsPerIteration = 10; const numberOfIterations = 10; - function iterationFinishedListener() { - iterationFinishedListener.promiseResolve(); - } - window.addEventListener("previous-page-loaded", iterationFinishedListener); for (let j = 0; j < numberOfIterations; j++) { - const iterationFinishedPromise = new Promise((resolve) => { - iterationFinishedListener.promiseResolve = resolve; - }); + const expectedDeletedItems = (j + 1) * numberOfItemsPerIteration; + const deletedItemsPromise = waitForDeletedItemsCount(expectedDeletedItems); const todoList = document.querySelector("todo-app").shadowRoot.querySelector("todo-list"); const items = todoList.shadowRoot.querySelectorAll("todo-item"); for (let i = numberOfItemsPerIteration - 1; i >= 0; i--) { const item = items[i].shadowRoot.querySelector(".remove-todo-button"); item.click(); } + await deletedItemsPromise; if (j < 9) { const previousPageButton = document.querySelector("todo-app").shadowRoot.querySelector("todo-bottombar").shadowRoot.querySelector(".previous-page-button"); + const previousPageLoadedPromise = waitForPreviousPageLoaded(); previousPageButton.click(); - await iterationFinishedPromise; + await previousPageLoadedPromise; } } }), - new BenchmarkStep( - "FinishDeletingItemsFromDB", - async () => { - await deletePromise; - }, - /* ignoreResult = */ true - ), ]), }; diff --git a/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js b/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js index eab407d64..b100b8364 100644 --- a/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js +++ b/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js @@ -36,7 +36,10 @@ class BaseStorageManager { } _handleRemoveComplete() { - if (++this.finishedDeletions === numberOfItemsToAdd) { + const deletedItems = ++this.finishedDeletions; + window.dispatchEvent(new CustomEvent(promisesEventsNames.deleteItem, { detail: { deletedItems } })); + + if (deletedItems === numberOfItemsToAdd) { this.db.close(); window.dispatchEvent(new CustomEvent(promisesEventsNames.delete, {})); } diff --git a/experimental/javascript-wc-indexeddb/src/workload-test.mjs b/experimental/javascript-wc-indexeddb/src/workload-test.mjs index 66784deec..28de8d836 100644 --- a/experimental/javascript-wc-indexeddb/src/workload-test.mjs +++ b/experimental/javascript-wc-indexeddb/src/workload-test.mjs @@ -10,6 +10,7 @@ export const promisesEventsNames = { add: "db-add-completed", toggle: "db-toggle-completed", delete: "db-delete-completed", + deleteItem: "db-delete-item-completed", }; const addPromise = new Promise((resolve) => { @@ -18,9 +19,26 @@ const addPromise = new Promise((resolve) => { const togglePromise = new Promise((resolve) => { window.addEventListener(promisesEventsNames.toggle, () => resolve()); }); -const deletePromise = new Promise((resolve) => { - window.addEventListener(promisesEventsNames.delete, () => resolve()); -}); + +function waitForPreviousPageLoaded() { + return new Promise((resolve) => { + window.addEventListener("previous-page-loaded", resolve, { once: true }); + }); +} + +function waitForDeletedItemsCount(expectedDeletedItems) { + return new Promise((resolve) => { + const handleDeleteItemCompleted = (event) => { + if (event.detail.deletedItems < expectedDeletedItems) + return; + + window.removeEventListener(promisesEventsNames.deleteItem, handleDeleteItemCompleted); + resolve(); + }; + + window.addEventListener(promisesEventsNames.deleteItem, handleDeleteItemCompleted); + }); +} const suites = { default: new BenchmarkSuite("indexeddb", [ @@ -65,34 +83,24 @@ const suites = { new BenchmarkStep("DeletingAllItems", async () => { const numberOfItemsPerIteration = 10; const numberOfIterations = 10; - function iterationFinishedListener() { - iterationFinishedListener.promiseResolve(); - } - window.addEventListener("previous-page-loaded", iterationFinishedListener); for (let j = 0; j < numberOfIterations; j++) { - const iterationFinishedPromise = new Promise((resolve) => { - iterationFinishedListener.promiseResolve = resolve; - }); + const expectedDeletedItems = (j + 1) * numberOfItemsPerIteration; + const deletedItemsPromise = waitForDeletedItemsCount(expectedDeletedItems); const todoList = document.querySelector("todo-app").shadowRoot.querySelector("todo-list"); const items = todoList.shadowRoot.querySelectorAll("todo-item"); for (let i = numberOfItemsPerIteration - 1; i >= 0; i--) { const item = items[i].shadowRoot.querySelector(".remove-todo-button"); item.click(); } + await deletedItemsPromise; if (j < 9) { const previousPageButton = document.querySelector("todo-app").shadowRoot.querySelector("todo-bottombar").shadowRoot.querySelector(".previous-page-button"); + const previousPageLoadedPromise = waitForPreviousPageLoaded(); previousPageButton.click(); - await iterationFinishedPromise; + await previousPageLoadedPromise; } } }), - new BenchmarkStep( - "FinishDeletingItemsFromDB", - async () => { - await deletePromise; - }, - /* ignoreResult = */ true - ), ]), }; From 49264d5eef89a9fa8d0f5212127a0d40abe6bc8e Mon Sep 17 00:00:00 2001 From: Issack John Date: Wed, 6 May 2026 13:20:46 -0700 Subject: [PATCH 2/3] Reset IndexedDB completion counters on DB init --- .../dist/src/storage/base-storage-manager.js | 14 +++++++++----- .../dist/src/storage/dexieDB-manager.js | 1 + .../dist/src/storage/indexedDB-manager.js | 1 + .../src/storage/base-storage-manager.js | 14 +++++++++----- .../src/storage/dexieDB-manager.js | 1 + .../src/storage/indexedDB-manager.js | 1 + 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js b/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js index b100b8364..e5904f1a8 100644 --- a/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js +++ b/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js @@ -7,21 +7,25 @@ class BaseStorageManager { this.dbName = "todoDB"; this.storeName = "todos"; this.db = null; - this.finishedAdditions = 0; - this.finishedToggles = 0; - this.finishedDeletions = 0; + this._resetCompletionCounters(); this.initDB().then(() => { this._dispatchReadyEvent(); }); } + _resetCompletionCounters() { + this.finishedAdditions = 0; + this.finishedToggles = 0; + this.finishedDeletions = 0; + } + _ensureDbConnection() { if (!this.db) throw new Error("Database connection is not established"); } - // When runner in Speedometer, additions, completions and removals are - // triggered synchonously in a tight loop, increasing the pending counters. + // Speedometer triggers additions, completions, and removals synchronously + // in a tight loop, increasing the pending counters. // The completion events are dispatched only when all pending operations // of that type are complete. diff --git a/experimental/javascript-wc-indexeddb/dist/src/storage/dexieDB-manager.js b/experimental/javascript-wc-indexeddb/dist/src/storage/dexieDB-manager.js index 45b8526cf..99cb6cb5d 100644 --- a/experimental/javascript-wc-indexeddb/dist/src/storage/dexieDB-manager.js +++ b/experimental/javascript-wc-indexeddb/dist/src/storage/dexieDB-manager.js @@ -9,6 +9,7 @@ class DexieDBManager extends BaseStorageManager { async initDB() { // Delete the existing database first for clean state await Dexie.delete(this.dbName); + this._resetCompletionCounters(); this.db = new Dexie(this.dbName); diff --git a/experimental/javascript-wc-indexeddb/dist/src/storage/indexedDB-manager.js b/experimental/javascript-wc-indexeddb/dist/src/storage/indexedDB-manager.js index 500d05832..a00ce3bb9 100644 --- a/experimental/javascript-wc-indexeddb/dist/src/storage/indexedDB-manager.js +++ b/experimental/javascript-wc-indexeddb/dist/src/storage/indexedDB-manager.js @@ -11,6 +11,7 @@ class IndexedDBManager extends BaseStorageManager { }; deleteRequest.onsuccess = () => { + this._resetCompletionCounters(); this.openDatabase(resolve, reject); }; diff --git a/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js b/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js index b100b8364..e5904f1a8 100644 --- a/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js +++ b/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js @@ -7,21 +7,25 @@ class BaseStorageManager { this.dbName = "todoDB"; this.storeName = "todos"; this.db = null; - this.finishedAdditions = 0; - this.finishedToggles = 0; - this.finishedDeletions = 0; + this._resetCompletionCounters(); this.initDB().then(() => { this._dispatchReadyEvent(); }); } + _resetCompletionCounters() { + this.finishedAdditions = 0; + this.finishedToggles = 0; + this.finishedDeletions = 0; + } + _ensureDbConnection() { if (!this.db) throw new Error("Database connection is not established"); } - // When runner in Speedometer, additions, completions and removals are - // triggered synchonously in a tight loop, increasing the pending counters. + // Speedometer triggers additions, completions, and removals synchronously + // in a tight loop, increasing the pending counters. // The completion events are dispatched only when all pending operations // of that type are complete. diff --git a/experimental/javascript-wc-indexeddb/src/storage/dexieDB-manager.js b/experimental/javascript-wc-indexeddb/src/storage/dexieDB-manager.js index 529ac668f..f00ed55e0 100644 --- a/experimental/javascript-wc-indexeddb/src/storage/dexieDB-manager.js +++ b/experimental/javascript-wc-indexeddb/src/storage/dexieDB-manager.js @@ -9,6 +9,7 @@ class DexieDBManager extends BaseStorageManager { async initDB() { // Delete the existing database first for clean state await Dexie.delete(this.dbName); + this._resetCompletionCounters(); this.db = new Dexie(this.dbName); diff --git a/experimental/javascript-wc-indexeddb/src/storage/indexedDB-manager.js b/experimental/javascript-wc-indexeddb/src/storage/indexedDB-manager.js index 500d05832..a00ce3bb9 100644 --- a/experimental/javascript-wc-indexeddb/src/storage/indexedDB-manager.js +++ b/experimental/javascript-wc-indexeddb/src/storage/indexedDB-manager.js @@ -11,6 +11,7 @@ class IndexedDBManager extends BaseStorageManager { }; deleteRequest.onsuccess = () => { + this._resetCompletionCounters(); this.openDatabase(resolve, reject); }; From 0be02ba9a0c1fd03274dd8d585c656ce327040ae Mon Sep 17 00:00:00 2001 From: Issack John Date: Thu, 7 May 2026 14:21:51 -0700 Subject: [PATCH 3/3] Narrow IndexedDB review fix scope --- .../javascript-wc-indexeddb/README.md | 1 - .../dist/src/storage/base-storage-manager.js | 19 ++++--------- .../dist/src/storage/dexieDB-manager.js | 1 - .../dist/src/storage/indexedDB-manager.js | 1 - .../dist/src/workload-test.mjs | 28 +++++++------------ .../src/storage/base-storage-manager.js | 19 ++++--------- .../src/storage/dexieDB-manager.js | 1 - .../src/storage/indexedDB-manager.js | 1 - .../src/workload-test.mjs | 28 +++++++------------ 9 files changed, 32 insertions(+), 67 deletions(-) diff --git a/experimental/javascript-wc-indexeddb/README.md b/experimental/javascript-wc-indexeddb/README.md index 25da1b460..57a74c9ba 100644 --- a/experimental/javascript-wc-indexeddb/README.md +++ b/experimental/javascript-wc-indexeddb/README.md @@ -28,7 +28,6 @@ The measured time stops when the last item has been marked as completed, it does The benchmarks runs a loop of 10 iterations. On each iteration the 10 items in the current page are deleted (from the DOM and the database), and the "Previous page" button is clicked. When moving to the previous page the previous 10 items are loaded from the database, this is included in the measured time. -Each page waits for its delete operations to finish before loading the previous page so the delete/write and read work is ordered consistently. ## Storage Options diff --git a/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js b/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js index e5904f1a8..eab407d64 100644 --- a/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js +++ b/experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js @@ -7,16 +7,12 @@ class BaseStorageManager { this.dbName = "todoDB"; this.storeName = "todos"; this.db = null; - this._resetCompletionCounters(); - this.initDB().then(() => { - this._dispatchReadyEvent(); - }); - } - - _resetCompletionCounters() { this.finishedAdditions = 0; this.finishedToggles = 0; this.finishedDeletions = 0; + this.initDB().then(() => { + this._dispatchReadyEvent(); + }); } _ensureDbConnection() { @@ -24,8 +20,8 @@ class BaseStorageManager { throw new Error("Database connection is not established"); } - // Speedometer triggers additions, completions, and removals synchronously - // in a tight loop, increasing the pending counters. + // When runner in Speedometer, additions, completions and removals are + // triggered synchonously in a tight loop, increasing the pending counters. // The completion events are dispatched only when all pending operations // of that type are complete. @@ -40,10 +36,7 @@ class BaseStorageManager { } _handleRemoveComplete() { - const deletedItems = ++this.finishedDeletions; - window.dispatchEvent(new CustomEvent(promisesEventsNames.deleteItem, { detail: { deletedItems } })); - - if (deletedItems === numberOfItemsToAdd) { + if (++this.finishedDeletions === numberOfItemsToAdd) { this.db.close(); window.dispatchEvent(new CustomEvent(promisesEventsNames.delete, {})); } diff --git a/experimental/javascript-wc-indexeddb/dist/src/storage/dexieDB-manager.js b/experimental/javascript-wc-indexeddb/dist/src/storage/dexieDB-manager.js index 99cb6cb5d..45b8526cf 100644 --- a/experimental/javascript-wc-indexeddb/dist/src/storage/dexieDB-manager.js +++ b/experimental/javascript-wc-indexeddb/dist/src/storage/dexieDB-manager.js @@ -9,7 +9,6 @@ class DexieDBManager extends BaseStorageManager { async initDB() { // Delete the existing database first for clean state await Dexie.delete(this.dbName); - this._resetCompletionCounters(); this.db = new Dexie(this.dbName); diff --git a/experimental/javascript-wc-indexeddb/dist/src/storage/indexedDB-manager.js b/experimental/javascript-wc-indexeddb/dist/src/storage/indexedDB-manager.js index a00ce3bb9..500d05832 100644 --- a/experimental/javascript-wc-indexeddb/dist/src/storage/indexedDB-manager.js +++ b/experimental/javascript-wc-indexeddb/dist/src/storage/indexedDB-manager.js @@ -11,7 +11,6 @@ class IndexedDBManager extends BaseStorageManager { }; deleteRequest.onsuccess = () => { - this._resetCompletionCounters(); this.openDatabase(resolve, reject); }; diff --git a/experimental/javascript-wc-indexeddb/dist/src/workload-test.mjs b/experimental/javascript-wc-indexeddb/dist/src/workload-test.mjs index 841bf3bc8..5db87969b 100644 --- a/experimental/javascript-wc-indexeddb/dist/src/workload-test.mjs +++ b/experimental/javascript-wc-indexeddb/dist/src/workload-test.mjs @@ -10,7 +10,6 @@ export const promisesEventsNames = { add: "db-add-completed", toggle: "db-toggle-completed", delete: "db-delete-completed", - deleteItem: "db-delete-item-completed", }; const addPromise = new Promise((resolve) => { @@ -19,6 +18,9 @@ const addPromise = new Promise((resolve) => { const togglePromise = new Promise((resolve) => { window.addEventListener(promisesEventsNames.toggle, () => resolve()); }); +const deletePromise = new Promise((resolve) => { + window.addEventListener(promisesEventsNames.delete, () => resolve()); +}); function waitForPreviousPageLoaded() { return new Promise((resolve) => { @@ -26,20 +28,6 @@ function waitForPreviousPageLoaded() { }); } -function waitForDeletedItemsCount(expectedDeletedItems) { - return new Promise((resolve) => { - const handleDeleteItemCompleted = (event) => { - if (event.detail.deletedItems < expectedDeletedItems) - return; - - window.removeEventListener(promisesEventsNames.deleteItem, handleDeleteItemCompleted); - resolve(); - }; - - window.addEventListener(promisesEventsNames.deleteItem, handleDeleteItemCompleted); - }); -} - const suites = { default: new BenchmarkSuite("indexeddb", [ new BenchmarkStep(`Adding${numberOfItemsToAdd}Items`, async () => { @@ -84,15 +72,12 @@ const suites = { const numberOfItemsPerIteration = 10; const numberOfIterations = 10; for (let j = 0; j < numberOfIterations; j++) { - const expectedDeletedItems = (j + 1) * numberOfItemsPerIteration; - const deletedItemsPromise = waitForDeletedItemsCount(expectedDeletedItems); const todoList = document.querySelector("todo-app").shadowRoot.querySelector("todo-list"); const items = todoList.shadowRoot.querySelectorAll("todo-item"); for (let i = numberOfItemsPerIteration - 1; i >= 0; i--) { const item = items[i].shadowRoot.querySelector(".remove-todo-button"); item.click(); } - await deletedItemsPromise; if (j < 9) { const previousPageButton = document.querySelector("todo-app").shadowRoot.querySelector("todo-bottombar").shadowRoot.querySelector(".previous-page-button"); const previousPageLoadedPromise = waitForPreviousPageLoaded(); @@ -101,6 +86,13 @@ const suites = { } } }), + new BenchmarkStep( + "FinishDeletingItemsFromDB", + async () => { + await deletePromise; + }, + /* ignoreResult = */ true + ), ]), }; diff --git a/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js b/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js index e5904f1a8..eab407d64 100644 --- a/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js +++ b/experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js @@ -7,16 +7,12 @@ class BaseStorageManager { this.dbName = "todoDB"; this.storeName = "todos"; this.db = null; - this._resetCompletionCounters(); - this.initDB().then(() => { - this._dispatchReadyEvent(); - }); - } - - _resetCompletionCounters() { this.finishedAdditions = 0; this.finishedToggles = 0; this.finishedDeletions = 0; + this.initDB().then(() => { + this._dispatchReadyEvent(); + }); } _ensureDbConnection() { @@ -24,8 +20,8 @@ class BaseStorageManager { throw new Error("Database connection is not established"); } - // Speedometer triggers additions, completions, and removals synchronously - // in a tight loop, increasing the pending counters. + // When runner in Speedometer, additions, completions and removals are + // triggered synchonously in a tight loop, increasing the pending counters. // The completion events are dispatched only when all pending operations // of that type are complete. @@ -40,10 +36,7 @@ class BaseStorageManager { } _handleRemoveComplete() { - const deletedItems = ++this.finishedDeletions; - window.dispatchEvent(new CustomEvent(promisesEventsNames.deleteItem, { detail: { deletedItems } })); - - if (deletedItems === numberOfItemsToAdd) { + if (++this.finishedDeletions === numberOfItemsToAdd) { this.db.close(); window.dispatchEvent(new CustomEvent(promisesEventsNames.delete, {})); } diff --git a/experimental/javascript-wc-indexeddb/src/storage/dexieDB-manager.js b/experimental/javascript-wc-indexeddb/src/storage/dexieDB-manager.js index f00ed55e0..529ac668f 100644 --- a/experimental/javascript-wc-indexeddb/src/storage/dexieDB-manager.js +++ b/experimental/javascript-wc-indexeddb/src/storage/dexieDB-manager.js @@ -9,7 +9,6 @@ class DexieDBManager extends BaseStorageManager { async initDB() { // Delete the existing database first for clean state await Dexie.delete(this.dbName); - this._resetCompletionCounters(); this.db = new Dexie(this.dbName); diff --git a/experimental/javascript-wc-indexeddb/src/storage/indexedDB-manager.js b/experimental/javascript-wc-indexeddb/src/storage/indexedDB-manager.js index a00ce3bb9..500d05832 100644 --- a/experimental/javascript-wc-indexeddb/src/storage/indexedDB-manager.js +++ b/experimental/javascript-wc-indexeddb/src/storage/indexedDB-manager.js @@ -11,7 +11,6 @@ class IndexedDBManager extends BaseStorageManager { }; deleteRequest.onsuccess = () => { - this._resetCompletionCounters(); this.openDatabase(resolve, reject); }; diff --git a/experimental/javascript-wc-indexeddb/src/workload-test.mjs b/experimental/javascript-wc-indexeddb/src/workload-test.mjs index 28de8d836..9722154db 100644 --- a/experimental/javascript-wc-indexeddb/src/workload-test.mjs +++ b/experimental/javascript-wc-indexeddb/src/workload-test.mjs @@ -10,7 +10,6 @@ export const promisesEventsNames = { add: "db-add-completed", toggle: "db-toggle-completed", delete: "db-delete-completed", - deleteItem: "db-delete-item-completed", }; const addPromise = new Promise((resolve) => { @@ -19,6 +18,9 @@ const addPromise = new Promise((resolve) => { const togglePromise = new Promise((resolve) => { window.addEventListener(promisesEventsNames.toggle, () => resolve()); }); +const deletePromise = new Promise((resolve) => { + window.addEventListener(promisesEventsNames.delete, () => resolve()); +}); function waitForPreviousPageLoaded() { return new Promise((resolve) => { @@ -26,20 +28,6 @@ function waitForPreviousPageLoaded() { }); } -function waitForDeletedItemsCount(expectedDeletedItems) { - return new Promise((resolve) => { - const handleDeleteItemCompleted = (event) => { - if (event.detail.deletedItems < expectedDeletedItems) - return; - - window.removeEventListener(promisesEventsNames.deleteItem, handleDeleteItemCompleted); - resolve(); - }; - - window.addEventListener(promisesEventsNames.deleteItem, handleDeleteItemCompleted); - }); -} - const suites = { default: new BenchmarkSuite("indexeddb", [ new BenchmarkStep(`Adding${numberOfItemsToAdd}Items`, async () => { @@ -84,15 +72,12 @@ const suites = { const numberOfItemsPerIteration = 10; const numberOfIterations = 10; for (let j = 0; j < numberOfIterations; j++) { - const expectedDeletedItems = (j + 1) * numberOfItemsPerIteration; - const deletedItemsPromise = waitForDeletedItemsCount(expectedDeletedItems); const todoList = document.querySelector("todo-app").shadowRoot.querySelector("todo-list"); const items = todoList.shadowRoot.querySelectorAll("todo-item"); for (let i = numberOfItemsPerIteration - 1; i >= 0; i--) { const item = items[i].shadowRoot.querySelector(".remove-todo-button"); item.click(); } - await deletedItemsPromise; if (j < 9) { const previousPageButton = document.querySelector("todo-app").shadowRoot.querySelector("todo-bottombar").shadowRoot.querySelector(".previous-page-button"); const previousPageLoadedPromise = waitForPreviousPageLoaded(); @@ -101,6 +86,13 @@ const suites = { } } }), + new BenchmarkStep( + "FinishDeletingItemsFromDB", + async () => { + await deletePromise; + }, + /* ignoreResult = */ true + ), ]), };