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

message AndroidBatteryMetric {
  message BatteryCounters {
    // Timestamp measured from boot time [ns].
    optional int64 timestamp_ns = 1;
    // Fields 2-5 are the same as in BatteryCounters proto in TracePacket.
    optional double charge_counter_uah = 2;
    optional float capacity_percent = 3;
    optional double current_ua = 4;
    optional double current_avg_ua = 5;
  }

  message BatteryAggregates {
    // Field numbers for these 3 == the int values from Android
    optional int64 total_screen_off_ns = 1;
    optional int64 total_screen_on_ns = 2;
    optional int64 total_screen_doze_ns = 3;
    // Total time a wakelock was held
    optional int64 total_wakelock_ns = 4;
    // Amount of time the device was suspended. Depends on the ftrace source
    // "power/suspend_resume".
    optional int64 sleep_ns = 5;
    optional int64 sleep_screen_off_ns = 6;
    optional int64 sleep_screen_on_ns = 7;
    optional int64 sleep_screen_doze_ns = 8;
  }

  // Period of time during the trace that the device went to sleep completely.
  message SuspendPeriod {
    optional int64 timestamp_ns = 1;
    optional int64 duration_ns = 2;
  }

  // Battery counters info for each ts of the trace. This should only be
  // extracted for short traces.
  repeated BatteryCounters battery_counters = 1;

  optional BatteryAggregates battery_aggregates = 2;

  repeated SuspendPeriod suspend_period = 3;
}
