Skip to content

Commit 03d964d

Browse files
perf: Stop creating error before needing to throw (#3664)
Stop creating `Error` and passing into `assert`, especially in hot paths as it takes a significant amount of time on mobile. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Replaces `assert(..., new Error(...))` with string messages in `SnapController` and `Timer` to avoid unnecessary Error construction. > > - **Performance refactor** > - `packages/snaps-controllers/src/snaps/SnapController.ts` > - Use `assert(condition, "message")` instead of creating `Error` in `getExpect`, `#createRollbackSnapshot` (2 sites), and `#getRuntimeExpect`. > - `packages/snaps-controllers/src/snaps/Timer.ts` > - Same change in `cancel`, `finish`, `pause`, `start`, and `resume`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 8c15196. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent 93f69e5 commit 03d964d

File tree

2 files changed

+9
-18
lines changed

2 files changed

+9
-18
lines changed

packages/snaps-controllers/src/snaps/SnapController.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1952,7 +1952,7 @@ export class SnapController extends BaseController<
19521952
*/
19531953
getExpect(snapId: SnapId): Snap {
19541954
const snap = this.get(snapId);
1955-
assert(snap !== undefined, new Error(`Snap "${snapId}" not found.`));
1955+
assert(snap !== undefined, `Snap "${snapId}" not found.`);
19561956
return snap;
19571957
}
19581958

@@ -4169,7 +4169,7 @@ export class SnapController extends BaseController<
41694169
#createRollbackSnapshot(snapId: SnapId): RollbackSnapshot {
41704170
assert(
41714171
this.#rollbackSnapshots.get(snapId) === undefined,
4172-
new Error(`Snap "${snapId}" rollback snapshot already exists.`),
4172+
`Snap "${snapId}" rollback snapshot already exists.`,
41734173
);
41744174

41754175
this.#rollbackSnapshots.set(snapId, {
@@ -4182,7 +4182,7 @@ export class SnapController extends BaseController<
41824182

41834183
assert(
41844184
newRollbackSnapshot !== undefined,
4185-
new Error(`Snapshot creation failed for ${snapId}.`),
4185+
`Snapshot creation failed for ${snapId}.`,
41864186
);
41874187
return newRollbackSnapshot;
41884188
}
@@ -4272,10 +4272,7 @@ export class SnapController extends BaseController<
42724272

42734273
#getRuntimeExpect(snapId: SnapId): SnapRuntimeData {
42744274
const runtime = this.#getRuntime(snapId);
4275-
assert(
4276-
runtime !== undefined,
4277-
new Error(`Snap "${snapId}" runtime data not found`),
4278-
);
4275+
assert(runtime !== undefined, `Snap "${snapId}" runtime data not found`);
42794276
return runtime;
42804277
}
42814278

packages/snaps-controllers/src/snaps/Timer.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export class Timer {
5454
cancel() {
5555
assert(
5656
this.status === 'paused' || this.status === 'running',
57-
new Error('Tried to cancel a not running Timer'),
57+
'Tried to cancel a not running Timer',
5858
);
5959
this.onFinish(false);
6060
}
@@ -65,10 +65,7 @@ export class Timer {
6565
* @throws {@link Error}. If it wasn't running or paused.
6666
*/
6767
finish() {
68-
assert(
69-
this.status !== 'finished',
70-
new Error('Tried to finish a finished Timer.'),
71-
);
68+
assert(this.status !== 'finished', 'Tried to finish a finished Timer.');
7269
this.onFinish(true);
7370
}
7471

@@ -80,7 +77,7 @@ export class Timer {
8077
pause() {
8178
assert(
8279
this.state.value === 'running',
83-
new Error('Tried to pause a not running Timer'),
80+
'Tried to pause a not running Timer',
8481
);
8582

8683
const { callback, start, timeout, remaining } = this.state;
@@ -102,7 +99,7 @@ export class Timer {
10299
start(callback: () => void) {
103100
assert(
104101
this.state.value === 'stopped',
105-
new Error('Tried to start an already running Timer'),
102+
'Tried to start an already running Timer',
106103
);
107104

108105
const { remaining } = this.state;
@@ -116,10 +113,7 @@ export class Timer {
116113
* @throws {@link Error}. If it wasn't paused.
117114
*/
118115
resume() {
119-
assert(
120-
this.state.value === 'paused',
121-
new Error('Tried to resume not paused Timer'),
122-
);
116+
assert(this.state.value === 'paused', 'Tried to resume not paused Timer');
123117
const { remaining, callback } = this.state;
124118
const start = Date.now();
125119

0 commit comments

Comments
 (0)