From fcd4355ab0413fd037316a0d47dcecd44bc866db Mon Sep 17 00:00:00 2001 From: Pawel Kozlowski Date: Mon, 19 May 2025 12:14:38 +0200 Subject: [PATCH] refactor(core): expose enableProfiling() on from @angular/core (#61465) This commit exposes the experimental enableProfiling() API that enables Angular integration with the Chrome DevTools performance panel. Previously this integration was exposed on the ng. namespace only but there are legitimate cases where developers might want to expose the integration earlier (ex.: bootstrap profiling). PR Close #61465 --- goldens/public-api/core/index.api.md | 3 +++ packages/core/src/core.ts | 1 + .../debug/chrome_dev_tools_performance.ts | 19 +++++++++++++------ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/goldens/public-api/core/index.api.md b/goldens/public-api/core/index.api.md index c48f631f4d6..4f73671bba0 100644 --- a/goldens/public-api/core/index.api.md +++ b/goldens/public-api/core/index.api.md @@ -669,6 +669,9 @@ export abstract class EmbeddedViewRef extends ViewRef { // @public export function enableProdMode(): void; +// @public +export function enableProfiling(): () => void; + // @public @deprecated export const ENVIRONMENT_INITIALIZER: InjectionToken void)[]>; diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index a87d86bf775..15da95993e1 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -106,6 +106,7 @@ export {createComponent, reflectComponentType, ComponentMirror} from './render3/ export {isStandalone} from './render3/def_getters'; export {AfterRenderRef} from './render3/after_render/api'; export {publishExternalGlobalUtil as ɵpublishExternalGlobalUtil} from './render3/util/global_utils'; +export {enableProfiling} from './render3/debug/chrome_dev_tools_performance'; export { AfterRenderOptions, afterEveryRender, diff --git a/packages/core/src/render3/debug/chrome_dev_tools_performance.ts b/packages/core/src/render3/debug/chrome_dev_tools_performance.ts index 96442b690ee..b20f693b400 100644 --- a/packages/core/src/render3/debug/chrome_dev_tools_performance.ts +++ b/packages/core/src/render3/debug/chrome_dev_tools_performance.ts @@ -226,15 +226,22 @@ function getProviderTokenMeasureName(token: any) { * Start listening to the Angular's internal performance-related events and route those to the Chrome DevTools performance panel. * This enables Angular-specific data visualization when recording a performance profile directly in the Chrome DevTools. * + * Note: integration is enabled in the development mode only, this operation is noop in the production mode. + * + * @experimental + * * @returns a function that can be invoked to stop sending profiling data. */ export function enableProfiling() { performanceMarkFeature('Chrome DevTools profiling'); - const removeInjectorProfiler = setInjectorProfiler(chromeDevToolsInjectorProfiler); - const removeProfiler = setProfiler(devToolsProfiler); + if (typeof ngDevMode !== 'undefined' && ngDevMode) { + const removeInjectorProfiler = setInjectorProfiler(chromeDevToolsInjectorProfiler); + const removeProfiler = setProfiler(devToolsProfiler); - return () => { - removeInjectorProfiler(); - removeProfiler(); - }; + return () => { + removeInjectorProfiler(); + removeProfiler(); + }; + } + return () => {}; }