1/**
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 * @format
8 */
9
10export type Timespan = {
11  startTime: number;
12  endTime?: number;
13  totalTime?: number;
14  startExtras?: Extras;
15  endExtras?: Extras;
16};
17
18// Extra values should be serializable primitives
19export type ExtraValue = number | string | boolean;
20
21export type Extras = {[key: string]: ExtraValue};
22
23export interface IPerformanceLogger {
24  addTimespan(
25    key: string,
26    startTime: number,
27    endTime: number,
28    startExtras?: Extras,
29    endExtras?: Extras,
30  ): void;
31  append(logger: IPerformanceLogger): void;
32  clear(): void;
33  clearCompleted(): void;
34  close(): void;
35  currentTimestamp(): number;
36  getExtras(): {[key: string]: ExtraValue | null};
37  getPoints(): {[key: string]: number | null};
38  getPointExtras(): {[key: string]: Extras | null};
39  getTimespans(): {[key: string]: Timespan | null};
40  hasTimespan(key: string): boolean;
41  isClosed(): boolean;
42  logEverything(): void;
43  markPoint(key: string, timestamp?: number, extras?: Extras): void;
44  removeExtra(key: string): ExtraValue | null;
45  setExtra(key: string, value: ExtraValue): void;
46  startTimespan(key: string, timestamp?: number, extras?: Extras): void;
47  stopTimespan(key: string, timestamp?: number, extras?: Extras): void;
48}
49