From 5b73df094f7f6ae0327234867ab53e293b9fdf1d Mon Sep 17 00:00:00 2001 From: EYHN Date: Fri, 18 Apr 2025 14:32:24 +0800 Subject: [PATCH] feat(core): add more performance metrics --- .../nbstore/src/impls/idb/indexer/data-struct.ts | 16 +++++++++------- packages/frontend/apps/web/src/app.tsx | 16 ++++++++++++++++ packages/frontend/apps/web/src/nbstore.worker.ts | 2 ++ 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/packages/common/nbstore/src/impls/idb/indexer/data-struct.ts b/packages/common/nbstore/src/impls/idb/indexer/data-struct.ts index 40a1edd5f2..4e32a22c3d 100644 --- a/packages/common/nbstore/src/impls/idb/indexer/data-struct.ts +++ b/packages/common/nbstore/src/impls/idb/indexer/data-struct.ts @@ -511,15 +511,17 @@ export class DataStruct { async measure(name: string) { const count = debugMarkCount++; - performance.mark(`${name}Start(${count})`); + performance.mark(`[idb-indexer]${name}Start(${count})`); return { [Symbol.dispose]: () => { - performance.mark(`${name}End(${count})`); - performance.measure( - `${name}`, - `${name}Start(${count})`, - `${name}End(${count})` - ); + performance.measure(`${name}`, { + start: `[idb-indexer]${name}Start(${count})`, + detail: { + devtools: { + track: '[idb-indexer]', + }, + }, + }); }, }; } diff --git a/packages/frontend/apps/web/src/app.tsx b/packages/frontend/apps/web/src/app.tsx index 8db03f2631..5aec92053b 100644 --- a/packages/frontend/apps/web/src/app.tsx +++ b/packages/frontend/apps/web/src/app.tsx @@ -26,6 +26,8 @@ let storeManagerClient: StoreManagerClient; const workerUrl = getWorkerUrl('nbstore'); +performance.mark('worker:connect'); + if ( window.SharedWorker && localStorage.getItem('disableSharedWorker') !== 'true' @@ -33,9 +35,23 @@ if ( const worker = new SharedWorker(workerUrl, { name: 'affine-shared-worker', }); + const connectHandler = (message: MessageEvent) => { + if (message.data === 'connected') { + performance.measure('worker:connected', 'worker:connect'); + worker.port.removeEventListener('message', connectHandler); + } + }; + worker.port.addEventListener('message', connectHandler); storeManagerClient = new StoreManagerClient(new OpClient(worker.port)); } else { const worker = new Worker(workerUrl); + const connectHandler = (message: MessageEvent) => { + if (message.data === 'connected') { + performance.measure('worker:connected', 'worker:connect'); + worker.removeEventListener('message', connectHandler); + } + }; + worker.addEventListener('message', connectHandler); storeManagerClient = new StoreManagerClient(new OpClient(worker)); } window.addEventListener('beforeunload', () => { diff --git a/packages/frontend/apps/web/src/nbstore.worker.ts b/packages/frontend/apps/web/src/nbstore.worker.ts index caea0d8d4f..40b027f214 100644 --- a/packages/frontend/apps/web/src/nbstore.worker.ts +++ b/packages/frontend/apps/web/src/nbstore.worker.ts @@ -22,9 +22,11 @@ if ('onconnect' in globalThis) { (globalThis as any).onconnect = (event: MessageEvent) => { const port = event.ports[0]; + port.postMessage('connected'); consumer.bindConsumer(new OpConsumer(port)); }; } else { + globalThis.postMessage('connected'); // if in worker consumer.bindConsumer( new OpConsumer(globalThis as MessageCommunicapable)