/*
 * 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 the type of the APK.
enum ArtApkType {
  ART_APK_TYPE_UNKNOWN = 0;
  // Primary DEX file in a base APK.
  ART_APK_TYPE_BASE = 1;
  // Primary DEX file in a split APK.
  ART_APK_TYPE_SPLIT = 2;
  // Secondary DEX file.
  ART_APK_TYPE_SECONDARY = 3;
}

// Indicates which compile filter was used for the package being loaded in an ART session.
enum ArtCompileFilter {
  ART_COMPILATION_FILTER_UNSPECIFIED = 0;
  ART_COMPILATION_FILTER_ERROR = 1;
  ART_COMPILATION_FILTER_UNKNOWN = 2;
  ART_COMPILATION_FILTER_ASSUMED_VERIFIED = 3;
  ART_COMPILATION_FILTER_EXTRACT = 4;
  ART_COMPILATION_FILTER_VERIFY = 5;
  ART_COMPILATION_FILTER_QUICKEN = 6;
  ART_COMPILATION_FILTER_SPACE_PROFILE = 7;
  ART_COMPILATION_FILTER_SPACE = 8;
  ART_COMPILATION_FILTER_SPEED_PROFILE = 9;
  ART_COMPILATION_FILTER_SPEED = 10;
  ART_COMPILATION_FILTER_EVERYTHING_PROFILE = 11;
  ART_COMPILATION_FILTER_EVERYTHING = 12;
  ART_COMPILATION_FILTER_FAKE_RUN_FROM_APK = 13;
  ART_COMPILATION_FILTER_FAKE_RUN_FROM_APK_FALLBACK = 14;
  ART_COMPILATION_FILTER_FAKE_RUN_FROM_VDEX_FALLBACK = 15;
  ART_COMPILATION_FILTER_SKIP = 16;
  ART_COMPILATION_FILTER_OTHER = 17;
  ART_COMPILATION_FILTER_ABSENT = 18;
}


// Indicates what triggered the compilation of the package.
enum ArtCompilationReason {
  ART_COMPILATION_REASON_UNSPECIFIED = 0;
  ART_COMPILATION_REASON_ERROR = 1;
  ART_COMPILATION_REASON_UNKNOWN = 2;
  ART_COMPILATION_REASON_FIRST_BOOT = 3;
  ART_COMPILATION_REASON_BOOT = 4;
  ART_COMPILATION_REASON_INSTALL = 5;
  ART_COMPILATION_REASON_BG_DEXOPT = 6;
  ART_COMPILATION_REASON_AB_OTA = 7;
  ART_COMPILATION_REASON_INACTIVE = 8;
  ART_COMPILATION_REASON_SHARED = 9;
  ART_COMPILATION_REASON_INSTALL_WITH_DEX_METADATA = 10;
  ART_COMPILATION_REASON_POST_BOOT = 11;
  ART_COMPILATION_REASON_INSTALL_FAST = 12;
  ART_COMPILATION_REASON_INSTALL_BULK = 13;
  ART_COMPILATION_REASON_INSTALL_BULK_SECONDARY = 14;
  ART_COMPILATION_REASON_INSTALL_BULK_DOWNGRADED = 15;
  ART_COMPILATION_REASON_INSTALL_BULK_SECONDARY_DOWNGRADED = 16;
  ART_COMPILATION_REASON_BOOT_AFTER_OTA = 17;
  ART_COMPILATION_REASON_PREBUILT = 18;
  ART_COMPILATION_REASON_CMDLINE = 19;
  ART_COMPILATION_REASON_VDEX = 20;
  ART_COMPILATION_REASON_BOOT_AFTER_MAINLINE_UPDATE = 21;
  ART_COMPILATION_REASON_CLOUD = 22;
  ART_COMPILATION_REASON_OTHER = 23;
  ART_COMPILATION_REASON_VDEX_DM = 24;
  ART_COMPILATION_REASON_DEF_DEXOPT = 25;
  ART_COMPILATION_REASON_POST_UR = 26;
  ART_COMPILATION_REASON_ABSENT = 27;
}

// Indicates the type of DEX metadata.
enum ArtDexMetadataType {
  ART_DEX_METADATA_TYPE_UNKNOWN = 0;
  ART_DEX_METADATA_TYPE_PROFILE = 1;
  ART_DEX_METADATA_TYPE_VDEX = 2;
  ART_DEX_METADATA_TYPE_PROFILE_AND_VDEX = 3;
  ART_DEX_METADATA_TYPE_NONE = 4;
  ART_DEX_METADATA_TYPE_ERROR = 5;
}

// Indicates the GC collector type.
enum ArtGcCollectorType {
  ART_GC_COLLECTOR_TYPE_UNKNOWN = 0;
  ART_GC_COLLECTOR_TYPE_MARK_SWEEP = 1;
  ART_GC_COLLECTOR_TYPE_CONCURRENT_MARK_SWEEP = 2;
  ART_GC_COLLECTOR_TYPE_CONCURRENT_MARK_COMPACT = 3;
  ART_GC_COLLECTOR_TYPE_SEMI_SPACE = 4;
  ART_GC_COLLECTOR_TYPE_CONCURRENT_COPYING = 5;
  ART_GC_COLLECTOR_TYPE_CONCURRENT_COPYING_BACKGROUND = 6;
  ART_GC_COLLECTOR_TYPE_CONCURRENT_MARK_COMPACT_BACKGROUND = 7;
}

// Indicates the ISA (Instruction Set Architecture).
enum ArtIsa {
  ART_ISA_UNKNOWN = 0;
  ART_ISA_ARM = 1;
  ART_ISA_ARM64 = 2;
  ART_ISA_X86 = 3;
  ART_ISA_X86_64 = 4;
  ART_ISA_MIPS = 5;
  ART_ISA_MIPS64 = 6;
  ART_ISA_RISCV64 = 7;
}

// DEPRECATED - Used to indicate what class of thread the reported values apply to.
// Deprecated in Jan 2024 as the corresponding filter is no longer needed.
enum ArtThreadType {
  ART_THREAD_UNKNOWN = 0;
  ART_THREAD_MAIN = 1;
  ART_THREAD_BACKGROUND = 2;
}

// DEPRECATED - Used to indicate support for userfaultfd and minor fault mode.
// Deprecated in May 2025 as the corresponding filter is no longer needed.
enum ArtUffdSupport {
  ART_UFFD_SUPPORT_UNKNOWN = 0;
  ART_UFFD_SUPPORT_UFFD_NOT_SUPPORTED = 1;
  ART_UFFD_SUPPORT_MINOR_FAULT_MODE_NOT_SUPPORTED = 2;
  ART_UFFD_SUPPORT_MINOR_FAULT_MODE_SUPPORTED = 3;
}

// Keep in sync with the ExecResult enum defined in art/runtime/exec_utils.h
enum ExecResultStatus {
  // Unable to get the status.
  EXEC_RESULT_STATUS_UNKNOWN = 0;
  // Process exited normally with an exit code.
  EXEC_RESULT_STATUS_EXITED = 1;
  // Process terminated by a signal.
  EXEC_RESULT_STATUS_SIGNALED = 2;
  // Process timed out and killed.
  EXEC_RESULT_STATUS_TIMED_OUT = 3;
  // Failed to start the process.
  EXEC_RESULT_STATUS_START_FAILED = 4;
  // Process was not run.
  EXEC_RESULT_STATUS_NOT_RUN = 5;
  // Process was cancelled.
  EXEC_RESULT_STATUS_CANCELLED = 6;
}
