Skip to content

Commit be31ecf

Browse files
author
Luis Pardo
committed
Fix runner issues, improve promises
1 parent cad3949 commit be31ecf

File tree

12 files changed

+76
-100
lines changed

12 files changed

+76
-100
lines changed

experimental/javascript-wc-indexeddb/dist/src/index.mjs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
11
import { BenchmarkConnector } from "./speedometer-utils/benchmark.mjs";
22
import suites, { appName, appVersion } from "./workload-test.mjs";
33

4-
window.workloadPromises = {};
5-
window.workloadPromises.addPromise = new Promise((resolve) => {
6-
window.addEventListener("db-add-completed", () => resolve());
7-
});
8-
window.workloadPromises.togglePromise = new Promise((resolve) => {
9-
window.addEventListener("db-toggle-completed", () => resolve());
10-
});
11-
window.workloadPromises.deletePromise = new Promise((resolve) => {
12-
window.addEventListener("db-delete-completed", () => resolve());
13-
});
14-
154
window.addEventListener("db-ready", () => {
165
/*
176
Paste below into dev console for manual testing:

experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/benchmark.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ export class BenchmarkStep {
1616

1717
async runAndRecord(params, suite, test, callback) {
1818
const TestRunnerClass = params.useAsyncSteps ? AsyncTestRunner : TestRunner;
19-
const testRunner = new TestRunnerClass(null, null, params, suite, test, callback);
19+
const type = params.useAsyncSteps ? "async" : "sync";
20+
const testRunner = new TestRunnerClass(null, null, params, suite, test, callback, type);
2021
const result = await testRunner.runTest();
2122
return result;
2223
}

experimental/javascript-wc-indexeddb/dist/src/storage/base-storage-manager.js

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
import { numberOfItemsToAdd, promisesEventsNames } from "../workload-test.mjs";
2+
13
// Base class for storage managers that provides common functionality
24
// for tracking pending operations and dispatching events.
35
class BaseStorageManager {
46
constructor() {
57
this.dbName = "todoDB";
68
this.storeName = "todos";
79
this.db = null;
8-
this.pendingAdditions = 0;
9-
this.pendingToggles = 0;
10-
this.pendingDeletions = 0;
10+
this.finishedAddtions = 0;
11+
this.finishedToggles = 0;
12+
this.finishedDeletions = 0;
1113
this.initDB().then(() => {
1214
this._dispatchReadyEvent();
1315
});
@@ -24,38 +26,26 @@ class BaseStorageManager {
2426
// of that type are complete.
2527

2628
_handleAddComplete() {
27-
if (--this.pendingAdditions === 0)
28-
window.dispatchEvent(new CustomEvent("db-add-completed", {}));
29+
if (++this.finishedAddtions === numberOfItemsToAdd)
30+
window.dispatchEvent(new CustomEvent(promisesEventsNames.add, {}));
2931
}
3032

3133
_handleToggleComplete() {
32-
if (--this.pendingToggles === 0)
33-
window.dispatchEvent(new CustomEvent("db-toggle-completed", {}));
34+
if (++this.finishedToggles === numberOfItemsToAdd)
35+
window.dispatchEvent(new CustomEvent(promisesEventsNames.toggle, {}));
3436
}
3537

3638
_handleRemoveComplete() {
37-
if (--this.pendingDeletions === 0) {
39+
if (++this.finishedDeletions === numberOfItemsToAdd) {
3840
this.db.close();
39-
window.dispatchEvent(new CustomEvent("db-remove-completed", {}));
41+
window.dispatchEvent(new CustomEvent(promisesEventsNames.delete, {}));
4042
}
4143
}
4244

4345
_dispatchReadyEvent() {
4446
window.dispatchEvent(new CustomEvent("db-ready", {}));
4547
}
4648

47-
_incrementPendingAdditions() {
48-
this.pendingAdditions++;
49-
}
50-
51-
_incrementPendingToggles() {
52-
this.pendingToggles++;
53-
}
54-
55-
_incrementPendingDeletions() {
56-
this.pendingDeletions++;
57-
}
58-
5949
// Abstract methods that must be implemented by subclasses
6050

6151
async initDB() {

experimental/javascript-wc-indexeddb/dist/src/storage/dexieDB-manager.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ class DexieDBManager extends BaseStorageManager {
2424
addTodo(todo) {
2525
this._ensureDbConnection();
2626

27-
this._incrementPendingAdditions();
2827
this.db.todos
2928
.add(todo)
3029
.then(() => {
@@ -51,8 +50,6 @@ class DexieDBManager extends BaseStorageManager {
5150
toggleTodo(itemNumber, completed) {
5251
this._ensureDbConnection();
5352

54-
this._incrementPendingToggles();
55-
5653
this.db.todos
5754
.get(itemNumber)
5855
.then((todoItem) => {
@@ -73,7 +70,6 @@ class DexieDBManager extends BaseStorageManager {
7370
removeTodo(itemNumber) {
7471
this._ensureDbConnection();
7572

76-
this._incrementPendingDeletions();
7773
this.db.todos
7874
.delete(itemNumber)
7975
.then(() => {

experimental/javascript-wc-indexeddb/dist/src/storage/indexedDB-manager.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,6 @@ class IndexedDBManager extends BaseStorageManager {
4747
this._ensureDbConnection();
4848

4949
const transaction = this.db.transaction(this.storeName, "readwrite");
50-
const store = transaction.objectStore(this.storeName);
51-
52-
store.add(todo);
53-
this._incrementPendingAdditions();
5450

5551
transaction.oncomplete = () => {
5652
// When running in Speedometer, the event will be dispatched only once
@@ -59,9 +55,12 @@ class IndexedDBManager extends BaseStorageManager {
5955
};
6056

6157
transaction.onerror = (event) => {
58+
console.error("Transaction error:", event.target.error);
6259
throw event.target.error;
6360
};
6461

62+
const store = transaction.objectStore(this.storeName);
63+
store.add(todo);
6564
transaction.commit();
6665
}
6766

@@ -111,8 +110,6 @@ class IndexedDBManager extends BaseStorageManager {
111110

112111
const getRequest = store.get(itemNumber);
113112

114-
this._incrementPendingToggles();
115-
116113
getRequest.onsuccess = (event) => {
117114
const todoItem = getRequest.result;
118115

@@ -150,10 +147,6 @@ class IndexedDBManager extends BaseStorageManager {
150147
const transaction = this.db.transaction(this.storeName, "readwrite");
151148
const store = transaction.objectStore(this.storeName);
152149

153-
// Delete the todo item directly using its primary key (itemNumber)
154-
store.delete(itemNumber);
155-
this._incrementPendingDeletions();
156-
157150
transaction.oncomplete = () => {
158151
this._handleRemoveComplete();
159152
};
@@ -162,6 +155,8 @@ class IndexedDBManager extends BaseStorageManager {
162155
throw event.target.error;
163156
};
164157

158+
// Delete the todo item directly using its primary key (itemNumber)
159+
store.delete(itemNumber);
165160
transaction.commit();
166161
}
167162
}

experimental/javascript-wc-indexeddb/dist/src/workload-test.mjs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,23 @@ import { numberOfItemsToAdd } from "./speedometer-utils/todomvc-utils.mjs";
44

55
export const appName = "todomvc-indexeddb";
66
export const appVersion = "1.0.0";
7+
export { numberOfItemsToAdd };
8+
9+
export const promisesEventsNames = {
10+
add: "db-add-completed",
11+
toggle: "db-toggle-completed",
12+
delete: "db-delete-completed",
13+
};
14+
15+
const addPromise = new Promise((resolve) => {
16+
window.addEventListener(promisesEventsNames.add, () => resolve());
17+
});
18+
const togglePromise = new Promise((resolve) => {
19+
window.addEventListener(promisesEventsNames.toggle, () => resolve());
20+
});
21+
const deletePromise = new Promise((resolve) => {
22+
window.addEventListener(promisesEventsNames.delete, () => resolve());
23+
});
724

825
const suites = {
926
default: new BenchmarkSuite("indexeddb", [
@@ -18,7 +35,7 @@ const suites = {
1835
new BenchmarkStep(
1936
"FinishAddingItemsToDB",
2037
async () => {
21-
await window.addPromise;
38+
await addPromise;
2239
},
2340
/* ignoreResult = */ true
2441
),
@@ -42,7 +59,7 @@ const suites = {
4259
new BenchmarkStep(
4360
"FinishModifyingItemsInDB",
4461
async () => {
45-
await window.togglePromise;
62+
await togglePromise;
4663
},
4764
/* ignoreResult = */ true
4865
),
@@ -74,7 +91,7 @@ const suites = {
7491
new BenchmarkStep(
7592
"FinishDeletingItemsFromDB",
7693
async () => {
77-
await window.removePromise;
94+
await deletePromise;
7895
},
7996
/* ignoreResult = */ true
8097
),

experimental/javascript-wc-indexeddb/src/index.mjs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
11
import { BenchmarkConnector } from "/src/speedometer-utils/benchmark.mjs";
22
import suites, { appName, appVersion } from "/src/workload-test.mjs";
33

4-
window.workloadPromises = {};
5-
window.workloadPromises.addPromise = new Promise((resolve) => {
6-
window.addEventListener("db-add-completed", () => resolve());
7-
});
8-
window.workloadPromises.togglePromise = new Promise((resolve) => {
9-
window.addEventListener("db-toggle-completed", () => resolve());
10-
});
11-
window.workloadPromises.deletePromise = new Promise((resolve) => {
12-
window.addEventListener("db-delete-completed", () => resolve());
13-
});
14-
154
window.addEventListener("db-ready", () => {
165
/*
176
Paste below into dev console for manual testing:

experimental/javascript-wc-indexeddb/src/speedometer-utils/benchmark.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ export class BenchmarkStep {
1616

1717
async runAndRecord(params, suite, test, callback) {
1818
const TestRunnerClass = params.useAsyncSteps ? AsyncTestRunner : TestRunner;
19-
const testRunner = new TestRunnerClass(null, null, params, suite, test, callback);
19+
const type = params.useAsyncSteps ? "async" : "sync";
20+
const testRunner = new TestRunnerClass(null, null, params, suite, test, callback, type);
2021
const result = await testRunner.runTest();
2122
return result;
2223
}

experimental/javascript-wc-indexeddb/src/storage/base-storage-manager.js

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
import { numberOfItemsToAdd, promisesEventsNames } from "../workload-test.mjs";
2+
13
// Base class for storage managers that provides common functionality
24
// for tracking pending operations and dispatching events.
35
class BaseStorageManager {
46
constructor() {
57
this.dbName = "todoDB";
68
this.storeName = "todos";
79
this.db = null;
8-
this.pendingAdditions = 0;
9-
this.pendingToggles = 0;
10-
this.pendingDeletions = 0;
10+
this.finishedAddtions = 0;
11+
this.finishedToggles = 0;
12+
this.finishedDeletions = 0;
1113
this.initDB().then(() => {
1214
this._dispatchReadyEvent();
1315
});
@@ -24,38 +26,26 @@ class BaseStorageManager {
2426
// of that type are complete.
2527

2628
_handleAddComplete() {
27-
if (--this.pendingAdditions === 0)
28-
window.dispatchEvent(new CustomEvent("db-add-completed", {}));
29+
if (++this.finishedAddtions === numberOfItemsToAdd)
30+
window.dispatchEvent(new CustomEvent(promisesEventsNames.add, {}));
2931
}
3032

3133
_handleToggleComplete() {
32-
if (--this.pendingToggles === 0)
33-
window.dispatchEvent(new CustomEvent("db-toggle-completed", {}));
34+
if (++this.finishedToggles === numberOfItemsToAdd)
35+
window.dispatchEvent(new CustomEvent(promisesEventsNames.toggle, {}));
3436
}
3537

3638
_handleRemoveComplete() {
37-
if (--this.pendingDeletions === 0) {
39+
if (++this.finishedDeletions === numberOfItemsToAdd) {
3840
this.db.close();
39-
window.dispatchEvent(new CustomEvent("db-remove-completed", {}));
41+
window.dispatchEvent(new CustomEvent(promisesEventsNames.delete, {}));
4042
}
4143
}
4244

4345
_dispatchReadyEvent() {
4446
window.dispatchEvent(new CustomEvent("db-ready", {}));
4547
}
4648

47-
_incrementPendingAdditions() {
48-
this.pendingAdditions++;
49-
}
50-
51-
_incrementPendingToggles() {
52-
this.pendingToggles++;
53-
}
54-
55-
_incrementPendingDeletions() {
56-
this.pendingDeletions++;
57-
}
58-
5949
// Abstract methods that must be implemented by subclasses
6050

6151
async initDB() {

experimental/javascript-wc-indexeddb/src/storage/dexieDB-manager.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ class DexieDBManager extends BaseStorageManager {
2424
addTodo(todo) {
2525
this._ensureDbConnection();
2626

27-
this._incrementPendingAdditions();
2827
this.db.todos
2928
.add(todo)
3029
.then(() => {
@@ -51,8 +50,6 @@ class DexieDBManager extends BaseStorageManager {
5150
toggleTodo(itemNumber, completed) {
5251
this._ensureDbConnection();
5352

54-
this._incrementPendingToggles();
55-
5653
this.db.todos
5754
.get(itemNumber)
5855
.then((todoItem) => {
@@ -73,7 +70,6 @@ class DexieDBManager extends BaseStorageManager {
7370
removeTodo(itemNumber) {
7471
this._ensureDbConnection();
7572

76-
this._incrementPendingDeletions();
7773
this.db.todos
7874
.delete(itemNumber)
7975
.then(() => {

0 commit comments

Comments
 (0)