/*
 * 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";
package android.util;

import "frameworks/base/core/proto/android/privacy.proto";

option java_multiple_files = true;

/**
 * Very basic data structure used by aggregated stats.
 */
message AggStats {
    option (android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int64 min = 1 [deprecated = true];

    optional int64 average = 2 [deprecated = true];

    optional int64 max = 3 [deprecated = true];

    // These are all in kilobyte resolution. Can fit in int32, so smaller on the wire than the above
    // int64 fields.
    optional int32 mean_kb = 4;
    optional int32 max_kb = 5;
}

/**
 * Very basic data structure to represent Duration.
 */
message Duration {
    option (android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int64 start_ms = 1;

    optional int64 end_ms = 2;
}
