xref: /aosp_15_r20/external/cronet/components/metrics/debug/browser_proxy.ts (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker// Copyright 2022 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker// found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Workerimport {sendWithPromise} from 'chrome://resources/js/cr.js';
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker// <if expr="structured_metrics_enabled">
8*6777b538SAndroid Build Coastguard Workerimport type {StructuredMetricEvent, StructuredMetricsSummary} from './structured/structured_utils.js';
9*6777b538SAndroid Build Coastguard Worker// </if>
10*6777b538SAndroid Build Coastguard Worker
11*6777b538SAndroid Build Coastguard Worker/**
12*6777b538SAndroid Build Coastguard Worker * @fileoverview A helper object used by the chrome://metrics-internals page to
13*6777b538SAndroid Build Coastguard Worker * interact with the browser.
14*6777b538SAndroid Build Coastguard Worker */
15*6777b538SAndroid Build Coastguard Worker
16*6777b538SAndroid Build Coastguard Worker/**
17*6777b538SAndroid Build Coastguard Worker * A pair of strings representing a row in a summary table. For example, |key|
18*6777b538SAndroid Build Coastguard Worker * could be "Platform", with |value| being "Android".
19*6777b538SAndroid Build Coastguard Worker */
20*6777b538SAndroid Build Coastguard Workerexport interface KeyValue {
21*6777b538SAndroid Build Coastguard Worker  key: string;
22*6777b538SAndroid Build Coastguard Worker  value: string;
23*6777b538SAndroid Build Coastguard Worker}
24*6777b538SAndroid Build Coastguard Worker
25*6777b538SAndroid Build Coastguard Worker/**
26*6777b538SAndroid Build Coastguard Worker * An individual event that occurred on a log. Optionally, this may include a
27*6777b538SAndroid Build Coastguard Worker * message. For example, for a "Trimmed" event, the message could be "Log size
28*6777b538SAndroid Build Coastguard Worker * too large".
29*6777b538SAndroid Build Coastguard Worker */
30*6777b538SAndroid Build Coastguard Workerexport interface LogEvent {
31*6777b538SAndroid Build Coastguard Worker  event: string;
32*6777b538SAndroid Build Coastguard Worker  timestampMs: number;
33*6777b538SAndroid Build Coastguard Worker  message?: string;
34*6777b538SAndroid Build Coastguard Worker}
35*6777b538SAndroid Build Coastguard Worker
36*6777b538SAndroid Build Coastguard Worker/**
37*6777b538SAndroid Build Coastguard Worker * A log and its data, including the events that occurred throughout its
38*6777b538SAndroid Build Coastguard Worker * lifetime. The |type| field is only set for UMA logs (i.e., ongoing,
39*6777b538SAndroid Build Coastguard Worker * independent, or stability). The |compressed_data| field (i.e., its proto
40*6777b538SAndroid Build Coastguard Worker * data) is only set when exporting.
41*6777b538SAndroid Build Coastguard Worker * TODO(crbug/1363747): Change name of |type| to something else, since it is
42*6777b538SAndroid Build Coastguard Worker * confusing and can be mistaken for |logType| in LogData (UMA or UKM).
43*6777b538SAndroid Build Coastguard Worker */
44*6777b538SAndroid Build Coastguard Workerexport interface Log {
45*6777b538SAndroid Build Coastguard Worker  type?: string;
46*6777b538SAndroid Build Coastguard Worker  hash: string;
47*6777b538SAndroid Build Coastguard Worker  timestamp: string;
48*6777b538SAndroid Build Coastguard Worker  data?: string;
49*6777b538SAndroid Build Coastguard Worker  size: number;
50*6777b538SAndroid Build Coastguard Worker  events: LogEvent[];
51*6777b538SAndroid Build Coastguard Worker}
52*6777b538SAndroid Build Coastguard Worker
53*6777b538SAndroid Build Coastguard Worker/**
54*6777b538SAndroid Build Coastguard Worker * A list of logs, as well as their type (UMA or UKM).
55*6777b538SAndroid Build Coastguard Worker */
56*6777b538SAndroid Build Coastguard Workerexport interface LogData {
57*6777b538SAndroid Build Coastguard Worker  logType: string;
58*6777b538SAndroid Build Coastguard Worker  logs: Log[];
59*6777b538SAndroid Build Coastguard Worker}
60*6777b538SAndroid Build Coastguard Worker
61*6777b538SAndroid Build Coastguard Workerexport interface MetricsInternalsBrowserProxy {
62*6777b538SAndroid Build Coastguard Worker  /**
63*6777b538SAndroid Build Coastguard Worker   * Gets UMA log data. |includeLogProtoData| determines whether or not the
64*6777b538SAndroid Build Coastguard Worker   * fetched data should also include the protos of the logs.
65*6777b538SAndroid Build Coastguard Worker   */
66*6777b538SAndroid Build Coastguard Worker  getUmaLogData(includeLogProtoData: boolean): Promise<string>;
67*6777b538SAndroid Build Coastguard Worker
68*6777b538SAndroid Build Coastguard Worker  /**
69*6777b538SAndroid Build Coastguard Worker   * Fetches a summary of variations info.
70*6777b538SAndroid Build Coastguard Worker   */
71*6777b538SAndroid Build Coastguard Worker  fetchVariationsSummary(): Promise<KeyValue[]>;
72*6777b538SAndroid Build Coastguard Worker
73*6777b538SAndroid Build Coastguard Worker  /**
74*6777b538SAndroid Build Coastguard Worker   * Fetches a summary of UMA info.
75*6777b538SAndroid Build Coastguard Worker   */
76*6777b538SAndroid Build Coastguard Worker  fetchUmaSummary(): Promise<KeyValue[]>;
77*6777b538SAndroid Build Coastguard Worker
78*6777b538SAndroid Build Coastguard Worker  /**
79*6777b538SAndroid Build Coastguard Worker   * Fetches whether the logs observer being used is owned by the metrics
80*6777b538SAndroid Build Coastguard Worker   * service or is owned by the page.
81*6777b538SAndroid Build Coastguard Worker   */
82*6777b538SAndroid Build Coastguard Worker  isUsingMetricsServiceObserver(): Promise<boolean>;
83*6777b538SAndroid Build Coastguard Worker
84*6777b538SAndroid Build Coastguard Worker  // <if expr="structured_metrics_enabled">
85*6777b538SAndroid Build Coastguard Worker  /**
86*6777b538SAndroid Build Coastguard Worker   * Fetches recorded events from Structured Metrics Service.
87*6777b538SAndroid Build Coastguard Worker   */
88*6777b538SAndroid Build Coastguard Worker  fetchStructuredMetricsEvents(): Promise<StructuredMetricEvent[]>;
89*6777b538SAndroid Build Coastguard Worker
90*6777b538SAndroid Build Coastguard Worker  /**
91*6777b538SAndroid Build Coastguard Worker   * Fetches a summary of the Structured Metrics Service.
92*6777b538SAndroid Build Coastguard Worker   */
93*6777b538SAndroid Build Coastguard Worker  fetchStructuredMetricsSummary(): Promise<StructuredMetricsSummary>;
94*6777b538SAndroid Build Coastguard Worker  // </if>
95*6777b538SAndroid Build Coastguard Worker}
96*6777b538SAndroid Build Coastguard Worker
97*6777b538SAndroid Build Coastguard Workerexport class MetricsInternalsBrowserProxyImpl implements
98*6777b538SAndroid Build Coastguard Worker    MetricsInternalsBrowserProxy {
99*6777b538SAndroid Build Coastguard Worker  getUmaLogData(includeLogProtoData: boolean): Promise<string> {
100*6777b538SAndroid Build Coastguard Worker    return sendWithPromise('fetchUmaLogsData', includeLogProtoData);
101*6777b538SAndroid Build Coastguard Worker  }
102*6777b538SAndroid Build Coastguard Worker
103*6777b538SAndroid Build Coastguard Worker  fetchVariationsSummary(): Promise<KeyValue[]> {
104*6777b538SAndroid Build Coastguard Worker    return sendWithPromise('fetchVariationsSummary');
105*6777b538SAndroid Build Coastguard Worker  }
106*6777b538SAndroid Build Coastguard Worker
107*6777b538SAndroid Build Coastguard Worker  fetchUmaSummary(): Promise<KeyValue[]> {
108*6777b538SAndroid Build Coastguard Worker    return sendWithPromise('fetchUmaSummary');
109*6777b538SAndroid Build Coastguard Worker  }
110*6777b538SAndroid Build Coastguard Worker
111*6777b538SAndroid Build Coastguard Worker  isUsingMetricsServiceObserver(): Promise<boolean> {
112*6777b538SAndroid Build Coastguard Worker    return sendWithPromise('isUsingMetricsServiceObserver');
113*6777b538SAndroid Build Coastguard Worker  }
114*6777b538SAndroid Build Coastguard Worker
115*6777b538SAndroid Build Coastguard Worker  // <if expr="structured_metrics_enabled">
116*6777b538SAndroid Build Coastguard Worker  fetchStructuredMetricsEvents(): Promise<StructuredMetricEvent[]> {
117*6777b538SAndroid Build Coastguard Worker    return sendWithPromise('fetchStructuredMetricsEvents');
118*6777b538SAndroid Build Coastguard Worker  }
119*6777b538SAndroid Build Coastguard Worker
120*6777b538SAndroid Build Coastguard Worker  fetchStructuredMetricsSummary(): Promise<StructuredMetricsSummary> {
121*6777b538SAndroid Build Coastguard Worker    return sendWithPromise('fetchStructuredMetricsSummary');
122*6777b538SAndroid Build Coastguard Worker  }
123*6777b538SAndroid Build Coastguard Worker  // </if>
124*6777b538SAndroid Build Coastguard Worker
125*6777b538SAndroid Build Coastguard Worker  static getInstance(): MetricsInternalsBrowserProxy {
126*6777b538SAndroid Build Coastguard Worker    return instance || (instance = new MetricsInternalsBrowserProxyImpl());
127*6777b538SAndroid Build Coastguard Worker  }
128*6777b538SAndroid Build Coastguard Worker
129*6777b538SAndroid Build Coastguard Worker  static setInstance(obj: MetricsInternalsBrowserProxy) {
130*6777b538SAndroid Build Coastguard Worker    instance = obj;
131*6777b538SAndroid Build Coastguard Worker  }
132*6777b538SAndroid Build Coastguard Worker}
133*6777b538SAndroid Build Coastguard Worker
134*6777b538SAndroid Build Coastguard Workerlet instance: MetricsInternalsBrowserProxy|null = null;
135