diff --git a/Libraries/ReactNative/AppRegistry.d.ts b/Libraries/ReactNative/AppRegistry.d.ts index 468f7d3bd57c06..d6fa9627581a9a 100644 --- a/Libraries/ReactNative/AppRegistry.d.ts +++ b/Libraries/ReactNative/AppRegistry.d.ts @@ -8,9 +8,12 @@ */ import type * as React from 'react'; +import type {IPerformanceLogger} from '../Utilities/createPerformanceLogger'; type Task = (taskData: any) => Promise; type TaskProvider = () => Task; +type TaskCanceller = () => void; +type TaskCancelProvider = () => TaskCanceller; export type ComponentProvider = () => React.ComponentType; @@ -22,6 +25,13 @@ export type AppConfig = { run?: Runnable | undefined; }; +export type ComponentProviderInstrumentationHook = ( + component: ComponentProvider, + scopedPerformanceLogger: IPerformanceLogger, +) => React.ComponentType; + +export type WrapperComponentProvider = (any) => React.ComponentType; + /** * `AppRegistry` is the JS entry point to running all React Native apps. App * root components should register themselves with @@ -38,17 +48,31 @@ export type AppConfig = { * `require`d. */ export namespace AppRegistry { + export function setWrapperComponentProvider( + provider: WrapperComponentProvider, + ); + export function registerConfig(config: AppConfig[]): void; export function registerComponent( appKey: string, getComponentFunc: ComponentProvider, + section?: boolean, ): string; export function registerRunnable(appKey: string, func: Runnable): string; + export function registerSection( + appKey: string, + component: ComponentProvider, + ): void; + export function getAppKeys(): string[]; + export function getSectionKeys(): string[]; + + export function getSections(): Record; + export function unmountApplicationComponentAtRootTag(rootTag: number): void; export function runApplication(appKey: string, appParameters: any): void; @@ -65,4 +89,29 @@ export namespace AppRegistry { ): void; export function getRunnable(appKey: string): Runnable | undefined; + + export function getRegistry(): {sections: string[]; runnables: Runnable[]}; + + export function setComponentProviderInstrumentationHook( + hook: ComponentProviderInstrumentationHook, + ); + + export function registerHeadlessTask( + taskKey: string, + taskProvider: TaskProvider, + ): void; + + export function registerCancellableHeadlessTask( + taskKey: string, + taskProvider: TaskProvider, + taskCancelProvider: TaskCancelProvider, + ): void; + + export function startHeadlessTask( + taskId: number, + taskKey: string, + data: any, + ): void; + + export function cancelHeadlessTask(taskId: number, taskKey: string): void; } diff --git a/Libraries/Utilities/createPerformanceLogger.d.ts b/Libraries/Utilities/createPerformanceLogger.d.ts new file mode 100644 index 00000000000000..57b590b99da4d1 --- /dev/null +++ b/Libraries/Utilities/createPerformanceLogger.d.ts @@ -0,0 +1,48 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +export type Timespan = { + startTime: number; + endTime?: number; + totalTime?: number; + startExtras?: Extras; + endExtras?: Extras; +}; + +// Extra values should be serializable primitives +export type ExtraValue = number | string | boolean; + +export type Extras = {[key: string]: ExtraValue}; + +export interface IPerformanceLogger { + addTimespan( + key: string, + startTime: number, + endTime: number, + startExtras?: Extras, + endExtras?: Extras, + ): void; + append(logger: IPerformanceLogger): void; + clear(): void; + clearCompleted(): void; + close(): void; + currentTimestamp(): number; + getExtras(): {[key: string]: ExtraValue | null}; + getPoints(): {[key: string]: number | null}; + getPointExtras(): {[key: string]: Extras | null}; + getTimespans(): {[key: string]: Timespan | null}; + hasTimespan(key: string): boolean; + isClosed(): boolean; + logEverything(): void; + markPoint(key: string, timestamp?: number, extras?: Extras): void; + removeExtra(key: string): ExtraValue | null; + setExtra(key: string, value: ExtraValue): void; + startTimespan(key: string, timestamp?: number, extras?: Extras): void; + stopTimespan(key: string, timestamp?: number, extras?: Extras): void; +}