//
// Copyright (C) 2023 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// @generated by protoc-gen-es v2.2.2 with parameter "target=ts"
// @generated from file protos/perfetto/metrics/chrome/scroll_jank_v3.proto (package perfetto.protos, syntax proto2)
/* eslint-disable */

import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1";
import { file_protos_perfetto_metrics_custom_options } from "../custom_options_pb";
import type { Message } from "@bufbuild/protobuf";

/**
 * Describes the file protos/perfetto/metrics/chrome/scroll_jank_v3.proto.
 */
export const file_protos_perfetto_metrics_chrome_scroll_jank_v3: GenFile = /*@__PURE__*/
  fileDesc("CjNwcm90b3MvcGVyZmV0dG8vbWV0cmljcy9jaHJvbWUvc2Nyb2xsX2phbmtfdjMucHJvdG8SD3BlcmZldHRvLnByb3RvcyLjBQoSQ2hyb21lU2Nyb2xsSmFua1YzEjIKEHRyYWNlX251bV9mcmFtZXMYASABKANCGIq1GBRjb3VudF9iaWdnZXJJc0JldHRlchI5ChZ0cmFjZV9udW1famFua3lfZnJhbWVzGAIgASgDQhmKtRgVY291bnRfc21hbGxlcklzQmV0dGVyEjwKHHRyYWNlX3Njcm9sbF9qYW5rX3BlcmNlbnRhZ2UYAyABKAFCFoq1GBJuJV9zbWFsbGVySXNCZXR0ZXISMAoRdnN5bmNfaW50ZXJ2YWxfbXMYBCABKAFCFYq1GBFtc19iaWdnZXJJc0JldHRlchI7CgdzY3JvbGxzGAUgAygLMioucGVyZmV0dG8ucHJvdG9zLkNocm9tZVNjcm9sbEphbmtWMy5TY3JvbGwasAMKBlNjcm9sbBIsCgpudW1fZnJhbWVzGAEgASgDQhiKtRgUY291bnRfYmlnZ2VySXNCZXR0ZXISMwoQbnVtX2phbmt5X2ZyYW1lcxgCIAEoA0IZirUYFWNvdW50X3NtYWxsZXJJc0JldHRlchI2ChZzY3JvbGxfamFua19wZXJjZW50YWdlGAMgASgBQhaKtRgSbiVfc21hbGxlcklzQmV0dGVyEkAKGm1heF9kZWxheV9zaW5jZV9sYXN0X2ZyYW1lGAQgASgBQhyKtRgYdW5pdGxlc3Nfc21hbGxlcklzQmV0dGVyElYKEnNjcm9sbF9qYW5rX2NhdXNlcxgFIAMoCzI6LnBlcmZldHRvLnByb3Rvcy5DaHJvbWVTY3JvbGxKYW5rVjMuU2Nyb2xsLlNjcm9sbEphbmtDYXVzZRpxCg9TY3JvbGxKYW5rQ2F1c2USDQoFY2F1c2UYASABKAkSEQoJc3ViX2NhdXNlGAIgASgJEjwKFmRlbGF5X3NpbmNlX2xhc3RfZnJhbWUYAyABKAFCHIq1GBh1bml0bGVzc19zbWFsbGVySXNCZXR0ZXI", [file_protos_perfetto_metrics_custom_options]);

/**
 * @generated from message perfetto.protos.ChromeScrollJankV3
 */
export type ChromeScrollJankV3 = Message<"perfetto.protos.ChromeScrollJankV3"> & {
  /**
   * Total count of unique frames in the trace.
   *
   * @generated from field: optional int64 trace_num_frames = 1;
   */
  traceNumFrames: bigint;

  /**
   * Number of frames in the trace that had missed vsyncs.
   *
   * @generated from field: optional int64 trace_num_janky_frames = 2;
   */
  traceNumJankyFrames: bigint;

  /**
   * Computed as: `100 * trace_num_janky_frames /
   * trace_num_frames`.
   *
   * @generated from field: optional double trace_scroll_jank_percentage = 3;
   */
  traceScrollJankPercentage: number;

  /**
   * Vsync interval at the time of recording the trace.
   *
   * @generated from field: optional double vsync_interval_ms = 4;
   */
  vsyncIntervalMs: number;

  /**
   * @generated from field: repeated perfetto.protos.ChromeScrollJankV3.Scroll scrolls = 5;
   */
  scrolls: ChromeScrollJankV3_Scroll[];
};

/**
 * Describes the message perfetto.protos.ChromeScrollJankV3.
 * Use `create(ChromeScrollJankV3Schema)` to create a new message.
 */
export const ChromeScrollJankV3Schema: GenMessage<ChromeScrollJankV3> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_metrics_chrome_scroll_jank_v3, 0);

/**
 * Per-scroll metrics.
 *
 * @generated from message perfetto.protos.ChromeScrollJankV3.Scroll
 */
export type ChromeScrollJankV3_Scroll = Message<"perfetto.protos.ChromeScrollJankV3.Scroll"> & {
  /**
   * Total count of unique frames during this scroll.
   *
   * @generated from field: optional int64 num_frames = 1;
   */
  numFrames: bigint;

  /**
   * Number of frames during this scroll that had missed vsyncs.
   *
   * @generated from field: optional int64 num_janky_frames = 2;
   */
  numJankyFrames: bigint;

  /**
   * Computed as: `100 * num_janky_frames / num_frames`.
   *
   * @generated from field: optional double scroll_jank_percentage = 3;
   */
  scrollJankPercentage: number;

  /**
   * Maximum `delay_since_last_frame` for janky frames during this scroll
   * (i.e. maximum `delay_since_last_frame` from the `scroll_jank_causes`
   * repeated field below).
   * This is measured in units of vsync interval. For example, a value of 2
   * means the delay was 2x the vsync interval.
   *
   * @generated from field: optional double max_delay_since_last_frame = 4;
   */
  maxDelaySinceLastFrame: number;

  /**
   * @generated from field: repeated perfetto.protos.ChromeScrollJankV3.Scroll.ScrollJankCause scroll_jank_causes = 5;
   */
  scrollJankCauses: ChromeScrollJankV3_Scroll_ScrollJankCause[];
};

/**
 * Describes the message perfetto.protos.ChromeScrollJankV3.Scroll.
 * Use `create(ChromeScrollJankV3_ScrollSchema)` to create a new message.
 */
export const ChromeScrollJankV3_ScrollSchema: GenMessage<ChromeScrollJankV3_Scroll> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_metrics_chrome_scroll_jank_v3, 0, 0);

/**
 * The primary cause and sub-cause for scroll jank, one for each jank.
 * There are exactly `num_janky_frames` items in this field.
 *
 * @generated from message perfetto.protos.ChromeScrollJankV3.Scroll.ScrollJankCause
 */
export type ChromeScrollJankV3_Scroll_ScrollJankCause = Message<"perfetto.protos.ChromeScrollJankV3.Scroll.ScrollJankCause"> & {
  /**
   * May be empty, if a cause is not available.
   *
   * @generated from field: optional string cause = 1;
   */
  cause: string;

  /**
   * May be empty, if a sub-cause is not available.
   *
   * @generated from field: optional string sub_cause = 2;
   */
  subCause: string;

  /**
   * Number of vsyncs elapsed since the previous frame was presented: will
   * be > 1.0 since this was a "janky" frame. For example, a value of 2
   * means the delay was 2x the vsync interval.
   *
   * @generated from field: optional double delay_since_last_frame = 3;
   */
  delaySinceLastFrame: number;
};

/**
 * Describes the message perfetto.protos.ChromeScrollJankV3.Scroll.ScrollJankCause.
 * Use `create(ChromeScrollJankV3_Scroll_ScrollJankCauseSchema)` to create a new message.
 */
export const ChromeScrollJankV3_Scroll_ScrollJankCauseSchema: GenMessage<ChromeScrollJankV3_Scroll_ScrollJankCause> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_metrics_chrome_scroll_jank_v3, 0, 0, 0);

