/*
 * 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.
 */

syntax = "proto2";

package perfetto.protos;

// Contains information to identify mojo handling events. The trace events in
// mojo are common for all mojo interfaces and this information is used to
// identify who is the caller or callee.
message ChromeMojoEventInfo {
  // Contains the interface name or the file name of the creator of a mojo
  // handle watcher, recorded when an event if notified to the watcher. The code
  // that runs within the track event belongs to the interface.
  optional string watcher_notify_interface_tag = 1;

  // The hash of the IPC message that is being handled.
  optional uint32 ipc_hash = 2;

  // A static string representing the mojo interface name of the message that is
  // being handled.
  optional string mojo_interface_tag = 3;

  // Refers to an interned UnsymbolizedSourceLocation.
  // The UnsymbolizedSourceLocation contains the interface method that's being
  // handled, represented as a native symbol.
  // The native symbol can be symbolized after the trace is recorded.
  // Not using a symbolized source location for official Chromium builds to
  // reduce binary size - emitting file/function names as strings into the
  // trace requires storing them in the binary, which causes a significant
  // binary size bloat for Chromium.
  optional uint64 mojo_interface_method_iid = 4;
}
