/*
 * Copyright (C) 2017 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 "frameworks/base/core/proto/android/app/alarmmanager.proto";
import "frameworks/base/core/proto/android/app/pendingintent.proto";
import "frameworks/base/core/proto/android/internal/locallog.proto";
import "frameworks/base/core/proto/android/os/worksource.proto";
import "frameworks/base/core/proto/android/server/forceappstandbytracker.proto";

package com.android.server;

option java_multiple_files = true;

message AlarmManagerServiceProto {
  optional int64 current_time = 1;
  optional int64 elapsed_realtime = 2;
  optional int64 last_time_change_clock_time = 3;
  optional int64 last_time_change_realtime = 4;
  // Current settings
  optional ConstantsProto settings = 5;

  // Dump from ForceAppStandbyTracker.
  optional ForceAppStandbyTrackerProto force_app_standby_tracker = 6;

  optional bool is_interactive = 7;
  // Only valid if is_interactive is false.
  optional int64 time_since_non_interactive_ms = 8;
  // Only valid if is_interactive is false.
  optional int64 max_wakeup_delay_ms = 9;
  // Only valid if is_interactive is false.
  optional int64 time_since_last_dispatch_ms = 10;
  // Only valid if is_interactive is false.
  optional int64 time_until_next_non_wakeup_delivery_ms = 11;

  optional int64 time_until_next_non_wakeup_alarm_ms = 12;
  optional int64 time_until_next_wakeup_ms = 13;
  optional int64 time_since_last_wakeup_ms = 14;
  // Time since the last wakeup was set.
  optional int64 time_since_last_wakeup_set_ms = 15;
  optional int64 time_change_event_count = 16;
  // The current set of user whitelisted apps for device idle mode, meaning
  // these are allowed to freely schedule alarms. These are app IDs, not UIDs.
  repeated int32 device_idle_user_whitelist_app_ids = 17;

  repeated AlarmClockMetadataProto next_alarm_clock_metadata = 18;

  repeated BatchProto pending_alarm_batches = 19;

  // List of alarms per uid deferred due to user applied background restrictions
  // on the source app.
  repeated AlarmProto pending_user_blocked_background_alarms = 20;

  // When idling mode will end. Will be empty if the device is not currently
  // idling.
  optional AlarmProto pending_idle_until = 21;

  // Any alarms that we don't want to run during idle mode. Will be empty if the
  // device is not currently idling.
  repeated AlarmProto pending_while_idle_alarms = 22;

  // This is a special alarm that will put the system into idle until it goes
  // off. The caller has given the time they want this to happen at.
  optional AlarmProto next_wake_from_idle = 23;

  repeated AlarmProto past_due_non_wakeup_alarms = 24;

  // Number of delayed alarms.
  optional int32 delayed_alarm_count = 25;
  // The total amount of time alarms had been delayed. Overlapping alarms are
  // only counted once (ie. If two alarms were meant to trigger at the same time
  // but were delayed by 5 seconds, the total time would be 5 seconds).
  optional int64 total_delay_time_ms = 26;
  optional int64 max_delay_duration_ms = 27;
  optional int64 max_non_interactive_duration_ms = 28;

  optional int32 broadcast_ref_count = 29;
  // Canonical count of (operation.send() - onSendFinished()) and listener
  // send/complete/timeout invocations.
  optional int32 pending_intent_send_count = 30;
  optional int32 pending_intent_finish_count = 31;
  optional int32 listener_send_count = 32;
  optional int32 listener_finish_count = 33;

  repeated InFlightProto outstanding_deliveries = 34;

  // Minimum time between ALLOW_WHILE_IDLE alarms when system is idling. It
  // should be either CosntantsProto.allow_while_idle_short_duration_ms or
  // ConstantsProto.allow_while_idle_long_duration_ms.
  optional int64 allow_while_idle_min_duration_ms = 35;

  message LastAllowWhileIdleDispatch {
    optional int32 uid = 1;
    // In the 'elapsed' timebase.
    optional int64 time_ms = 2;
  }
  // For each uid, this is the last time we dispatched an "allow while idle"
  // alarm, used to determine the earliest we can dispatch the next such alarm.
  repeated LastAllowWhileIdleDispatch last_allow_while_idle_dispatch_times = 36;

  optional com.android.internal.util.LocalLogProto recent_problems = 37;

  message TopAlarm {
    optional int32 uid = 1;
    optional string package_name = 2;
    optional FilterStatsProto filter = 3;
  }
  repeated TopAlarm top_alarms = 38;

  message AlarmStat {
    optional BroadcastStatsProto broadcast = 1;
    repeated FilterStatsProto filters = 2;
  }
  repeated AlarmStat alarm_stats = 39;

  repeated IdleDispatchEntryProto allow_while_idle_dispatches = 40;
  repeated WakeupEventProto recent_wakeup_history = 41;
}

// This is a soft wrapper for alarm clock information. It is not representative
// of an android.app.AlarmManager.AlarmClockInfo object.
message AlarmClockMetadataProto {
  optional int32 user = 1;
  optional bool is_pending_send = 2;
  // This value is UTC wall clock time in milliseconds, as returned by
  // System#currentTimeMillis() for example.
  optional int64 trigger_time_ms = 3;
}

// A com.android.server.AlarmManagerService.Alarm object.
message AlarmProto {
  optional string tag = 1;
  optional .android.app.AlarmManagerProto.AlarmType type = 2;
  // How long until the alarm goes off, in the 'elapsed' timebase. Can be
  // negative if 'when' is in the past.
  optional int64 time_until_when_elapsed_ms = 3;
  optional int64 window_length_ms = 4;
  optional int64 repeat_interval_ms = 5;
  optional int32 count = 6;
  optional int32 flags = 7;
  optional .android.app.AlarmClockInfoProto alarm_clock = 8;
  optional .android.app.PendingIntentProto operation = 9;
  optional string listener = 10;
}

// A com.android.server.AlarmManagerService.Batch object.
message BatchProto {
  // Start time in terms of elapsed realtime.
  optional int64 start_realtime = 1;
  // End time in terms of elapsed realtime.
  optional int64 end_realtime = 2;
  optional int32 flags = 3;
  repeated AlarmProto alarms = 4;
}

// A com.android.server.AlarmManagerService.BroadcastStats object.
message BroadcastStatsProto {
  optional int32 uid = 1;
  optional string package_name = 2;
  // The total amount of time this broadcast was in flight.
  optional int64 total_flight_duration_ms = 3;
  optional int32 count = 4;
  optional int32 wakeup_count = 5;
  // The last time this first became active (when nesting changed from 0 to 1)
  // in terms of elapsed realtime.
  optional int64 start_time_realtime = 6;
  // The broadcast is active if nesting > 0.
  optional int32 nesting = 7;
}

// A com.android.server.AlarmManagerService.Constants object.
message ConstantsProto {
  // Minimum futurity of a new alarm.
  optional int64 min_futurity_duration_ms = 1;
  // Minimum alarm recurrence interval.
  optional int64 min_interval_duration_ms = 2;
  // Direct alarm listener callback timeout.
  optional int64 listener_timeout_duration_ms = 3;
  // Minimum time between ALLOW_WHILE_IDLE alarms when system is not idle.
  optional int64 allow_while_idle_short_duration_ms = 4;
  // Minimum time between ALLOW_WHILE_IDLE alarms when system is idling.
  optional int64 allow_while_idle_long_duration_ms = 5;
  // BroadcastOptions.setTemporaryAppWhitelistDuration() to use for FLAG_ALLOW_WHILE_IDLE.
  optional int64 allow_while_idle_whitelist_duration_ms = 6;
}

// A com.android.server.AlarmManagerService.FilterStats object.
message FilterStatsProto {
  optional string tag = 1;
  // The last time this filter when in flight, in terms of elapsed realtime.
  optional int64 last_flight_time_realtime = 2;
  // The total amount of time this filter was in flight.
  optional int64 total_flight_duration_ms = 3;
  optional int32 count = 4;
  optional int32 wakeup_count = 5;
  // The last time this first became active (when nesting changed from 0 to 1)
  // in terms of elapsed realtime.
  optional int64 start_time_realtime = 6;
  // The filter is active if nesting > 0.
  optional int32 nesting = 7;
}

// A com.android.server.AlarmManagerService.IdleDispatchEntry object.
message IdleDispatchEntryProto {
  optional int32 uid = 1;
  optional string pkg = 2;
  optional string tag = 3;
  optional string op = 4;
  // Time when this entry was created, in terms of elapsed realtime.
  optional int64 entry_creation_realtime = 5;
  // For a RESCHEDULED op, this is the last time we dispatched an "allow while
  // idle" alarm for the UID. For a SET op, this is when the alarm was
  // triggered. Times are in the 'elapsed' timebase.
  optional int64 arg_realtime = 6;
}

// A com.android.server.AlarmManagerService.InFlight object.
message InFlightProto {
  optional int32 uid = 1;
  optional string tag = 2;
  optional int64 when_elapsed_ms = 3;
  optional .android.app.AlarmManagerProto.AlarmType alarm_type = 4;
  optional .android.app.PendingIntentProto pending_intent = 5;
  optional BroadcastStatsProto broadcast_stats = 6;
  optional FilterStatsProto filter_stats = 7;
  optional .android.os.WorkSourceProto work_source = 8;
}

// A com.android.server.AlarmManagerService.WakeupEvent object.
message WakeupEventProto {
  optional int32 uid = 1;
  optional string action = 2;
  optional int64 when = 3;
}
