/*
 * Copyright (C) 2022 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.
 */

syntax = "proto2";

package perfetto.protos;

// Information of a frame associated with long latency input events.
// The latency info is extracted from EventLatency slices.
message ChromeLongLatency {
  message LongLatency {
    // The ending timestamp of the input event, i.e. the presentation time of
    // the frame that contains updates triggered by the input event.
    optional int64 ts = 1;

    // The type of the input event as reported in the EventLatency slice,
    // e.g. 'GestureScrollUpdate'.
    optional string event_type = 2;

    // The name and pid of the process where the EventLatency slice
    // originates from.
    optional string process_name = 3;
    optional int64 pid = 4;
  }

  repeated LongLatency long_latency = 1;
}