/*
 * 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";

package android.os.statsd.art;

option java_package = "com.android.os.art";
option java_multiple_files = true;

// Indicates which kind of measurement ART is reporting as increments / deltas.
// Next ID: 40
enum ArtDatumDeltaId {
  ART_DATUM_DELTA_INVALID = 0;

  // These IDs are the equivalent of the ArtDatumId values,
  // but for reporting increments / deltas.
  ART_DATUM_DELTA_CLASS_VERIFICATION_COUNT = 16;
  ART_DATUM_DELTA_CLASS_VERIFICATION_TIME_MICROS = 8;
  ART_DATUM_DELTA_CLASS_LOADING_TIME_MICROS = 9;
  ART_DATUM_DELTA_GC_FULL_HEAP_COLLECTION_COUNT = 5;
  ART_DATUM_DELTA_GC_TOTAL_BYTES_ALLOCATED = 17;
  ART_DATUM_DELTA_GC_TOTAL_COLLECTION_TIME_MS = 28;
  ART_DATUM_DELTA_GC_YOUNG_GENERATION_COLLECTION_COUNT = 3;
  ART_DATUM_DELTA_JIT_METHOD_COMPILE_COUNT = 21;
  ART_DATUM_DELTA_JIT_METHOD_COMPILE_TIME_MICROS = 6;

  // numerator from ART_DATUM_GC_WORLD_STOP_TIME_AVG_MICROS
  ART_DATUM_DELTA_GC_WORLD_STOP_TIME_US = 29;
  // denominator from ART_DATUM_GC_WORLD_STOP_TIME_AVG_MICROS
  ART_DATUM_DELTA_GC_WORLD_STOP_COUNT = 30;
  // numerator from ART_DATUM_GC_YOUNG_GENERATION_TRACING_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_DELTA_GC_YOUNG_GENERATION_COLLECTION_SCANNED_BYTES = 31;
  // numerator from ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_DELTA_GC_YOUNG_GENERATION_COLLECTION_FREED_BYTES = 32;
  // denominator from ART_DATUM_GC_YOUNG_GENERATION_TRACING_THROUGHPUT_AVG_MB_PER_SEC
  // and ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_DELTA_GC_YOUNG_GENERATION_COLLECTION_DURATION_MS = 33;
  // numerator from ART_DATUM_GC_FULL_HEAP_TRACING_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_DELTA_GC_FULL_HEAP_COLLECTION_SCANNED_BYTES = 34;
  // numerator from ART_DATUM_GC_FULL_HEAP_COLLECTION_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_DELTA_GC_FULL_HEAP_COLLECTION_FREED_BYTES = 35;
  // denominator from ART_DATUM_GC_FULL_HEAP_TRACING_THROUGHPUT_AVG_MB_PER_SEC
  // and ART_DATUM_GC_FULL_HEAP_COLLECTION_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_DELTA_GC_FULL_HEAP_COLLECTION_DURATION_MS = 36;
  // The number of milliseconds since the last time metrics were reported.
  ART_DATUM_DELTA_TIME_ELAPSED_MS = 37;

  ART_DATUM_DELTA_GC_APP_SLOW_PATH_DURING_YOUNG_GENERATION_COLLECTION_DURATION_MILLIS = 38;
  ART_DATUM_DELTA_GC_APP_SLOW_PATH_DURING_FULL_HEAP_COLLECTION_DURATION_MILLIS = 39;

  reserved 1, 2, 4, 7, 10, 11, 12, 13, 14, 15, 18, 19, 20, 22, 23, 24, 25, 26, 27;
}

// Indicates which kind of measurement ART is reporting.
//
// Where it makes sense, the datum ID ends with the type of datum (counter or histogram) and the
// units.
// Note: Histograms are not yet reported by statsd.
enum ArtDatumId {
  ART_DATUM_INVALID = 0;
  ART_DATUM_GC_WORLD_STOP_TIME_AVG_MICROS = 1;
  ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_TIME_HISTO_MILLIS = 2;
  ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_COUNT = 3;
  ART_DATUM_GC_FULL_HEAP_COLLECTION_TIME_HISTO_MILLIS = 4;
  ART_DATUM_GC_FULL_HEAP_COLLECTION_COUNT = 5;
  ART_DATUM_JIT_METHOD_COMPILE_TIME_MICROS = 6;
  ART_DATUM_AOT_COMPILE_TIME = 7;
  ART_DATUM_CLASS_VERIFICATION_TIME_COUNTER_MICROS = 8;
  ART_DATUM_CLASS_LOADING_TIME_COUNTER_MICROS = 9;

  // Metrics IDs for dex2oat.
  ART_DATUM_DEX2OAT_RESULT_CODE = 10 [deprecated = true];
  ART_DATUM_DEX2OAT_DEX_CODE_COUNTER_BYTES = 11 [deprecated = true];
  ART_DATUM_DEX2OAT_TOTAL_TIME_COUNTER_MILLIS = 12 [deprecated = true];
  ART_DATUM_DEX2OAT_VERIFY_DEX_FILE_TIME_COUNTER_MILLIS = 13 [deprecated = true];
  ART_DATUM_DEX2OAT_FAST_VERIFY_TIME_COUNTER_MILLIS = 14 [deprecated = true];
  ART_DATUM_DEX2OAT_RESOLVE_METHODS_AND_FIELDS_TIME_COUNTER_MILLIS = 15 [deprecated = true];

  ART_DATUM_CLASS_VERIFICATION_COUNT = 16;
  ART_DATUM_GC_TOTAL_BYTES_ALLOCATED = 17;
  ART_DATUM_GC_TOTAL_METADATA_SIZE_BYTES = 18 [deprecated=true];
  ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_THROUGHPUT_HISTO_MB_PER_SEC = 19;
  ART_DATUM_GC_FULL_HEAP_COLLECTION_THROUGHPUT_HISTO_MB_PER_SEC = 20;
  ART_DATUM_JIT_METHOD_COMPILE_COUNT = 21;
  ART_DATUM_GC_YOUNG_GENERATION_TRACING_THROUGHPUT_HISTO_MB_PER_SEC = 22;
  ART_DATUM_GC_FULL_HEAP_TRACING_THROUGHPUT_HISTO_MB_PER_SEC = 23;
  ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_THROUGHPUT_AVG_MB_PER_SEC = 24;
  ART_DATUM_GC_FULL_HEAP_COLLECTION_THROUGHPUT_AVG_MB_PER_SEC = 25;
  ART_DATUM_GC_YOUNG_GENERATION_TRACING_THROUGHPUT_AVG_MB_PER_SEC = 26;
  ART_DATUM_GC_FULL_HEAP_TRACING_THROUGHPUT_AVG_MB_PER_SEC = 27;
  ART_DATUM_GC_TOTAL_COLLECTION_TIME_MS = 28;

  // New metrics to support averages reported as sum (numerator) and count (denominator),
  // in order to make it easier to be reported as Value Metrics.

  // numerator from ART_DATUM_GC_WORLD_STOP_TIME_AVG_MICROS
  ART_DATUM_GC_WORLD_STOP_TIME_US = 29;
  // denominator from ART_DATUM_GC_WORLD_STOP_TIME_AVG_MICROS
  ART_DATUM_GC_WORLD_STOP_COUNT = 30;
  // numerator from ART_DATUM_GC_YOUNG_GENERATION_TRACING_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_SCANNED_BYTES = 31;
  // numerator from ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_FREED_BYTES = 32;
  // denominator from ART_DATUM_GC_YOUNG_GENERATION_TRACING_THROUGHPUT_AVG_MB_PER_SEC
  // and ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_GC_YOUNG_GENERATION_COLLECTION_DURATION_MS = 33;
  // numerator from ART_DATUM_GC_FULL_HEAP_TRACING_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_GC_FULL_HEAP_COLLECTION_SCANNED_BYTES = 34;
  // numerator from ART_DATUM_GC_FULL_HEAP_COLLECTION_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_GC_FULL_HEAP_COLLECTION_FREED_BYTES = 35;
  // denominator from ART_DATUM_GC_FULL_HEAP_TRACING_THROUGHPUT_AVG_MB_PER_SEC
  // and ART_DATUM_GC_FULL_HEAP_COLLECTION_THROUGHPUT_AVG_MB_PER_SEC
  ART_DATUM_GC_FULL_HEAP_COLLECTION_DURATION_MS = 36;
}

enum BootImageStatus {
  // Unknown value.
  STATUS_UNSPECIFIED = 0;
  // Boot image(s) are fully usable.
  STATUS_FULL = 1;
  // Only the minimal boot image is usable.
  STATUS_MINIMAL = 2;
  // No boot image is usable.
  STATUS_NONE = 3;
}
