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

option java_multiple_files = true;
option java_outer_classname = "WakeupSourcesProto";

package android.os;

message KernelWakeSources {
    // Kernel records of what caused the application processor to wake up
    repeated WakeupSourceProto wakeup_sources = 1;
}

// Next Tag: 11
message WakeupSourceProto {
    // Name of the event which triggers application processor
    string name = 1;

    int32 active_count = 2;

    int32 event_count = 3;

    int32 wakeup_count = 4;

    int32 expire_count = 5;

    int64 active_since = 6;

    int64 total_time = 7;

    int64 max_time = 8;

    int64 last_change = 9;

    int64 prevent_suspend_time = 10;
}
