/*
 * Copyright (C) 2024 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";

import "protos/perfetto/trace/clock_snapshot.proto";

package perfetto.protos;

// Records the parameters for aligning clock readings between machines.
message RemoteClockSync {
  // Synchronized clock snapshots taken on both sides of the relay port (the
  // tracing service and the relay service). A round of clock synchronization
  // IPC takes emits 2 SyncedClocks messages, i.e., client snapshot -> host
  // snapshot -> client snapshot -> host snapshot.
  message SyncedClocks {
    optional ClockSnapshot client_clocks = 2;
    optional ClockSnapshot host_clocks = 3;
  }

  repeated SyncedClocks synced_clocks = 1;
}
