//
// Copyright (C) 2020 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/trace/track_event/chrome_frame_reporter.proto (package perfetto.protos, syntax proto2)
/* eslint-disable */

import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1";
import type { Message } from "@bufbuild/protobuf";

/**
 * Describes the file protos/perfetto/trace/track_event/chrome_frame_reporter.proto.
 */
export const file_protos_perfetto_trace_track_event_chrome_frame_reporter: GenFile = /*@__PURE__*/
  fileDesc("Cj1wcm90b3MvcGVyZmV0dG8vdHJhY2UvdHJhY2tfZXZlbnQvY2hyb21lX2ZyYW1lX3JlcG9ydGVyLnByb3RvEg9wZXJmZXR0by5wcm90b3MioggKE0Nocm9tZUZyYW1lUmVwb3J0ZXISOQoFc3RhdGUYASABKA4yKi5wZXJmZXR0by5wcm90b3MuQ2hyb21lRnJhbWVSZXBvcnRlci5TdGF0ZRJECgZyZWFzb24YAiABKA4yNC5wZXJmZXR0by5wcm90b3MuQ2hyb21lRnJhbWVSZXBvcnRlci5GcmFtZURyb3BSZWFzb24SFAoMZnJhbWVfc291cmNlGAMgASgEEhYKDmZyYW1lX3NlcXVlbmNlGAQgASgEEhoKEmFmZmVjdHNfc21vb3RobmVzcxgFIAEoCBJGCgxzY3JvbGxfc3RhdGUYBiABKA4yMC5wZXJmZXR0by5wcm90b3MuQ2hyb21lRnJhbWVSZXBvcnRlci5TY3JvbGxTdGF0ZRIaChJoYXNfbWFpbl9hbmltYXRpb24YByABKAgSIAoYaGFzX2NvbXBvc2l0b3JfYW5pbWF0aW9uGAggASgIEh0KFWhhc19zbW9vdGhfaW5wdXRfbWFpbhgJIAEoCBIbChNoYXNfbWlzc2luZ19jb250ZW50GAogASgIEhoKEmxheWVyX3RyZWVfaG9zdF9pZBgLIAEoBBIYChBoYXNfaGlnaF9sYXRlbmN5GAwgASgIEkIKCmZyYW1lX3R5cGUYDSABKA4yLi5wZXJmZXR0by5wcm90b3MuQ2hyb21lRnJhbWVSZXBvcnRlci5GcmFtZVR5cGUSJwofaGlnaF9sYXRlbmN5X2NvbnRyaWJ1dGlvbl9zdGFnZRgOIAMoCRIjChtjaGVja2VyYm9hcmRlZF9uZWVkc19yYXN0ZXIYDyABKAgSIwobY2hlY2tlcmJvYXJkZWRfbmVlZHNfcmVjb3JkGBAgASgIIm0KBVN0YXRlEhsKF1NUQVRFX05PX1VQREFURV9ERVNJUkVEEAASFwoTU1RBVEVfUFJFU0VOVEVEX0FMTBABEhsKF1NUQVRFX1BSRVNFTlRFRF9QQVJUSUFMEAISEQoNU1RBVEVfRFJPUFBFRBADIn4KD0ZyYW1lRHJvcFJlYXNvbhIWChJSRUFTT05fVU5TUEVDSUZJRUQQABIdChlSRUFTT05fRElTUExBWV9DT01QT1NJVE9SEAESFgoSUkVBU09OX01BSU5fVEhSRUFEEAISHAoYUkVBU09OX0NMSUVOVF9DT01QT1NJVE9SEAMiewoLU2Nyb2xsU3RhdGUSDwoLU0NST0xMX05PTkUQABIWChJTQ1JPTExfTUFJTl9USFJFQUQQARIcChhTQ1JPTExfQ09NUE9TSVRPUl9USFJFQUQQAhIRCg1TQ1JPTExfUkFTVEVSEAMSEgoOU0NST0xMX1VOS05PV04QBCIlCglGcmFtZVR5cGUSCgoGRk9SS0VEEAASDAoIQkFDS0ZJTEwQAQ");

/**
 * @generated from message perfetto.protos.ChromeFrameReporter
 */
export type ChromeFrameReporter = Message<"perfetto.protos.ChromeFrameReporter"> & {
  /**
   * @generated from field: optional perfetto.protos.ChromeFrameReporter.State state = 1;
   */
  state: ChromeFrameReporter_State;

  /**
   * The reason is set only if |state| is not |STATE_UPDATED_ALL|.
   *
   * @generated from field: optional perfetto.protos.ChromeFrameReporter.FrameDropReason reason = 2;
   */
  reason: ChromeFrameReporter_FrameDropReason;

  /**
   * @generated from field: optional uint64 frame_source = 3;
   */
  frameSource: bigint;

  /**
   * @generated from field: optional uint64 frame_sequence = 4;
   */
  frameSequence: bigint;

  /**
   * If this is a droped frame (i.e. if |state| is set to |STATE_DROPPED| or
   * |STATE_PRESENTED_PARTIAL|), then indicates whether this frame impacts
   * smoothness.
   *
   * @generated from field: optional bool affects_smoothness = 5;
   */
  affectsSmoothness: boolean;

  /**
   * The type of active scroll.
   *
   * @generated from field: optional perfetto.protos.ChromeFrameReporter.ScrollState scroll_state = 6;
   */
  scrollState: ChromeFrameReporter_ScrollState;

  /**
   * If any main thread animation is active during this frame.
   *
   * @generated from field: optional bool has_main_animation = 7;
   */
  hasMainAnimation: boolean;

  /**
   * If any compositor thread animation is active during this frame.
   *
   * @generated from field: optional bool has_compositor_animation = 8;
   */
  hasCompositorAnimation: boolean;

  /**
   * If any touch-driven UX (not scroll) is active during this frame.
   *
   * @generated from field: optional bool has_smooth_input_main = 9;
   */
  hasSmoothInputMain: boolean;

  /**
   * Whether the frame contained any missing content (i.e. whether there was
   * checkerboarding in the frame).  If has_missing_content,
   * checkerboarded_needs_raster and checkerboarded_needs_record all have
   * values, has_missing_content should equal checkerboarded_needs_raster ||
   * checkerboarded_needs_record.
   *
   * @generated from field: optional bool has_missing_content = 10;
   */
  hasMissingContent: boolean;

  /**
   * The id of layer_tree_host that the frame has been produced for.
   *
   * @generated from field: optional uint64 layer_tree_host_id = 11;
   */
  layerTreeHostId: bigint;

  /**
   * If total latency of PipelineReporter exceeds a certain limit.
   *
   * @generated from field: optional bool has_high_latency = 12;
   */
  hasHighLatency: boolean;

  /**
   * Indicate if the frame is "FORKED" (i.e. a PipelineReporter event starts at
   * the same frame sequence as another PipelineReporter) or "BACKFILL"
   * (i.e. dropped frames when there are no partial compositor updates).
   *
   * @generated from field: optional perfetto.protos.ChromeFrameReporter.FrameType frame_type = 13;
   */
  frameType: ChromeFrameReporter_FrameType;

  /**
   * The breakdown stage of PipelineReporter that is most likely accountable for
   * high latency.
   *
   * @generated from field: repeated string high_latency_contribution_stage = 14;
   */
  highLatencyContributionStage: string[];

  /**
   * Whether the frame contained any content that is not fully rastered.
   *
   * @generated from field: optional bool checkerboarded_needs_raster = 15;
   */
  checkerboardedNeedsRaster: boolean;

  /**
   * Whether the frame contained any content that is not fully recorded.
   *
   * @generated from field: optional bool checkerboarded_needs_record = 16;
   */
  checkerboardedNeedsRecord: boolean;
};

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

/**
 * @generated from enum perfetto.protos.ChromeFrameReporter.State
 */
export enum ChromeFrameReporter_State {
  /**
   * The frame did not have any updates to present.
   *
   * @generated from enum value: STATE_NO_UPDATE_DESIRED = 0;
   */
  NO_UPDATE_DESIRED = 0,

  /**
   * The frame presented all the desired updates (i.e. any updates requested
   * from both the compositor thread and main-threads were handled).
   *
   * @generated from enum value: STATE_PRESENTED_ALL = 1;
   */
  PRESENTED_ALL = 1,

  /**
   * The frame was presented with some updates, but also missed some updates
   * (e.g. missed updates from the main-thread, but included updates from the
   * compositor thread).
   *
   * @generated from enum value: STATE_PRESENTED_PARTIAL = 2;
   */
  PRESENTED_PARTIAL = 2,

  /**
   * The frame was dropped, i.e. some updates were desired for the frame, but
   * was not presented.
   *
   * @generated from enum value: STATE_DROPPED = 3;
   */
  DROPPED = 3,
}

/**
 * Describes the enum perfetto.protos.ChromeFrameReporter.State.
 */
export const ChromeFrameReporter_StateSchema: GenEnum<ChromeFrameReporter_State> = /*@__PURE__*/
  enumDesc(file_protos_perfetto_trace_track_event_chrome_frame_reporter, 0, 0);

/**
 * @generated from enum perfetto.protos.ChromeFrameReporter.FrameDropReason
 */
export enum ChromeFrameReporter_FrameDropReason {
  /**
   * @generated from enum value: REASON_UNSPECIFIED = 0;
   */
  REASON_UNSPECIFIED = 0,

  /**
   * Frame was dropped by the display-compositor.
   * The display-compositor may drop a frame some times (e.g. the frame missed
   * the deadline, or was blocked on surface-sync, etc.)
   *
   * @generated from enum value: REASON_DISPLAY_COMPOSITOR = 1;
   */
  REASON_DISPLAY_COMPOSITOR = 1,

  /**
   * Frame was dropped because of the main-thread.
   * The main-thread may cause a frame to be dropped, e.g. if the main-thread
   * is running expensive javascript, or doing a lot of layout updates, etc.
   *
   * @generated from enum value: REASON_MAIN_THREAD = 2;
   */
  REASON_MAIN_THREAD = 2,

  /**
   * Frame was dropped by the client compositor.
   * The client compositor can drop some frames too (e.g. attempting to
   * recover latency, missing the deadline, etc.).
   *
   * @generated from enum value: REASON_CLIENT_COMPOSITOR = 3;
   */
  REASON_CLIENT_COMPOSITOR = 3,
}

/**
 * Describes the enum perfetto.protos.ChromeFrameReporter.FrameDropReason.
 */
export const ChromeFrameReporter_FrameDropReasonSchema: GenEnum<ChromeFrameReporter_FrameDropReason> = /*@__PURE__*/
  enumDesc(file_protos_perfetto_trace_track_event_chrome_frame_reporter, 0, 1);

/**
 * @generated from enum perfetto.protos.ChromeFrameReporter.ScrollState
 */
export enum ChromeFrameReporter_ScrollState {
  /**
   * @generated from enum value: SCROLL_NONE = 0;
   */
  SCROLL_NONE = 0,

  /**
   * @generated from enum value: SCROLL_MAIN_THREAD = 1;
   */
  SCROLL_MAIN_THREAD = 1,

  /**
   * @generated from enum value: SCROLL_COMPOSITOR_THREAD = 2;
   */
  SCROLL_COMPOSITOR_THREAD = 2,

  /**
   * @generated from enum value: SCROLL_RASTER = 3;
   */
  SCROLL_RASTER = 3,

  /**
   * Used when it can't be determined whether a scroll is in progress or not.
   *
   * @generated from enum value: SCROLL_UNKNOWN = 4;
   */
  SCROLL_UNKNOWN = 4,
}

/**
 * Describes the enum perfetto.protos.ChromeFrameReporter.ScrollState.
 */
export const ChromeFrameReporter_ScrollStateSchema: GenEnum<ChromeFrameReporter_ScrollState> = /*@__PURE__*/
  enumDesc(file_protos_perfetto_trace_track_event_chrome_frame_reporter, 0, 2);

/**
 * @generated from enum perfetto.protos.ChromeFrameReporter.FrameType
 */
export enum ChromeFrameReporter_FrameType {
  /**
   * @generated from enum value: FORKED = 0;
   */
  FORKED = 0,

  /**
   * @generated from enum value: BACKFILL = 1;
   */
  BACKFILL = 1,
}

/**
 * Describes the enum perfetto.protos.ChromeFrameReporter.FrameType.
 */
export const ChromeFrameReporter_FrameTypeSchema: GenEnum<ChromeFrameReporter_FrameType> = /*@__PURE__*/
  enumDesc(file_protos_perfetto_trace_track_event_chrome_frame_reporter, 0, 3);

