From cd71b12745c5e2c4b10a9ebc1b93459a24f5827e Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 9 May 2024 19:42:47 -0500 Subject: [PATCH 01/43] ci: Add Firefox testing for host --- .github/workflows/ci.yaml | 8 +++++++- packages/host/testem.js | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e95a65365f..54c9fcfa6e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -183,6 +183,12 @@ jobs: concurrency: group: boxel-host-test-db-index${{ github.head_ref || github.run_id }} cancel-in-progress: true + strategy: + fail-fast: false + matrix: + browser: ["Chrome", "Firefox"] + env: + TESTEM_BROWSER: ${{ (startsWith(matrix.browser, 'Firefox') && 'Firefox') || matrix.browser }} steps: - uses: actions/checkout@v3 - uses: ./.github/actions/init @@ -211,7 +217,7 @@ jobs: if: always() with: junit_files: junit/host.xml - check_name: Host Tests (DB Index) Test Results + check_name: ${{ matrix.browser }} Host Tests (DB Index) Test Results matrix-client-test: name: Matrix Client Tests diff --git a/packages/host/testem.js b/packages/host/testem.js index 6e69ea9579..d8a19711e3 100644 --- a/packages/host/testem.js +++ b/packages/host/testem.js @@ -8,7 +8,7 @@ const fs = require('fs'); const config = { test_page: 'tests/index.html?hidepassed', disable_watching: true, - launch_in_ci: ['Chrome'], + launch_in_ci: [process.env.TESTEM_DEFAULT_BROWSER || 'Chrome'], launch_in_dev: ['Chrome'], browser_start_timeout: 120, browser_args: { @@ -24,6 +24,7 @@ const config = { '--window-size=1440,900', ].filter(Boolean), }, + Firefox: ['-headless', '--width=1440', '--height=900'], }, }; From 672f630fa30dbe9654e585c01f351007d92d2834 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 9 May 2024 19:45:56 -0500 Subject: [PATCH 02/43] Add browser to concurrency id --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 54c9fcfa6e..6f62555c95 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -181,7 +181,7 @@ jobs: name: Host Tests - db index runs-on: ubuntu-latest concurrency: - group: boxel-host-test-db-index${{ github.head_ref || github.run_id }} + group: boxel-host-test-${{ matrix.browser }}-db-index${{ github.head_ref || github.run_id }} cancel-in-progress: true strategy: fail-fast: false From 6f160ee35b4a316b5a510da3a49f0135fccd5884 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 9 May 2024 19:52:59 -0500 Subject: [PATCH 03/43] Fix environment variable name for browser --- packages/host/testem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/host/testem.js b/packages/host/testem.js index d8a19711e3..9e052573bf 100644 --- a/packages/host/testem.js +++ b/packages/host/testem.js @@ -8,7 +8,7 @@ const fs = require('fs'); const config = { test_page: 'tests/index.html?hidepassed', disable_watching: true, - launch_in_ci: [process.env.TESTEM_DEFAULT_BROWSER || 'Chrome'], + launch_in_ci: [process.env.TESTEM_BROWSER || 'Chrome'], launch_in_dev: ['Chrome'], browser_start_timeout: 120, browser_args: { From 9dc41716f18fc980b54d9446390de41a319743aa Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Fri, 10 May 2024 09:10:40 -0500 Subject: [PATCH 04/43] Add Firefox tests for in-memory index --- .github/workflows/ci.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6f62555c95..4ca56b8690 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -146,8 +146,14 @@ jobs: name: Host Tests - in-memory index runs-on: ubuntu-latest concurrency: - group: boxel-host-test-in-memory-index${{ github.head_ref || github.run_id }} + group: boxel-host-test-${{ matrix.browser }}-in-memory-index${{ github.head_ref || github.run_id }} cancel-in-progress: true + strategy: + fail-fast: false + matrix: + browser: ["Chrome", "Firefox"] + env: + TESTEM_BROWSER: ${{ (startsWith(matrix.browser, 'Firefox') && 'Firefox') || matrix.browser }} steps: - uses: actions/checkout@v3 - uses: ./.github/actions/init @@ -175,7 +181,7 @@ jobs: if: always() with: junit_files: junit/host.xml - check_name: Host Tests (In-Memory Index) Test Results + check_name: ${{ matrix.browser }} Host Tests (In-Memory Index) Test Results host-test-db-index: name: Host Tests - db index From 0d8f712b39744276615267ab0bd9a30b648178b9 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Fri, 10 May 2024 11:09:25 -0500 Subject: [PATCH 05/43] Fix browser flag --- packages/host/testem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/host/testem.js b/packages/host/testem.js index 9e052573bf..8e64b490ea 100644 --- a/packages/host/testem.js +++ b/packages/host/testem.js @@ -24,7 +24,7 @@ const config = { '--window-size=1440,900', ].filter(Boolean), }, - Firefox: ['-headless', '--width=1440', '--height=900'], + Firefox: ['--headless', '--width=1440', '--height=900'], }, }; From 3b49c5c74d93b7bf5535d75121d4d5fae3534579 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Mon, 13 May 2024 12:53:11 -0500 Subject: [PATCH 06/43] Add storage of JUnit reports --- .github/workflows/ci.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1c947671b6..6aa270199e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -182,6 +182,13 @@ jobs: with: junit_files: junit/host.xml check_name: ${{ matrix.browser }} Host Tests (In-Memory Index) Test Results + - name: Upload JUnit report + if: always() + uses: actions/upload-artifact@v4 + with: + name: junit-boxel-host-test-report-${{ matrix.browser }}-in-memory-index${{ github.head_ref || github.run_id }} + path: junit/host.xml + retention-days: 14 host-test-db-index: name: Host Tests - db index @@ -224,6 +231,13 @@ jobs: with: junit_files: junit/host.xml check_name: ${{ matrix.browser }} Host Tests (DB Index) Test Results + - name: Upload JUnit report + if: always() + uses: actions/upload-artifact@v4 + with: + name: junit-boxel-host-test-report-${{ matrix.browser }}-db-index${{ github.head_ref || github.run_id }} + path: junit/host.xml + retention-days: 14 matrix-client-test: name: Matrix Client Tests From 8da577b81d2dcd2ed2001dfdf0e146a1258cfbbe Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Mon, 13 May 2024 13:10:44 -0500 Subject: [PATCH 07/43] Remove invalid filename portion --- .github/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6aa270199e..2ebdbe47a5 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -186,7 +186,7 @@ jobs: if: always() uses: actions/upload-artifact@v4 with: - name: junit-boxel-host-test-report-${{ matrix.browser }}-in-memory-index${{ github.head_ref || github.run_id }} + name: junit-boxel-host-test-report-${{ matrix.browser }}-in-memory-index path: junit/host.xml retention-days: 14 @@ -235,7 +235,7 @@ jobs: if: always() uses: actions/upload-artifact@v4 with: - name: junit-boxel-host-test-report-${{ matrix.browser }}-db-index${{ github.head_ref || github.run_id }} + name: junit-boxel-host-test-report-${{ matrix.browser }}-db-index path: junit/host.xml retention-days: 14 From 6e16f3c590ebf59897f386bb9075d608afb35537 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 15 May 2024 07:59:27 -0500 Subject: [PATCH 08/43] Restore CI changes --- .github/workflows/ci.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f9bd7cbb60..862d7b2636 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -146,8 +146,14 @@ jobs: name: Host Tests runs-on: ubuntu-latest concurrency: - group: boxel-host-test${{ github.head_ref || github.run_id }} + group: boxel-host-test-${{ matrix.browser }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true + strategy: + fail-fast: false + matrix: + browser: ["Chrome", "Firefox"] + env: + TESTEM_BROWSER: ${{ (startsWith(matrix.browser, 'Firefox') && 'Firefox') || matrix.browser }} steps: - uses: actions/checkout@v4 - uses: ./.github/actions/init From 0cade06a9103a3428df86877bc56057ec70086d9 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 15 May 2024 08:01:44 -0500 Subject: [PATCH 09/43] Remove unnecessary conversion This is because they test with two different Firefox versions. --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 862d7b2636..fd726363b7 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -153,7 +153,7 @@ jobs: matrix: browser: ["Chrome", "Firefox"] env: - TESTEM_BROWSER: ${{ (startsWith(matrix.browser, 'Firefox') && 'Firefox') || matrix.browser }} + TESTEM_BROWSER: ${{ matrix.browser }} steps: - uses: actions/checkout@v4 - uses: ./.github/actions/init From bb3a698719acd4dd293df17eb8cca64791971a9a Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 15 May 2024 10:57:17 -0500 Subject: [PATCH 10/43] Fix test result comment names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The browser is needed so they don’t clobber. --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fd726363b7..59787abf7c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -181,7 +181,7 @@ jobs: if: always() with: junit_files: junit/host.xml - check_name: Host Tests Test Results + check_name: ${{ matrix.browser }} Host Test Results matrix-client-test: name: Matrix Client Tests From 63cc6eaf6159ffe6b85cebf67c7a7be2106a2baa Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 15 May 2024 12:41:49 -0500 Subject: [PATCH 11/43] Add report uploads again --- .github/workflows/ci.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 59787abf7c..8fe3da9500 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -182,6 +182,13 @@ jobs: with: junit_files: junit/host.xml check_name: ${{ matrix.browser }} Host Test Results + - name: Upload JUnit report + if: always() + uses: actions/upload-artifact@v4 + with: + name: junit-boxel-host-test-report-${{ matrix.browser }}-in-memory-index + path: junit/host.xml + retention-days: 14 matrix-client-test: name: Matrix Client Tests From 5738eba0deb970d9ec1f5029f513ab409205eb45 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 15 May 2024 15:44:56 -0500 Subject: [PATCH 12/43] Remove unnecessary artifact suffix --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8fe3da9500..d862e8a685 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -186,7 +186,7 @@ jobs: if: always() uses: actions/upload-artifact@v4 with: - name: junit-boxel-host-test-report-${{ matrix.browser }}-in-memory-index + name: junit-boxel-host-test-report-${{ matrix.browser }} path: junit/host.xml retention-days: 14 From 69e1a78cb59aba2014154442a5bd6fa89071ddab Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 15 May 2024 18:27:23 -0500 Subject: [PATCH 13/43] Change to only run Percy on Chrome --- .github/workflows/ci.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d862e8a685..782bcf6b2d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -171,11 +171,16 @@ jobs: - name: create realm users run: pnpm register-realm-users working-directory: packages/matrix - - name: host test suite + - name: host test suite with Percy run: pnpm test-with-percy + if: matrix.browser == 'Chrome' env: PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_HOST }} working-directory: packages/host + - name: host test suite without Percy + run: pnpm test + if: matrix.browser == 'Firefox' + working-directory: packages/host - name: Publish test results uses: EnricoMi/publish-unit-test-result-action@v2.9.0 if: always() From ad639189a937dc2fe3b1361172b113500dbfff86 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 22 May 2024 15:03:46 -0500 Subject: [PATCH 14/43] Add preliminary attempt at instrumentation --- packages/host/app/lib/sqlite-adapter.ts | 8 ++++---- packages/host/app/utils/time.ts | 17 +++++++++++++++++ packages/host/tests/test-helper.js | 12 ++++++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 packages/host/app/utils/time.ts diff --git a/packages/host/app/lib/sqlite-adapter.ts b/packages/host/app/lib/sqlite-adapter.ts index 2cc634d04b..d2bb216212 100644 --- a/packages/host/app/lib/sqlite-adapter.ts +++ b/packages/host/app/lib/sqlite-adapter.ts @@ -10,6 +10,8 @@ import { Deferred, } from '@cardstack/runtime-common'; +import { time } from '@cardstack/host/utils/time'; + export default class SQLiteAdapter implements DBAdapter { private _sqlite: typeof SQLiteWorker | undefined; private _dbId: string | undefined; @@ -106,10 +108,8 @@ export default class SQLiteAdapter implements DBAdapter { async execute(sql: string, opts?: ExecuteOptions) { this.assertNotClosed(); sql = this.adjustSQL(sql); - console.debug( - `executing sql: ${sql}, with bindings: ${JSON.stringify(opts?.bind)}`, - ); - return await this.query(sql, opts); + + return await time('sql', this.query(sql, opts)); } async close() { diff --git a/packages/host/app/utils/time.ts b/packages/host/app/utils/time.ts new file mode 100644 index 0000000000..7f18baf044 --- /dev/null +++ b/packages/host/app/utils/time.ts @@ -0,0 +1,17 @@ +let labelToTime = new Map(); + +export async function time(label: string, promise: Promise) { + let now = performance.now(); + + let result = await promise; + + let diff = performance.now() - now; + let lastTime = labelToTime.get(label) || 0; + labelToTime.set(label, lastTime + diff); + + return result; +} + +export function getTimes() { + return labelToTime; +} diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index 5b61d481d9..d24f37bc61 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -4,8 +4,20 @@ import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; +import { getTimes } from '@cardstack/host/utils/time'; + import setupOperatorModeParametersMatchAssertion from '@cardstack/host/tests/helpers/operator-mode-parameters-match'; +QUnit.on('runEnd', () => { + console.log('Done all tests'); + + let times = getTimes(); + + [...times.keys()].forEach((key) => { + console.log(`${key}: ${times.get(key)}`); + }); +}); + setApplication(Application.create(config.APP)); setup(QUnit.assert); From 7a0eaf8d1f89b35d854958ebd79c7b0fcb5ec50f Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 11:11:40 -0500 Subject: [PATCH 15/43] Add transpile timer --- packages/host/app/lib/sqlite-adapter.ts | 2 +- packages/host/tests/test-helper.js | 2 +- .../app/utils => runtime-common/helpers}/time.ts | 12 ++++++++++-- packages/runtime-common/realm.ts | 6 +++++- 4 files changed, 17 insertions(+), 5 deletions(-) rename packages/{host/app/utils => runtime-common/helpers}/time.ts (50%) diff --git a/packages/host/app/lib/sqlite-adapter.ts b/packages/host/app/lib/sqlite-adapter.ts index d2bb216212..5cd09d2ec1 100644 --- a/packages/host/app/lib/sqlite-adapter.ts +++ b/packages/host/app/lib/sqlite-adapter.ts @@ -10,7 +10,7 @@ import { Deferred, } from '@cardstack/runtime-common'; -import { time } from '@cardstack/host/utils/time'; +import { time } from '@cardstack/runtime-common/helpers/time'; export default class SQLiteAdapter implements DBAdapter { private _sqlite: typeof SQLiteWorker | undefined; diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index d24f37bc61..1ca8d96c90 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -4,7 +4,7 @@ import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; -import { getTimes } from '@cardstack/host/utils/time'; +import { getTimes } from '@cardstack/runtime-common/helpers/time'; import setupOperatorModeParametersMatchAssertion from '@cardstack/host/tests/helpers/operator-mode-parameters-match'; diff --git a/packages/host/app/utils/time.ts b/packages/runtime-common/helpers/time.ts similarity index 50% rename from packages/host/app/utils/time.ts rename to packages/runtime-common/helpers/time.ts index 7f18baf044..df6f2ff698 100644 --- a/packages/host/app/utils/time.ts +++ b/packages/runtime-common/helpers/time.ts @@ -1,9 +1,17 @@ let labelToTime = new Map(); -export async function time(label: string, promise: Promise) { +export async function time( + label: string, + promiseOrFunction: Promise | (() => Promise) | (() => any), +) { let now = performance.now(); - let result = await promise; + let result; + if (typeof promiseOrFunction === 'function') { + result = promiseOrFunction(); + } else { + result = await promiseOrFunction; + } let diff = performance.now() - now; let lastTime = labelToTime.get(label) || 0; diff --git a/packages/runtime-common/realm.ts b/packages/runtime-common/realm.ts index 77a76b5ceb..803d1a5252 100644 --- a/packages/runtime-common/realm.ts +++ b/packages/runtime-common/realm.ts @@ -88,6 +88,8 @@ import type { ResponseWithNodeStream, VirtualNetwork } from './virtual-network'; import { RealmAuthHandler } from './realm-auth-handler'; +import { time } from './helpers/time'; + export interface RealmSession { canRead: boolean; canWrite: boolean; @@ -1173,7 +1175,9 @@ export class Realm { private makeJS(content: string, debugFilename: string): Response { try { - content = this.transpileJS(content, debugFilename); + time('transpileJS', () => { + content = this.transpileJS(content, debugFilename); + }); } catch (err: any) { return createResponse(this, err.message, { // using "Not Acceptable" here because no text/javascript representation From 7a93f615d4f8e65f05cb6505e22092514b2da94f Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 11:22:57 -0500 Subject: [PATCH 16/43] Change logging of times --- packages/host/tests/test-helper.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index 1ca8d96c90..d6e3905c65 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -2,19 +2,22 @@ import Application from '@cardstack/host/app'; import config from '@cardstack/host/config/environment'; import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; +import { logger } from '@cardstack/runtime-common'; import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; import { getTimes } from '@cardstack/runtime-common/helpers/time'; import setupOperatorModeParametersMatchAssertion from '@cardstack/host/tests/helpers/operator-mode-parameters-match'; +const log = logger('current-run'); + QUnit.on('runEnd', () => { console.log('Done all tests'); let times = getTimes(); [...times.keys()].forEach((key) => { - console.log(`${key}: ${times.get(key)}`); + log.info(`${key}: ${times.get(key)}`); }); }); From b909f5e35a18b8597ce32de88eea9d485757f2a1 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 11:23:50 -0500 Subject: [PATCH 17/43] Change to never use Percy for now --- .github/workflows/ci.yaml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 01b97e191c..94ac9444ef 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -171,15 +171,17 @@ jobs: - name: create realm users run: pnpm register-realm-users working-directory: packages/matrix - - name: host test suite with Percy - run: pnpm test-with-percy - if: matrix.browser == 'Chrome' - env: - PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_HOST }} - working-directory: packages/host + # FIXME restore + # - name: host test suite with Percy + # run: pnpm test-with-percy + # if: matrix.browser == 'Chrome' + # env: + # PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_HOST }} + # working-directory: packages/host - name: host test suite without Percy run: pnpm test - if: matrix.browser == 'Firefox' + # FIXME restore + # if: matrix.browser == 'Firefox' working-directory: packages/host - name: Publish test results uses: EnricoMi/publish-unit-test-result-action@v2.9.0 From a0bda0dbd62f28114ad475f7dce58beacadb3dde Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 12:09:57 -0500 Subject: [PATCH 18/43] Change time logging to be error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s not showing in the Actions logs still! --- packages/host/tests/test-helper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index d6e3905c65..d3d7b4672e 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -17,7 +17,7 @@ QUnit.on('runEnd', () => { let times = getTimes(); [...times.keys()].forEach((key) => { - log.info(`${key}: ${times.get(key)}`); + log.error(`${key}: ${times.get(key)}`); }); }); From 207e9a02468bee7a4697b32a7c537a8cfa3a1b79 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 13:38:34 -0500 Subject: [PATCH 19/43] Add more logging MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I’m not seeing any of this! --- packages/host/tests/test-helper.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index d3d7b4672e..6c00693621 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -11,6 +11,14 @@ import setupOperatorModeParametersMatchAssertion from '@cardstack/host/tests/hel const log = logger('current-run'); +console.log('Setting Qunit hooks?'); + +log.error('Setting Qunit hooks?'); + +QUnit.on('runStart', () => { + log.error('Starting tests abcdefghijklmnopqrstuvwxyz'); +}); + QUnit.on('runEnd', () => { console.log('Done all tests'); From 151cb85249cc0460224896ac5eb256240c34cc56 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 14:09:13 -0500 Subject: [PATCH 20/43] Add a separate attempt at logging --- packages/host/tests/test-helper.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index 6c00693621..96988d78cb 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -27,6 +27,29 @@ QUnit.on('runEnd', () => { [...times.keys()].forEach((key) => { log.error(`${key}: ${times.get(key)}`); }); + + log.error('that is all'); +}); + +QUnit.done(async () => { + console.log('Done all tests?? again'); + + let times = getTimes(); + + [...times.keys()].forEach((key) => { + log.error(`${key}: ${times.get(key)}`); + }); + + log.error('that is all…?'); + log.flush(); + + return new Promise((resolve) => { + log.error('waiting for logs to flush'); + setTimeout(() => { + log.error('logs flushed?'); + resolve(); + }, 5000); + }); }); setApplication(Application.create(config.APP)); From 083e93552b624d1ce24613911a8fc18cc74fa717 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 14:14:53 -0500 Subject: [PATCH 21/43] Remove concurrency cancellation for now --- .github/workflows/ci.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 94ac9444ef..ffae7adef6 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -145,9 +145,10 @@ jobs: host-test: name: Host Tests runs-on: ubuntu-latest - concurrency: - group: boxel-host-test-${{ matrix.browser }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + # FIXME restore + # concurrency: + # group: boxel-host-test-${{ matrix.browser }}-${{ github.head_ref || github.run_id }} + # cancel-in-progress: true strategy: fail-fast: false matrix: From 7b05f6d74b83b6120e9ea04836653ae36a19ff80 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 14:28:13 -0500 Subject: [PATCH 22/43] Add more timers --- packages/host/tests/helpers/index.gts | 151 +++++++++++++----------- packages/runtime-common/helpers/time.ts | 22 ++-- 2 files changed, 91 insertions(+), 82 deletions(-) diff --git a/packages/host/tests/helpers/index.gts b/packages/host/tests/helpers/index.gts index 7f8099726f..b0a1d72dff 100644 --- a/packages/host/tests/helpers/index.gts +++ b/packages/host/tests/helpers/index.gts @@ -27,6 +27,7 @@ import { testRealmInfo, testRealmURL, } from '@cardstack/runtime-common/helpers/const'; +import { time } from '@cardstack/runtime-common/helpers/time'; import { Loader } from '@cardstack/runtime-common/loader'; import { Realm } from '@cardstack/runtime-common/realm'; @@ -250,9 +251,11 @@ class MockLocalIndexer extends Service { export function setupLocalIndexing(hooks: NestedHooks) { hooks.beforeEach(async function () { - let dbAdapter = await getDbAdapter(); - await dbAdapter.reset(); - this.owner.register('service:local-indexer', MockLocalIndexer); + await time('setupLocalIndexing:reset', async () => { + let dbAdapter = await getDbAdapter(); + await dbAdapter.reset(); + this.owner.register('service:local-indexer', MockLocalIndexer); + }); }); } @@ -317,80 +320,82 @@ export function setupServerSentEvents(hooks: NestedHooks) { callback: () => Promise; opts?: { timeout?: number }; }): Promise => { - let defer = new Deferred(); - let events: { type: string; data: Record }[] = []; - let numOfEvents = expectedEvents?.length ?? expectedNumberOfEvents; - if (numOfEvents == null) { - throw new Error( - `expectEvents() must specify either 'expectedEvents' or 'expectedNumberOfEvents'`, - ); - } - let response = await realm.handle( - new Request(`${realm.url}_message`, { - method: 'GET', - headers: { - Accept: 'text/event-stream', - }, - }), - ); - if (!response.ok) { - throw new Error(`failed to connect to realm: ${response.status}`); - } - let reader = response.body!.getReader(); - let timeout = setTimeout( - () => - defer.reject( - new Error( - `expectEvent timed out, saw events ${JSON.stringify(events)}`, - ), - ), - opts?.timeout ?? 3000, - ); - let result = await callback(); - let decoder = new TextDecoder(); - while (events.length < numOfEvents) { - let { done, value } = await Promise.race([ - reader.read(), - defer.promise as any, // this one always throws so type is not important - ]); - if (done) { + return await time('setupServerSentEvents:expectEvents', async () => { + let defer = new Deferred(); + let events: { type: string; data: Record }[] = []; + let numOfEvents = expectedEvents?.length ?? expectedNumberOfEvents; + if (numOfEvents == null) { throw new Error( - `expected ${numOfEvents} events, saw ${events.length} events`, + `expectEvents() must specify either 'expectedEvents' or 'expectedNumberOfEvents'`, ); } - if (value) { - let ev = getEventData(decoder.decode(value, { stream: true })); - if (ev) { - events.push(ev); - for (let subscriber of this.subscribers) { - let evWireFormat = { - type: ev.type, - data: JSON.stringify(ev.data), - }; - subscriber(evWireFormat); + let response = await realm.handle( + new Request(`${realm.url}_message`, { + method: 'GET', + headers: { + Accept: 'text/event-stream', + }, + }), + ); + if (!response.ok) { + throw new Error(`failed to connect to realm: ${response.status}`); + } + let reader = response.body!.getReader(); + let timeout = setTimeout( + () => + defer.reject( + new Error( + `expectEvent timed out, saw events ${JSON.stringify(events)}`, + ), + ), + opts?.timeout ?? 3000, + ); + let result = await callback(); + let decoder = new TextDecoder(); + while (events.length < numOfEvents) { + let { done, value } = await Promise.race([ + reader.read(), + defer.promise as any, // this one always throws so type is not important + ]); + if (done) { + throw new Error( + `expected ${numOfEvents} events, saw ${events.length} events`, + ); + } + if (value) { + let ev = getEventData(decoder.decode(value, { stream: true })); + if (ev) { + events.push(ev); + for (let subscriber of this.subscribers) { + let evWireFormat = { + type: ev.type, + data: JSON.stringify(ev.data), + }; + subscriber(evWireFormat); + } } } } - } - if (expectedEvents) { - let eventsWithoutClientRequestId = events.map((e) => { - delete e.data.clientRequestId; - return e; - }); - assert.deepEqual( - eventsWithoutClientRequestId.forEach((e) => - e.data.invalidations?.sort(), - ), - expectedEvents.forEach((e) => e.data.invalidations?.sort()), - 'sse response is correct', - ); - } - if (onEvents) { - onEvents(events); - } - clearTimeout(timeout); - realm.unsubscribe(); - return result; + if (expectedEvents) { + let eventsWithoutClientRequestId = events.map((e) => { + delete e.data.clientRequestId; + return e; + }); + assert.deepEqual( + eventsWithoutClientRequestId.forEach((e) => + e.data.invalidations?.sort(), + ), + expectedEvents.forEach((e) => e.data.invalidations?.sort()), + 'sse response is correct', + ); + } + if (onEvents) { + onEvents(events); + } + clearTimeout(timeout); + realm.unsubscribe(); + return result; + }); }; }); } @@ -572,7 +577,9 @@ export function setupCardLogs( ) { hooks.afterEach(async function () { let api = await apiThunk(); - await api.flushLogs(); + time('setupCardLogs:flushLogs', async () => { + await api.flushLogs(); + }); }); } diff --git a/packages/runtime-common/helpers/time.ts b/packages/runtime-common/helpers/time.ts index df6f2ff698..d39d0abac8 100644 --- a/packages/runtime-common/helpers/time.ts +++ b/packages/runtime-common/helpers/time.ts @@ -7,17 +7,19 @@ export async function time( let now = performance.now(); let result; - if (typeof promiseOrFunction === 'function') { - result = promiseOrFunction(); - } else { - result = await promiseOrFunction; - } - - let diff = performance.now() - now; - let lastTime = labelToTime.get(label) || 0; - labelToTime.set(label, lastTime + diff); + try { + if (typeof promiseOrFunction === 'function') { + result = await promiseOrFunction(); + } else { + result = await promiseOrFunction; + } + } finally { + let diff = performance.now() - now; + let lastTime = labelToTime.get(label) || 0; + labelToTime.set(label, lastTime + diff); - return result; + return result; + } } export function getTimes() { From dfffe1bee30b919e65546a4380a3152191e55b99 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 14:32:37 -0500 Subject: [PATCH 23/43] Remove nonexistent function call --- packages/host/tests/test-helper.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index 96988d78cb..9a49ddcd37 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -41,7 +41,6 @@ QUnit.done(async () => { }); log.error('that is all…?'); - log.flush(); return new Promise((resolve) => { log.error('waiting for logs to flush'); From 0a42cd4e87e797e687b1f9b06a1e350c54994e92 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 15:24:46 -0500 Subject: [PATCH 24/43] Add yet more logging MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I still can’t see the results! --- packages/host/tests/test-helper.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index 9a49ddcd37..bfd909dbf6 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -19,6 +19,18 @@ QUnit.on('runStart', () => { log.error('Starting tests abcdefghijklmnopqrstuvwxyz'); }); +QUnit.on('suiteEnd', (moduleName) => { + console.log(`Done tests for ${moduleName}`); + + let times = getTimes(); + + [...times.keys()].forEach((key) => { + log.error(`${key}: ${times.get(key)}`); + }); + + log.error('that is all'); +}); + QUnit.on('runEnd', () => { console.log('Done all tests'); From 749cf37711fcf775a267fe24d092fa4abf0c88f0 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 16:03:25 -0500 Subject: [PATCH 25/43] Fix logging of module name --- packages/host/tests/test-helper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index bfd909dbf6..54ad051790 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -19,8 +19,8 @@ QUnit.on('runStart', () => { log.error('Starting tests abcdefghijklmnopqrstuvwxyz'); }); -QUnit.on('suiteEnd', (moduleName) => { - console.log(`Done tests for ${moduleName}`); +QUnit.on('suiteEnd', (suiteEnd) => { + console.log(`Done tests for ${suiteEnd.name}`); let times = getTimes(); From d66483ce01ac0bad5eab958ff956054e07816ab6 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 16:18:51 -0500 Subject: [PATCH 26/43] Remove transpile timer for now This usage broke everything! --- packages/runtime-common/realm.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/runtime-common/realm.ts b/packages/runtime-common/realm.ts index a96a80624b..c5c23e60bc 100644 --- a/packages/runtime-common/realm.ts +++ b/packages/runtime-common/realm.ts @@ -88,8 +88,6 @@ import type { ResponseWithNodeStream, VirtualNetwork } from './virtual-network'; import { RealmAuthHandler } from './realm-auth-handler'; -import { time } from './helpers/time'; - export interface RealmSession { canRead: boolean; canWrite: boolean; @@ -1175,9 +1173,7 @@ export class Realm { private makeJS(content: string, debugFilename: string): Response { try { - time('transpileJS', () => { - content = this.transpileJS(content, debugFilename); - }); + content = this.transpileJS(content, debugFilename); } catch (err: any) { return createResponse(this, err.message, { // using "Not Acceptable" here because no text/javascript representation From 1644ef8ca45bd277e9aa5bafcf201deae5786280 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 23 May 2024 23:04:51 -0500 Subject: [PATCH 27/43] Add instrumentation around visitOperatorMode --- .../host/tests/helpers/visit-operator-mode.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/host/tests/helpers/visit-operator-mode.ts b/packages/host/tests/helpers/visit-operator-mode.ts index 101eff5150..9e5744a508 100644 --- a/packages/host/tests/helpers/visit-operator-mode.ts +++ b/packages/host/tests/helpers/visit-operator-mode.ts @@ -2,6 +2,8 @@ import { visit, waitFor } from '@ember/test-helpers'; import stringify from 'safe-stable-stringify'; +import { time } from '@cardstack/runtime-common/helpers/time'; + import { SerializedState } from '@cardstack/host/services/operator-mode-state-service'; export default async function visitOperatorMode({ @@ -21,12 +23,17 @@ export default async function visitOperatorMode({ let operatorModeStateParam = stringify(operatorModeState)!; - await visit( - `/?operatorModeEnabled=true&operatorModeState=${encodeURIComponent( - operatorModeStateParam, - )}`, - ); + await time('visitOperatorMode:visit', async () => { + return await visit( + `/?operatorModeEnabled=true&operatorModeState=${encodeURIComponent( + operatorModeStateParam, + )}`, + ); + }); + if (stacks && stacks.length > 0 && (!submode || submode === 'interact')) { - await waitFor('[data-test-operator-mode-stack]'); + await time('visitOperatorMode:waitFor', async () => { + return await waitFor('[data-test-operator-mode-stack]'); + }); } } From 1257556b75f2514c73902885a2f9f81002de5ced Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Fri, 24 May 2024 11:52:42 -0500 Subject: [PATCH 28/43] Add timer around Matrix service load --- packages/host/app/services/matrix-service.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/host/app/services/matrix-service.ts b/packages/host/app/services/matrix-service.ts index 7b5df24341..ecff72de15 100644 --- a/packages/host/app/services/matrix-service.ts +++ b/packages/host/app/services/matrix-service.ts @@ -30,6 +30,7 @@ import { basicMappings, generateCardPatchCallSpecification, } from '@cardstack/runtime-common/helpers/ai'; +import { time } from '@cardstack/runtime-common/helpers/time'; import { RealmAuthClient } from '@cardstack/runtime-common/realm-auth-client'; @@ -96,7 +97,9 @@ export default class MatrixService extends Service { constructor(owner: Owner) { super(owner); - this.#ready = this.loadSDK.perform(); + this.#ready = time('matrix-service-load-sdk', async () => + this.loadSDK.perform(), + ); } get ready() { From c86c82c4c187891870d696a60ad33cfb4064f1c8 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Mon, 27 May 2024 13:55:31 -0500 Subject: [PATCH 29/43] Remove failed patch attempt --- package.json | 3 +- pnpm-lock.yaml | 74 ++++++++++++++++++++++++-------------------------- 2 files changed, 36 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index 9bfefb385f..231c27e69f 100644 --- a/package.json +++ b/package.json @@ -38,8 +38,7 @@ "style-loader@2.0.0": "patches/style-loader@2.0.0.patch", "ember-css-url@1.0.0": "patches/ember-css-url@1.0.0.patch", "matrix-js-sdk@31.0.0": "patches/matrix-js-sdk@31.0.0.patch", - "ember-basic-dropdown@8.0.4": "patches/ember-basic-dropdown@8.0.4.patch", - "ember-source@5.4.1": "patches/ember-source@5.4.1.patch" + "ember-basic-dropdown@8.0.4": "patches/ember-basic-dropdown@8.0.4.patch" } }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea4854500e..58e92b815d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,9 +22,6 @@ patchedDependencies: ember-css-url@1.0.0: hash: aglq5wzlwgv75jfevvip6brqo4 path: patches/ember-css-url@1.0.0.patch - ember-source@5.4.1: - hash: oko46qetwhgpor6xgs7vahyney - path: patches/ember-source@5.4.1.patch fastboot@4.1.0: hash: kizxbxhfcldguz4jcwonfduu2y path: patches/fastboot@4.1.0.patch @@ -83,7 +80,7 @@ importers: version: 6.3.1(@ember/test-waiters@3.0.2)(@glimmer/component@1.1.2)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-concurrency@3.1.1)(ember-source@5.4.1) ember-source: specifier: ~5.4.0 - version: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + version: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) ember-template-imports: specifier: ^3.0.1 version: 3.1.2(ember-cli-htmlbars@6.3.0) @@ -161,7 +158,7 @@ importers: version: 0.3.1(@babel/core@7.24.3)(@ember/test-helpers@3.3.0)(ember-source@5.4.1) ember-source: specifier: ~5.4.0 - version: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + version: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) devDependencies: '@babel/core': specifier: ^7.24.3 @@ -322,7 +319,7 @@ importers: version: 8.0.1 ember-source: specifier: ~5.4.0 - version: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + version: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) ember-template-imports: specifier: ^3.1.2 version: 3.4.2 @@ -529,7 +526,7 @@ importers: version: 6.3.1(@ember/test-waiters@3.0.2)(@glimmer/component@1.1.2)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-concurrency@3.1.1)(ember-source@5.4.1) ember-source: specifier: ^5.4.0 - version: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + version: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0 @@ -652,7 +649,7 @@ importers: version: 1.0.2 ember-source: specifier: ^5.4.0 - version: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + version: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) ember-velcro: specifier: ^2.1.3 version: 2.1.3(ember-modifier@4.1.0)(ember-source@5.4.1) @@ -933,7 +930,7 @@ importers: version: 6.3.1(@ember/test-waiters@3.0.2)(@glimmer/component@1.1.2)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-concurrency@3.1.1)(ember-source@5.4.1) ember-source: specifier: ^5.4.0 - version: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + version: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0 @@ -1281,7 +1278,7 @@ importers: version: 1.0.3 ember-source: specifier: ~5.4.0 - version: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + version: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) ember-template-imports: specifier: ^3.0.1 version: 3.1.2(ember-cli-htmlbars@6.3.0) @@ -1743,7 +1740,7 @@ importers: version: link:../../vendor/ember-concurrency-async-plugin ember-source: specifier: ~5.4.0 - version: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + version: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) flat: specifier: ^5.0.2 version: 5.0.2 @@ -3616,7 +3613,7 @@ packages: '@glint/template': 1.3.0 ember-cli-babel: 7.26.11 ember-modifier-manager-polyfill: 1.2.0(@babel/core@7.24.3) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -3666,7 +3663,7 @@ packages: ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.89.0) ember-cli-babel: 7.26.11 ember-cli-htmlbars: 6.3.0 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - '@glint/template' - supports-color @@ -4025,7 +4022,7 @@ packages: '@glint/template': 1.3.0 broccoli-funnel: 3.0.8 ember-cli-babel: 7.26.11 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color @@ -10720,7 +10717,7 @@ packages: ember-source: ^3.28.0 || ^4.0.0 || >=5.0.0 dependencies: '@embroider/addon-shim': 1.8.7 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color dev: false @@ -10732,7 +10729,7 @@ packages: dependencies: '@ember/test-waiters': 3.0.2 '@embroider/addon-shim': 1.8.7 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color dev: true @@ -10744,7 +10741,7 @@ packages: dependencies: '@ember/test-waiters': 3.0.2 '@embroider/addon-shim': 1.8.7 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color dev: true @@ -10849,7 +10846,7 @@ packages: decorator-transforms: 1.1.0(@babel/core@7.24.3) ember-element-helper: 0.8.6(@glint/environment-ember-loose@1.3.0)(@glint/template@1.3.0)(ember-source@5.4.1) ember-modifier: 4.1.0(ember-source@5.4.1) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) ember-style-modifier: 4.3.1(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-source@5.4.1) ember-truth-helpers: 4.0.3(ember-source@5.4.1) transitivePeerDependencies: @@ -10866,7 +10863,7 @@ packages: ember-source: ^3.28.0 || >= 4.0.0 dependencies: ember-cli-babel: 7.26.11 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) git-repo-info: 2.1.1 transitivePeerDependencies: - supports-color @@ -11778,7 +11775,7 @@ packages: ember-cli-babel-plugin-helpers: 1.1.1 ember-cli-htmlbars: 6.3.0 ember-compatibility-helpers: 1.2.6(@babel/core@7.24.3) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -11798,7 +11795,7 @@ packages: '@glimmer/tracking': 1.1.2 '@glint/template': 1.3.0 decorator-transforms: 1.1.0(@babel/core@7.24.3) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -11818,7 +11815,7 @@ packages: '@glimmer/tracking': 1.1.2 '@glint/template': 1.3.0 decorator-transforms: 1.1.0(@babel/core@7.24.3) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -11856,7 +11853,7 @@ packages: dependencies: '@embroider/addon-shim': 1.8.7 '@embroider/util': 1.12.0(@glint/environment-ember-loose@1.3.0)(@glint/template@1.3.0)(ember-source@5.4.1) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - '@glint/environment-ember-loose' - '@glint/template' @@ -11928,7 +11925,7 @@ packages: ember-cli-babel: 7.26.11 ember-cli-typescript: 5.2.1 ember-cli-version-checker: 5.1.2 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color @@ -12008,7 +12005,7 @@ packages: '@embroider/addon-shim': 1.8.7 ember-cli-normalize-entity-name: 1.0.0 ember-cli-string-utils: 1.1.0 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color @@ -12054,7 +12051,7 @@ packages: dependencies: '@embroider/addon-shim': 1.8.7 '@simple-dom/document': 1.4.0 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color dev: true @@ -12079,7 +12076,7 @@ packages: ember-assign-helper: 0.5.0(ember-source@5.4.1) ember-basic-dropdown: 8.0.4(patch_hash=4oyt6m5mwcw3sqhrngg4jt6oxa)(@ember/string@3.1.1)(@ember/test-helpers@3.3.0)(@glimmer/component@1.1.2)(@glimmer/tracking@1.1.2)(@glint/environment-ember-loose@1.3.0)(@glint/template@1.3.0)(ember-source@5.4.1) ember-concurrency: 4.0.1(@babel/core@7.24.3)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-source@5.4.1) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) ember-truth-helpers: 4.0.3(ember-source@5.4.1) transitivePeerDependencies: - '@babel/core' @@ -12097,7 +12094,7 @@ packages: '@ember/test-helpers': 3.3.0(@glint/template@1.3.0)(ember-source@5.4.1)(webpack@5.89.0) '@embroider/addon-shim': 1.8.7 '@glimmer/component': 1.1.2(@babel/core@7.24.3) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -12139,7 +12136,7 @@ packages: '@embroider/addon-shim': 1.8.7 '@embroider/macros': 1.15.0(@glint/template@1.3.0) ember-cli-test-loader: 3.1.0 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) qunit: 2.20.1 transitivePeerDependencies: - '@glint/template' @@ -12171,7 +12168,7 @@ packages: ember-cli-babel: 7.26.11 ember-cli-htmlbars: 6.3.0 ember-modifier: 4.1.0(ember-source@5.4.1) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - '@glint/template' - supports-color @@ -12188,7 +12185,7 @@ packages: optional: true dependencies: ember-cli-babel: 7.26.11 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color dev: true @@ -12234,7 +12231,7 @@ packages: '@glint/template': 1.3.0 ember-async-data: 1.0.1(ember-source@5.4.1) ember-concurrency: 3.1.1(@babel/core@7.24.3)(ember-source@5.4.1) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color dev: true @@ -12321,7 +12318,7 @@ packages: - supports-color dev: true - /ember-source@5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0): + /ember-source@5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0): resolution: {integrity: sha512-9nDumNOxODPHUDE0s/mDelOnpB416PrngeG88Gxha3NLbjR2sgQV3K6KQ/w8sCaTGB3qVXNZSi+RqLPO+d74Ig==} engines: {node: '>= 16.*'} peerDependencies: @@ -12380,7 +12377,6 @@ packages: - rsvp - supports-color - webpack - patched: true /ember-style-modifier@4.3.1(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-source@5.4.1): resolution: {integrity: sha512-QO7w7WX0nbM9L2XGjsTuLDWOvh073XXSLUXRnuKRGbG2iLHDuoCXZsRCZu2Ov6yFt9vB7vnNszQ+C0bUxqloeg==} @@ -12393,7 +12389,7 @@ packages: csstype: 3.1.3 decorator-transforms: 1.1.0(@babel/core@7.24.3) ember-modifier: 4.1.0(ember-source@5.4.1) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -12561,7 +12557,7 @@ packages: dependencies: '@embroider/addon-shim': 1.8.7 ember-functions-as-helper-polyfill: 2.1.2(ember-source@5.4.1) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color @@ -12641,7 +12637,7 @@ packages: '@floating-ui/dom': 1.6.3 ember-functions-as-helper-polyfill: 2.1.2(ember-source@5.4.1) ember-modifier: 4.1.0(ember-source@5.4.1) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color @@ -12653,7 +12649,7 @@ packages: dependencies: ember-cli-babel: 7.26.11 ember-cli-htmlbars: 6.3.0 - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color dev: true @@ -23447,7 +23443,7 @@ packages: broccoli-merge-trees: 4.2.0 broccoli-plugin: 4.0.7 ember-cli-babel: 8.2.0(@babel/core@7.24.3) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color dev: true From 5ff060d5eb28fe4136e4d306d9bba9686dce3fcb Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Mon, 27 May 2024 13:55:48 -0500 Subject: [PATCH 30/43] Add timing around fetchModule --- packages/host/config/fastboot.js | 1 + packages/realm-server/fastboot.ts | 2 ++ packages/runtime-common/loader.ts | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/host/config/fastboot.js b/packages/host/config/fastboot.js index dfbeec7589..dae3427841 100644 --- a/packages/host/config/fastboot.js +++ b/packages/host/config/fastboot.js @@ -16,6 +16,7 @@ module.exports = function () { Request: globalThis.Request, fetch: globalThis.fetch, btoa, + performance: globalThis.performance, }); }, }; diff --git a/packages/realm-server/fastboot.ts b/packages/realm-server/fastboot.ts index ebf27c6b83..7177800868 100644 --- a/packages/realm-server/fastboot.ts +++ b/packages/realm-server/fastboot.ts @@ -36,6 +36,7 @@ export async function makeFastBootIndexRunner( getRunnerOpts, _logDefinitions: (globalThis as any)._logDefinitions, jsdom: new JSDOM(''), + performance: globalThis.performance, }); }, }) as FastBootInstance; @@ -53,6 +54,7 @@ export async function makeFastBootIndexRunner( getRunnerOpts, _logDefinitions: (globalThis as any)._logDefinitions, jsdom: new JSDOM(''), + performance: globalThis.performance, }); }, )); diff --git a/packages/runtime-common/loader.ts b/packages/runtime-common/loader.ts index 6e3f259f98..e859a6a2f1 100644 --- a/packages/runtime-common/loader.ts +++ b/packages/runtime-common/loader.ts @@ -2,6 +2,7 @@ import TransformModulesAmdPlugin from 'transform-modules-amd-plugin'; import { transformSync } from '@babel/core'; import { Deferred } from './deferred'; import { trimExecutableExtension, logger } from './index'; +import { time } from './helpers/time'; import { CardError } from './error'; import flatMap from 'lodash/flatMap'; @@ -278,7 +279,7 @@ export class Loader { outer_switch: switch (module?.state) { case undefined: - await this.fetchModule(resolvedURL); + await time('fetchModule', this.fetchModule(resolvedURL)); break; case 'fetching': await module.deferred.promise; From 8a758c5f911e8ab8a8384a525df0786ccc2ef3cb Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Mon, 27 May 2024 14:30:03 -0500 Subject: [PATCH 31/43] Add JSON output --- packages/host/tests/test-helper.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index 54ad051790..edcdc1ea3c 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -27,6 +27,7 @@ QUnit.on('suiteEnd', (suiteEnd) => { [...times.keys()].forEach((key) => { log.error(`${key}: ${times.get(key)}`); }); + log.error(JSON.stringify(Array.from(times.entries()))); log.error('that is all'); }); @@ -39,6 +40,7 @@ QUnit.on('runEnd', () => { [...times.keys()].forEach((key) => { log.error(`${key}: ${times.get(key)}`); }); + log.error(JSON.stringify(Array.from(times.entries()))); log.error('that is all'); }); From 69525c3cc6e0e469fcb8a9f3551bd4fc7d4d0205 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Mon, 27 May 2024 15:48:15 -0500 Subject: [PATCH 32/43] Remove some metrics --- packages/host/app/services/matrix-service.ts | 5 +---- packages/host/tests/helpers/index.gts | 4 +--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/host/app/services/matrix-service.ts b/packages/host/app/services/matrix-service.ts index ecff72de15..7b5df24341 100644 --- a/packages/host/app/services/matrix-service.ts +++ b/packages/host/app/services/matrix-service.ts @@ -30,7 +30,6 @@ import { basicMappings, generateCardPatchCallSpecification, } from '@cardstack/runtime-common/helpers/ai'; -import { time } from '@cardstack/runtime-common/helpers/time'; import { RealmAuthClient } from '@cardstack/runtime-common/realm-auth-client'; @@ -97,9 +96,7 @@ export default class MatrixService extends Service { constructor(owner: Owner) { super(owner); - this.#ready = time('matrix-service-load-sdk', async () => - this.loadSDK.perform(), - ); + this.#ready = this.loadSDK.perform(); } get ready() { diff --git a/packages/host/tests/helpers/index.gts b/packages/host/tests/helpers/index.gts index b0a1d72dff..062b243007 100644 --- a/packages/host/tests/helpers/index.gts +++ b/packages/host/tests/helpers/index.gts @@ -577,9 +577,7 @@ export function setupCardLogs( ) { hooks.afterEach(async function () { let api = await apiThunk(); - time('setupCardLogs:flushLogs', async () => { - await api.flushLogs(); - }); + await api.flushLogs(); }); } From ceba45549da60b7434be072f78de88bb57a3c124 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Mon, 27 May 2024 15:56:53 -0500 Subject: [PATCH 33/43] Add more granular metrics in loadModule --- packages/runtime-common/helpers/time.ts | 22 ++++++++++++++++++++++ packages/runtime-common/loader.ts | 10 +++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/runtime-common/helpers/time.ts b/packages/runtime-common/helpers/time.ts index d39d0abac8..41e64ee59c 100644 --- a/packages/runtime-common/helpers/time.ts +++ b/packages/runtime-common/helpers/time.ts @@ -1,4 +1,5 @@ let labelToTime = new Map(); +let labelToStartTime = new Map(); export async function time( label: string, @@ -22,6 +23,27 @@ export async function time( } } +export async function timeStart(label: string) { + labelToStartTime.set(label, performance.now()); +} + +export async function timeEnd(label: string) { + let now = performance.now(); + let startTime = labelToStartTime.get(label); + if (startTime === undefined) { + console.error(`No start time found for label ${label}`); + return NaN; + } + + let diff = now - startTime; + let lastTime = labelToTime.get(label) || 0; + labelToTime.set(label, lastTime + diff); + + labelToStartTime.delete(label); + + return diff; +} + export function getTimes() { return labelToTime; } diff --git a/packages/runtime-common/loader.ts b/packages/runtime-common/loader.ts index e859a6a2f1..9223d14fc7 100644 --- a/packages/runtime-common/loader.ts +++ b/packages/runtime-common/loader.ts @@ -2,7 +2,7 @@ import TransformModulesAmdPlugin from 'transform-modules-amd-plugin'; import { transformSync } from '@babel/core'; import { Deferred } from './deferred'; import { trimExecutableExtension, logger } from './index'; -import { time } from './helpers/time'; +import { time, timeStart, timeEnd } from './helpers/time'; import { CardError } from './error'; import flatMap from 'lodash/flatMap'; @@ -540,6 +540,7 @@ export class Loader { | { type: 'shimmed'; module: Record }; try { + timeStart('fetchModule:load'); loaded = await this.load(moduleURL); } catch (exception) { this.setModule(moduleIdentifier, { @@ -548,6 +549,8 @@ export class Loader { consumedModules: new Set(), // we blew up before we could understand what was inside ourselves }); throw exception; + } finally { + timeEnd('fetchModule:load'); } if (loaded.type === 'shimmed') { @@ -562,6 +565,7 @@ export class Loader { let src: string | null | undefined = loaded.source; + timeStart('fetchModule:transformSync'); src = transformSync(src, { plugins: [ [ @@ -572,6 +576,7 @@ export class Loader { sourceMaps: 'inline', filename: moduleIdentifier, })?.code; + timeEnd('fetchModule:transformSync'); if (!src) { throw new Error(`bug: should never get here`); } @@ -601,6 +606,7 @@ export class Loader { implementation = impl; }; + timeStart('fetchModule:eval'); try { eval(src); // + "\n//# sourceURL=" + moduleIdentifier); } catch (exception) { @@ -610,6 +616,8 @@ export class Loader { consumedModules: new Set(), // we blew up before we could understand what was inside ourselves }); throw exception; + } finally { + timeEnd('fetchModule:eval'); } let registeredModule: RegisteredModule = { From 96af3a4692bc1e3dadc19708ba6da0be67815fb6 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Mon, 27 May 2024 16:47:32 -0500 Subject: [PATCH 34/43] Add another metric --- packages/runtime-common/loader.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/runtime-common/loader.ts b/packages/runtime-common/loader.ts index 9223d14fc7..771e6b13b3 100644 --- a/packages/runtime-common/loader.ts +++ b/packages/runtime-common/loader.ts @@ -702,6 +702,7 @@ export class Loader { | { type: 'shimmed'; module: Record } > { let response: Response; + timeStart('load:fetch'); try { response = await this.fetch(moduleURL); } catch (err) { @@ -710,6 +711,8 @@ export class Loader { // "broken" state, since the server hosting the module is likely down. it // might be a good idea to be able to try again in this case... throw err; + } finally { + timeEnd('load:fetch'); } if (!response.ok) { let error = await CardError.fromFetchResponse(moduleURL.href, response); From 84b2992b228de723d2d6fb7771bd71781c36a7f4 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Mon, 27 May 2024 21:27:35 -0500 Subject: [PATCH 35/43] Add timing around fetch parts --- packages/runtime-common/loader.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/runtime-common/loader.ts b/packages/runtime-common/loader.ts index 771e6b13b3..5e5e306248 100644 --- a/packages/runtime-common/loader.ts +++ b/packages/runtime-common/loader.ts @@ -453,16 +453,22 @@ export class Loader { mergedHeaders = { ...mergedHeaders, ...headersFromRequest(request) }; setHeaders(request, mergedHeaders); + timeStart('fetch:handler'); let result = await handler(request); + timeEnd('fetch:handler'); + // the handler is allowed to mutate the headers, so we merge any updated headers mergedHeaders = { ...mergedHeaders, ...headersFromRequest(request) }; if (result) { - return await followRedirections( + timeStart('fetch:followRedirections'); + let followed = await followRedirections( request, result, this.fetch.bind(this), ); + timeEnd('fetch:followRedirections'); + return followed; } } @@ -475,9 +481,18 @@ export class Loader { return response; } + timeStart('fetch:asRequest'); let request = this.asRequest(urlOrRequest, init); + timeEnd('fetch:asRequest'); + + timeStart('fetch:setHeaders'); setHeaders(request, mergedHeaders); - return await this.fetchImplementation(request); + timeEnd('fetch:setHeaders'); + + timeStart('fetch:actualFetch'); + let actualFetch = await this.fetchImplementation(request); + timeEnd('fetch:actualFetch'); + return actualFetch; } catch (err: any) { let url = urlOrRequest instanceof Request From 2cdc32ebf2c57f75eb660455dcdd7d3048667159 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Tue, 28 May 2024 09:36:30 -0500 Subject: [PATCH 36/43] Add timings around mapRequest --- packages/runtime-common/virtual-network.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/runtime-common/virtual-network.ts b/packages/runtime-common/virtual-network.ts index c96f12cc2c..2c73293619 100644 --- a/packages/runtime-common/virtual-network.ts +++ b/packages/runtime-common/virtual-network.ts @@ -9,6 +9,7 @@ import type { Readable } from 'stream'; export interface ResponseWithNodeStream extends Response { nodeStream?: Readable; } +import { time } from './helpers/time'; const isFastBoot = typeof (globalThis as any).FastBoot !== 'undefined'; @@ -149,10 +150,14 @@ export class VirtualNetwork { request: Request, direction: 'virtual-to-real' | 'real-to-virtual', ) { - let remappedUrl = this.resolveURLMapping(request.url, direction); + let remappedUrl = await time('mapRequest:resolveURLMapping', () => + this.resolveURLMapping(request.url, direction), + ); if (remappedUrl) { - return await buildRequest(remappedUrl, request); + return await time('mapRequest:buildRequest', () => + buildRequest(remappedUrl, request), + ); } else { return request; } From 967442fecd627efff6a718d74bc0b7004e2c45e9 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 5 Jun 2024 10:35:18 -0500 Subject: [PATCH 37/43] Update lockfile --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 29197f75da..f7e28d4e62 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12136,7 +12136,7 @@ packages: ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.89.0) ember-cli-babel: 8.2.0(@babel/core@7.24.3) ember-qunit: 8.0.2(@ember/test-helpers@3.3.0)(@glint/template@1.3.0)(ember-source@5.4.1)(qunit@2.20.1) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) execa: 8.0.1 fs-extra: 11.2.0 js-yaml: 4.1.0 From 042627fa05ac3e03df2ddd7e47a788a112731c25 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 5 Jun 2024 10:48:42 -0500 Subject: [PATCH 38/43] Add browser namespacing --- .github/workflows/ci.yaml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5eaf441565..71a85ddff3 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -185,7 +185,7 @@ jobs: uses: actions/upload-artifact@v4 if: always() with: - name: host-test-report-${{ matrix.shardIndex }} + name: host-test-report-${{ matrix.browser }}-${{ matrix.shardIndex }} path: junit/host-${{ matrix.shardIndex }}.xml retention-days: 30 @@ -194,6 +194,10 @@ jobs: if: always() needs: host-test runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + browser: ["Chrome", "Firefox"] steps: - uses: actions/checkout@v4 @@ -210,7 +214,7 @@ jobs: uses: actions/download-artifact@v4 with: path: all-host-reports - pattern: host-test-report-* + pattern: host-test-report-${{ matrix.browser }}-* merge-multiple: true - run: ls @@ -223,7 +227,7 @@ jobs: uses: actions/upload-artifact@v4 if: always() with: - name: host-test-report-merged + name: host-test-report-merged-${{ matrix.browser }} path: host.xml retention-days: 30 @@ -232,7 +236,7 @@ jobs: if: always() with: junit_files: host.xml - check_name: Host Test Results + check_name: Host Test Results (${{ matrix.browser }}) matrix-client-test: name: Matrix Client Tests From 78604df19706a5bdaf9d1272159881b6b6ffa7db Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 5 Jun 2024 11:47:33 -0500 Subject: [PATCH 39/43] Change shard count --- .github/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 71a85ddff3..b0b63a7a92 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -149,8 +149,8 @@ jobs: fail-fast: false matrix: browser: ["Chrome", "Firefox"] - shardIndex: [1, 2, 3, 4, 5, 6] - shardTotal: [6] + shardIndex: [1, 2, 3, 4, 5, 6, 7, 8] + shardTotal: [8] env: TESTEM_BROWSER: ${{ matrix.browser }} concurrency: From f94430e04a96bf6d764d92426b28d67789e79fa7 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 5 Jun 2024 12:46:15 -0500 Subject: [PATCH 40/43] Change to twelve shards --- .github/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b0b63a7a92..1495911612 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -149,8 +149,8 @@ jobs: fail-fast: false matrix: browser: ["Chrome", "Firefox"] - shardIndex: [1, 2, 3, 4, 5, 6, 7, 8] - shardTotal: [8] + shardIndex: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + shardTotal: [12] env: TESTEM_BROWSER: ${{ matrix.browser }} concurrency: From f6e46969fba13e4c59f66d31af2401b1f89d3e3d Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 11 Jul 2024 16:53:22 -0500 Subject: [PATCH 41/43] Fix lockfile --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 839d6c570f..2c8d499ee4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12589,7 +12589,7 @@ packages: '@ember/test-waiters': 3.0.2 '@embroider/addon-shim': 1.8.7 ember-modifier: 4.1.0(ember-source@5.4.1) - ember-source: 5.4.1(patch_hash=oko46qetwhgpor6xgs7vahyney)(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) + ember-source: 5.4.1(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(rsvp@4.8.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color dev: false From a642bb8922baeef5ffe020ba1ba62dcc7331a399 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 11 Jul 2024 18:46:59 -0500 Subject: [PATCH 42/43] Fix report download --- .github/workflows/ci-host.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-host.yaml b/.github/workflows/ci-host.yaml index 7ca5c0b81a..4c0b1aa842 100644 --- a/.github/workflows/ci-host.yaml +++ b/.github/workflows/ci-host.yaml @@ -89,7 +89,7 @@ jobs: uses: actions/download-artifact@v4 with: path: all-host-reports - pattern: host-test-report-* + pattern: host-test-report-${{ matrix.browser }}-* merge-multiple: true - run: ls From 7a8749c89953537c1a50d0cf19a3368303f35944 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Fri, 12 Jul 2024 10:54:19 -0500 Subject: [PATCH 43/43] Change to 10 shards again --- .github/workflows/ci-host.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-host.yaml b/.github/workflows/ci-host.yaml index 4c0b1aa842..2e5293eefc 100644 --- a/.github/workflows/ci-host.yaml +++ b/.github/workflows/ci-host.yaml @@ -19,8 +19,8 @@ jobs: fail-fast: false matrix: browser: ["Chrome", "Firefox"] - shardIndex: [1, 2, 3, 4, 5, 6] - shardTotal: [6] + shardIndex: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + shardTotal: [10] env: TESTEM_BROWSER: ${{ matrix.browser }} concurrency: