blob: ae3c0db9fd0603d02ccbf505ee60717026844503 [file] [log] [blame]
syntax = "proto2";
option java_package = "com.google.wireless.android.sdk.stats";
option java_outer_classname = "AndroidStudioStats";
// IntelliJ gets realy upset with the large proto files we generate
// and disables auto-complete for the classes.
// This option will generate multiple files and restore auto-completion.
option java_multiple_files = true;
package android_studio;
message AndroidStudioEvent {
// Describes a group of event kinds related to each other.
// Necessary only for events that were originally being reported to Google
// Analytics (GA).
optional EventCategory category = 1;
// Specific kind of event, primary separation key of all Android Studio
// related events.
optional EventKind kind = 2;
// The session id is a UUID tracking a single instance of Android Studio
// to associate events together such as kind = TEST_RUN
optional string studio_session_id = 3;
// Fully set when kind = STUDIO_PING
// or ANDROID_STUDIO_TEST
// or ANDROID_STUDIO_THROUGH_GRADLE
// or kind = EMULATOR_PING
// or kind = TEST_RUN.
// The version field is set for most messages.
optional ProductDetails product_details = 4;
// set when kind = MONITOR_ACTIVATED or kind = MONITOR_RUNNING
// Deprecated by AndroidProfilerEvent
optional MonitorType monitor_type = 5 [deprecated = true];
// set when kind = MONITOR_RUNNING
// Deprecated by AndroidProfilerEvent
optional bool monitor_paused = 6 [deprecated = true];
// set when kind = PROFILING_OPEN or PROFILING_CAPTURE
// Deprecated by AndroidProfilerEvent
optional ProfilerCaptureType profiler_capture_type = 7 [deprecated = true];
// set when kind = CLOUD_TESTING_BACKEND_ERROR
optional string cloud_testing_error_message = 8;
// set when kind = CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED
optional int32 cloud_testing_loaded_screenshots_count = 9;
// Deprecated, use debug_session_start_details instead.
// set when kind = LLDB_SESSION_STARTED
optional RunConfigurationType run_configuration_type = 10 [deprecated = true];
// Deprecated, use debug_session_start_details instead.
// set when kind = LLDB_SESSION_STARTED
optional DebuggerType debugger_type = 11 [deprecated = true];
// set when kind = LLDB_LAUNCHED
// or kind = DEPLOYMENT_APK
// or kind = DEPLOYMENT_EMULATOR
// or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
// or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
// or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
// or kind = TEST_RUN
// or kind = LayoutInspectorEvent and LayoutInspectorEventType = CAPTURE
// or kind = ANDROID_PROFILER and AndroidProfilerEvent.Type = CHANGE_DEVICE
optional DeviceInfo device_info = 12;
// set when kind = LLDB_INSTALL_FAILED
// e.g. 'failed to get reply to handshake packet'
optional string lldb_session_failure_message = 13;
// set when kind = DEVELOPER_SERVICES_INSTALLED
// or kind = DEVELOPER_SERVICES_REMOVED
optional DeveloperServiceKind developer_service_kind = 14;
// set when category = GRADLE_SYNC
optional string gradle_version = 15; // e.g. '2.10'
// set when kind = GRADLE_SYNC_FAILURE_DETAILS (previously set when kind =
// GRADLE_SYNC_FAILURE)
optional GradleSyncFailure gradle_sync_failure = 16;
// set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
// e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
optional string gradle_missing_signature = 17;
// set when kind = TEMPLATE_RENDERER
optional TemplateRenderer template_renderer = 18;
// set when kind = STUDIO_CRASH
optional StudioCrash studio_crash = 19;
// set when kind = GRADLE_BUILD_DETAILS or INSTANT_RUN
// In the case of INSTANT_RUN, only the plugin version information is included
optional GradleBuildDetails gradle_build_details = 20;
// set when kind = INSTANT_RUN
optional InstantRun instant_run = 21;
// set when kind = META_METRICS
optional MetaMetrics meta_metrics = 22;
// set when kind = EMULATOR_PING
optional EmulatorDetails emulator_details = 23;
// set when kind = TEST_RUN
optional TestRun test_run = 24;
// set when kind = EMULATOR_UI_EVENT
optional EmulatorUiEvent emulator_ui_event = 25;
// set when kind = HYPERVISOR
optional Hypervisor hypervisor = 26;
// set when kind = EMULATOR_HOST
optional EmulatorHost emulator_host = 27;
// set when kind = GRADLE_BUILD_PROFILE
optional GradleBuildProfile gradle_build_profile = 28;
// set when kind = LLDB_FRONTEND_EXITED
optional LLDBFrontendDetails lldb_frontend_details = 29;
// set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
// kind FIREBASE_ASSISTANT_SILENT_ERROR
optional FirebaseErrorDetails firebase_error_details = 30;
// Client-side salted (rotating every 28 days), sha256 of the project id.
// set when kind = PROJECT_STRUCTURE_* or kind = APK_ANALYZER_STATS
optional string project_id = 31;
// set when kind = GFX_TRACE_*
optional GfxTracingDetails gfx_tracing_details = 32;
// set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
optional TestRecorderDetails test_recorder_details = 33;
// set when kind = STUDIO_UI_ACTION_STATS
optional UIActionStats ui_action_stats = 34;
// set when kind = STUDIO_PING
optional MachineDetails machine_details = 35;
// set when kind = STUDIO_PING
optional JvmDetails jvm_details = 36;
// set when kind = STUDIO_PROCESS_STATS
// or kind = GRADLE_BUILD_PROFILE
// or kind = STUDIO_UI_OOM_DIALOG_EVENT
// or kind = STUDIO_LOW_MEMORY_EVENT
optional JavaProcessStats java_process_stats = 37;
// set when kind = STUDIO_PERFORMANCE_STATS
optional StudioPerformanceStats studio_performance_stats = 38;
// set when kind = LLDB_PERFORMANCE_STATS
optional LldbPerformanceStats lldb_performance_stats = 39;
// set when kind = STUDIO_PROJECT_OPENED or STUDIO_PROJECT_CLOSED
optional StudioProjectChange studio_project_change = 40;
// optionally set when kind = FIREBASE_ASSISTANT_* (except for errors).
optional FirebaseContextDetails firebase_context_details = 41;
// set when kind = LAYOUT_EDITOR_EVENT
optional LayoutEditorEvent layout_editor_event = 42;
// set when kind = APP_LINKS_ASSISTANT_STATS
optional AppLinksAssistantEvent app_links_assistant_event = 43;
// set when kind = EMULATOR_PERFORMANCE_STATS
optional EmulatorPerformanceStats emulator_performance_stats = 44;
// set when kind = ADB_ASSISTANT_STATS
optional AdbAssistantStats adb_assistant_stats = 45;
// set when kind = LLDB_SESSION_STARTED
optional LldbSessionStartDetails lldb_session_start_details = 46;
// set when kind = LLDB_SESSION_ENDED
optional LldbSessionEndDetails lldb_session_end_details = 47;
// set when kind = ANDROID_PROFILER
optional AndroidProfilerEvent android_profiler_event = 48;
// set when kind = APK_ANALYZER_STATS
optional ApkAnalyzerStats apk_analyzer_stats = 49;
// set when kind = GRADLE_SYNC_ENDED, GRADLE_SYNC_FAILURE or
// GRADLE_SYNC_SETUP_STARTED
optional GradleSyncStats gradle_sync_stats = 50;
// set when category = APK_DEBUG
optional ApkDebugProject apk_debug_project = 51;
// set when kind = LAYOUT_INSPECTOR_EVENT
optional LayoutInspectorEvent layout_inspector_event = 52;
// set when kind = ANDROID_PROFILER_DB_STATS
optional AndroidProfilerDbStats android_profiler_db_stats = 53;
// set when kind = TEMPLATE_RENDER
// or kind = GRADLE_SYNC_ENDED
optional KotlinSupport kotlin_support = 54;
// set when kind = CONNECTION_ASSISTANT_EVENT
optional ConnectionAssistantEvent connection_assistant_event = 55;
// set when kind = STUDIO_UI_OOM_DIALOG_EVENT
optional OomDialogEvent oom_dialog_event = 56;
// set when kind = CMAKE_EDITING_EVENT
optional CMakeEditingEvent cmake_editing_event = 57;
// set for all events generated by Android Studio
optional IdeBrand ide_brand = 58;
// set when kind = CPP_HEADERS_VIEW_EVENT
optional CppHeadersViewEvent cpp_headers_view_event = 59;
// set when kind = WHATS_NEW_ASSISTANT_EVENT
optional WhatsNewAssistantEvent whats_new_assistant_event = 60;
// the project id as used in the playstore, e.g.
// 'com.google.android.apps.maps'. This is sensitive information and
// thus restricted to "raw" sawmill access. This data is only available in
// and for PWG approved scenarios.
optional string raw_project_id = 61;
// set when kind = INTELLIJ_INDEXING_STATS
optional IntellijIndexingStats intellij_indexing_stats = 62;
// set when kind == LINT_SESSION
optional LintSession lint_session = 63;
// set when kind == LINT_ACTION
optional LintAction lint_action = 64;
// set when kind = STUDIO_RUN_EVENT
optional StudioRunEvent studio_run_event = 65 [deprecated = true];
// set when kind = INTELLIJ_PROJECT_SIZE_STATS
repeated IntellijProjectSizeStats intellij_project_size_stats = 66;
// set when kind = STUDIO_TOOL_WINDOW_ACTION_STATS
optional StudioToolWindowActionStats studio_tool_window_action_stats = 67;
// set when kind = PROJECT_STRUCTURE_DIALOG
optional PSDEvent psd_event = 68;
// set when Android Studio is launched with the "idea.is.internal=true"
// flag, indicating that this is somebody debugging Android Studio rather
// than a normal user sending actual usage metrics.
optional bool idea_is_internal = 69;
// set when kind == JNI_INSPECTION
optional JniInspectionEvent jni_inspection_event = 70;
// set when kind == USER_SENTIMENT
optional UserSentiment user_sentiment = 71;
// Describes a group of event kinds related to each other.
// This is redundant in the presence of EventKind + event specific message,
// and is only necessary for events originally sent to GA.
// set when kind = RUN_EVENT
optional RunEvent run_event = 72;
// set when kind = NAV_EDITOR_EVENT
optional NavEditorEvent nav_editor_event = 73;
// set when kind = DIALOG_STATS
optional DialogStats dialog_stats = 74;
// set when kind = GRADLE_PLUGIN_UPGRADE_DIALOG
optional GradlePluginUpgradeDialogStats gradle_plugin_upgrade_dialog = 75;
// set when kind = DATA_BINDING
optional DataBindingEvent data_binding_event = 76;
// set when kind = TYPING_LATENCY_STATS
optional TypingLatencyStats typing_latency_stats = 77;
// set when kind = GRADLE_SYNC_ISSUES.
repeated GradleSyncIssue gradle_sync_issues = 78;
// The list of quick-fixes offered to resolve a sync failure. (Quick fixes
// offered to resolve specific sync issues are reported in
// gradle_sync_issues). set when kind = GRADLE_SYNC_FAILURE_DETAILS.
repeated GradleSyncQuickFix offered_quick_fixes = 79;
// set when kind = STUDIO_PATCH_UPDATER
optional StudioPatchUpdaterEvent studio_patch_updater_event = 80;
// Set when kind = RESOURCE_MANAGER
optional ResourceManagerEvent resource_manager_event = 81;
// Set when kind = IDE_PLUGIN_INFO
optional IdePluginInfo ide_plugin_info = 82;
// Set when kind = EDITOR_HIGHLIGHTING_STATS
optional EditorHighlightingStats editor_highlighting_stats = 83;
// Set when kind = WINDOWS_DEFENDER_STATUS
optional WindowsDefenderStatus windows_defender_status = 84;
enum EventCategory {
// The event was not grouped into any specific category (default).
NO_EVENT_CATEGORY = 0;
// The event is related to deployment to a device or emulator.
DEPLOYMENT = 1;
// Stats on builds from Studio.
STUDIO_BUILD = 2;
// The event is related to usage of 'Google Developer Services'
// inside Android Studio.
DEVELOPER_SERVICES = 3;
// The event is related to interaction between Android Studio and Gradle.
GRADLE_SYNC = 4;
// The event is related to Performance Profiling.
// Deprecated by AndroidProfilerEvent
PROFILING = 5 [deprecated = true];
// The event is related to Performance Monitoring.
// Deprecated by AndroidProfilerEvent
MONITOR = 6 [deprecated = true];
// The event is related to the SDK Manager.
SDK_MANAGER = 7;
// The event is related to project/file templates.
TEMPLATE = 8;
// The event is related to Theme Editor.
THEME_EDITOR = 9;
// The event is related to App Indexing integration.
APP_INDEXING = 10;
// The event is related to C++ debugging.
LLDB = 11;
// The event is related to Google Cloud Test Lab integration.
CLOUD_TESTING = 12;
// The event is a regular ping from the application.
PING = 13;
// The event is related to running tests.
TESTS = 14;
// The event is a meta event reporting metrics on metrics.
META = 15;
// The event is related to the Emulator UI
EMULATOR_UI = 16;
// The event describes System Info
SYSTEM = 17;
// The event is related to the Project Structure Dialog.
PROJECT_STRUCTURE_DIALOG = 18;
// The event is from the Android Gradle plugin.
GRADLE = 19;
// The event is related to the Firebase assistant.
FIREBASE_ASSISTANT = 20;
// The event is related to the GPU Profiler.
// Deprecated by AndroidProfilerEvent
GPU_PROFILER = 21 [deprecated = true];
// the event is related to the test recorder (Cassette)
TEST_RECORDER = 22;
// the event is related to the Android Studio UI.
STUDIO_UI = 23;
// the event is related to the layout editor
LAYOUT_EDITOR = 24;
// The event is related to APK_DEBUGGING actions initiated by the user.
APK_DEBUG = 25;
// The event is related to CMake editing.
// Do not use this -- use the EventKind below.
DEPRECATED_CMAKE_EDITING_EVENT = 26 [deprecated = true];
// The event is related to Android Studio Projects
PROJECT_SYSTEM = 27;
}
// Specific kind of event, primary separation key of all Android Studio
// related events.
enum EventKind {
UNKNOWN_EVENT_KIND = 0;
// An APK (android application) is deployed.
DEPLOYMENT_APK = 1;
// A deployment to the emulator.
DEPLOYMENT_TO_EMULATOR = 2;
// The developer added a Google Developer Service to their app.
DEVELOPER_SERVICES_INSTALLED = 3;
// The developer removed a Google Developer Service from their app.
DEVELOPER_SERVICES_REMOVED = 4;
// A sync between Android Studio and Gradle started.
GRADLE_SYNC_STARTED = 5;
// A sync between Android Studio and Gradle ended.
GRADLE_SYNC_ENDED = 6;
// A sync between Android Studio and Gradle was skipped.
GRADLE_SYNC_SKIPPED = 7;
// A sync between Android Studio and Gradle failed.
GRADLE_SYNC_FAILURE = 8;
// A sync between Android Studio and Gradle C++ support completed.
GRADLE_CPP_SYNC_COMPLETED = 9;
// Performance profiling capture started.
PROFILING_CAPTURE = 10;
// Performance profiling capture opened in the IDE.
PROFILING_OPEN = 11;
// Conversion of hprof profiling data in progress.
PROFILING_CONVERT_HPROF = 12;
// Analysis of the profiling data in progress.
PROFILING_ANALYSIS_RUN = 13;
// Performance monitoring has been activated.
// Deprecated by AndroidProfilerEvent
MONITOR_ACTIVATED = 14 [deprecated = true];
// Performance monitoring is running.
// Deprecated by AndroidProfilerEvent
MONITOR_RUNNING = 15 [deprecated = true];
// The user selected an action from the SDK Manager Toolbar.
SDK_MANAGER_TOOLBAR_CLICKED = 16;
// The standalone SDK Manager was launched.
SDK_MANAGER_STANDALONE_LAUNCHED = 17;
// The built-in SDK Manager was launched.
SDK_MANAGER_LOADED = 18;
// A new file/project is created based on a template.
TEMPLATE_RENDER = 19;
// User opened the Theme Editor.
THEME_EDITOR_OPEN = 20;
// A deep link was created for app indexing.
APP_INDEXING_DEEP_LINK_CREATED = 21;
// An api code was created for app indexing.
APP_INDEXING_API_CODE_CREATED = 22;
// An app indexing deep link was launched.
APP_INDEXING_DEEP_LINK_LAUNCHED = 23;
// An app indexing quick fix was applied.
APP_INDEXING_TRIGGER_QUICKFIX = 24;
// App Indexing Fetch As Google dialog is shown.
APP_INDEXING_SHOW_FEAG_DIALOG = 25;
// App Indexing Fetch As Google task has started.
APP_INDEXING_START_FEAG_TASK = 26;
// Native debugger is launched.
LLDB_LAUNCHED = 27;
// Native debugger session has started.
LLDB_SESSION_STARTED = 28;
// Deprecated, use LLDB_SESSION_ENDED instead.
// Native debugger session has failed.
LLDB_SESSION_FAILED = 29 [deprecated = true];
// Deprecated, use DEBUG_SESSION_ENDED instead.
// Native debugger session has completed successfully.
LLDB_SESSION_COMPLETED = 30 [deprecated = true];
// SDK Manager QuickFix Wizard is invoked to install LLDB package.
LLDB_INSTALL_STARTED = 31;
// SDK Manager QuickFix Wizard invocation to install LLDB package failed.
LLDB_INSTALL_FAILED = 32;
// SDK Manager QuickFix Wizard invocation to install LLDB package completed
// successfully.
LLDB_INSTALL_COMPLETED = 33;
// A watchpoint was added to native code.
LLDB_SESSION_USED_WATCHPOINTS = 34;
// A Cloud Device was configured for Cloud Testing.
CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE = 35;
// A Matrix of Cloud Devices was configured for Cloud Testing.
CLOUD_TESTING_CONFIGURE_MATRIX = 36;
// A Cloud Devices was launched for Cloud Testing.
CLOUD_TESTING_LAUNCH_CLOUD_DEVICE = 37;
// A Matrix of Cloud Devices was run for Cloud Testing.
CLOUD_TESTING_RUN_TEST_MATRIX = 38;
// Cloud Testing reported a backend error.
CLOUD_TESTING_BACKEND_ERROR = 39;
// A Debug session was launched from Cloud Testing results.
CLOUD_TESTING_DEBUG_FROM_RESULTS = 40;
// The compare screenshots window was opened from a Cloud Testing run.
CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED = 41;
// Studio crash statistics were sent.
STUDIO_CRASH = 42;
// A Gradle Build was run and statistics are available.
GRADLE_BUILD_DETAILS = 44;
// Stats on Instant Run.
INSTANT_RUN = 45;
// Daily Android Studio ping with version & os details.
STUDIO_PING = 46;
// Daily emulator ping with version & os details.
EMULATOR_PING = 47;
// Metrics on Metrics.
META_METRICS = 48;
// User ran tests.
TEST_RUN = 50;
// User clicked something in the Emulator UI.
EMULATOR_UI_EVENT = 51;
// Information on the host OS's hypervisor support.
HYPERVISOR = 52;
// Provides info on the Emulator Host
EMULATOR_HOST = 53;
// Various UI events in the Project Structure Dialog.
PROJECT_STRUCTURE_DIALOG_OPEN = 54;
PROJECT_STRUCTURE_DIALOG_SAVE = 55;
PROJECT_STRUCTURE_DIALOG_TOP_TAB_CLICK = 56;
PROJECT_STRUCTURE_DIALOG_TOP_TAB_SAVE = 57;
PROJECT_STRUCTURE_DIALOG_LEFT_NAV_CLICK = 58;
PROJECT_STRUCTURE_DIALOG_LEFT_NAV_SAVE = 59;
// A gradle build profile
GRADLE_BUILD_PROFILE = 60;
// The LLDB Frontend has unexpectedly exited
LLDB_FRONTEND_EXITED = 61;
// The Firebase assistant created a project.
FIREBASE_ASSISTANT_PROJECT_CREATED = 62;
// The Firebase assistant failed to create a project.
FIREBASE_ASSISTANT_PROJECT_CREATE_FAILED = 63;
// The Firebase assistant upgraded a project.
FIREBASE_ASSISTANT_PROJECT_UPGRADED = 64;
// The Firebase assistant failed to upgrade a project.
FIREBASE_ASSISTANT_PROJECT_UPGRADE_FAILED = 66;
// The Firebase assistant failed to create a config.
FIREBASE_ASSISTANT_PROJECT_CONFIG_CREATE_FAILED = 67;
// The Firebase assistant updated a project.
FIREBASE_ASSISTANT_PROJECT_UPDATED = 68;
// The Firebase assistant failed to update a project.
FIREBASE_ASSISTANT_PROJECT_UPDATE_FAILED = 69;
// The Firebase assistant failed to write the project config.
FIREBASE_ASSISTANT_PROJECT_CONFIG_WRITE_FAILED = 70;
// The Firebase assistant failed as the user did not accept the TOS.
FIREBASE_ASSISTANT_TOS_FAILED = 71;
// The Firebase assistant is trying to login.
FIREBASE_ASSISTANT_ATTEMPT_LOGIN = 72;
// The Firebase assistant successfully logged in.
FIREBASE_ASSISTANT_LOGIN_SUCCESS = 73;
// The Firebase assistant showed the dialog to offer to reconnect.
FIREBASE_ASSISTANT_RECONNECT_DIALOG_SYNC = 74;
// The Firebase assistant was requested to connect to the server.
FIREBASE_ASSISTANT_CONNECT_REQUESTED = 75;
// The Firebase assistant panel was opened.
FIREBASE_ASSISTANT_OPEN = 76;
// The Firebase assistant connect dialog was opened.
FIREBASE_ASSISTANT_CONNECT_DIALOG_OPENED = 77;
// The Firebase assistant connect dialog was asked to connect.
FIREBASE_ASSISTANT_CONNECT_DIALOG_SYNC = 78;
// The Firebase assistant presented an error to the user.
FIREBASE_ASSISTANT_ERROR_PRESENTED = 79;
// The Firebase assistant encounted an error but didn't inform the user.
FIREBASE_ASSISTANT_SILENT_ERROR = 80;
// The Firebase assistant reconnect dialog was opened.
FIREBASE_ASSISTANT_RECONNECT_DIALOG_OPENED = 81;
// The GPU Debugger tracing had an initialization failure.
GFX_TRACE_INIT_ERROR = 82;
// The GPU Debugger tracing was closed.
GFX_TRACE_CLOSED = 83;
// The GPU Debugger tracing had a parameter edited.
GFX_TRACE_PARAMETER_EDITED = 84;
// The GPU Debugger tracing was started.
GFX_TRACE_TRACE_STARTED = 85;
// The GPU Debugger tracing was stopped.
GFX_TRACE_TRACE_STOPPED = 86;
// A UI command influencing the GPU Debugger was selected.
GFX_TRACE_COMMAND_SELECTED = 87;
// A link from the GPU Debugger tracing results was clicked.
GFX_TRACE_LINK_CLICKED = 88;
// A memory snapshot from the GPU Debugger tracing results was clicked.
GFX_TRACE_MEMORY_VIEWED = 89;
// A texture from the GPU Debugger tracing results was viewed.
GFX_TRACE_TEXTURE_VIEWED = 90;
// A "legacy" IntelliJ style project was loaded.
LEGACY_IDEA_ANDROID_PROJECT = 91;
// The user requested the test recorder to generate a test class.
TEST_RECORDER_GENERATE_TEST_CLASS = 92;
// The test recorder detected missing espresso dependencies.
TEST_RECORDER_MISSING_ESPRESSO_DEPENDENCIES = 93;
// The test recorder detected missing instrumentation test folder.
TEST_RECORDER_MISSING_INSTRUMENTATION_TEST_FOLDER = 94;
// The test recorder was launched.
TEST_RECORDER_LAUNCH = 95;
// A GPU Debugger Trace session was opened but not started yet.
GFX_TRACE_OPEN = 96;
// Statistics on user actions in the Android Studio UI.
STUDIO_UI_ACTION_STATS = 97;
// Stats on the current running Android Studio process.
STUDIO_PROCESS_STATS = 98;
// Stats on Studio's performance
STUDIO_PERFORMANCE_STATS = 99;
// Performance stats for LLDB operations.
LLDB_PERFORMANCE_STATS = 100;
// User opened a project in the IDE.
STUDIO_PROJECT_OPENED = 101;
// User closed a project in the IDE.
STUDIO_PROJECT_CLOSED = 102;
// Feature grouping of tutorials expanded.
FIREBASE_ASSISTANT_FEATURE_EXPANDED = 103;
// Tutorial opened.
FIREBASE_ASSISTANT_TUTORIAL_OPENED = 104;
// Tutorial closed via navigation.
FIREBASE_ASSISTANT_TUTORIAL_CLOSED = 105;
// Project update failed due to permissions issue.
FIREBASE_ASSISTANT_PROJECT_UPDATE_DENIED = 106;
// Terms of service accepted by user.
FIREBASE_ASSISTANT_TOS_ACCEPTED = 107;
// Dependency added.
FIREBASE_ASSISTANT_DEPENDENCY_ADDED = 108;
// Layout editor event
LAYOUT_EDITOR_EVENT = 109;
// Receive sync response and start to setup project in IDE.
GRADLE_SYNC_SETUP_STARTED = 110;
// For event from App Links Assistant.
APP_LINKS_ASSISTANT_STATS = 111;
// Emulator performance tracking.
EMULATOR_PERFORMANCE_STATS = 112;
// The user saved a recorded Robo bootstrap script.
TEST_RECORDER_SAVE_ROBO_SCRIPT = 113;
// Opened ADB Connection Help Link
ADB_ASSISTANT_STATS = 114;
// A native debug session ended.
LLDB_SESSION_ENDED = 115;
// Android Profiler event
ANDROID_PROFILER = 116;
// APK Analyzer Statistics
APK_ANALYZER_STATS = 117;
// The user launched the test recorder to record a Robo bootstrap script.
TEST_RECORDER_RECORD_ROBO_SCRIPT = 118;
// Instant Run Notification Tracking
INSTANT_RUN_PROMPT_FOR_APPLY_CHANGES_SHOWN = 119;
// APK Main module imported for debugging
APK_DEBUG_IMPORT = 120;
// Attach java sources for apk debuggging
APK_DEBUG_ATTACH_JAVA_SOURCES = 121;
// Add debug symbols for apk debugging
APK_DEBUG_ADD_SYMBOLS = 122;
// Select Path mappings for apk debugging
APK_DEBUG_SELECT_PATH_MAPPINGS = 123;
// Layout Inspector event
LAYOUT_INSPECTOR_EVENT = 124;
// Android Profiler database statistics
ANDROID_PROFILER_DB_STATS = 125;
// Connection Assistant event
CONNECTION_ASSISTANT_EVENT = 126;
// Out of Memory Dialog event
STUDIO_UI_OOM_DIALOG_EVENT = 127;
// The event is related to CMake editing.
CMAKE_EDITING_EVENT = 128;
// The event is related to C++ header file view in Android Project
CPP_HEADERS_VIEW_EVENT = 129;
// The event is related to What's New Assistant
WHATS_NEW_ASSISTANT_EVENT = 130;
// Indexing operation event.
INTELLIJ_INDEXING_STATS = 131;
// The event is related to a lint session
LINT_SESSION = 132;
// The event is related to taking an action on a lint suggestion
LINT_ACTION = 133;
// Events related to a “Run” in studio
STUDIO_RUN_EVENT = 134 [deprecated = true];
// The event is related to count files in a search scope
INTELLIJ_PROJECT_SIZE_STATS = 135;
// The event is related to a tool window
STUDIO_TOOL_WINDOW_ACTION_STATS = 136;
// The event is related to a JNI inspection
JNI_INSPECTION = 137;
// The event is descibing user sentiment
USER_SENTIMENT = 138;
// More events on the UI of Project Structure Dialog
PROJECT_STRUCTURE_DIALOG_APPLY = 139;
PROJECT_STRUCTURE_DIALOG_CANCEL = 140;
PROJECT_STRUCTURE_DIALOG_VARIABLES_ADD_SIMPLE = 141;
PROJECT_STRUCTURE_DIALOG_VARIABLES_ADD_LIST = 142;
PROJECT_STRUCTURE_DIALOG_VARIABLES_ADD_MAP = 143;
PROJECT_STRUCTURE_DIALOG_VARIABLES_REMOVE = 144;
PROJECT_STRUCTURE_DIALOG_VARIABLES_RENAME = 145;
PROJECT_STRUCTURE_DIALOG_VARIABLES_MODIFY_VALUE = 146;
PROJECT_STRUCTURE_DIALOG_MODULES_ADD = 147;
PROJECT_STRUCTURE_DIALOG_MODULES_REMOVE = 148;
PROJECT_STRUCTURE_DIALOG_MODULES_RENAME = 149;
PROJECT_STRUCTURE_DIALOG_MODULES_SIGNINGCONFIGS_ADD = 150;
PROJECT_STRUCTURE_DIALOG_MODULES_SIGNINGCONFIGS_REMOVE = 151;
PROJECT_STRUCTURE_DIALOG_MODULES_SIGNINGCONFIGS_RENAME = 152;
PROJECT_STRUCTURE_DIALOG_DEPENDENCIES_ADD_LIBRARY = 153;
PROJECT_STRUCTURE_DIALOG_DEPENDENCIES_ADD_MODULE = 154;
PROJECT_STRUCTURE_DIALOG_DEPENDENCIES_ADD_JAR = 155;
PROJECT_STRUCTURE_DIALOG_DEPENDENCIES_REMOVE = 156;
PROJECT_STRUCTURE_DIALOG_BUILTYPES_ADD = 157;
PROJECT_STRUCTURE_DIALOG_BUILTYPES_REMOVE = 158;
PROJECT_STRUCTURE_DIALOG_BUILTYPES_RENAME = 159;
PROJECT_STRUCTURE_DIALOG_FLAVORS_DIMENSION_ADD = 160;
PROJECT_STRUCTURE_DIALOG_FLAVORS_DIMENSION_REMOVE = 161;
PROJECT_STRUCTURE_DIALOG_FLAVORS_DIMENSION_RENAME = 162;
PROJECT_STRUCTURE_DIALOG_FLAVORS_PRODUCTFLAVOR_ADD = 163;
PROJECT_STRUCTURE_DIALOG_FLAVORS_PRODUCTFLAVOR_REMOVE = 164;
PROJECT_STRUCTURE_DIALOG_FLAVORS_PRODUCTFLAVOR_RENAME = 165;
PROJECT_STRUCTURE_DIALOG_UPDATE_LIBRARY_VERSION = 166;
// Deploying and running apps from studio
RUN_EVENT = 167;
// Studio's LowMemoryWatcher triggered
STUDIO_LOW_MEMORY_EVENT = 168;
// Project Structure Dialog repository search events.
PROJECT_STRUCTURE_DIALOG_REPOSITORIES_SEARCH = 169;
// Navigation Editor event
NAV_EDITOR_EVENT = 170;
// User took an action on a dialog (open or close)
DIALOG_STATS = 171;
// User took an action to invalidate caches
PROJECT_SYSTEM_INVALIDATE_CACHES = 172;
// Performed an action with the Gradle Plugin Upgrade dialog
GRADLE_PLUGIN_UPGRADE_DIALOG = 173;
// Data binding related metrics
DATA_BINDING = 174;
// Typing latency statistics.
TYPING_LATENCY_STATS = 175;
// Sync failure details reported to the user (previously reported as a
// GRADLE_SYNC_FAILURE).
GRADLE_SYNC_FAILURE_DETAILS = 176;
// Sync issues reported to the user (after sync completed).
GRADLE_SYNC_ISSUES = 177;
// Android Studio Patch Updater events
STUDIO_PATCH_UPDATER = 178;
// Resource Manager events
RESOURCE_MANAGER = 179;
// Info on which IDE plugins are enabled for the current session.
IDE_PLUGIN_INFO = 180;
// Editor syntax highlighting statistics.
EDITOR_HIGHLIGHTING_STATS = 181;
// Status of Windows Defender
WINDOWS_DEFENDER_STATUS = 182;
}
// Represents different Performance Monitoring types.
enum MonitorType {
UNKNOWN_MONITOR_TYPE = 0;
CPU = 1;
GPU = 2;
MEMORY = 3;
NETWORK = 4;
}
// Represents different Performance Profiler Capture types.
enum ProfilerCaptureType {
UNKNOWN_PROFILER_CAPTURE_TYPE = 0;
ALLOCATION = 1;
FILE = 2;
GFX_TRACE = 3;
HEAP = 4;
SYSTEM_INFO = 5;
VM_TRACE = 6;
METHOD_TRACING = 7;
LAYOUT_INSPECTOR_SNAPSHOT = 8;
HIERARCHY_VIEW = 9;
}
// Represents the different Run Configurations the debugger supports.
enum RunConfigurationType {
UNKNOWN_RUN_CONFIGURATION_TYPE = 0;
ANDROID = 1;
ANDROID_NATIVE = 2;
ANDROID_TEST = 3;
}
// Represents the different debugger types supported.
enum DebuggerType {
UNKNOWN_DEBUGGER_TYPE = 0;
JAVA = 1;
HYBRID = 2;
NATIVE = 3;
}
// Represents the different Google Developer Services that can be
// (semi-)automatically integrated into Android Applications.
enum DeveloperServiceKind {
UNKNOWN_DEVELOPER_SERVICE_KIND = 0;
GOOGLE_CLOUD_MESSAGING = 1;
AD_MOB = 2;
GOOGLE_SIGN_IN = 3;
GOOGLE_ANALYTICS = 4;
FIREBASE = 5;
REALTIME_DATABASE = 6;
AUTHENTICATION = 7;
CRASH_REPORTING = 8;
NOTIFICATIONS = 9;
REMOTE_CONFIG = 10;
STORAGE = 11;
APP_INVITES = 12;
DYNAMIC_LINKS = 13;
}
// The various templates the template engine could be asked to render.
enum TemplateRenderer {
UNKNOWN_TEMPLATE_RENDERER = 0;
CUSTOM_TEMPLATE_RENDERER = 1;
ANDROID_MODULE = 2;
ANDROID_PROJECT = 3;
EMPTY_ACTIVITY = 4;
BLANK_ACTIVITY = 5;
LAYOUT_XML_FILE = 6;
FRAGMENT_BLANK = 7;
NAVIGATION_DRAWER_ACTIVITY = 8;
VALUES_XML_FILE = 9;
GOOGLE_MAPS_ACTIVITY = 10;
LOGIN_ACTIVITY = 11;
ASSETS_FOLDER = 12;
TABBED_ACTIVITY = 13;
SCROLLING_ACTIVITY = 14;
FULLSCREEN_ACTIVITY = 15;
SERVICE = 16;
JAVA_LIBRARY = 17;
SETTINGS_ACTIVITY = 18;
FRAGMENT_LIST = 19;
MASTER_DETAIL_FLOW = 20;
ANDROID_WEAR_MODULE = 21;
BROADCAST_RECEIVER = 22;
AIDL_FILE = 23;
INTENT_SERVICE = 24;
JNI_FOLDER = 25;
JAVA_FOLDER = 26;
CUSTOM_VIEW = 27;
ANDROID_TV_MODULE = 28;
GOOGLE_ADMOBS_ADS_ACTIVITY = 29;
ALWAYS_ON_WEAR_ACTIVITY = 30;
RES_FOLDER = 31;
ANDROID_TV_ACTIVITY = 32;
BLANK_WEAR_ACTIVITY = 33;
BASIC_ACTIVITIY = 34;
APP_WIDGET = 35;
ANDROID_INSTANT_APP_PROJECT = 36;
ANDROID_INSTANT_APP_MODULE = 37;
ANDROID_INSTANT_APP_BUNDLE_PROJECT = 38;
ANDROID_INSTANT_APP_DYNAMIC_MODULE = 39;
}
// Reasons Gradle sync failed.
enum GradleSyncFailure {
UNKNOWN_GRADLE_FAILURE = 0;
CONNECTION_DENIED = 1;
CLASS_NOT_FOUND = 2;
DSL_METHOD_NOT_FOUND = 3;
FAILED_TO_PARSE_SDK = 4;
METHOD_NOT_FOUND = 5;
MISSING_ANDROID_PLATFORM = 6;
MISSING_ANDROID_SUPPORT_REPO = 7;
MISSING_BUILD_TOOLS = 8;
OUT_OF_MEMORY = 9;
SDK_NOT_FOUND = 10;
UNKNOWN_HOST = 11;
UNSUPPORTED_ANDROID_MODEL_VERSION = 12;
UNSUPPORTED_GRADLE_VERSION = 13;
CANNOT_BE_CAST_TO = 14;
BROKEN_PIPE = 15;
CANNOT_OPEN_ZIP_FILE = 16;
OBJECT_STREAM_ERROR = 17;
NDK_INTEGRATION_DEPRECATED = 18;
SDK_BUILD_TOOLS_TOO_LOW = 19;
CACHED_DEPENDENCY_NOT_FOUND = 20;
UNEXPECTED_ERROR = 21;
GRADLE2_REQUIRED = 22;
CORRUPT_GRADLE_DEPENDENCY = 23;
INTERNET_CONNECTION_ERROR = 24;
OLD_ANDROID_PLUGIN = 25;
MISSING_CMAKE = 26;
NDK_NOT_CONFIGURED = 27;
FAILED_TO_INSTALL_NDK_BUNDLE = 28;
UNSUPPORTED_MODEL_VERSION = 29;
DAEMON_CONTEXT_MISMATCH = 30;
JAVA_HEAP_ERROR = 31;
JDK8_REQUIRED = 32;
}
// IDE brand containing the android plugin
enum IdeBrand {
UNKNOWN_IDE_BRAND = 0;
ANDROID_STUDIO = 1;
ANDROID_STUDIO_WITH_BLAZE = 2;
INTELLIJ = 3;
}
// Gradle sync issue type.
enum GradleSyncIssueType {
UNKNOWN_GRADLE_SYNC_ISSUE_TYPE = 0;
TYPE_PLUGIN_OBSOLETE = 1;
TYPE_UNRESOLVED_DEPENDENCY = 2;
TYPE_DEPENDENCY_IS_APK = 3;
TYPE_DEPENDENCY_IS_APKLIB = 4;
TYPE_NON_JAR_LOCAL_DEP = 5;
TYPE_NON_JAR_PACKAGE_DEP = 6;
TYPE_NON_JAR_PROVIDED_DEP = 7;
TYPE_JAR_DEPEND_ON_AAR = 8;
// Mismatch dependency version between tested and test app. Data is dep
// coordinate without the version (groupId:artifactId)
TYPE_MISMATCH_DEP = 9;
TYPE_OPTIONAL_LIB_NOT_FOUND = 10;
TYPE_JACK_IS_NOT_SUPPORTED = 11;
TYPE_GRADLE_TOO_OLD = 12;
TYPE_BUILD_TOOLS_TOO_LOW = 13;
// Found dependency that's the maven published android.jar. Data is the
// maven artifact coordinates.
TYPE_DEPENDENCY_MAVEN_ANDROID = 14;
// Found dependency that is known to be inside android.jar. Data is maven
// artifact coordinates.
TYPE_DEPENDENCY_INTERNAL_CONFLICT = 15;
// Errors configuring NativeConfigValues for individual individual variants
TYPE_EXTERNAL_NATIVE_BUILD_CONFIGURATION = 16;
// Errors configuring NativeConfigValues. There was a process exception.
// Data contains STDERR which should be interpreted by Android Studio.
TYPE_EXTERNAL_NATIVE_BUILD_PROCESS_EXCEPTION = 17;
// Cannot use Java 8 Language features without Jack.
TYPE_JACK_REQUIRED_FOR_JAVA_8_LANGUAGE_FEATURES = 18;
// A wearApp configuration was resolved and found more than one apk. Data is
// the configuration name.
TYPE_DEPENDENCY_WEAR_APK_TOO_MANY = 19;
// A wearApp configuration was resolved and found an apk even though
// unbundled mode is on.
TYPE_DEPENDENCY_WEAR_APK_WITH_UNBUNDLED = 20;
TYPE_JAR_DEPEND_ON_ATOM = 21;
TYPE_AAR_DEPEND_ON_ATOM = 22;
TYPE_ATOM_DEPENDENCY_PROVIDED = 23;
// Indicates that a required SDK package was not installed. The data field
// contains the sdklib package ID of the missing package that the user
// should install.
TYPE_MISSING_SDK_PACKAGE = 24;
// Indicates that the plugin requires a newer version of studio. Minimum
// version is passed in the data.
TYPE_STUDIO_TOO_OLD = 25;
// Indicates that the module contains flavors but that no dimensions have
// been named. data is empty.
TYPE_UNNAMED_FLAVOR_DIMENSION = 26;
// An incompatible plugin is used.
TYPE_INCOMPATIBLE_PLUGIN = 27;
// Indicates that the project uses a deprecated DSL.
TYPE_DEPRECATED_DSL = 28;
TYPE_DEPRECATED_CONFIGURATION = 29;
// Indicates that the project uses a deprecated DSL.
TYPE_DEPRECATED_DSLVALUE = 30;
// Indicates that the project contains the min sdk in the android manifest
// file.
TYPE_MIN_SDK_VERSION_IN_MANIFEST = 31;
// Indicates that the project contains the target sdk in the android
// manifest file.
TYPE_TARGET_SDK_VERSION_IN_MANIFEST = 32;
// Indicated that an experimental gradle project option is used.
TYPE_UNSUPPORTED_PROJECT_OPTION_USE = 33;
// Indicates that building the configuration rules for this project requires
// parsing the manifest file.
TYPE_MANIFEST_PARSED_DURING_CONFIGURATION = 34;
// Indicates that the version of a third-party Gradle plugin (not the
// Android Gradle plugin) is not supported and needs to be updated.
TYPE_THIRD_PARTY_GRADLE_PLUGIN_TOO_OLD = 35;
// Indicates that the signing configuration is declared in the
// dynamic-feature gradle file. This should only be declared in the
// application module, as dynamic-features use the base module's signing
// configuration, and this will be ignored.
TYPE_SIGNING_CONFIG_DECLARED_IN_DYNAMIC_FEATURE = 36;
// Indicates that the SDK is missing or invalid, this can either be set in
// the ANDROID_SDK_ROOT environment variable or the projects
// local.properties files.
TYPE_SDK_NOT_SET = 37;
}
// Various quick-fixes that are offered to resolve sync issues.
enum GradleSyncQuickFix {
UNKNOWN_GRADLE_SYNC_QUICK_FIX = 0;
ADD_GOOGLE_MAVEN_REPOSITORY_HYPERLINK = 1;
BUILD_PROJECT_HYPERLINK = 2;
CREATE_GRADLE_WRAPPER_HYPERLINK = 3;
DISABLE_OFFLINE_MODE_HYPERLINK = 4;
DOWNLOAD_ANDROID_STUDIO_HYPERLINK = 5;
DOWNLOAD_JDK8_HYPERLINK = 6;
ENABLE_EMBEDDED_REPO_HYPERLINK = 7;
FILE_BUG_HYPERLINK = 8;
FIX_ANDROID_GRADLE_PLUGIN_VERSION_HYPERLINK = 9;
FIX_BUILD_TOOLS_VERSION_HYPERLINK = 10;
FIX_GRADLE_VERSION_IN_WRAPPER_HYPERLINK = 11;
INSTALL_ARTIFACT_HYPERLINK = 12;
INSTALL_BUILD_TOOLS_HYPERLINK = 13;
INSTALL_C_MAKE_HYPERLINK = 14;
INSTALL_NDK_HYPERLINK = 15;
INSTALL_PLATFORM_HYPERLINK = 16;
INSTALL_REPOSITORY_HYPERLINK = 17;
INSTALL_SDK_PACKAGE_HYPERLINK = 18;
INSTALL_SDK_TOOLS_HYPERLINK = 19;
OPEN_ANDROID_SDK_MANAGER_HYPERLINK = 20;
OPEN_BUILD_FILE_HYPERLINK = 21;
OPEN_FILE_HYPERLINK = 22;
OPEN_GRADLE_SETTINGS_HYPERLINK = 23;
OPEN_HTTP_SETTINGS_HYPERLINK = 24;
OPEN_PLUGIN_BUILD_FILE_HYPERLINK = 25;
OPEN_PROJECT_STRUCTURE_HYPERLINK = 26;
OPEN_URL_HYPERLINK = 27;
REMOVE_SDK_FROM_MANIFEST_HYPERLINK = 28;
SEARCH_IN_BUILD_FILES_HYPERLINK = 29;
SELECT_JDK_FROM_FILE_SYSTEM_HYPERLINK = 30;
SET_SDK_DIR_HYPERLINK = 31;
SET_USE_DEPRECATED_NDK_HYPERLINK = 32;
SHOW_DEPENDENCY_IN_PROJECT_STRUCTURE_HYPERLINK = 33;
SHOW_LOG_HYPERLINK = 34;
SHOW_SYNC_ISSUES_DETAILS_HYPERLINK = 35;
STOP_GRADLE_DAEMONS_HYPERLINK = 36;
SYNC_PROJECT_WITH_EXTRA_COMMAND_LINE_OPTIONS_HYPERLINK = 37;
TOGGLE_OFFLINE_MODE_HYPERLINK = 38;
UPDATE_PLUGIN_HYPERLINK = 39;
UPGRADE_APPENGINE_PLUGIN_VERSION_HYPERLINK = 40;
USE_CURRENTLY_RUNNING_JDK_HYPERLINK = 41;
USE_EMBEDDED_JDK_HYPERLINK = 42;
SET_NDK_DIR_HYPERLINK = 43;
SET_CMAKE_DIR_HYPERLINK = 44;
}
}
// Describes a product, e.g. Android Studio or Emulator.
message ProductDetails {
// The product this event relates to.
optional ProductKind product = 1;
// The build ID of Android Studio.
optional string build = 2; // e.g. AI-141.2178183
// The version of the product.
optional string version = 3; // e.g. 2.0.0.11
// Historical: never used as it was not providing enough info. Use channel
// instead as it distinguishes between different kinds of preview releases.
optional bool preview = 4 [deprecated = true];
// The CPU archtecture the product is running on.
optional CpuArchitecture os_architecture = 5;
// The state in the software lifecycle of this product.
optional SoftwareLifeCycleChannel channel = 6;
// Set when ProductKind = STUDIO, the look and feel of the product.
optional IdeTheme theme = 7;
// Various states in the software life cycle this software could be in.
enum SoftwareLifeCycleChannel {
UNKNOWN_LIFE_CYCLE_CHANNEL = 0;
CANARY = 1;
DEV = 2;
BETA = 3;
STABLE = 4;
}
// Describes the various Products related to Android Studio.
enum ProductKind {
UNKNOWN_PRODUCT = 0;
STUDIO = 1;
EMULATOR = 2;
GRADLE = 3;
DDMS = 4;
STUDIO_PATCH_UPDATER = 5;
}
// Chip the software is running on.
enum CpuArchitecture {
UNKNOWN_CPU_ARCHITECTURE = 0;
X86 = 1;
X86_64 = 2;
}
// The current theme set for Android Studio
enum IdeTheme {
UNKNOWN_THEME = 0;
DARCULA = 1;
LIGHT = 2;
LIGHT_MAC_NATIVE = 3;
LIGHT_WIN_NATIVE = 4;
GTK = 5;
}
}
// Describes a emulator or physical Android Device.
message DeviceInfo {
// serial number of the device, salted & sha256ed on the client.
optional string anonymized_serial_number = 1;
// Tags used to build the android version on this device.
// e.g. 'release-keys' or 'test-keys' or 'A100_V001'
optional string build_tags = 2;
// Type of build this device is running.
// e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
optional string build_type = 3;
// Android version e.g. '5.1.1'
optional string build_version_release = 4;
// Historic: doesn't support api levels for code names such as 'N'.
optional int32 build_api_level = 5;
// ABI of the device, e.g. 'armeabi-v7a' or 'x86'
optional ApplicationBinaryInterface cpu_abi = 6;
// Device manufacturer, e.g. 'Motorola' or 'Samsung'
optional string manufacturer = 7;
// Device model, e.g. 'Nexus 5' or 'GT-I9500'.
optional string model = 8;
// What kind of device is this? Physicial/Emulator/Cloud etc...
optional DeviceType device_type = 9;
// android api level e.g. '23' or 'N'
optional string build_api_level_full = 10;
// Describes tthe ABI of the device/emulator.
enum ApplicationBinaryInterface {
UNKNOWN_ABI = 0;
ARME_ABI_V7A = 1;
X86_ABI = 2;
ARM64_V8A_ABI = 3;
X86_64_ABI = 4;
ARME_ABI = 5;
MIPS_ABI = 6;
MIPS_R2_ABI = 7;
ARME_ABI_V6L = 8;
ARME_ABI_V6J = 9;
}
// Describes the kind of device being deployed/tested on.
enum DeviceType {
UNKNOWN_DEVICE_TYPE = 0;
LOCAL_PHYSICAL = 1;
LOCAL_EMULATOR = 2;
CLOUD_EMULATOR = 3;
CLOUD_PHYSICAL = 4;
}
}
message LldbSessionStartDetails {
// A UUID used to relate start and end of a native debug session.
optional string debug_session_id = 1;
// Debugger type for this session
optional AndroidStudioEvent.DebuggerType debugger_type = 2;
// Run configuration that was used to start this sesssion.
optional AndroidStudioEvent.RunConfigurationType run_configuration_type = 3;
// True if debugger_type was chosen via the Auto debugger type.
optional bool auto_debugger = 4;
// Device on which the debuggable app is running.
optional DeviceInfo device_info = 5;
// Version of the native debugger.
optional string lldb_version = 6;
// Type of starter used to start this session.
optional StarterType starter_type = 7;
// Describes session starter implementations.
enum StarterType {
UNKNOWN_STARTER_TYPE = 0;
ROOT_SHELL_STARTER_TYPE = 1;
RUN_AS_SHELL_STARTER_TYPE = 2;
INJECTOR_STARTER_TYPE = 3;
}
}
message LldbSessionEndDetails {
// A UUID used to relate start and end of a native debug session.
optional string debug_session_id = 1;
// If the session ended with a failure, the related message.
// e.g. 'failed to get reply to handshake packet'
optional string failure_message = 2;
// Number of times the program was stopped by the debugger.
// Proxy for use of the session to compute error rates.
optional uint64 stops = 3;
// Number of errors encountered during the session.
// Includes both fatal and non-fatal errors.
optional uint64 errors = 4;
}
message StudioExceptionDetails {
// hash of the exception stack trace
optional string hash = 1;
// summary of the exception stack trace
optional string summary = 2;
// number of crashes seen with this stack trace
optional uint32 count = 3;
}
// Metrics on crashes in Android Studio.
message StudioCrash {
// number of actions since last crash report.
optional int64 actions = 1;
// number of exceptions since last crash report.
optional int64 exceptions = 2;
// number of crashes since last crash report.
optional int64 crashes = 3;
// number of exceptions from plugins bundled with Android Studio.
optional int64 bundled_plugin_exceptions = 4;
// number of exceptions from plugins not bundled with Android Studio.
optional int64 non_bundled_plugin_exceptions = 5;
// details on each exception
repeated StudioExceptionDetails details = 6;
}
// Emulator guest image's GL info.
message EmulatorGuestGlInfo {
// GL Driver vendor.
optional string vendor = 1;
// GL Driver name.
optional string renderer = 2;
// GL Driver version number.
optional string version = 3;
}
// Emulator: Host GPU info.
message EmulatorGpuInfo {
// Make of the Graphics card.
optional string make = 1;
// Model of the Graphics card.
optional string model = 2;
// Device id of the Graphics card.
optional string device_id = 3;
// Revision of the graphics card.
optional string revision_id = 4;
// Version of the graphics card driver.
optional string version = 5;
// Name of the graphics card driver.
optional string renderer = 6;
}
// Set of emulator feature flags to report ones used during current session.
message EmulatorFeatures {
optional bool gps = 1;
optional bool sensors = 2;
optional bool virtualscene_config = 3;
optional bool container_launch = 4;
}
// A description of a single file from an AVD.
message EmulatorAvdFile {
enum EmulatorAvdFileLocation {
UNKNOWN_EMULATOR_AVD_FILE_LOCATION = 0;
STANDARD = 1;
CUSTOM = 2;
}
enum EmulatorAvdFileKind {
UNKNOWN_EMULATOR_AVD_FILE_KIND = 0;
KERNEL = 1;
SYSTEM = 2;
RAMDISK = 3;
}
// Kind of the file this report is about.
optional EmulatorAvdFileKind kind = 1;
// Location of the file
optional EmulatorAvdFileLocation location = 2;
// Size
optional int64 size = 3;
// Creation datetime, as a UTC unix timestamp
optional int64 creation_timestamp = 4;
}
// A description of an AVD Emulator has loaded.
message EmulatorAvdInfo {
enum EmulatorAvdImageKind {
UNKNOWN_EMULATOR_AVD_IMAGE_KIND = 0;
AOSP = 1;
GOOGLE = 2;
PLAY_STORE_KIND = 3;
}
// Other AVD properties that can combine with EmulatorAvdImageKind.
enum EmulatorAvdProperty {
UNKNOWN_EMULATOR_AVD_FLAG = 0;
PLAY_STORE_AVD = 1;
PHONE_AVD = 2;
TV_AVD = 3;
WEAR_AVD = 4;
ANDROIDAUTO_AVD = 5;
THING_AVD = 6;
TABLET_AVD = 7;
LAPTOP_AVD = 8;
DESKTOP_AVD = 9;
CHROMEOS = 10;
// Next tag: 11
}
// Name of the AVD. Deprecated as it could potentially contain PII.
optional string name = 1
[deprecated = true];
// Api level (23 = M, 24 = N, ...)
optional int64 api_level = 2;
// CPU architecture.
optional EmulatorDetails.GuestCpuArchitecture arch = 3;
// When was this AVD created, UTC Unix timespamp.
optional int64 creation_timestamp = 4;
// A build-id string from build.prop, something like 'sdk_google_phone 1231231
// 10-11-2012'.
optional string build_id = 5;
// Unix build UTC timestamp.
optional int64 build_timestamp = 6;
// Kind of the image (e.g. pure AOSP, with Google APIs, etc.).
optional EmulatorAvdImageKind image_kind = 7;
// A collection of files in the AVD
// (usually 3 entries: kernel, system & ramdisk).
repeated EmulatorAvdFile files = 8;
// Collection of other AVD properties, mostly relating to flavor
// (TV vs phone vs Auto, etc)
repeated EmulatorAvdProperty properties = 9;
}
// State of emulator feature flags, including
// which flags attempted to enable vs resulting set
// of enabled flags.
message EmulatorFeatureFlagState {
enum EmulatorFeatureFlag {
EMULATOR_FEATURE_FLAG_UNSPECIFIED = 0;
GL_PIPE_CHECKSUM = 1;
GRALLOC_SYNC = 2;
ENCRYPT_USER_DATA = 3;
INTEL_PERFORMANCE_MONITORING_UNIT = 4;
GL_ASYNC_SWAP = 5;
GLDMA = 6;
GLES_DYNAMIC_VERSION = 7;
FORCE_ANGLE = 8;
FORCE_SWIFTSHADER = 9;
WIFI = 10;
PLAY_STORE_IMAGE = 11;
LOGCAT_PIPE = 12;
// Hypervisor "allowed" flags (different from actual using)
HYPERV = 13;
HVF = 14;
KVM = 15;
HAXM = 16;
FAST_SNAPSHOT_V1 = 17;
SCREEN_RECORDING = 18;
VIRTUAL_SCENE = 19;
SYSTEM_AS_ROOT = 20;
IGNORE_HOST_OPENGL_ERRORS = 21;
GENERIC_SNAPSHOTS_UI = 22;
ALLOW_SNAPSHOT_MIGRATION = 23;
DEPRECATED_GENERIC_INCREMENTAL_SNAPSHOT = 24 [deprecated = true];
WINDOWS_ON_DEMAND_SNAPSHOT_LOAD = 25;
WINDOWS_HYPERVISOR_PLATFORM = 26;
KERNEL_DEVICE_TREE_BLOB_SUPPORT = 27;
LOCATION_UI_V2 = 28;
GENERIC_INCREMENTAL_SNAPSHOT = 29;
SNAPSHOT_ADB = 30;
OFFWORLD = 31;
OFFWORLD_DISABLE_SECURITY = 32;
QUICKBOOT_FILE_BACKED = 33;
REFCOUNT_PIPE = 34;
GLDMA2 = 35;
HOST_COMPOSITION_V1 = 36;
ON_DEMAND_SNAPSHOT_LOAD = 37;
WIFI_CONFIGURABLE = 38;
GL_DIRECT_MEM = 39;
VIDEO_PLAYBACK = 40;
VULKAN = 41;
MACRO_UI = 42;
CAR_VHAL_TABLE = 43;
DYNAMIC_PARTITION = 44;
IP_DISCONNECT_ON_LOAD = 45;
VULKAN_SNAPSHOTS = 46;
VIRTIO_INPUT = 47;
MULTI_DISPLAY = 48;
VULKAN_NULL_OPTIONAL_STRINGS = 49;
DYNAMIC_MEDIA_PROFILE = 50;
YUV420_888_to_NV21 = 51;
YUV_Cache = 52;
KEYCODE_FORWARDING = 53;
VULKAN_IGNORED_HANDLES = 54;
VIRTIO_GPU_NEXT = 55;
MAC80211HWSIM_USERSPACE_MANAGED = 56;
HAS_SHARED_SLOTS_HOST_MEMORY_ALLOCATOR = 57;
CAR_VHAL_REPLAY = 58;
// Next tag: 59
}
// Which features were enabled by default or through the server-side config.
repeated EmulatorFeatureFlag attempted_enabled_feature_flags = 1;
// Which features were enabled through user override.
repeated EmulatorFeatureFlag user_overridden_enabled_features = 2;
// Which features were disabled through user override.
repeated EmulatorFeatureFlag user_overridden_disabled_features = 3;
// Which features ended up being enabled overall.
repeated EmulatorFeatureFlag resulting_enabled_features = 4;
// Next tag: 5
}
// RAM usage info for the emulator, in bytes.
message EmulatorMemoryUsage {
optional uint64 resident_memory = 1;
optional uint64 resident_memory_max = 2;
optional uint64 virtual_memory = 3;
optional uint64 virtual_memory_max = 4;
optional uint64 total_phys_memory = 5;
optional uint64 total_page_file = 6;
optional uint64 total_guest_memory = 7;
}
// An enum representing all possible snapshot properties (bit flags).
enum EmulatorSnapshotFlags {
// Default, no special properties.
SNAPSHOT_FLAGS_NONE = 0;
// RAM is compressed in this snapshot.
SNAPSHOT_FLAGS_RAM_COMPRESSED_BIT = 1;
// Textures are compressed in this snapshot.
SNAPSHOT_FLAGS_TEXTURES_COMPRESSED_BIT = 2;
// Hard disk drive was used.
SNAPSHOT_FLAGS_HDD_BIT = 3;
}
// Generic snapshot save states. Distinguished
// from Quickboot save states.
enum EmulatorSnapshotSaveState {
// Successful saving.
EMULATOR_SNAPSHOT_SAVE_SUCCEEDED_NORMAL = 0;
// Generic failure when saving state.
EMULATOR_SNAPSHOT_SAVE_FAILED = 1;
// Saving skipped: not supported in current configuration.
EMULATOR_SNAPSHOT_SAVE_SKIPPED_UNSUPPORTED = 2;
// Saving skipped: Not booted yet.
EMULATOR_SNAPSHOT_SAVE_SKIPPED_NOT_BOOTED = 3;
// Saving skipped: No snapshot name given.
EMULATOR_SNAPSHOT_SAVE_SKIPPED_NO_SNAPSHOT = 4;
// Saving skipped: Disk under pressure.
EMULATOR_SNAPSHOT_SAVE_SKIPPED_DISK_PRESSURE = 5;
// Next tag: 6
}
// Generic snapshot load states. Distinguished
// from Quickboot load states.
enum EmulatorSnapshotLoadState {
// Successful load.
EMULATOR_SNAPSHOT_LOAD_SUCCEEDED_NORMAL = 0;
// Generic failure when loading state.
EMULATOR_SNAPSHOT_LOAD_FAILED = 1;
// Loading snapshots not supported in current configuration.
EMULATOR_SNAPSHOT_LOAD_SKIPPED_UNSUPPORTED = 2;
// Loading snapshot failed because it doesn't exist.
EMULATOR_SNAPSHOT_LOAD_NO_SNAPSHOT = 3;
// Loading snapshot failed because the snapshot is too old.
EMULATOR_SNAPSHOT_LOAD_OLD_SNAPSHOT = 4;
// The snapshot load hung.
EMULATOR_SNAPSHOT_LOAD_HUNG = 5;
}
// Detailed lists of snapshot operation failure reasons.
// Shared between load and save operations.
enum EmulatorSnapshotFailureReason {
EMULATOR_SNAPSHOT_FAILURE_REASON_UNSPECIFIED = 0;
EMULATOR_SNAPSHOT_FAILURE_REASON_CORRUPTED_DATA = 1;
EMULATOR_SNAPSHOT_FAILURE_REASON_NO_SNAPSHOT_PB = 2;
EMULATOR_SNAPSHOT_FAILURE_REASON_BAD_SNAPSHOT_PB = 3;
EMULATOR_SNAPSHOT_FAILURE_REASON_INCOMPATIBLE_VERSION = 4;
EMULATOR_SNAPSHOT_FAILURE_REASON_NO_RAM_FILE = 5;
EMULATOR_SNAPSHOT_FAILURE_REASON_NO_TEXTURES_FILE = 6;
EMULATOR_SNAPSHOT_FAILURE_REASON_SNAPSHOTS_NOT_SUPPORTED = 7;
// Next unrecoverable error here: 8
EMULATOR_SNAPSHOT_FAILURE_REASON_UNRECOVERABLE_ERROR_LIMIT = 10000;
EMULATOR_SNAPSHOT_FAILURE_REASON_NO_SNAPSHOT_IN_IMAGE = 10001;
EMULATOR_SNAPSHOT_FAILURE_REASON_CONFIG_MISMATCH_HOST_HYPERVISOR = 10002;
EMULATOR_SNAPSHOT_FAILURE_REASON_CONFIG_MISMATCH_HOST_GPU = 10003;
EMULATOR_SNAPSHOT_FAILURE_REASON_CONFIG_MISMATCH_RENDERER = 10004;
EMULATOR_SNAPSHOT_FAILURE_REASON_CONFIG_MISMATCH_FEATURES = 10005;
EMULATOR_SNAPSHOT_FAILURE_REASON_CONFIG_MISMATCH_AVD = 10006;
EMULATOR_SNAPSHOT_FAILURE_REASON_SYSTEM_IMAGE_CHANGED = 10007;
// Next validation error here: here: 10008
EMULATOR_SNAPSHOT_FAILURE_REASON_VALIDATION_ERROR_LIMIT = 20000;
EMULATOR_SNAPSHOT_FAILURE_REASON_INTERNAL_ERROR = 20001;
EMULATOR_SNAPSHOT_FAILURE_REASON_EMULATION_ENGINE_FAILED = 20002;
EMULATOR_SNAPSHOT_FAILURE_REASON_RAM_FAILED = 20003;
EMULATOR_SNAPSHOT_FAILURE_REASON_TEXTURES_FAILED = 20004;
EMULATOR_SNAPSHOT_FAILURE_REASON_ADB_OFFLINE = 20005;
// Next other kind of error here: 20006
EMULATOR_SNAPSHOT_FAILURE_REASON_IN_PROGRESS_LIMIT = 30000;
// Next new type of error here: 30001
}
// Emulator snapshot description.
message EmulatorSnapshot {
// Anonymized snapshot name (SHA256 + salted).
optional string name = 1;
// A combination of EmulatorSnapshotFlags describing the snapshot.
optional int32 flags = 2;
// Total size on disk, in bytes.
optional int64 size_bytes = 3;
// Snapshot save/load states.
optional EmulatorSnapshotSaveState save_state = 4;
optional EmulatorSnapshotLoadState load_state = 5;
// Detailed reason for non-success of snapshot load.
optional EmulatorSnapshotFailureReason load_failure_reason = 6;
// Detailed reason for non-success of snapshot save.
optional EmulatorSnapshotFailureReason save_failure_reason = 7;
// Whether or not it was lazy loaded.
optional bool lazy_loaded = 8;
// Whether or not it was incrementally saved.
optional bool incrementally_saved = 9;
// Size of RAM (possibly incl. incremental / compression)
optional int64 ram_size_bytes = 10;
// Size of textures (possibly incl. incremental / compression)
optional int64 textures_size_bytes = 11;
// Duration of load / save (total).
optional uint64 load_duration_ms = 12;
optional uint64 save_duration_ms = 13;
// Duration of load / save (ram).
optional uint64 ram_load_duration_ms = 14;
optional uint64 ram_save_duration_ms = 15;
// Duration of load / save (textures).
optional uint64 textures_load_duration_ms = 16;
optional uint64 textures_save_duration_ms = 17;
// Next tag: 18
}
// Description of emulator's quickboot load.
message EmulatorQuickbootLoad {
// List of possible states of a load operation.
enum EmulatorQuickbootLoadState {
// Quickboot succeeded.
EMULATOR_QUICKBOOT_LOAD_SUCCEEDED = 0;
// There was no snapshot for a quickboot load.
EMULATOR_QUICKBOOT_LOAD_NO_SNAPSHOT = 1;
// Generic failure during load.
EMULATOR_QUICKBOOT_LOAD_FAILED = 2;
// Guest hung after loading a quickboot snapshot.
EMULATOR_QUICKBOOT_LOAD_HUNG = 3;
// Performed a cold boot because of feature control settings.
EMULATOR_QUICKBOOT_LOAD_COLD_FEATURE = 4;
// Performed a cold boot because of command line flag.
EMULATOR_QUICKBOOT_LOAD_COLD_CMDLINE = 5;
// Performed a cold boot because of AVD configuration.
EMULATOR_QUICKBOOT_LOAD_COLD_AVD = 6;
// Performed a cold boot because quickboot is not supported in the current
// configuration.
EMULATOR_QUICKBOOT_LOAD_COLD_UNSUPPORTED = 7;
// Specified snapshot is too old for loading, fallback to cold boot.
EMULATOR_QUICKBOOT_LOAD_COLD_OLD_SNAPSHOT = 8;
}
// The state of the quickboot load operation.
optional EmulatorQuickbootLoadState state = 1;
// How long it took, milliseconds.
optional uint64 duration_ms = 2;
// Information about loaded snapshot.
optional EmulatorSnapshot snapshot = 3;
// Flag is set when on demand RAM loading was enabled for the load.
optional bool on_demand_ram_enabled = 4;
// ADB connection retries.
optional uint32 adb_connection_retries = 6;
// Next tag: 7
}
// Description of emulator's quickboot saving.
message EmulatorQuickbootSave {
// List of possible states of a save operation.
enum EmulatorQuickbootSaveState {
// Successful saving.
EMULATOR_QUICKBOOT_SAVE_SUCCEEDED = 0;
// Generic failure when saving state.
EMULATOR_QUICKBOOT_SAVE_FAILED = 1;
// Saving disabled: feature control.
EMULATOR_QUICKBOOT_SAVE_DISABLED_FEATURE = 2;
// Saving disabled: command line argument.
EMULATOR_QUICKBOOT_SAVE_DISABLED_CMDLINE = 3;
// Saving disabled: AVD configuration.
EMULATOR_QUICKBOOT_SAVE_DISABLED_AVD = 4;
// Saving skipped: not supported in current configuration.
EMULATOR_QUICKBOOT_SAVE_SKIPPED_UNSUPPORTED = 5;
// Saving skipped: too low guest uptime.
EMULATOR_QUICKBOOT_SAVE_SKIPPED_LOW_UPTIME = 6;
// Saving skipped: Used the UI to skip saving.
EMULATOR_QUICKBOOT_SAVE_DISABLED_UI = 7;
// Saving skipped: Not booted yet.
EMULATOR_QUICKBOOT_SAVE_SKIPPED_NOT_BOOTED = 8;
}
// The state of the quickboot save operation.
optional EmulatorQuickbootSaveState state = 1;
// How long it took, milliseconds.
optional uint64 duration_ms = 2;
// Information about the saved snapshot.
optional EmulatorSnapshot snapshot = 3;
// What was the guest session uptime at the time of saving.
optional uint64 sesion_uptime_ms = 4;
}
// Track whether a GLES1 command is used or not
message EmulatorGLEScmUsages {
// Has the client create any GLES1 contexts
optional bool is_used = 1;
// Track glLight{f,fv,x,xv} command calls
optional bool light = 2;
// Track glTexGen{f,fv,x,xv,i,iv}OES command calls
optional bool tex_gen = 3;
}
// Track whether a GLES3.0 command is used or not
message EmulatorGLESv30Usages {
// Has the client create any GLES3 contexts
optional bool is_used = 1;
// Track glFenceSync command calls
optional bool fence_sync = 2;
// Track glFramebufferTextureLayer command calls
optional bool framebuffer_texture_layer = 3;
// Track glRenderbufferStorageMultisample command calls
optional bool renderbuffer_storage_multisample = 4;
// Track glGenTransformFeedbacks command calls
optional bool gen_transform_feedbacks = 5;
// Track glBeginQuery command calls
optional bool begin_query = 6;
}
// Track whether a GLES command is used or not
message EmulatorGLESUsages {
// GLES 1 usage report
optional EmulatorGLEScmUsages gles_1_usages = 1;
// GLES 3.0 usage report
optional EmulatorGLESv30Usages gles_3_0_usages = 2;
}
// Per-session counts of snapshot UI interactions.
message EmulatorSnapshotUICounts {
// Quickboot selection for exit behavior
optional uint32 quickboot_selection_yes = 1;
optional uint32 quickboot_selection_no = 2;
optional uint32 quickboot_selection_ask = 3;
// Next for quickboot selection: 4
// Ask dialog
optional uint32 quickboot_ask_canceled = 10;
optional uint32 quickboot_ask_yes = 11;
optional uint32 quickboot_ask_no = 12;
optional uint32 quickboot_ask_total_time_ms = 13;
// Next for ask dialog: 14
// Quickboot "save now" metrics
optional uint32 quickboot_save_now = 100;
// Next for "save now": 101
// Generic snapshot dialog
optional uint32 generic_save = 1000;
optional uint32 generic_load = 1001;
optional uint32 generic_delete = 1002;
optional uint32 generic_clone = 1003;
optional uint32 generic_edit = 1004;
optional uint32 generic_edited_name = 1005;
optional uint32 generic_edited_description = 1006;
optional uint32 generic_export = 1007;
optional uint32 generic_import = 1008;
optional uint32 generic_flat_view = 1009;
optional uint32 generic_tree_view = 1010;
optional uint32 generic_total_time_flat_view_ms = 1011;
optional uint32 generic_total_time_tree_view_ms = 1012;
optional uint32 generic_total_time_ms = 1013;
// Next for generic snapshot dialog: 1014
}
// Metrics on camera usage.
message EmulatorCameraSession {
// List of possible camera types.
enum EmulatorCameraType {
// Unspecified camera source.
EMULATOR_CAMERA_TYPE_UNSPECIFIED = 0;
// Camera source is the host's webcam.
EMULATOR_CAMERA_TYPE_WEBCAM = 1;
// Camera source is the virtual scene camera.
EMULATOR_CAMERA_TYPE_VIRTUAL_SCENE = 2;
// Camera source is the video playback camera.
EMULATOR_CAMERA_TYPE_VIDEO_PLAYBACK = 3;
}
// List of possible camera directions.
enum EmulatorCameraDirection {
// Unspecified direction.
EMULATOR_CAMERA_DIRECTION_UNSPECIFIED = 0;
// Back-facing camera.
EMULATOR_CAMERA_DIRECTION_BACK = 1;
// Front-facing camera.
EMULATOR_CAMERA_DIRECTION_FRONT = 2;
}
// Camera start result, successful values are positive, failures are negative.
enum EmulatorCameraStartResult {
// Camera was started successfully.
EMULATOR_CAMERA_START_SUCCESS = 0;
// The camera was already started.
EMULATOR_CAMERA_START_ALREADY_STARTED = 1;
// Failures.
// Camera start failed with an unspecified error.
EMULATOR_CAMERA_START_FAILED = -1;
// The camera was already started, but the parameters don't match.
EMULATOR_CAMERA_START_PARAMETER_MISMATCH = -2;
// The requested pixel format is unknown.
EMULATOR_CAMERA_START_UNKNOWN_PIXEL_FORMAT = -3;
// No pixel conversion available.
EMULATOR_CAMERA_START_NO_PIXEL_CONVERSION = -4;
// Out of memory when starting the camera.
EMULATOR_CAMERA_START_OUT_OF_MEMORY = -5;
}
// The camera source used for the camera session.
optional EmulatorCameraType type = 1;
// The camera direction.
optional EmulatorCameraDirection direction = 2;
// Width of the camera frame in pixels.
optional uint32 width = 3;
// Height of the camera frame in pixels.
optional uint32 height = 4;
// FOURCC pixel format requested.
optional fixed32 pixel_format = 5;
// Camera start result.
optional EmulatorCameraStartResult start_result = 6;
// How long the camera session took to initialize.
optional uint64 startup_time_ms = 7;
// How long the session was running, in milliseconds.
optional uint64 duration_ms = 8;
// Average framerate of the camera.
optional double average_framerate = 9;
// set when type = EMULATOR_CAMERA_TYPE_VIRTUAL_SCENE
// Name of the virtual scene that is loaded.
optional string virtual_scene_name = 10;
}
// Metrics for virtual scene camera sessions.
message EmulatorVirtualSceneSession {
// How long the session was running, in milliseconds.
optional uint64 duration_ms = 1;
// Minimum sensor update delay in milliseconds.
optional uint32 min_sensor_delay_ms = 2;
// Total tap count when the camera is running.
optional uint32 tap_count = 3;
// The number of times the orientation changed during the session.
optional uint32 orientation_change_count = 4;
// Whether the virtual sensors window was visible at any point during the
// session.
optional bool virtual_sensors_visible = 5;
// How many interactions were performed on the virtual sensors page.
optional uint32 virtual_sensors_interaction_count = 6;
// Invocation count of WASD/Mouselook hotkey.
optional uint32 hotkey_invoke_count = 7;
// Total time the user was in WASD/Mouselook mode during this session.
optional uint64 hotkey_duration_ms = 8;
// Taps shortly after a hotkey invoke, to determine how much the user
// alternates between modes to tap.
optional uint32 taps_after_hotkey_invoke = 9;
// Total rotation performed in the virtual scene.
optional double total_rotation_radians = 10;
// Total translation performed in the virtual scene.
optional double total_translation_meters = 11;
}
// Per-session metrics for automation/macros.
message EmulatorAutomation {
// List of possible preset macros played.
enum EmulatorAutomationPresetMacro {
// Reset position.
EMULATOR_AUTOMATION_PRESET_MACRO_RESET = 0;
// Track horizontal plane.
EMULATOR_AUTOMATION_PRESET_MACRO_TRACK_HORIZONTAL = 1;
// Track vertical plane.
EMULATOR_AUTOMATION_PRESET_MACRO_TRACK_VERTICAL = 2;
// Walk to image room.
EMULATOR_AUTOMATION_PRESET_MACRO_IMAGE_ROOM = 3;
}
// Total sum of time of macros playing -> Sum(Stop-Play).
optional uint64 total_duration_ms = 1;
// Total amount of times macros played.
optional uint64 macro_playback_count = 2;
// Total amount of times previews replayed.
optional uint64 preview_replay_count = 3;
// Played preset-macros.
repeated EmulatorAutomationPresetMacro played_preset_macro = 4;
// Total amount of macros recorded.
optional uint64 record_macro_count = 5;
// Total amount of macros deleted.
optional uint64 delete_macro_count = 6;
// Total amount of macros edited.
optional uint64 edit_macro_count = 7;
}
// Metrics for multi-display details
message EmulatorMultiDisplay {
// Count for add/modify/delete displays
optional uint32 apply_count = 1;
// Max displays created
optional uint32 max_displays = 2;
}
// Metrics for LocationV2
message EmulatorLocationV2 {
// Count for "Set Location" button
optional uint32 set_loc_count = 1;
// Count for "Play route" button
optional uint32 play_route_count = 2;
}
// Metrics for grpc invocations.
message EmulatorGrpc {
// CRC32 digest of the fully-specified method name.
optional uint32 call_id = 1;
// Number of requests
optional uint32 requests = 2;
// Number of requests for which the response was not Status::OK
optional uint32 failures = 3;
// Sum of received message size, if streaming
optional PercentileEstimator rcv_bytes_estimate = 4;
// Sum of sent message size, if streaming
optional PercentileEstimator snd_bytes_estimate = 5;
// Duration of the total request time in milliseconds.
optional PercentileEstimator duration = 6;
}
// Metrics related to the Emulator.
message EmulatorDetails {
// Cpu architecture of the guest.
optional GuestCpuArchitecture guest_arch = 1;
// cpu time spent in kernel mode in milliseconds since last metrics report.
optional int64 system_time = 2;
// cpu time spent in user mode in milliseconds since last metrics report.
optional int64 user_time = 3;
// number of crashes since last metrics report.
optional int64 crashes = 4;
// real time in milliseconds since last metrics report.
optional int64 wall_time = 5;
// True iff a crash occurred while process started its exit routines.
optional bool exit_started = 6;
// The API level of the running guest image.
optional int64 guest_api_level = 7;
// The value of guest gpu option (ro.kernel.qemu.gles)
optional bool guest_gpu_enabled = 8;
// True if we were able to correctly initialize opengl on the host.
optional bool is_opengl_alive = 10;
// Connectivity from adb of the running emulator instance.
optional EmulatorAdbLiveness adb_liveness = 11;
// Information about the gl implementation in the guest image.
optional EmulatorGuestGlInfo guest_gl = 12;
// Information about the host GPUs (one per GPU).
repeated EmulatorGpuInfo host_gpu = 13;
// The "phase" of an emulator session where crash happened.
optional EmulatorSessionPhase session_phase = 14;
// The emulator core version (e.g. QEMU engine's version).
optional string core_version = 15;
// Renderer of the current emulator session.
optional EmulatorRenderer renderer = 16;
// Flags for the used UI featurs.
optional EmulatorFeatures used_features = 17;
// Information about the currently loaded AVD.
optional EmulatorAvdInfo avd_info = 18;
// State tracking emulator feature flag enable/disable.
optional EmulatorFeatureFlagState feature_flag_state = 19;
// Hypervisor used in current session.
optional EmulatorHypervisor hypervisor = 20;
// Information about quickboot status of the current session.
optional EmulatorQuickbootLoad quickboot_load = 21;
optional EmulatorQuickbootSave quickboot_save = 22;
// Track GLES command usages
optional EmulatorGLESUsages gles_usages = 23;
// Metrics on all generic emulator snapshot saves and loads.
repeated EmulatorSnapshot snapshot_loads = 24;
repeated EmulatorSnapshot snapshot_saves = 25;
// Metrics on all snapshot UI.
optional EmulatorSnapshotUICounts snapshot_ui_counts = 26;
// Metrics on camera usage.
optional EmulatorCameraSession camera = 27;
// Metrics for virtual scene camera sessions.
optional EmulatorVirtualSceneSession virtual_scene = 28;
// Metrics for emulator boot status and time.
optional EmulatorBootInfo boot_info = 29;
// Metrics for automation/macros.
optional EmulatorAutomation automation = 30;
// Metrics for multi-display
optional EmulatorMultiDisplay multi_display = 31;
// Metrics for gRPC invocation
optional EmulatorGrpc grpc = 32;
// Metrics for LocationUiV2
optional EmulatorLocationV2 location_v2 = 33;
// Next tag: 34
// Emulator instance liveness as determined via adb connectivity.
enum EmulatorAdbLiveness {
UNKNOWN_EMULATOR_ADB_LIVENESS = 0;
FAILURE_NO_ADB = 1;
ADB_ONLINE = 2;
FAILURE_ADB_SERVER_DEAD = 3;
FAILURE_EMULATOR_DEAD = 4;
}
// In What phase of the lifetime of the Emulator were the metrics reported.
enum EmulatorSessionPhase {
UNKNOWN_EMULATOR_SESSION_PHASE = 0;
// The custom emulator launcher is running.
LAUNCHER = 1;
// Final emulator target is parsing command line arguments.
PARSE_OPTIONS = 2;
// Initialization - general.
INIT_GENERAL = 3;
// Initializing GPU
INIT_GPU = 4;
// Initializing hardware acceleration.
INIT_ACCEL = 5;
// Main use case -- init done, emulator is up.
RUNNING_GENERAL = 6;
// Exiting
EXIT_GENERAL = 7;
}
// Chip the emulator is emulating for.
enum GuestCpuArchitecture {
UNKNOWN_GUEST_CPU_ARCHITECTURE = 0;
X86 = 1;
X86_64 = 2;
ARM = 3;
ARM_64 = 4;
MIPS = 5;
MIPS_64 = 6;
}
// Rendering method emulator uses for the reporter session.
enum EmulatorRenderer {
UNKNOWN_EMULATOR_RENDERER = 0;
HOST = 1;
OFF = 2;
GUEST = 3;
MESA = 4;
SWIFTSHADER = 5;
ANGLE = 6;
ANGLE9 = 7;
SWIFTSHADER_INDIRECT = 8;
ANGLE_INDIRECT = 9;
ANGLE9_INDIRECT = 10;
ERROR_IN_EMULATOR_RENDERER = 255;
}
// Hypervisor in use for the session.
enum EmulatorHypervisor {
UNKNOWN_HYPERVISOR = 0;
NO_HYPERVISOR = 1;
KVM = 2; // KVM
HAXM = 3; // Intel HAXM
HVF = 4; // Apple Hypervisor.Framework
HYPERV = 5; // Microsoft Hyper-V
GVM = 6; // GVM
// Next tag: 7
}
}
// Describes a user clicking on some part of the Emulator UI.
message EmulatorUiEvent {
// Id of the UI element, baked in the emulator binary.
optional string element_id = 1;
// The type of UI event
optional EmulatorUiEventType type = 2;
// The current context of the event.
optional EmulatorUiEventContext context = 3;
// This value is an opaque numeric type. The exact schema of the UI metrics
// is not specific here. e.g., |value| may represent a boolean, a "count", or
// an index into the list of items in a drop down menu.
optional int64 value = 4;
// Tracks the type of the emulator UI Event.
enum EmulatorUiEventType {
UNKONWN_EMULATOR_UI_EVENT_TYPE = 0;
BUTTON_PRESS = 1;
// Generated when a user action changes the value of certain field from
// its default value.
OPTION_SET_TO_NON_DEFAULT = 2;
// Generated to report the index of an option selected by the user in a
// drop-down menu / radio button etc.
OPTION_SELECTED = 3;
// Generated on event processing end, |value| is time in microseconds.
// Is only sent if the processing time is considered 'long' in the emulator,
// which is determined in the emulator code itself.
LONG_PROCESSING_TIME_US = 4;
}
// Tracks the context of the Emulator UI.
enum EmulatorUiEventContext {
UNKNOWN_EMULATOR_UI_EVENT_CONTEXT = 0;
EXTENDED_WINDOW_OPEN = 1;
}
}
message EmulatorPercentileEstimator {
// Type of the performance metric.
optional EmulatorPerformanceMetric metric = 1;
// Per-metric type context, e.g. UI element name if this is an event handling
// time. Not set if there's no context for the specific metric type.
optional string context = 2;
// Estimator for metric.
optional PercentileEstimator estimator = 3;
// Metric types that can be monitored.
enum EmulatorPerformanceMetric { UI_EVENT_HANDLING_TIME_US = 0; }
}
// Tracking CPU usage for some operation
message CpuTimeSlice {
optional uint64 wall_time_us = 1;
optional uint64 user_time_us = 2;
optional uint64 system_time_us = 3;
}
// Tracking OpenGL/Vulkan resource usage
message VulkanResourceUsage {
optional uint64 total_host_visible_memory_allocation_bytes = 1;
optional uint64 total_device_local_memory_allocation_bytes = 2;
optional uint32 total_instances = 3;
}
message GraphicsResourceUsage {
// common betweek OpenGL and Vulkan
optional uint32 colorbuffer_count = 1;
optional uint32 shader_count = 2;
optional uint32 renderthread_count = 3;
optional uint64 colorbuffer_total_allocation_bytes = 4;
// Vulkan
optional VulkanResourceUsage vulkan_resource_usage = 5;
}
// Emulator resource usage statistics
message EmulatorResourceUsage {
// Run condition, if applicable
enum RunCondition {
RUN_CONDITION_DEFAULT = 0;
RUN_CONDITION_IDLE = 1;
RUN_CONDITION_TEST = 2;
RUN_CONDITION_DEPLOY = 3;
}
// Estimations of what is taking CPU in the guest
enum GuestCpuUsageSource {
GUEST_CPU_USAGE_DEFAULT = 0;
GUEST_CPU_USAGE_PLAY_SERVICES = 1;
GUEST_CPU_USAGE_SURFACEFLINGER = 2;
GUEST_CPU_USAGE_AUDIO_SERVICE = 3;
GUEST_CPU_USAGE_SENSOR_SERVICE = 4;
GUEST_CPU_USAGE_CHROME = 5;
GUEST_CPU_USAGE_OTHER = 6;
}
optional RunCondition run_condition = 1;
optional CpuTimeSlice main_loop_slice = 2;
repeated CpuTimeSlice vcpu_slices = 3;
repeated CpuTimeSlice guest_cpu_slices = 4;
repeated GuestCpuUsageSource top_guest_cpu_usage_sources = 5;
optional EmulatorMemoryUsage memory_usage = 6;
optional GraphicsResourceUsage graphics_resource_usage = 7;
}
// Emulator latency statistics
message EmulatorLatencyStats {
// An enum that attempts to account for the source of
// high latencies and hangs in the emulator.
enum EmulatorLatencySource {
EMULATOR_LATENCY_SOURCE_DEFAULT = 0;
EMULATOR_LATENCY_SOURCE_NETWORK = 1;
EMULATOR_LATENCY_SOURCE_BLOCK_DEVICE = 2;
EMULATOR_LATENCY_SOURCE_PIPE_CAMERA = 3;
EMULATOR_LATENCY_SOURCE_PIPE_OPENGL = 4;
EMULATOR_LATENCY_SOURCE_PIPE_OPERATION = 5;
EMULATOR_LATENCY_SOURCE_PCI_DEVICE = 6;
EMULATOR_LATENCY_SOURCE_MMIO = 7;
EMULATOR_LATENCY_SOURCE_UI_EVENT_HOST_ONLY = 8;
EMULATOR_LATENCY_SOURCE_UI_EVENT_TO_GUEST = 9;
EMULATOR_LATENCY_INPUT_QUEUE_FULL = 10;
}
optional EmulatorLatencySource latency_source = 1;
// if vcpu mmio access was involved, this holds the MMIO address.
optional uint64 vcpu_handling_mmio_address = 2;
// Number of loops where the input queue was full.
optional uint32 input_queue_full_loops = 8;
// Time stats for the latency in microseconds.
optional uint64 latency_max_us = 3;
optional uint64 latency_99_9_us = 4;
optional uint64 latency_99_us = 5;
optional uint64 latency_90_us = 6;
optional uint64 latency_50_us = 7;
}
// Estimations of percentiles of time spent on Emulator operations.
message EmulatorPerformanceStats {
// Collection of estimations of performance metrics.
repeated EmulatorPercentileEstimator estimator = 1;
// Emulator memory usage over time. (Deprecated)
repeated EmulatorMemoryUsage memory_usage = 2 [deprecated = true];
// Process uptime when this was captured. Relative to when
// the emulator process was launched---this is not a timestamp.
optional uint64 process_uptime_us = 3;
// Resource usage and latency stats.
optional EmulatorResourceUsage resource_usage = 4;
optional EmulatorLatencyStats latency_stats = 5;
// Guest system uptime when this was captured. Relative to when
// the Android system image is started---this is not a timestamp.
optional uint64 guest_uptime_us = 6;
}
// Details about a single Gradle run.
message GradleBuildDetails {
// Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
optional string android_plugin_version = 1;
// Version of the open source Gradle application used.
optional string gradle_version = 2;
// indicates whether the user has instant run enabled in settings
optional bool user_enabled_ir = 3;
// indicates whether the IDE thinks whether this plugin version supports IR
optional bool model_supports_ir = 4;
// indicates whether the current variant supports IR, but this can be changed
// without a notification
optional bool variant_supports_ir = 5;
// per library metrics.
repeated GradleLibrary libraries = 6;
// per module metrics.
repeated GradleModule modules = 7;
// per android module metrics.
repeated GradleAndroidModule android_modules = 8;
// per native android module metrics
repeated GradleNativeAndroidModule native_android_modules = 9;
// The app_id is the id for the user's android app
// which we salt on the client (28 day rotation) then sha256
// so it is anonymized and is unique per user, but has a 1-N relation.
optional string app_id = 10;
}
// Per library Gradle metrics.
message GradleLibrary {
// Number of jar dependencies in this library.
optional int64 jar_dependency_count = 1;
// Number of aar dependencies in this library.
optional int64 aar_dependency_count = 2;
}
// Per module Gradle metrics.
message GradleModule {
// Total number of modules in this app.
optional int64 total_module_count = 1;
// Number of aar modules in this app.
optional int64 app_module_count = 2;
// Number of library modules in this app..
optional int64 lib_module_count = 3;
}
// Per Android module Gradle metrics.
message GradleAndroidModule {
// Client-side salted, sha256 of the application id
// the app_id is the id for the user's android app
// which we salt with a client unique salt and then sha256
// so it is anonymized and is unique per user, but has a 1-N relation.
optional string app_id = 1;
// Client-side salted, sha256 of the module name.
optional string module_name = 2;
// True if this module is a library.
optional bool is_library = 3;
// Number of different build types for this module.
optional int64 build_type_count = 4;
// Number of different flavor types for this module.
optional int64 flavor_count = 5;
// Number of different flavor dimensions for this module.
optional int64 flavor_dimension = 6;
// Number of signing configurations for this module.
optional int64 signing_config_count = 7;
}
// per "native" (C++) android module Gradle metrics.
message GradleNativeAndroidModule {
// Client-side salted, sha256 of the application id
// the app_id is the id for the user's android app
// which we salt with a client unique salt and then sha256
// so it is anonymized and is unique per user, but has a 1-N relation.
optional string app_id = 1;
// Client-side salted, sha256 of the module name.
optional string module_name = 2;
// True if this module is a library.
optional NativeBuildSystemType build_system_type = 3;
// The various native build systems we support to be used from Gradle.
enum NativeBuildSystemType {
UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE = 0;
// The Gradle epxerimental plugin
GRADLE_EXPERIMENTAL = 1;
// The compilation part of NDK builds (Android's native build system).
NDK_COMPILE = 2;
// full NDK builds (Android's native build system).
NDK_BUILD = 3;
// CMake is a very common C++ build system.
CMAKE = 4;
}
}
// Metrics related to editing CMake files.
message CMakeEditingEvent {
enum CMakeEditingEventKind {
UNKNOWN_CMAKE_EDITING_EVENT = 0;
// Set when syntax highlighting for CMake is first used.
SYNTAX_HIGHLIGHTING = 1;
// Set when code completion is first used.
CODE_COMPLETION = 2;
}
optional CMakeEditingEventKind kind = 1;
// The amount of time taken for the event to complete in milliseconds.
optional int64 event_duration_ms = 2;
}
message JniInspectionEvent {
enum JniInspectionType {
UNKNOWN_JNI_INSPECTION_EVENT = 0;
// Set when the "missing function" inspection quickfix is used.
MISSING_FUNCTION_INSPECTION_EVENT = 1;
// Set when the "extern C" inspection quickfix is used.
EXTERN_C_INSPECTION_EVENT = 2;
// Set when the "parameters" inspection quickfix is used.
PARAMETERS_INSPECTION_EVENT = 3;
// Set when the OnLoad / OnUnload inspection quickfix is used.
ONLOAD_INSPECTION_EVENT = 4;
// Set when the FindMethod inspection quickfix is used.
FIND_METHOD_INSPECTION_EVENT = 5;
}
optional JniInspectionType type = 1;
}
// Metrics related to C++ header file view in Android Project
message CppHeadersViewEvent {
enum CppHeadersViewEventType {
UNKNOWN_CPP_HEADERS_VIEW_EVENT = 0;
// Set when the user opens the top include node
OPEN_TOP_INCLUDES_NODE = 1;
}
// Metrics related to enhanced C++ header files view enabled by
// under ENABLE_ENHANCED_NATIVE_HEADER_SUPPORT flag
optional CppHeadersViewEventType type = 1;
// The amount of time taken for the event to complete in milliseconds.
optional int64 event_duration_ms = 2;
// The count of the immediate children of the node that was opened by
// the user.
optional int32 node_immediate_children = 3;
}
// Metrics on InstantRun usage.
message InstantRun {
// What kind of Instant Run deployment was chosen.
optional InstantRunDeploymentKind deployment_kind = 1;
// Historical, we had two enums tracking this, this one was never used.
// what was the reason for chosing that kind of deployment from the gradle
// side.
optional InstantRunBuildCause instant_run_build_cause = 3 [deprecated = true];
// time the InstantRun enabled took in milliseconds.
optional int64 build_time = 4;
// The session id is a UUID within a single run of Android Studio
// tracking multiple HOT_SWAP & DEX builds in the same
// IR session (starting at FULL_APK and ending before FULL_APK).
optional string session_id = 5;
// what was the reason for chosing that kind of deployment from the IDE
// side.
optional InstantRunIdeBuildCause ide_build_cause = 6;
// what was the reason for chosing that kind of deployment from the Gradle
// side.
optional InstantRunStatus.VerifierStatus gradle_build_cause = 7;
// What Instant Run Deployment was used
enum InstantRunDeploymentKind {
UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND = 0;
LEGACY = 1;
FULL_APK = 2;
SPLIT_APK = 3;
DEX = 4;
HOT_SWAP = 5;
WARM_SWAP = 6;
NO_CHANGES = 7;
}
// Historical, use InstantRunStatus.VerifierStatus instead.
// The different reasons Instant Run had to do a full build.
enum InstantRunBuildCause {
UNKNOWN_INSTANT_RUN_BUILD_CAUSE = 0;
COMPATIBLE = 1;
MANIFEST_CHANGE = 2;
FIELD_TYPE_CHANGE = 3;
FIELD_REMOVED = 4;
FIELD_ADDED = 5;
METHOD_DELETED = 6;
METHOD_ADDED = 7;
CLASS_ADDED = 8;
STATIC_INITIALIZER_CHANGE = 9;
CLASS_ANNOTATION_CHANGE = 10;
RESOURCE_CHANGE = 11;
IMPLEMENTS_INTERFACE_CHANGE = 12;
R_CLASS_CHANGE = 13;
PARENT_CLASS_CHANGE = 14;
METHOD_ANNOTATION_CHANGE = 15;
API_LEVEL_UNSUPPORTED = 16;
REFLECTION_USED = 17;
}
// The different reasons InstantRun chose the build mode it did from the IDE's
// perspective.
enum InstantRunIdeBuildCause {
// reasons for clean build
UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE = 0;
NO_DEVICE = 1;
APP_NOT_INSTALLED = 2;
MISMATCHING_TIMESTAMPS = 3;
USER_REQUESTED_CLEAN_BUILD = 4;
// reasons for full build
API_TOO_LOW_FOR_INSTANT_RUN = 5;
// first installation in this Android Studio session
FIRST_INSTALLATION_TO_DEVICE = 6;
MANIFEST_RESOURCE_CHANGED = 7;
FREEZE_SWAP_REQUIRES_API21 = 8;
FREEZE_SWAP_REQUIRES_WORKING_RUN_AS = 9;
// reasons for forced cold swap build
APP_NOT_RUNNING = 10;
APP_USES_MULTIPLE_PROCESSES = 11;
INCREMENTAL_BUILD = 12;
NO_INSTANT_RUN = 13;
ANDROID_TV_UNSUPPORTED = 14;
// user pressed Run, only Run was enabled
USER_REQUESTED_COLDSWAP = 15;
// both Run and Hotswap were enabled, user chose Run
USER_CHOSE_TO_COLDSWAP = 16;
}
}
// describes Metrics on Metrics.
message MetaMetrics {
// number of times connecting to the clearcut server failed since
// the last successful upload.
optional int32 failed_connections = 1;
// number of bytes used to send metrics in the last upload.
optional int64 bytes_sent_in_last_upload = 2;
// number of times the clearcut server failed with an http error since
// the last successful upload.
optional int32 failed_server_replies = 3;
}
// Describes a set of tests run.
message TestRun {
// Describes how tests where invoked.
optional TestInvocationType test_invocation_type = 1;
// Total number of tests that ran.
optional int32 number_of_tests_executed = 2;
// What kind of test is run.
optional TestKind test_kind = 3;
// Whether the test run finished successfully (regardless of results) or
// tooling error happened.
optional bool crashed = 4;
// Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
optional string gradle_version = 5; // e.g. '2.10'
// Did the user/project enable code coverage on this test run?
optional bool code_coverage_enabled = 6;
// Provides details on commonly used test libraries.
optional TestLibraries test_libraries = 7;
// Only set when test_kind=INSTRUMENTATION_TEST
optional TestExecution test_execution = 8;
// Describes how tests where invoked.
enum TestInvocationType {
UNKNOWN_TEST_INVOCATION_TYPE = 0;
// Tests were run from the command-line.
GRADLE_TEST = 1;
// Tests were run by Android Studio run configurations logic.
ANDROID_STUDIO_TEST = 2;
// Tests were run by Gradle, but invoked through AS UI.
ANDROID_STUDIO_THROUGH_GRADLE_TEST = 3;
}
// What kind of test is run.
enum TestKind {
UNKNOWN_TEST_KIND = 0;
UNIT_TEST = 1;
INSTRUMENTATION_TEST = 2;
}
// How instrumentation tests will be run
enum TestExecution {
UNKNOWN_TEST_EXECUTION = 0;
HOST = 1;
ANDROID_TEST_ORCHESTRATOR = 2;
}
}
// Provides details on commonly used test libraries.
// Each string field of this message holds the exact version of the given
// library that the field name represents. The field is populated only if this
// project uses the given library.
// Next ID: 20
message TestLibraries {
// "com.android.support.test.runner" or "androidx.test.runner".
optional string test_support_library_version = 1; // e.g. '0.5'
optional string espresso_version = 2; // e.g. '2.2.2'
optional string robolectric_version = 3; // e.g. '3.0'
optional string mockito_version = 4; // e.g. '1.10.19'
optional string espresso_contrib_version = 5; // e.g. '2.2.2'
optional string espresso_web_version = 6; // e.g. '2.2.2'
optional string espresso_intents_version = 7; // e.g. '2.2.2'
optional string espresso_idling_resource_version = 8; // e.g. '2.2.2'
optional string espresso_accessibility_version = 9; // e.g. '2.2.2'
optional string test_orchestrator_version = 10; // e.g. '1.0.0'
optional string test_rules_version = 11; // e.g. '1.0.0'
// "androidx.test.core".
optional string test_core_version = 12; // e.g. '1.0.0'
// "androidx.test.core-ktx".
optional string test_core_ktx_version = 13; // e.g. '1.0.0'
// "androidx.test.ext.junit".
optional string test_ext_junit_version = 14; // e.g. '1.0.0'
// "androidx.test.ext.junit-ktx".
optional string test_ext_junit_ktx_version = 15; // e.g. '1.0.0'
// "androidx.test.ext.truth".
optional string test_ext_truth_version = 16; // e.g. '1.0.0'
// "androidx.fragment.fragment-testing".
optional string fragment_testing_version = 17; // e.g. '1.0.0'
optional string junit_version = 18; // e.g. '4.2'
// "com.google.truth".
optional string truth_version = 19; // e.g. '0.40'
}
// Describes the status of various Hypervisors
message Hypervisor {
optional HyperVState hyper_v_state = 1;
// Status of the Hyper-V hypervisor.
enum HyperVState {
UNKNOWN_HYPERV_STATE = 0; // Have no idea
HYPERV_ABSENT = 1; // No hyper-V found
HYPERV_INSTALLED = 2; // Hyper-V is installed but not running
HYPERV_RUNNING = 3; // Hyper-V is up and running
HYPERV_CHECK_ERROR = 4; // Failed to detect status (emulator-check error)
}
}
// Describes the status of the machine running the emulator.
message EmulatorHost {
// CPU manufacturer of the host, used as certain hypervisors are limited
// to a certain manufacturer.
optional string cpu_manufacturer = 1; // AMD, INTEL, ...
// Does the host support virtualization technology
optional bool virt_support = 2;
// Is the host itself running inside a virtual machine.
optional bool running_in_vm = 3;
// May differ from os_architecture field as it is calculated differently,
// trying to compensate the JVM bittness.
optional int64 os_bit_count = 4;
// CPU model, family, stepping, as stored in the EAX register
// after issuing CPUID instruction with EAX=1:
// 31 27 23 19 15 11 7 3 0
// 0000 yyyy yyyy xxxx 00tt ffff mmmm ssss
optional uint32 cpuid_stepping = 5; // s: [3:0] stepping (CPU version)
optional uint32 cpuid_model = 6; // m: [7:4] model (CPU model)
optional uint32 cpuid_family = 7; // f: [11:8] family (CPU make)
optional uint32 cpuid_type = 8; // t: [13:12] CPU type
optional uint32 cpuid_extmodel = 9; // x: [19:16] extended model
optional uint32 cpuid_extfamily = 10; // y: [27:20] extended family
}
// Detailed profiling information for the gradle build.
message GradleBuildProfile {
// Version of the open source Gradle application used.
// e.g. "2.14" or "3.0-20160617000025+0000"
optional string gradle_version = 2;
// The value of the "os.name" system property.
// e.g. "Linux"
optional string os_name = 6;
// The value of the "os.version" system property.
// e.g. "3.13.0-86-generic"
optional string os_version = 7;
// The value of the "java.version" system property.
// e.g. "1.8.0_40-ea"
optional string java_version = 8;
// The value of the "java.vm.version" system property.
// e.g. "25.40-b25"
optional string java_vm_version = 9;
// The value of Runtime.getRuntime().maxMemory()
optional int64 max_memory = 10;
// The total time taken for this build in milliseconds.
// This does not include Gradle's startup (before plugin apply) or shutdown
// (after BuildListener#buildFinished(BuildResult) called.
optional int64 build_time = 11;
// The number of garbage collections during this build
// Historical: Used in Android Gradle Plugin 2.2.x, circa 2016-10
optional int64 gc_count = 12 [deprecated = true];
// The time spent garbage collecting during this build.
// Historical: Used in Android Gradle Plugin 2.2.x, circa 2016-10
optional int64 gc_time = 13 [deprecated = true];
// The projects that make up this multi-project build.
repeated GradleBuildProject project = 14;
// Samples of the memory state of the daemon during the build.
repeated GradleBuildMemorySample memory_sample = 15;
// The fine-grained execution spans which record granular timings.
repeated GradleBuildProfileSpan span = 16;
// For instant run builds: the resulting instant run build info.
optional InstantRunStatus instant_run_status = 17;
// Client-side salted, sha256 of the root project path.
// This exists to allow multiple instant run builds in one project by one
// user to be correlated.
//
// The salt is rotated every 28 days, so it is not a permanent pseudonymous
// identifier. It is anonymized and is unique per user, but has a 1-N
// relation.
optional string project_id = 18;
// the project id as used in the playstore, e.g.
// 'com.google.android.apps.maps'. This is sensitive information and
// thus restricted to "raw" sawmill access. This data is only available in
// and for PWG approved scenarios.
// This is repeated, as a gradle build may include multiple apps, either
// by variants or by multiple 'app' subprojects.
repeated string raw_project_id = 19;
}
message GradleBuildProject {
// Identifier, local to the containing AndroidStudioEvent, for the project.
// Can be used to correlate spans (GradleBuildProfileSpan) with this
// project for this build only. Is created by sequentially
// numbering projects as they are encountered.
// Is not stable across build invocations.
optional int64 id = 1;
// Version of our Android Gradle plugin supporting android builds.
// e.g. '2.0-beta1'
// For the experimental plugin this is the gradle-core version.
optional string android_plugin_version = 2;
// Which Android Gradle plugin is used.
optional PluginType android_plugin = 3;
// Which plugin generation is used.
optional PluginGeneration plugin_generation = 4;
// The build tools version used, e.g. '24.0.0 rc2'
optional string build_tools_version = 5;
// Statistics about the project build.
// Will be used to characterize and bucket projects for subgroup analysis.
optional GradleBuildProjectMetrics metrics = 6;
// The variants in this project
repeated GradleBuildVariant variant = 7;
// For instantApps, the number of dependent atoms.
optional int64 atoms = 8;
// The compile SDK.
// Stored in the form of a target hash
// e.g. "android-25" or "The Vendor Inc.:My Addon:10"
optional string compile_sdk = 9;
// The split config as defined by the user in the DSL.
optional GradleBuildSplits splits = 10;
// Version of the Kotlin Gradle plugin used, if any.
// e.g. '1.1.3'
optional string kotlin_plugin_version = 11;
// The project options as set by the user or by studio.
optional GradleProjectOptionsSettings options = 12;
// All of the gradle plugins applied to this project
repeated GradlePlugin plugin = 13;
enum PluginType {
UNKNOWN_PLUGIN_TYPE = 0;
// The 'com.android.application' or 'com.android.model.application' plugins.
APPLICATION = 1;
// The 'com.android.library' or 'com.android.model.library' plugins.
LIBRARY = 2;
// The 'com.android.test' plugin.
TEST = 3;
// The 'com.android.atom' plugin.
ATOM = 4;
// The 'com.android.instantapp' plugin.
INSTANTAPP = 5;
// The 'com.android.feature' plugin.
FEATURE = 6;
// The 'com.android.dynamic-feature' plugin.
DYNAMIC_FEATURE = 7;
}
enum PluginGeneration {
UNKNOWN_PLUGIN_GENERATION = 0;
// The 'com.android.[application,library,test,atom,instantapp] plugins.
FIRST = 1;
// The 'com.android.model.[application,library]' plugins
COMPONENT_MODEL = 2;
}
enum GradlePlugin {
UNKNOWN_GRADLE_PLUGIN = 0;
ORG_GRADLE_API_PLUGINS_HELPTASKSPLUGIN = 1;
COM_ANDROID_BUILD_GRADLE_API_ANDROIDBASEPLUGIN = 2;
COM_ANDROID_BUILD_API_PLUGIN_ANDROIDBASEPLUGIN = 3;
ORG_GRADLE_LANGUAGE_BASE_PLUGINS_LIFECYCLEBASEPLUGIN = 4;
ORG_GRADLE_API_PLUGINS_BASEPLUGIN = 5;
ORG_GRADLE_API_PLUGINS_REPORTINGBASEPLUGIN = 6;
ORG_GRADLE_PLATFORM_BASE_PLUGINS_COMPONENTBASEPLUGIN = 7;
ORG_GRADLE_LANGUAGE_BASE_PLUGINS_LANGUAGEBASEPLUGIN = 8;
ORG_GRADLE_PLATFORM_BASE_PLUGINS_BINARYBASEPLUGIN = 9;
ORG_GRADLE_API_PLUGINS_JAVABASEPLUGIN = 10;
COM_ANDROID_BUILD_GRADLE_APPPLUGIN = 11;
COM_ANDROID_BUILD_API_PLUGIN_APPPLUGIN = 12;
ORG_JETBRAINS_KOTLIN_GRADLE_PLUGIN_KOTLINANDROIDPLUGINWRAPPER = 13;
COM_GOOGLE_GMS_GOOGLESERVICES_GOOGLESERVICESPLUGIN = 14;
ORG_GRADLE_API_PLUGINS_ANDROIDMAVENPLUGIN = 15;
ORG_GRADLE_API_PLUGINS_JAVAPLUGIN = 16;
ORG_GRADLE_API_PLUGINS_MAVENPLUGIN = 17;
ORG_GRADLE_API_PLUGINS_QUALITY_CHECKSTYLEPLUGIN = 18;
ORG_GRADLE_API_PLUGINS_QUALITY_FINDBUGSPLUGIN = 19;
ORG_GRADLE_API_PLUGINS_QUALITY_JDEPEND = 20;
ORG_GRADLE_API_PLUGINS_QUALITY_PMDPLUGIN = 21;
ORG_GRADLE_API_PUBLISH_MAVEN_PLUGINS_MAVENPUBLISHPLUGIN = 22;
ORG_GRADLE_PLUGINS_SIGNING_SIGNINGPLUGIN = 23;
ORG_GRADLE_TESTING_JACOCO_PLUGINS_JACOCOPLUGIN = 24;
COM_GOOGLE_AR_SCENEFORM_PLUGIN_SCENEFORMPLUGIN = 25;
COM_GOOGLE_ANDROID_GMS_STRICTVERSIONMATCHERPLUGIN = 26;
COM_GOOGLE_FIREBASE_PERF_PLUGIN_FIREBASEPERFPLUGIN = 27;
COM_GOOGLE_FIREBASE_CRASH_PLUGIN_FIREBASECRASHPLUGIN = 28;
COM_GOOGLE_GMS_OSS_LICENSES_PLUGIN_OSSLICENSESPLUGIN = 29;
ORG_GOLANG_MOBILE_GOBINDPLUGIN = 30;
BUTTERKNIFE_PLUGIN_BUTTERKNIFEPLUGIN = 31;
COM_DICEDMELON_GRADLE_JACOCO_ANDROID_JACOCOANDROIDPLUGIN = 32;
COM_GETKEEPSAFE_DEXCOUNT_DEXMETHODCOUNTPLUGIN = 33;
COM_GITHUB_BENMANES_GRADLE_VERSIONS_VERSIONSPLUGIN = 34;
COM_JAKEWHARTON_SDKMANAGER_SDKMANAGERPLUGIN = 35;
COM_JFROG_BINTRAY_GRADLE_BINTRAYPLUGIN = 36;
COM_NEENBEDANKT_GRADLE_ANDROIDAPT_ANDROIDAPTPLUGIN = 37;
COM_NOVODA_GRADLE_RELEASE_RELEASEPLUGIN = 38;
DE_TRIPLET_GRADLE_PLAY_PLAYPUBLISHERPLUGIN = 39;
HUGO_WEAVING_PLUGIN_HUGOPLUGIN = 40;
IO_REALM_GRADLE_REALM = 41;
ME_TATARKA_RETROLAMBDAPLUGIN = 42;
ORG_JETBRAINS_KOTLIN_GRADLE_INTERNAL_ANDROIDEXTENSIONSSUBPLUGININDICATOR =
43;
ORG_JETBRAINS_KOTLIN_GRADLE_INTERNAL_KAPT3GRADLESUBPLUGIN = 44;
ORG_KT3K_GRADLE_PLUGIN_COVERALLSPLUGIN = 45;
COM_CRASHLYTICS_TOOLS_GRADLE_CRASHLYTICSPLUGIN = 46;
COM_ANDROID_BUILD_GRADLE_DYNAMICFEATUREPLUGIN = 47;
COM_ANDROID_BUILD_GRADLE_FEATUREPLUGIN = 48;
COM_ANDROID_BUILD_GRADLE_INSTANTAPPPLUGIN = 49;
COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_STRUCTUREPLUGIN = 50;
COM_ANDROID_BUILD_GRADLE_LIBRARYPLUGIN = 51;
COM_ANDROID_BUILD_GRADLE_LINTPLUGIN = 52;
COM_ANDROID_BUILD_GRADLE_REPORTINGPLUGIN = 53;
COM_ANDROID_BUILD_GRADLE_TESTPLUGIN = 54;
ORG_GRADLE_BUILDINIT_PLUGINS_BUILDINITPLUGIN = 55;
ORG_GRADLE_BUILDINIT_PLUGINS_WRAPPERPLUGIN = 56;
}
}
// Configuration flags for the gradle plugin.
//
// These are set by studio when invoking the gradle plugin, or manually by the
// end user.
//
// The Android Gradle Plugin will only report options that are explictly set.
// See tools/analytics-library/protos/src/main/proto/analytics_enums.proto for
// the enums for these option classes.
message GradleProjectOptionsSettings {
// Boolean options that are explictly set.
// Note that boolean options have defaults. This is not captured here,
// only what is overridden either manually by the developer or by studio.
// A reference to the proto enum in android git, see BooleanOption in
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
// Boolean options that are explicitly set to true.
repeated int32 true_boolean_options = 1;
// Boolean options that are explicitly set to false.
// (see above description of true_boolean_options)
repeated int32 false_boolean_options = 2;
// Optional boolean options that are explictly set.
// A reference to the proto enum in android git, see OptionalBooleanOption in
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
// Optional boolean options that are explicitly set to true.
repeated int32 true_optional_boolean_options = 3;
// Optional boolean options that are explicitly set to false.
// (see above description of true_optional_boolean_options)
repeated int32 false_optional_boolean_options = 4;
// Integer option values that are explicitly set, with their values.
// Contains a reference to the proto enum in android git, see IntegerOption in
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
repeated GradleIntegerOptionEntry integer_option_values = 5;
// Long options that are explicitly set. Values are not included.
// A reference to the proto enum in android git, see LongOption in
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
repeated int32 long_options = 6;
// String options that are explicitly set. Values are not recorded as they
// could include arbitrary information.
// A reference to the proto enum in android git, see StringOption in
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
repeated int32 string_options = 7;
}
// An explicitly set integer option in the gradle plugin, with its value.
message GradleIntegerOptionEntry {
// The integer option, set by studio or the user.
// A reference to the proto enum in android git, see IntegerOption in
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
optional int32 integer_option = 1;
// The value set by the user for this integer option.
// Integer options are of one of two forms, and do not identify users.
// 1. Software and protocol versions, such as the build target device API
// level, or the type of model requested by studio.
// 2. Performance tuning settings, such as test shard counts, thread pool
// sizes and buffer sizes.
optional int32 integer_option_value = 2;
}
message GradleBuildSplits {
// Are density splits enabled?
optional bool density_enabled = 1;
// Is automatic discovery based on the merged resources enabled?
// Only set if density splits are enabled.
// Deprecated as of AS3.3 (b/111291762)
optional bool density_auto = 2 [deprecated = true];
// Injected compatible screens manifest values.
// Only populated if language splits are enabled.
// e.g. NORMAL, LARGE, XLARGE
repeated CompatibleScreenSize density_compatible_screens = 3;
// Densities that the application will be split on.
// Only populated if density splits are enabled.
// e.g. 480, 560, 640
// See
// https://android.googlesource.com/platform/tools/base/+/studio-master-dev/layoutlib-api/src/main/java/com/android/resources/Density.java
// for a comprensive list of possible values.
repeated int32 density_values = 4;
// Are language splits enabled?
optional bool language_enabled = 5;
// Is automatic discovery based on the merged resources enabled?
// Only set if language splits are enabled.
// Deprecated as of AS3.3 (b/111291762)
optional bool language_auto = 6 [deprecated = true];
// Language and region codes that the application will be split on.
// Only populated if language splits are enabled.
// e.g. 'fr,fr-rBE', 'fr-rCA', 'en'
repeated string language_includes = 7;
// Are ABI splits enabled?
optional bool abi_enabled = 8;
// Will a universal APK be generated?
// Only set if abi splits are enabled.
optional bool abi_enable_universal_apk = 9;
// ABIs that the application will be split on.
// Only populated if abi splits are enabled.
// e.g. 'x86', 'armeabi-v7a'
repeated DeviceInfo.ApplicationBinaryInterface abi_filters = 10;
enum CompatibleScreenSize {
UNKNOWN_SCREEN_SIZE = 0;
SMALL = 1;
NORMAL = 2;
LARGE = 3;
XLARGE = 4;
}
}
message GradleBuildProjectMetrics {
// The time taken to collect these metrics
optional int64 metrics_time_ns = 1;
// The size of the APK built, if relevant.
optional int64 apk_size = 2;
// The size of the resources_ap included in that apk.
optional int64 resources_ap_size = 3;
}
message GradleBuildVariant {
// Identifier, local to this AndroidStudioEvent, for the variant.
// Can be used to correlate spans (GradleBuildProfileSpan) with this
// project for this build only. Is created by sequentially
// numbering variants as they are created.
// Is not stable across build invocations.
optional int64 id = 1;
// Whether the variant is debuggable.
optional bool is_debug = 2;
// Whether the variant is compiled using jack
optional bool use_jack = 3;
// Whether the variant is minified
optional bool minify_enabled = 4;
// Is multidex enabled for the variant
optional bool use_multidex = 5;
// Is legacy (pre-api 19) multidex enabled for the variant.
// Only can true if use_multidex is also true.
optional bool use_legacy_multidex = 6;
// The type of variant.
optional VariantType variant_type = 7;
// For test variants, the tested variant id. (See GradleBuildVariant.id)
optional int64 tested_id = 8;
// List of proguard flags used in this build variant.
// NOTE this is a string as the proguard flags can be changed
// based on which release of proguard is being used and is outside of our
// control. See https://www.guardsquare.com/en/proguard/manual/usage
// for current list. This property only will contain the "-<flag>" without
// the arguments passed to that flag.
repeated string proguard_flags = 9;
// Java annotation processors used in this build variant.
// Uses the Gradle compact format: package:module:version
repeated AnnotationProcessorInfo annotation_processors = 10;
// If Java 8 language support is enabled, which tools provides it.
optional Java8LangSupport java8_lang_support = 11;
// The various device api versions of this variant.
// Minimum supported.
optional ApiVersion min_sdk_version = 12;
// Target sdk version.
optional ApiVersion target_sdk_version = 13;
// The maximum sdk version
optional ApiVersion max_sdk_version = 14;
optional DexBuilderTool dex_builder = 15;
optional DexMergerTool dex_merger = 16;
optional CodeShrinkerTool code_shrinker = 17;
// The method used to run instrumentation tests for this variant.
optional TestRun.TestExecution test_execution = 18;
// The underlying native project system.
optional GradleNativeAndroidModule.NativeBuildSystemType
native_build_system_type = 19;
// The CMake version number if this is a CMake-based build.
optional string native_cmake_version = 20;
// Per-ABI native build info.
repeated NativeBuildConfigInfo native_build_config = 21;
// The nature of this variant.
// The test variants have an associated tested variant.
// See com.android.builder.core.VariantType
enum VariantType {
// For building an APK.
APPLICATION = 0;
// For building an AAR.
LIBRARY = 1;
// For building an android test APK.
ANDROID_TEST = 2;
// For building unit tests to run locally.
UNIT_TEST = 3;
// For building an atombundle.
ATOM = 4;
// For building an IAPK.
INSTANTAPP = 5;
// For building a split APK.
FEATURE = 6;
// For building an optional APK.
OPTIONAL_APK = 7;
// For building a test APK
TEST_APK = 8;
}
// Different tools that provide Java 8 language usage.
enum Java8LangSupport {
// the built-in support in the plugin
INTERNAL = 0;
// Retrolambda plugin
RETROLAMBDA = 1;
// Dexguard plugin
DEXGUARD = 2;
// Jack compiler
JACK = 3;
// D8 compiler
D8 = 4;
// R8 compiler
R8_DESUGARING = 5;
}
// Tools that can used to build dex
enum DexBuilderTool {
UNKNOWN_DEX_BUILDER_TOOL = 0;
DX_DEXER = 1;
D8_DEXER = 2;
}
// Tools that can be used to merge dex files
enum DexMergerTool {
UNKNOWN_DEX_MERGER_TOOL = 0;
DX_MERGER = 1;
D8_MERGER = 2;
}
// The tool used for code shrinking
enum CodeShrinkerTool {
UNKNOWN_CODE_SHRINKER = 0;
PROGUARD = 1;
ANDROID_GRADLE_SHRINKER = 2;
R8 = 3;
}
// Per-variant information about native build
message NativeBuildConfigInfo {
// Whether the Json generation phase was successful, up-to-date, or failed
optional GenerationOutcome outcome = 1;
// The ABI that generation is run for
optional DeviceInfo.ApplicationBinaryInterface abi = 2;
// The Platform API version that generation phase chose
optional int32 platform_api_version = 3;
// Whether or not this was a debuggable build
optional bool debuggable = 4;
// Time at the start of generation
optional int64 generation_start_ms = 5;
// Duration of Json generation
optional int64 generation_duration_ms = 6;
// Information about individual libraries
repeated NativeLibraryInfo libraries = 7;
enum GenerationOutcome {
UNKNOWN_GENERATION_OUTCOME = 0;
FAILED = 1;
SUCCESS_BUILT = 2;
SUCCESS_UP_TO_DATE = 3;
}
}
// Per-variant-per-library information about native build
message NativeLibraryInfo {
optional int32 source_file_count = 1;
// Whether or not the compiler flags contain -glldb
optional bool has_glldb_flag = 2;
}
}
message AnnotationProcessorInfo {
// The user's original spec, e.g. 'org.immutables:value:2.4.4'
// Often, though not always, in the form 'package:name:version'.
optional string spec = 1;
// How the processor was included in the build file.
optional InclusionType inclusion_type = 2;
enum InclusionType {
// The old apt way of including them.
APT = 0;
// Implicit on the compile classpath.
COMPILE_CLASSPATH = 1;
// The new annotationProcessor way to include them.
ANNOTATION_PROCESSOR = 2;
}
}
// An android API version, for min, compile, max and target sdk versions.
// E.g. for Nougat 7.1 this is api_level=25, codename unset.
// For O-preview this is api_level=25, codename="O".
message ApiVersion {
optional int64 api_level = 1;
optional string codename = 2;
}
message GradleBuildMemorySample {
// Garbage collection time since the current daemon started.
// Historical: Used in Android Gradle Plugin 2.2.x, circa 2016-10
// Replaced by JavaProcessStats.
optional int64 gc_time_ms = 1 [deprecated = true];
// Garbage collection count since the current daemon started.
// Historical: Used in Android Gradle Plugin 2.2.x, circa 2016-10.
// Replaced by JavaProcessStats.
optional int64 gc_count = 2 [deprecated = true];
// Time that the memory stats were collected.
optional int64 timestamp = 3;
// More detailed stats on the current running java process.
optional JavaProcessStats java_process_stats = 4;
}
// A single execution span from a build.
// For example, a task execution or creation of some tasks for a variant.
message GradleBuildProfileSpan {
// Identifier for this span, created by sequentially allocating IDs to spans
// as they start. Used only for the parent-child relationship of spans, to
// show execution that is part of another span.
// Not stable or meaningful across builds.
optional int64 id = 1;
// For nested spans: the id for containing span.
// See GradleBuildProfileSpan.id.
optional int64 parent_id = 2;
// The start time of this event
optional int64 start_time_in_ms = 3;
// The duration of this event. May be zero.
optional int64 duration_in_ms = 4;
// The type of event recorded
optional ExecutionType type = 5;
// More informations about the execution of TransformTasks.
// Only used when executionType is TASK_TRANSFORM_PREPARATION or
// TASK_TRANSFORM.
optional GradleTransformExecution transform = 6;
// More informations about the execution of Tasks.
// Only used when executionType is TASK_EXECUTION
optional GradleTaskExecution task = 9;
// Session id of the GradleBuildProject that this span is part of.
// The ID is not stable nor meaningful over multiple GradleBuildProfile.
// See GradleBuildProfile.id
optional int64 project = 7;
// Session id of the GradleBuildVariant that this span is part of.
// The ID is not stable nor meaningful over multiple GradleBuildProfile.
// See GradleBuildVariant.id
optional int64 variant = 8;
// Thread that this execution occurs on.
// Generated by sequentially numbering java threads that do work that is
// recorded.
// Will not be populated for async recorded events,
// such as from the task execution listener.
optional int64 thread_id = 10;
// The type of execution.
// This was originally com.android.builder.profile.ExecutionType.
enum ExecutionType {
SOME_RANDOM_PROCESSING = 1;
BASE_PLUGIN_PROJECT_CONFIGURE = 2;
BASE_PLUGIN_PROJECT_BASE_EXTENSION_CREATION = 3;
BASE_PLUGIN_PROJECT_TASKS_CREATION = 4;
BASE_PLUGIN_BUILD_FINISHED = 5;
TASK_MANAGER_CREATE_TASKS = 6;
BASE_PLUGIN_CREATE_ANDROID_TASKS = 7;
VARIANT_MANAGER_CREATE_ANDROID_TASKS = 8;
VARIANT_MANAGER_CREATE_TASKS_FOR_VARIANT = 9;
VARIANT_MANAGER_CREATE_LINT_TASKS = 10;
VARIANT_MANAGER_CREATE_TESTS_TASKS = 11;
VARIANT_MANAGER_CREATE_VARIANTS = 12;
RESOLVE_DEPENDENCIES = 13;
// span for task execution as reported by Gradle, that's including Gradle's
// pre and post task activities.
TASK_EXECUTION = 14;
WORKER_EXECUTION = 15;
THREAD_EXECUTION = 16;
INITIAL_METADATA = 100 [deprecated = true];
FINAL_METADATA = 101 [deprecated = true];
GENERAL_CONFIG = 102;
VARIANT_CONFIG = 103;
VARIANT_MANAGER_EXTERNAL_NATIVE_CONFIG_VALUES = 104;
APK_METRICS = 105;
// span for task execution excluding Gradle's pre and post task activities.
TASK_EXECUTION_ALL_PHASES = 200;
// generic span types for task implementation. Phases are sequential sub
// parts of the task implementation that can help determine the performance
// of sub parts of the task implementation.
// For instance a task spans can look like :
//
// <---------------------- TASK_EXECUTION ------------------->
// <--PRE--><------- TASK_EXECUTION_ALL_PHASES ----><--POST-->
// <---PHASE_1---><-PHASE_2-><--PHASE_3--->
//
TASK_EXECUTION_PHASE_1 = 201;
TASK_EXECUTION_PHASE_2 = 202;
TASK_EXECUTION_PHASE_3 = 203;
TASK_EXECUTION_PHASE_4 = 204;
TASK_EXECUTION_PHASE_5 = 205;
TASK_EXECUTION_PHASE_6 = 206;
TASK_EXECUTION_PHASE_7 = 207;
TASK_EXECUTION_PHASE_8 = 208;
TASK_EXECUTION_PHASE_9 = 209;
// span for gradle overhead before task execution
GRADLE_PRE_TASK_SPAN = 298;
// span for gradle overhead after task execution
GRADLE_POST_TASK_SPAN = 299;
// ApplicationTaskManager per variant tasks.
APP_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 1000 [deprecated = true];
APP_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 1001 [deprecated = true];
APP_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 1002 [deprecated = true];
APP_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 1003 [deprecated = true];
APP_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 1004 [deprecated = true];
APP_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 1005 [deprecated = true];
APP_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 1006 [deprecated = true];
APP_TASK_MANAGER_CREATE_AIDL_TASK = 1007 [deprecated = true];
APP_TASK_MANAGER_CREATE_COMPILE_TASK = 1008 [deprecated = true];
APP_TASK_MANAGER_CREATE_NDK_TASK = 1009 [deprecated = true];
APP_TASK_MANAGER_CREATE_SPLIT_TASK = 1010 [deprecated = true];
APP_TASK_MANAGER_CREATE_PACKAGING_TASK = 1011 [deprecated = true];
APP_TASK_MANAGER_CREATE_PREPROCESS_RESOURCES_TASK = 1012
[deprecated = true];
APP_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK = 1013 [deprecated = true];
APP_TASK_MANAGER_CREATE_LINT_TASK = 1014 [deprecated = true];
APP_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK = 1015
[deprecated = true];
APP_TASK_MANAGER_CREATE_SHADER_TASK = 1016 [deprecated = true];
APP_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 1017
[deprecated = true];
APP_TASK_MANAGER_CREATE_STRIP_NATIVE_LIBRARY_TASK = 1018
[deprecated = true];
// LibraryTaskManager per variant tasks.
LIB_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 2000 [deprecated = true];
LIB_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 2001 [deprecated = true];
LIB_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 2002 [deprecated = true];
LIB_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 2003 [deprecated = true];
LIB_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 2004 [deprecated = true];
LIB_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 2005 [deprecated = true];
LIB_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 2006 [deprecated = true];
LIB_TASK_MANAGER_CREATE_AIDL_TASK = 2007 [deprecated = true];
LIB_TASK_MANAGER_CREATE_COMPILE_TASK = 2008 [deprecated = true];
LIB_TASK_MANAGER_CREATE_NDK_TASK = 2009 [deprecated = true];
LIB_TASK_MANAGER_CREATE_SPLIT_TASK = 2010 [deprecated = true];
LIB_TASK_MANAGER_CREATE_PACKAGING_TASK = 2011 [deprecated = true];
LIB_TASK_MANAGER_CREATE_MERGE_PROGUARD_FILE_TASK = 2012 [deprecated = true];
LIB_TASK_MANAGER_CREATE_POST_COMPILATION_TASK = 2013 [deprecated = true];
LIB_TASK_MANAGER_CREATE_PROGUARD_TASK = 2014 [deprecated = true];
LIB_TASK_MANAGER_CREATE_PACKAGE_LOCAL_JAR = 2015 [deprecated = true];
LIB_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK = 2016 [deprecated = true];
LIB_TASK_MANAGER_CREATE_LINT_TASK = 2017 [deprecated = true];
LIB_TASK_MANAGER_CREATE_SHADER_TASK = 2018 [deprecated = true];
LIB_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 2019
[deprecated = true];
// Task execution: Deprecated, use TASK_EXECUTION and
// GradleTaskExecution#Type instead.
// Deprecated July 2016.
GENERIC_TASK_EXECUTION = 3000 [deprecated = true];
TASK_AIDL_COMPILE = 3001 [deprecated = true];
TASK_DELETE = 3002 [deprecated = true];
TASK_CHECK_MANIFEST = 3003 [deprecated = true];
TASK_PREPARE_DEPENDENCIES_TASK = 3004 [deprecated = true];
TASK_RENDERSCRIPT_COMPILE = 3005 [deprecated = true];
TASK_GENERATE_BUILD_CONFIG = 3006 [deprecated = true];
TASK_MERGE_ASSETS = 3007 [deprecated = true];
TASK_GENERATE_RES_VALUES = 3008 [deprecated = true];
TASK_MERGE_RESOURCES = 3009 [deprecated = true];
TASK_MERGE_MANIFESTS = 3010 [deprecated = true];
TASK_PROCESS_ANDROID_RESOURCES = 3011 [deprecated = true];
TASK_JAVA_COMPILE = 3012 [deprecated = true];
TASK_NDK_COMPILE = 3013 [deprecated = true];
TASK_PRE_DEX = 3014 [deprecated = true];
TASK_DEX = 3015 [deprecated = true];
TASK_PACKAGE_SPLIT_RES = 3016 [deprecated = true];
TASK_PROCESS_RESOURCES = 3017 [deprecated = true];
TASK_VALIDATE_SIGNING_TASK = 3018 [deprecated = true];
TASK_PACKAGE_APPLICATION = 3019 [deprecated = true];
TASK_SPLIT_ZIP_ALIGN = 3020 [deprecated = true];
TASK_ZIP_ALIGN = 3021 [deprecated = true];
TASK_COPY = 3022 [deprecated = true];
TASK_LINT = 3023 [deprecated = true];
TASK_FILE_VERIFICATION = 3026 [deprecated = true];
TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS_PER_ABI = 3027
[deprecated = true];
TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS = 3028 [deprecated = true];
// Transform execution
TASK_TRANSFORM_PREPARATION = 3024;
TASK_TRANSFORM = 3025;
// AtomTaskManager per variant tasks.
ATOM_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 4000 [deprecated = true];
ATOM_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 4001
[deprecated = true];
ATOM_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 4002
[deprecated = true];
ATOM_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 4003 [deprecated = true];
ATOM_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 4004 [deprecated = true];
ATOM_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 4005 [deprecated = true];
ATOM_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 4006 [deprecated = true];
ATOM_TASK_MANAGER_CREATE_AIDL_TASK = 4007 [deprecated = true];
ATOM_TASK_MANAGER_CREATE_SHADER_TASK = 4008 [deprecated = true];
ATOM_TASK_MANAGER_CREATE_NDK_TASK = 4009 [deprecated = true];
ATOM_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 4010
[deprecated = true];
ATOM_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK = 4011
[deprecated = true];
ATOM_TASK_MANAGER_CREATE_COMPILE_TASK = 4012 [deprecated = true];
ATOM_TASK_MANAGER_CREATE_BUNDLING_TASK = 4013 [deprecated = true];
ATOM_TASK_MANAGER_CREATE_LINT_TASK = 4014 [deprecated = true];
// InstantAppTaskManager per variant tasks.
INSTANTAPP_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 5000
[deprecated = true];
INSTANTAPP_TASK_MANAGER_CREATE_ATOM_PACKAGING_TASKS = 5001
[deprecated = true];
INSTANTAPP_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 5002 [deprecated = true];
INSTANTAPP_TASK_MANAGER_CREATE_PACKAGING_TASK = 5003 [deprecated = true];
// FeatureTaskManager per variant tasks.
FEATURE_TASK_MANAGER_CREATE_BASE_TASKS = 6000 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_NON_BASE_TASKS = 6001 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 6002 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 6003
[deprecated = true];
FEATURE_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 6004
[deprecated = true];
FEATURE_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 6005 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 6006 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 6007 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 6008 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_AIDL_TASK = 6009 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_SHADER_TASK = 6010 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_NDK_TASK = 6011 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 6012
[deprecated = true];
FEATURE_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK = 6013
[deprecated = true];
FEATURE_TASK_MANAGER_CREATE_COMPILE_TASK = 6014 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_STRIP_NATIVE_LIBRARY_TASK = 6015
[deprecated = true];
FEATURE_TASK_MANAGER_CREATE_SPLIT_TASK = 6016 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_PACKAGING_TASK = 6017 [deprecated = true];
FEATURE_TASK_MANAGER_CREATE_LINT_TASK = 6018 [deprecated = true];
}
}
message GradleTaskExecution {
// The task implementing class.
// Custom tasks are recorded as UNKNOWN_TASK_TYPE.
// This is an enum in android git:
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
optional int32 type = 1;
// Whether the task did work (TaskState#getDidWork())
// This is not necessarily the inverse of up_to_date: see
// https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html#getDidWork()
optional bool did_work = 2;
// Whether the task was skipped (TaskState#getSkipped())
optional bool skipped = 3;
// Whether the task was up to date (TaskState#getUpToDate())
optional bool up_to_date = 4;
// Whether the task failed
optional bool failed = 5;
}
message GradleTransformExecution {
// The transform implementing class.
// Custom transforms are recorded as UNKNOWN_TRANSFORM_TYPE.
// This is an enum in android git:
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
optional int32 type = 1;
// Whether the transform could be (in the case of TASK_TRANSFORM_PREPARATION)
// or was (in the case of TASK_TRANSFORM) incremental.
optional bool is_incremental = 2;
}
message InstantRunStatus {
// The type of artifacts built in this invocation.
// e.g. COLD for when the changes cannot be hot-swapped, either due to the
// app not running on the users device or the changes cannot be hot swapped.
optional BuildMode build_mode = 1;
// The type of deploy that the build can generate artifacts for.
optional PatchingPolicy patching_policy = 2;
// The result of the verifier run, whether the users change can be hot-swapped
// or requires a cold swap or full build is determined by the verifier.
optional VerifierStatus verifier_status = 3;
// The built artifacts stored in the build info.
// Artifacts that were built, but superseeded (e.g. a main APK contains
// resources, so the resources do not need to be reported separately) are
// not included.
repeated InstantRunArtifact artifact = 4;
enum BuildMode {
UNKNOWN_BUILD_MODE = 0;
HOT_WARM = 1;
COLD = 2;
FULL = 3;
}
enum PatchingPolicy {
UNKNOWN_PATCHING_POLICY = 0;
// No Cold swap is possible
PRE_LOLLIPOP = 1;
// Cold swap done by shipping dex classes to the Instant Run runtime
MULTI_DEX = 2;
// Cold swap done by reinstalling APK splits.
MULTI_APK = 3;
// Cold swap done by reinstalling APK splits, resources in separate APK.
MULTI_APK_SEPARATE_RESOURCES = 4;
}
enum VerifierStatus {
UNKNOWN_VERIFIER_STATUS = 0;
COMPATIBLE = 1;
// the verifier did not run successfully.
NOT_RUN = 2;
// InstantRun disabled on element like a method, class or package.
INSTANT_RUN_DISABLED = 3;
// Any inability to run the verifier on a file will be tagged as such
INSTANT_RUN_FAILURE = 4;
// A new class was added.
CLASS_ADDED = 5;
// changes in the hierarchy
PARENT_CLASS_CHANGED = 6;
IMPLEMENTED_INTERFACES_CHANGE = 7;
// class related changes.
CLASS_ANNOTATION_CHANGE = 8;
STATIC_INITIALIZER_CHANGE = 9;
// changes in constructors,
CONSTRUCTOR_SIGNATURE_CHANGE = 10;
// changes in method
METHOD_SIGNATURE_CHANGE = 11;
METHOD_ANNOTATION_CHANGE = 12;
METHOD_DELETED = 13;
METHOD_ADDED = 14;
// changes in fields.
FIELD_ADDED = 15;
FIELD_REMOVED = 16;
// change of field type or kind (static | instance)
FIELD_TYPE_CHANGE = 17;
R_CLASS_CHANGE = 18;
// reflection use
REFLECTION_USED = 19;
JAVA_RESOURCES_CHANGED = 20;
DEPENDENCY_CHANGED = 21;
MANIFEST_FILE_CHANGE = 22;
// the binary manifest file changed, probably due to references to resources
// which ID changed since last build.
BINARY_MANIFEST_FILE_CHANGE = 23;
COLD_SWAP_REQUESTED = 24;
FULL_BUILD_REQUESTED = 25;
INITIAL_BUILD = 26;
NO_CHANGES = 27;
CHANGE_IN_SERIALIZABLE_CLASS_WITHOUT_VERSION_UID = 28;
BUILD_NOT_INCREMENTAL = 29;
// abstract method became implemented | method with code became abstract.
ABSTRACT_METHOD_CHANGE = 30;
// a synthetic constructor was changed.
SYNTHETIC_CONSTRUCTOR_CHANGE = 31;
}
}
// all types of build can now register artifacts so we can find non InstantRun
// related artifact types like full slits and aar.
message InstantRunArtifact {
optional Type type = 1;
enum Type {
// Main APK file for 19, and 21 platforms when using
// PatchingPolicy.MULTI_DEX.
MAIN = 1;
// Main APK file when application is using PatchingPolicy.MULTI_DEX.
SPLIT_MAIN = 2;
// Reload dex file that can be used to patch application live.
RELOAD_DEX = 3;
// Restart.dex file that can be used for Dalvik to restart applications
// with minimum set of changes delivered.
RESTART_DEX = 4;
// Shard dex file that can be used to replace originally installed
// multi-dex shard.
DEX = 5;
// Pure split (code only) that can be installed individually on M+ devices.
SPLIT = 6;
// Resources: res.ap_ file
RESOURCES = 7;
// Full split, main apk file with reduced set of configs
FULL_SPLIT = 8;
// AAR file.
AAR = 9;
}
}
// Details about the LLDB Frontend process
message LLDBFrontendDetails {
// the value returned when the LLDB Frontend process exited.
optional int32 exit_code = 1;
}
// Error details from the Firebase Assistant.
message FirebaseErrorDetails {
// The error message presented to the user upon Firebase errors.
optional string error_message = 1;
}
// Contextual details for Firebase Assistant events. This message acts as a
// generic container for all events rather than having different messages for
// each event type. While some fields will be knowingly blank/irrelevant for
// some event types, frequency of logging is expected to be low enough that
// this does not represent request/storage bloat.
message FirebaseContextDetails {
// Public project id, used for attributing project growth to the plugin.
optional string project_id = 1;
// Secondary identifier for the project, also stored for more flexibility with
// joining the data with other sets.
optional string project_number = 2;
// Whether the action was performed while the user was logged in.
optional bool logged_in = 3;
// Whether the action was performed on while the related Studio project's
// modules were connected to a Firebase project.
optional ConnectStatus connect_status = 4;
// Tutorial resource event relates to. Restricted to non PII such as the id
// of the tutorial that was opened.
optional string performed_on = 5;
// Time that an action took to be performed. A primary example is how long
// a tutorial was open before navigating away.
optional int64 duration = 6;
enum ConnectStatus {
// Unable to determine connection status.
UNKNOWN_CONNECT_STATUS = 1;
// No modules connected.
NOT_CONNECTED = 2;
// 1 to N-1 modules were connected in a project with N modules.
PARTIALLY_CONNECTED = 3;
// All modules connected.
CONNECTED = 4;
}
}
// Details on the GPU Debugger tracing run
message GfxTracingDetails {
// total time the trace took
optional int64 total_time = 1;
// class name of the UI command selected to affect the tracing.
optional string command = 2;
// Error message when tracing fails.
optional string error_message = 3;
// A path describing the kind of details from the trace. This is a mix
// of class names (of our code) and random ids generated for the trace.
// e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
// 'Resource<e1b2a028ce62a97b235172963ddee35f386c6940>.' +
// 'Thumbnail<RGBA,100x100>.As<RGBA>'
optional string trace_path = 4;
// the image format of the gpu image being traced. e.g. 'image/png'
optional string image_format = 5;
// the width of the image being traced.
optional int64 image_width = 6;
// the height of the image being traced.
optional int64 image_height = 7;
}
// Details of an invocation of the TestRecorder to generate tests.
message TestRecorderDetails {
// The number of events in the test generated by the test recorder.
optional int64 event_count = 1;
// The number of assertions in the test generated by the test recorder.
optional int64 assertion_count = 2;
}
// Reports aggregated information about how users invoke available UI actions.
message UIActionStats {
// java class name (our code, not customer) of the UI Action reported on
// e.g. 'com.android.build.instant_run.HotSwapBuildAction'
optional string action_class_name = 1;
// How often since the last report this action was invoked.
optional int64 invocations = 2;
// The way this action was invocated by the user.
optional InvocationKind invocation_kind = 3;
// true if this message is sent directly, false if sent
// with aggregated data over time.
optional bool direct = 4;
// The way an UI action was invocated by the user.
enum InvocationKind {
UNKNOWN_INVOCATION_KIND = 0;
TOOLBAR = 1;
MENU = 2;
KEYBOARD_SHORTCUT = 3;
MACRO = 4;
MOUSE = 5;
}
}
// Holds a histogram of values.
message Histogram {
// Holds the total number of samples in the histogram
optional int64 total_count = 1;
// Holds the bins for this histogram, in ascending order
repeated HistogramBin bin = 2;
}
// Represents a range of values and the number of samples that fell within that
// range. The start and end attributes encode the range, and the samples
// attribute holds the number of samples. For example, if start=10 end=20,
// and samples=100, this means that 100 samples were recorded that fell within
// the range of start <= sample < end.
message HistogramBin {
// Start value for this bin, inclusive. All the samples in this bin are equal
// or greater than this value.
optional int64 start = 1;
// End value for this bin, exclusive. All the samples in this bin are strictly
// less than this value.
optional int64 end = 2;
// Number of samples that fell within this bin (between the start and end
// values)
optional int64 samples = 3;
// Total number of samples that are greater than or equal to the bin's start.
// This is equal to the number of samples in this bin plus the number of
// samples in all bins greater than this one.
optional int64 total_samples = 4;
}
// Details about the machine this process is running on.
message MachineDetails {
// Amount of total memory available in megabytes.
optional int64 total_ram = 1;
// Amount of total disk available in megabytes.
optional int64 total_disk = 2;
// Information about the display screens on the machine (resolution etc..)
repeated DisplayDetails display = 3;
// Number of processors on the machine.
optional int32 available_processors = 4;
}
// Details of a display screen.
message DisplayDetails {
// Width of the display screen in pixels.
optional int64 width = 1;
// Height of the display screen in pixels.
optional int64 height = 2;
// Densitiy of the pixels on the screen horiziontally.
optional int32 dots_per_inch_horizontal = 3;
// Densitiy of the pixels on the screen vertically.
optional int32 dots_per_inch_vertical = 4;
// System scale factor for the screen resolution.
optional float system_scale = 5;
}
// Stats on the current running java process.
message JavaProcessStats {
// Number of bytes of memory in use as heap memory.
optional int64 heap_memory_usage = 1;
// Number of bytes of memory in use as non heap memory.
optional int64 non_heap_memory_usage = 2;
// Current amount of java classes loaded.
optional int32 loaded_class_count = 3;
// Current amount of threads.
optional int32 thread_count = 4;
// Statistics about the garbage collectors used in this process.
repeated GarbageCollectionStats garbage_collection_stats = 5;
}
// Statistics about the garbage collector.
message GarbageCollectionStats {
// Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
optional string name = 1;
// Number of garbage collector invocations since last report.
optional int64 gc_collections = 2;
// Time spent garbage collecting since last report in milliseconds.
optional int64 gc_time = 3;
}
// Details about the JVM used in this process.
message JvmDetails {
// Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
optional string name = 1;
// Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
optional string version = 2;
// Vendor of the JVM (e.g. "JetBrains s.r.o.")
optional string vendor = 3;
// VM Option specified to set minimum heap_size in bytes ("-Xms" flag).
optional int64 minimum_heap_size = 4;
// VM Option specified to set maximum heap_size in bytes ("-Xmx" flag).
optional int64 maximum_heap_size = 5;
// VM Option specified to set maximum permanent space size in bytes.
// ("-XX:MaxPermSize" flag)
optional int64 maximum_permanent_space_size = 6;
// VM Option specified to set maximum permanent space size in bytes.
// ("-XX:ReservedCodeCacheSize" flag)
optional int64 maximum_code_cache_size = 7;
// VM Option specified to set time soft referenced objects remain alive in ms.
// ("-XX:SoftRefLRUPolicyMSPerMB" flag)
optional int64 soft_reference_lru_policy = 8;
// Type of Garbage Collector to use (various VM Option flags).
optional GarbageCollector garbage_collector = 9;
// Various garbage collectors that could be chosen through VM Options.
enum GarbageCollector {
UNSPECIFIED_GC = 0;
CONCURRENT_MARK_SWEEP_GC = 1;
GARBAGE_FIRST_GC = 2;
PARALLEL_GC = 3;
PARALLEL_OLD_GC = 4;
SERIAL_GC = 5;
}
}
// Details for an indexing operation.
message IntellijIndexingStats {
// Major operations on indexes.
enum Operation {
UNKNOWN_OPERATION = 0;
MAP_INPUT = 1;
WRITE_LOCK = 2;
UPDATE_DATA = 3;
GET_DATA = 4;
}
// Details for a specific indexing operation.
message OperationStats {
// Operation described by this message.
optional Operation operation = 1;
// Total CPU time.
optional int64 total_cpu_nanos = 2;
// Total wall time.
optional int64 total_wall_nanos = 3;
// Maximum observed CPU time.
optional int32 max_cpu_nanos = 4;
// Maximum observed wall time.
optional int32 max_wall_nanos = 5;
// Total number of operations aggregated in this record.
optional int32 total_count = 6;
}
// IDE's major indexes.
enum Index {
UNKNOWN_INDEX = 0;
ID_INDEX = 1;
STUB_INDEX = 2;
TRIGRAM_INDEX = 3;
OTHER = 4;
}
// Details for indexing operations of a specific specific index.
message IndexStats {
// Index described by this message.
optional Index index = 1;
// Details for specific operations.
repeated OperationStats operation_stats = 2;
}
// How long the indexing operation took in milliseconds.
optional int32 duration_ms = 1;
// Number of files indexed during this indexing operation.
optional int32 file_count = 2;
// Number of threads configured to run indexing tasks.
optional int32 indexer_threads = 3;
// Indexing operation details for specific indexes.
repeated IndexStats index_stats = 4;
}
// Stats on Studio's performance
message StudioPerformanceStats {
// Time for which the UI was blocked in milliseconds
optional int32 ui_freeze_time_ms = 1;
// Distribution of times taken to process events in the main event loop,
// in milliseconds. The number of samples is approximately equal to the
// number of events handled, quantized by event_service_time_sample_period.
// For example, if the 10-20ms bin contains 100 samples, it means that
// approximately 100 events took between 10 and 20 milliseconds to process.
optional Histogram event_service_time_ms = 2;
// Sample period used to compute the event_service_time_ms histogram. For
// example, if this is set to 10 then the service time was measured for
// every 10th event, and each measurement counted for 10 samples in
// the histogram. This is mainly intended for computing error bars
// and is not needed for interpreting the histogram itself.
optional int32 event_service_time_sample_period = 3;
// Histogram of wait times for the global write lock
optional Histogram write_lock_wait_time_ms = 4;
// Information about GC pause time distributions, one for each collector that
// is active.
repeated GcPauseInfo gc_pause_info = 5;
}
// Information about GC pause times for a particular collector.
message GcPauseInfo {
enum GcType {
UNKNOWN = 0;
SERIAL_YOUNG = 1;
SERIAL_OLD = 2;
PARALLEL_YOUNG = 3;
PARALLEL_OLD = 4;
CMS_YOUNG = 5;
CMS_OLD = 6;
G1_YOUNG = 7;
G1_OLD = 8;
}
// The type of the garbage collector
optional GcType collector_type = 1;
// Distribution of pause times for this collector
optional Histogram pause_times_ms = 2;
}
// One bucket of a PercentileEstimator.
message PercentileBucket {
// The target percentile for this bucket.
optional double target_percentile = 1;
// Estimated value at this bucket.
optional double value = 2;
// Number of samples less than value.
optional uint64 count = 3;
}
// Estimation of target percentiles of a stream of data.
message PercentileEstimator {
// Either raw_sample or bucket should be empty.
// Raw samples when there were not enough samples to interpolate.
repeated double raw_sample = 2;
// 2n + 3 buckets representing an estimation for n target percentiles.
repeated PercentileBucket bucket = 3;
}
message LldbPercentileEstimator {
// Type of performance metric.
optional Metric metric = 1;
// Estimator for metric.
optional PercentileEstimator estimator = 2;
// Metric types that can be monitored.
enum Metric {
ATTACH_TIME_MICROS = 0;
STEP_RESUME_RESPONSE_TIME_MICROS = 1;
GET_VARIABLES_TIME_MICROS = 2;
GET_VARIABLE_CHILDREN_RANGE_TIME_MICROS = 3;
GET_FRAMES_TIME_MICROS = 4;
ADD_SYMBOLIC_BREAKPOINT_TIME_MICROS = 5;
ADD_BREAKPOINT_TIME_MICROS = 6;
}
}
// Estimations of percentiles of time spent on LLDB operations.
message LldbPerformanceStats {
// Collection of estimations of performance metrics.
repeated LldbPercentileEstimator estimator = 1;
}
// Details around user opening or closing projects.
message StudioProjectChange {
// amount of projects open in same Android Studio instance.
optional int32 projects_open = 1;
}
// Layout editor state
message LayoutEditorState {
// Layout editor mode
enum Mode {
UNKOWN_MODE = 0;
DESIGN_MODE = 1;
PREVIEW_MODE = 2;
}
// Layout type
enum Type {
UNKNOWN_TYPE = 0;
LAYOUT = 1;
DRAWABLE = 2;
MENU = 3;
PREFERENCE_SCREEN = 4;
}
// Layout orientation
enum Orientation {
UNKNOWN_ORIENTATION = 0;
PORTRAIT = 1;
LANDSCAPE = 2;
}
// Design surfaces currently displayed
enum Surfaces {
UNKNOWN_SURFACES = 0;
BOTH = 1;
SCREEN_SURFACE = 2;
BLUEPRINT_SURFACE = 3;
}
// layout editor preview or design mode
optional Mode mode = 1;
// layout type currently being displayed (layout, menu, drawable...)
optional Type type = 2;
// android api level e.g. '23' or 'N'
optional string config_api_level = 3;
// current layout zoom level
optional int32 config_zoom_level = 4;
// current layout orientation
optional Orientation config_orientation = 5;
// surfaces being displyaed
optional Surfaces surfaces = 6;
}
// Layout editor render result (when type = RENDER)
message LayoutEditorRenderResult {
enum Trigger {
UNKNOWN_TRIGGER = 0;
// Manual refresh triggered by the user
USER = 1;
// User layout edit
EDIT = 2;
// External resource change
RESOURCE_CHANGE = 3;
// Build
BUILD = 4;
}
// Action that triggered the render
optional Trigger trigger = 1;
// Render result code
optional int32 result_code = 2;
// Full render time in ms
optional int64 total_render_time_ms = 4;
// Number of components rendered
optional int32 component_count = 5;
// Total number of issues (warnings + errors) in the error panel
optional int32 total_issue_count = 6;
// Errors displayed in the error panel
optional int32 error_count = 7;
// Fidelity warnings
optional int32 fidelity_warning_count = 8;
}
// Reference to a View used in an Android application.
// Although this proto contains just a single field, we may decide
// to represent a view with an enum in the future.
message AndroidView {
// Specifies the tag name used in XML for a given Android View class.
// This will typically be a fully qualified class name or an unqualified
// Android framework class name.
// Only Google view tags will be specified by name. The name of custom view
// tags will be left unspecified.
// Examples:
// "ToggleButton"
// "android.support.design.widget.CoordinatorLayout"
optional string tag_name = 1;
}
// Reference to an attribute of an Android view.
message AndroidAttribute {
// Namespace of the attribute changed
enum AttributeNamespace {
UNKNOWN_NAMESPACE = 0;
// This attribute is defined in the Google framework.
ANDROID = 1;
// This attribute is defined in the application.
// The attribute is either a custom attribute or an attribute on a View from
// a Google library.
APPLICATION = 2;
// This attribute is used in the design preview only. It does not affect
// the Android application at runtime.
TOOLS = 3;
}
// Specifies an attribute name of an Android View class or Navigation element.
// Only properties defined on Google View classes or Google-provided
// Navigation destinations will be specified by name.
// Properties defined on custom views or destinations, or custom properties on
// Google-provided destinations will be left unspecified.
optional string attribute_name = 1;
// The namespace of this attribute
optional AttributeNamespace attribute_namespace = 2;
}
// Identifies the effect the search field had on the possible choices presented
// to the user.
enum SearchOption {
UNKNOWN_SEARCH_OPTION = 0;
// The search field was empty
NONE = 1;
// The search field was not empty and it does not specify a unique match
MULTIPLE_MATCHES = 2;
// The search field identified a unique match
SINGLE_MATCH = 3;
}
// Details for the event of dropping a View from Palette:
message LayoutPaletteEvent {
// Display option when using the palette
enum ViewType {
UNKNOWN_VIEW_TYPE = 0;
ICON_AND_NAME = 1;
LARGE_IONS = 2;
SMALL_ICONS = 3;
}
// The active view group when using the palette
enum ViewGroup {
UNKNOWN_GROUP = 0;
CUSTOM = 1;
ALL_GROUPS = 2;
WIDGETS = 3;
TEXT = 4;
LAYOUTS = 5;
CONTAINERS = 6;
IMAGES = 7;
DATES = 8;
TRANSITIONS = 9;
ADVANCED = 10;
GOOGLE = 11;
DESIGN = 12;
APP_COMPAT = 13;
BUTTONS = 14;
LEGACY = 15;
COMMON = 16;
ALL_RESULTS = 17;
}
// The view parameter options used for the dropped component
enum ViewOption {
NORMAL = 0;
CUSTOM_OPTION = 1;
HORIZONTAL_PROGRESS_BAR = 2;
DISCRETE_SEEK_BAR = 3;
PLAIN_EDIT_TEXT = 4;
PASSWORD = 5;
PASSWORD_NUMERIC = 6;
EMAIL = 7;
PHONE = 8;
POSTAL_ADDRESS = 9;
MULTILINE_TEXT = 10;
TIME_EDITOR = 11;
DATE_EDITOR = 12;
NUMBER = 13;
SIGNED_NUMBER = 14;
DECIMAL_NUMBER = 15;
HORIZONTAL_LINEAR_LAYOUT = 16;
VERTICAL_LINEAR_LAYOUT = 17;
}
// The View that was dropped onto the design surface from the palette.
optional AndroidView view = 1;
// The view option used.
optional ViewOption view_option = 2;
// The group selected to find the view
optional ViewGroup selected_group = 3;
// The result of the usage of the search field
optional SearchOption search_option = 4;
// The display option used when this view was dropped from the palette
optional ViewType view_type = 5;
}
// Details for an attribute change event
message LayoutAttributeChangeEvent {
// Display option used in property panel
enum ViewType {
UNKNOWN_VIEW_TYPE = 0;
INSPECTOR = 1;
PROPERTY_TABLE = 2;
}
// The attribute changed by this event
optional AndroidAttribute attribute = 1;
// The search option used when the attribute was changed
optional SearchOption search_option = 2;
// The display option used when the attribute was changed
optional ViewType view_type = 3;
// The views where this attribute was changed for.
repeated AndroidView view = 4;
}
message LayoutFavoriteAttributeChangeEvent {
// This attribute was added as a favorite attribute
optional AndroidAttribute added = 1;
// This attribute was removed as a favorite attribute
optional AndroidAttribute removed = 2;
// These are the resulting active favorite attibutes
repeated AndroidAttribute active = 3;
}
// Details for layout editor events
message LayoutEditorEvent {
enum LayoutEditorEventType {
UNKNOWN_EVENT_TYPE = 0;
RENDER = 1;
ZOOM_IN = 2;
ZOOM_OUT = 3;
ZOOM_FIT = 4;
ZOOM_ACTUAL = 5;
SHOW_PAN_AND_ZOOM = 6;
SHOW_LINT_MESSAGES = 7;
LINT_TOOLTIP = 8;
RESTORE_ERROR_PANEL = 9;
MINIMIZE_ERROR_PANEL = 10;
SHOW_DESIGN_SURFACE = 11;
SHOW_BLUEPRINT_SURFACE = 12;
SHOW_BOTH_SURFACE = 13;
SWITCH_ORIENTATION = 14;
DEVICE_CHANGE = 15;
API_LEVEL_CHANGE = 16;
THEME_CHANGE = 17;
LANGUAGE_CHANGE = 18;
SHOW_CONSTRAINTS = 19;
HIDE_CONSTRAINTS = 20;
TURN_ON_AUTOCONNECT = 21;
TURN_OFF_AUTOCONNECT = 22;
CLEAR_ALL_CONSTRAINTS = 23;
INFER_CONSTRAINS = 24;
DEFAULT_MARGINS = 25;
PACK = 26;
ALIGN = 27;
ADD_VERTICAL_GUIDELINE = 28;
ADD_HORIZONTAL_GUIDELINE = 29;
SHOW_PALETTE = 30;
HIDE_PALETTE = 31;
DROP_VIEW_FROM_PALETTE = 32;
ATTRIBUTE_CHANGE = 33;
FAVORITE_CHANGE = 34;
}
// Type of event
optional LayoutEditorEventType type = 1;
// Layout editor current state
optional LayoutEditorState state = 2;
// Result of the render when (type = RENDER)
optional LayoutEditorRenderResult render_result = 3;
// Details related to using the palette (type = DROP_VIEW_FROM_PALETTE)
optional LayoutPaletteEvent palette_event = 4;
// Details related to changing an attribute (type = ATTRIBUTE_CHANGE)
optional LayoutAttributeChangeEvent attribute_change_event = 5;
// Details related to favorite attribute changes (type = FAVORITE_CHANGE)
optional LayoutFavoriteAttributeChangeEvent favorite_change_event = 6;
}
// Details for navigation editor events
message NavEditorEvent {
enum NavEditorEventType {
UNKNOWN_EVENT_TYPE = 0;
OPEN_FILE = 1;
SELECT_DESIGN_TAB = 2;
SELECT_XML_TAB = 3;
CREATE_ACTION = 4;
EDIT_ACTION = 5;
CREATE_ARGUMENT = 6;
EDIT_ARGUMENT = 36;
CREATE_DEEP_LINK = 7;
EDIT_DEEP_LINK = 37;
CHANGE_PROPERTY = 8;
ADD_DESTINATION = 9;
CREATE_FRAGMENT = 10;
ADD_INCLUDE = 11;
CREATE_NESTED_GRAPH = 12;
MOVE_TO_GRAPH = 38;
ACTIVATE_LAYOUT = 13;
ACTIVATE_CLASS = 14;
ACTIVATE_NESTED = 15;
ACTIVATE_INCLUDE = 16;
EXIT_NESTED_GRAPH = 17;
SET_START_DESTINATION = 18;
AUTO_ARRANGE = 19;
POSITION_DESTINATION = 20;
RESTORE_ERROR_PANEL = 21;
MINIMIZE_ERROR_PANEL = 22;
DELETE_DESTINATION = 23;
DELETE_INCLUDE = 24;
DELETE_NESTED = 25;
DELETE_ACTION = 26;
DELETE_DEEPLINK = 27;
DELETE_ARGUMENT = 28;
SCHEMA_CREATED = 29;
ZOOM_IN = 30;
ZOOM_OUT = 31;
ZOOM_FIT = 32;
CUT = 33;
COPY = 34;
PASTE = 35;
// next index: 39
}
enum Source {
UNKNOWN = 0;
TOOLBAR = 1;
DESIGN_SURFACE = 2;
PROPERTY_INSPECTOR = 3;
SHORTCUT = 4;
CONTEXT_MENU = 5;
}
// Type of event
optional NavEditorEventType type = 1;
// Where the event was triggered
optional Source source = 2;
// If the event is property-related, information about the affected property
optional NavPropertyInfo property_info = 3;
// If the event is action-related, information about the relevant action
optional NavActionInfo action_info = 4;
// If the event is destination-related, information about the relevant
// destination
optional NavDestinationInfo destination_info = 5;
// Information about the current NavigationSchema
optional NavSchemaInfo schema_info = 6;
// Information on the current contents of the navigation file
optional NavigationContents contents = 7;
}
message NavPropertyInfo {
enum Property {
UNKNOWN = 0;
CUSTOM = 1;
ACTION = 2;
ARG_TYPE = 3;
AUTO_VERIFY = 4;
UNUSED_1 = 5;
DATA = 6;
DATA_PATTERN = 7;
DEFAULT_NAV_HOST = 8;
DEFAULT_VALUE = 9;
DESTINATION = 10;
ENTER_ANIM = 11;
EXIT_ANIM = 12;
GRAPH = 13;
ID = 14;
LABEL = 15;
UNUSED_2 = 16;
LAUNCH_SINGLE_TOP = 17;
NAME = 18;
NAV_GRAPH = 19;
NULLABLE = 20;
POP_ENTER_ANIM = 21;
POP_EXIT_ANIM = 22;
POP_UP_TO = 23;
POP_UP_TO_INCLUSIVE = 24;
START_DESTINATION = 25;
URI = 26;
}
enum TagType {
UNKNOWN_TAG = 0;
CUSTOM_TAG = 1;
ACTION_TAG = 2;
DEEPLINK_TAG = 3;
FRAGMENT_TAG = 4;
ACTIVITY_TAG = 5;
NAVIGATION_TAG = 6;
INCLUDE_TAG = 7;
ARGUMENT_TAG = 8;
}
// The property affected.
optional Property property = 1;
// Type of the containing tag.
optional TagType containing_tag = 2;
// Whether the property was empty prior to being set just now.
optional bool was_empty = 3;
}
message NavActionInfo {
enum ActionType {
UNKNOWN = 0;
REGULAR = 1;
EXIT = 2;
GLOBAL = 3;
SELF = 4;
}
// Type of the action affected
optional ActionType type = 1;
// Whether the action has popTo set
optional bool has_pop = 2;
// Whether the action has popToInclusive set
optional bool inclusive = 3;
// The number of actions originating from the same destination as this one
optional uint32 count_from_source = 4;
// The number of actions targeting the same destination as this one
optional uint32 count_to_destination = 5;
// The number of actions with the same source and destination as this one
optional uint32 count_same = 6;
}
message NavDestinationInfo {
enum DestinationType {
UNKNOWN = 0;
FRAGMENT = 1;
ACTIVITY = 2;
OTHER = 3;
}
// The type of the destination
optional DestinationType type = 1;
// Whether the destination has a class (android:name) specified
optional bool has_class = 2;
// Whether the destination has a layout (tools:layout) specified
optional bool has_layout = 3;
}
message NavSchemaInfo {
// The number of custom navigators in the current schema
optional uint32 custom_navigators = 1;
// The number of custom tags in the current schema
optional uint32 custom_tags = 2;
// The number of custom destination classes in the current schema
optional uint32 custom_destinations = 3;
// The number of custom attributes in the current schema
optional uint32 custom_attributes = 4;
}
message NavigationContents {
// The number of fragments in the current file
optional uint32 fragments = 1;
// The number of activities in the current file
optional uint32 activities = 2;
// The number of custom destinations in the current file
optional uint32 custom_destinations = 3;
// The number of regular actions in the current file
optional uint32 regular_actions = 4;
// The number of exit actions in the current file
optional uint32 exit_actions = 5;
// The number of global actions in the current file
optional uint32 global_actions = 6;
// The number of self actions in the current file
optional uint32 self_actions = 10;
// The number of includes in the current file
optional uint32 includes = 7;
// The number of nested graphs in the current file
optional uint32 nested_graphs = 8;
// The number of placeholders (destinations with android:name not set) in the
// current file
optional uint32 placeholders = 9;
}
// App links assistant user event detail.
message AppLinksAssistantEvent {
// Client-side salted (rotating every 28 days), sha256 of the project id for
// counting projects using the assistant.
optional string project_id = 1;
// The app_id is the id for the user's android app
// which's salted on client-side (rotating every 28 days) then sha256
// so it is anonymized and is unique per user, but has a 1-N relation.
// It's for counting apps using the assistant.
optional string app_id = 2;
// The UI element source of event.
optional EventSource event_source = 3;
// The state of the event.
optional EventState event_state = 4;
// To check if there exists app links in the project
// before using app links assistant.
optional bool existing_app_links = 5;
// Duration time that app links assistant panel opens. Unit is nanoseconds.
optional int64 assistant_panel_open_duration = 6;
// Following three fields is for the new added app link.
// Set when event_source = URL_MAPPING_APP_LINK_ADD_DIALOG
// && event_state = COMPLETED
// Path type of new app link.
optional PathType app_link_path_type = 7;
// Whether a new activity is linked by app link.
optional bool new_activity_linked = 8;
// Whether a new host is linked by app link.
optional bool new_host_linked = 9;
// the project id as used in the playstore, e.g.
// 'com.google.android.apps.maps'. This is sensitive information and
// thus restricted to "raw" sawmill access. This data is only available in
// and for PWG approved scenarios.
optional string raw_project_id = 10;
// UI event source.
enum EventSource {
ASSISTANT_SIDE_PANEL = 1;
// UI elements of URL mapping panel.
URL_MAPPING_PANEL = 2;
URL_MAPPING_APP_LINK_ADD_DIALOG = 3;
URL_MAPPING_APP_LINK_ADD_ADVANCED_DIALOG = 4;
URL_MAPPING_APP_LINK_EDIT_DIALOG = 5;
URL_MAPPING_APP_LINK_DELETE_BUTTON = 6;
URL_MAPPING_CHECK_MAPPING_BUTTON = 7;
URL_MAPPING_OPEN_ANDROID_MANIFEST_BUTTON = 8;
URL_MAPPING_ADD_TEST_URL_BUTTON = 21;
// UI elements of code insert dialog.
CODE_INSERT_DIALOG = 9;
CODE_INSERT_DIALOG_INSERT_BUTTON = 10;
CODE_INSERT_DIALOG_LIST_SELECTION = 11;
// UI elements of DAL generation panel.
DAL_PANEL = 12;
DAL_PANEL_BROWSE_KEYSTORE_BUTTON = 13;
DAL_PANEL_GENERATE_BUTTON = 14;
DAL_PANEL_SAVE_BUTTON = 15;
DAL_PANEL_VERIFY_BUTTON = 16;
DAL_PANEL_SMART_LOCK_CHECKBOX = 200;
DAL_PANEL_SIGN_IN_URL_SAME_AS_DOMAIN_CHECKBOX = 201;
// UI elements of app links test panel.
APP_LINKS_TEST_PANEL = 17;
APP_LINKS_TEST_PANEL_MODULE_SELECTION = 18;
APP_LINKS_TEST_PANEL_RUN_TEST_BUTTON = 19;
}
// The state list of UI event source.
enum EventState {
// Generic state for panel opened, button clicked or list selection.
OPENED = 1;
// Generic state for button action completed.
COMPLETED = 2;
// Generic state for button action failed.
FAILED = 3;
// State to label user exiting from the panel or dialog by clicking the
// system close button, hide button or cancel button.
EXIT = 4;
}
// Url path type of a new added app link.
enum PathType {
// Corresponds to attribute android:path of <data> tag in Android Manifest
// File.
PATH = 1;
// Corresponds to attribute android:pathPrefix of <data> tag in
// Android Manifest File
PATH_PREFIX = 2;
// Corresponds to attribute android:pathPattern of <data> tag in
// Android Manifest File
PATH_PATTERN = 3;
}
}
// ADB Assistant event details
message AdbAssistantStats {
// Why the assistant was started
optional Trigger trigger = 1;
// State list of trigger
enum Trigger {
// No running devices as target
NO_RUNNING_DEVICE = 1;
// Don't see your device link on the bottom right of dialog
DONT_SEE_DEVICE = 2;
}
}
message CpuProfilingConfig {
// The type of the tool which provides profiling results.
optional Type type = 1;
// The profiling mode, each of which has different pros / cons.
optional Mode mode = 2;
// The maximum size of the trace recroding, in MB.
optional uint32 size_limit = 3;
// The sampling interval in μs, only used when |mode| is |SAMPLED|
optional uint32 sample_interval = 4;
enum Type {
UNKNOWN_TYPE = 0;
// Use general profiling features provided by the runtime
ART = 1;
// Use simpleperf for advanced Android profiling, works on Android O+
SIMPLE_PERF = 2;
// Use atrace for advanced Android profiling, works on Android O+
ATRACE = 3;
}
enum Mode {
UNKNOWN_MODE = 0;
// Periodically poll CPU; less accurate but more performant
SAMPLED = 1;
// Add timing hooks; more accurate but leaf calls are more expensive
INSTRUMENTED = 2;
}
}
// Data associated with startup CPU profiling
message CpuStartupProfilingMetadata {
optional CpuProfilingConfig profiling_config = 1;
}
// Data associated with API-initiated tracing
message CpuApiTracingMetadata {
// True if using sampling; false if using instrumentation.
optional bool use_sampling = 1;
// A trace path is given and not null (we don't log the path as it might
// contain PII).
optional bool arg_trace_path = 2;
// Buffer size as a given API argument (-1 if unavailable).
optional int32 arg_buffer_size = 3;
// Flags as a given API argument (-1 if unavailable).
optional int32 arg_flags = 4;
// Sampling interval as a given API argument (-1 if unavailable).
optional int32 arg_interval_us = 5;
}
// Data associated with capturing a CPU method trace
message CpuCaptureMetadata {
enum CaptureStatus {
UNKNOWN_STATUS = 0;
// The capture was successful
SUCCESS = 1;
// The device responded to our request for a capture with an error
STOP_CAPTURING_FAILURE = 2;
// The capture data sent back to us could not be parsed successfully
PARSING_FAILURE = 3;
// User aborted parsing the trace after being notified it was too large
USER_ABORTED_PARSING = 4;
// There was an error while preprocessing the trace file
PREPROCESS_FAILURE = 5;
}
// The result of a CPU capture
optional CaptureStatus capture_status = 1;
// Duration from user pressing "Record" to pressing "Stop"
// Not set if |capture_status| is not set to |SUCCESS|
optional uint64 capture_duration_ms = 2;
// Duration from the first trace data timestamp to the last one.
// Not set if |capture_status| is not set to |SUCCESS|
optional uint64 record_duration_ms = 3;
// Size of the trace file generated by the capture.
// Not set if |capture_status| is set to |STOP_CAPTURING_FAILURE|
optional uint32 trace_file_size_bytes = 4;
// How much time it took to parse the trace file
// Not set if |capture_status| is not set to |SUCCESS|
optional uint64 parsing_time_ms = 5;
// The user's configuration used to generate this capture
optional CpuProfilingConfig profiling_config = 6;
// Timeout set by the user for the system "profiler.cpu.art.stop.timeout.sec"
// property. Set if |profiling_config.type| is |ART|.
optional int32 art_stop_timeout_sec = 7;
}
// Data associated with importing CPU traces.
message CpuImportTraceMetadata {
enum ImportStatus {
// Default status
UNDEFINED_IMPORT_TRACE_STATUS = 0;
// The trace was imported successfully.
IMPORT_TRACE_SUCCESS = 1;
// There was a failure when trying to import the trace.
IMPORT_TRACE_FAILURE = 2;
}
enum Technology {
UNKNOWN_TECHNOLOGY = 0;
ART_TECHNOLOGY = 1;
SIMPLEPERF_TECHNOLOGY = 2;
ATRACE_TECHNOLOGY = 3;
}
// Status of the import trace action.
optional ImportStatus import_status = 1;
// Technology used to generate the trace imported.
// Technologies supported are ART, simpleperf and atrace.
optional Technology technology = 2;
}
// Metadata associated with how users are using the profilers filter.
message FilterMetadata {
enum View {
// Default state
UNKNOWN_FILTER_VIEW = 0;
CPU_TOP_DOWN = 1;
CPU_BOTTOM_UP = 2;
CPU_FLAME_CHART = 3;
CPU_CALL_CHART = 4;
MEMORY_PACKAGE = 5;
MEMORY_CLASS = 6;
MEMORY_CALLSTACK = 7;
NETWORK_THREADS = 8;
NETWORK_CONNECTIONS = 9;
}
enum FeaturesFlags {
// Default state
UNSET_FEATURE_FLAGS = 0;
// Used to represent the state of the match case checkbox.
MATCH_CASE = 1;
// Used to represent the state of the regex checkbox.
MATCH_REGEX = 2;
}
// The view that is active when opening / using the filter.
optional View active_view = 1;
// Bitwise field used to store features used derived from
// FilterMetadata.FeaturesFlags enum.
optional uint64 features_used = 2;
// The count of elements matched.
optional uint32 matched_elements = 3;
// The number of total elements to be searched.
optional uint32 total_elements = 4;
// The length of the string used to filter.
optional uint32 search_length = 5;
}
// Metadata associated with how users are starting sessions in the profilers
message ProfilerSessionCreationMetaData {
enum SessionType {
UNKNOWN_SESSION = 0;
FULL_SESSION = 1;
MEMORY_CAPTURE = 2;
CPU_CAPTURE = 3;
}
enum CreationSource {
UNKNOWN_SOURCE = 0;
// The user manually selects a process or imports an existing capture file.
MANUAL = 1;
}
// The type of session created
optional SessionType created_type = 1;
// How the session is created.
optional CreationSource creation_source = 2;
}
// Metadata associated with how users are selecting sessions in the profilers.
message ProfilerSessionSelectionMetaData {
enum ArtifactType {
UNKNOWN_ARTIFACT_TYPE = 0;
ARTIFACT_SESSION = 1;
ARTIFACT_HPROF = 2;
ARTIFACT_CPU_CAPTURE = 3;
ARTIFACT_LEGACY_ALLOCATIONS = 4;
}
// The type of the artifact selected
optional ArtifactType selected_type = 1;
// Whether the session is live when the artifact was selected
optional bool is_session_alive = 2;
}
// Shared enum values for energy event messages
message EnergyEvent {
enum Type {
UNKNOWN_EVENT_TYPE = 0;
WAKE_LOCK = 1;
ALARM = 2;
JOB = 3;
LOCATION = 4;
}
enum Subtype {
UNKNOWN_EVENT_SUBTYPE = 0;
WAKE_LOCK_PARTIAL = 1;
WAKE_LOCK_SCREEN_DIM = 2;
WAKE_LOCK_SCREEN_BRIGHT = 3;
WAKE_LOCK_FULL = 4;
WAKE_LOCK_PROXIMITY_SCREEN_OFF = 5;
ALARM_RTC = 101;
ALARM_RTC_WAKEUP = 102;
ALARM_ELAPSED_REALTIME = 103;
ALARM_ELAPSED_REALTIME_WAKEUP = 104;
}
enum Subevent {
UNKNOWN_ENERGY_SUBEVENT = 0;
WAKE_LOCK_ACQUIRED = 1;
WAKE_LOCK_RELEASED = 2;
ALARM_SET = 101;
ALARM_CANCELLED = 102;
ALARM_FIRED = 103;
JOB_SCHEDULED = 201;
JOB_STARTED = 202;
JOB_STOPPED = 203;
JOB_FINISHED = 204;
LOCATION_UPDATE_REQUESTED = 301;
LOCATION_UPDATE_REMOVED = 302;
LOCATION_CHANGED = 303;
}
}
message EnergyEventCount {
optional EnergyEvent.Type type = 1;
optional uint32 count = 2;
}
message EnergyRangeMetadata {
repeated EnergyEventCount event_counts = 1;
}
message EnergyEventMetadata {
optional EnergyEvent.Type type = 1;
optional EnergyEvent.Subtype subtype = 2;
repeated EnergyEvent.Subevent subevents = 3;
}
message PerfdCrashInfo {
// Addresses of the backstack of the crash reported by perfd.
repeated uint64 backstack_address_list = 1;
}
message TransportFailureMetadata {
enum FailureType {
UNKNOWN_FAILURE_TYPE = 0;
TIMEOUT = 1;
INTERRUPTED = 2;
IO = 3;
SYNC = 4;
SHELL_COMMAND_UNRESPONSIVE = 5;
ADB_COMMAND_REJECTED = 6;
}
optional FailureType failure_type = 1;
}
// Android Profiler metrics
message AndroidProfilerEvent {
// The current stage we're on when this event was generated
optional Stage stage = 1;
// The detailed type of this event.
optional Type type = 2;
// Used to be set if |type| was |TRACE_CPU|
// Deprecated since 3.0.0.8 and superceded by cpu_capture_metadata
optional CpuProfilingConfig cpu_config = 3 [deprecated = true];
// Set if |type| is |CAPTURE_TRACE|
optional CpuCaptureMetadata cpu_capture_metadata = 4;
// Set if |type| is |FILTER|
optional FilterMetadata filter_metadata = 5;
// Set if |type| is |SELECT_MEMORY_HEAP|
optional MemoryHeap memory_heap = 6;
// Set if |type| is |SESSION_CREATED|
optional ProfilerSessionCreationMetaData session_start_metadata = 7;
// Set if |type| is |SESSION_ARTIFACT_SELECTED|
optional ProfilerSessionSelectionMetaData session_artifact_metadata = 8;
// Set if |type| is |CPU_STARTUP_PROFILING|
optional CpuStartupProfilingMetadata cpu_startup_profiling_metadata = 9;
// Set if |type| is |CPU_IMPORT_TRACE|
optional CpuImportTraceMetadata cpu_import_trace_metadata = 10;
// Set if |type| is |CPU_API_TRACING|
optional CpuApiTracingMetadata cpu_api_tracing_metadata = 11;
// Set if |type| is |SELECT_ENERGY_RANGE|
optional EnergyRangeMetadata energy_range_metadata = 12;
// Set if |type| is |SELECT_ENERGY_EVENT|
optional EnergyEventMetadata energy_event_metadata = 13;
// Set if |type| is |PERFD_CRASHED|
optional PerfdCrashInfo perfd_crash_info = 14;
// Set if |type| is |TRANSPORT_DAEMON_FAILED| OR |TRANSPORT_PROXY_FAILED|
optional TransportFailureMetadata transport_failure_metadata = 15;
enum Stage {
UNKNOWN_STAGE = 0;
// The special stage shown to users when no device or process is available
NULL_STAGE = 1;
// The top-level view that shows all monitors at the same time
OVERVIEW_STAGE = 2;
CPU_STAGE = 3;
MEMORY_STAGE = 4;
NETWORK_STAGE = 5;
ENERGY_STAGE = 6;
}
enum MemoryHeap {
UNKNOWN_HEAP = 0;
DEFAULT_HEAP = 1;
IMAGE_HEAP = 2;
ZYGOTE_HEAP = 3;
APP_HEAP = 4;
JNI_HEAP = 5;
}
enum Type {
UNKNOWN_TYPE = 0;
/// System
// Fired when user starts profiling any app
PROFILING_STARTED = 1;
// Fired when user's profiling session attaches to an instrumented app
ADVANCED_PROFILING_STARTED = 2;
// This event should be correlated with |stage|
STAGE_ENTERED = 3;
// Triggered when the user starts an app in profiling mode.
RUN_WITH_PROFILING = 4;
// Triggered when perfd crashes. The callstack is sent with this metric.
PERFD_CRASHED = 5;
// Triggered when the transport device manager starts initializing a device.
PRE_TRANSPORT_DAEMON_STARTS = 6;
// Triggered when the transport daemon failed to launch.
TRANSPORT_DAEMON_FAILED = 7;
// Triggerd when the transport proxy layer fails to initialize.
TRANSPORT_PROXY_FAILED = 8;
// Triggered when the profiler service is unavailable.
PROFILER_INITIALIZATION_FAILED = 9;
/// General
CHANGE_DEVICE = 101;
CHANGE_PROCESS = 102;
GO_BACK = 103;
SELECT_MONITOR = 104;
ZOOM_IN = 105;
ZOOM_OUT = 106;
ZOOM_RESET = 107;
GO_LIVE = 108;
NAVIGATE_TO_CODE = 109;
// Create a selection on the current monitor's main chart. This event should
// be correlated with |stage|.
SELECT_RANGE = 110;
FILTER = 111;
// Triggered when profilers starts finding a process for auto-profiling.
AUTO_PROFILING_REQUESTED = 112;
// Triggered when profilers found a auto-profiling process successfully.
AUTO_PROFILING_SUCCEEDED = 113;
/// CPU
TRACE_SAMPLED = 201; // Deprecated since 3.0.0.5. Use TRACE_CPU.
TRACE_INSTRUMENTED = 202; // Deprecated since 3.0.0.5. Use TRACE_CPU.
SELECT_THREAD = 204;
SELECT_TOP_DOWN = 205;
SELECT_BOTTOM_UP = 206;
SELECT_FLAME_CHART = 207;
SELECT_CALL_CHART = 210;
OPEN_CPU_CONFIG_DIALOG = 208;
CREATE_CPU_CONFIG = 209;
TRACE_CPU = 211; // Deprecated since 3.0.0.8. Use CAPTURE_TRACE.
CAPTURE_TRACE = 212; // Correlate with |cpu_capture_metadata|
THREADS_REORDERED = 213;
KERNEL_VIEW_CLICKED = 214;
KERNEL_VIEW_TOGGLED = 215;
THREADS_VIEW_TOGGLED = 216;
CPU_STARTUP_PROFILING = 217;
CPU_IMPORT_TRACE = 218;
CPU_API_TRACING = 219;
/// Memory
FORCE_GC = 301;
SNAPSHOT_HPROF = 302;
CAPTURE_ALLOCATIONS = 303;
SELECT_MEMORY_CHART = 304;
EXPORT_HPROF = 305;
EXPORT_ALLOCATION = 306;
ARRANGE_CLASSES = 307;
SELECT_MEMORY_STACK = 308;
SELECT_MEMORY_REFERENCES = 309;
SELECT_MEMORY_HEAP = 310; // This event type should have |memory_heap|
/// Network
SELECT_CONNECTION = 402;
SELECT_DETAILS_RESPONSE = 403;
SELECT_DETAILS_HEADERS = 404;
SELECT_DETAILS_STACK = 405;
SELECT_DETAILS_OVERVIEW = 406;
SELECT_DETAILS_REQUEST = 407;
SELECT_DETAILS_ERROR = 408;
SELECT_CONNECTIONS_CONNECTION_VIEW = 409;
SELECT_CONNECTIONS_THREADS_VIEW = 410;
/// Energy
// Sent in addition to |SELECT_RANGE| but including extra data
SELECT_ENERGY_RANGE = 601;
SELECT_ENERGY_EVENT = 602;
/// Session
SESSION_CREATED = 501;
SESSION_STOPPED = 502;
SESSION_UI_EXPANDED = 503;
SESSION_UI_COLLAPSED = 504;
SESSION_UI_RESIZED = 505;
SESSION_ARTIFACT_SELECTED = 506;
SESSION_DROPDOWN_CLICKED = 507;
}
}
// Stats for a single table in the Android Profiler DB
message AndroidProfilerDbTable {
// The unique name that identifies this table, e.g. "Cpu_Data",
// "Memory_AllocationEvents", or "Network_Connection"
optional string name = 1;
// The number of records currently entered into this table
optional uint32 num_records = 2;
}
// Stats for the DB used by Android Profiler
message AndroidProfilerDbStats {
// The amount of time the database has been running (in seconds)
optional uint32 age_sec = 1;
// DB cache on disk (in MB)
optional uint32 total_disk_mb = 2;
// Entries for each table in our DB
repeated AndroidProfilerDbTable tables = 3;
}
// APK Analyzer stats
message ApkAnalyzerStats {
// size of the APK
optional uint64 uncompressed_size = 1;
// size of the APK after compression
optional uint64 compressed_size = 2;
}
// Gradle Plugin Upgrade Dialog Stats
message GradlePluginUpgradeDialogStats {
// The current Gradle Version used by the project e.g "4.10.3"
optional string current_gradle_version = 1;
// The current Android Gradle Plugin version used by the project e.g
// "3.4-alpha01"
optional string current_android_gradle_plugin_version = 2;
// The Gradle version that the update prompt recommended e.g "5.1"
optional string recommended_gradle_version = 3;
// The Android Gradle Plugin version that the upgrade prompt recommended e.g
// "3.5-beta02"
optional string recommended_android_gradle_plugin_version = 4;
// The action the user took
optional UserAction user_action = 5;
enum UserAction {
// We don't know
UNKNOWN_USER_ACTION = 0;
// The user closed the dialog
CANCEL = 1;
// Do not show the prompt again
DO_NOT_ASK_AGAIN = 2;
// Do not show the prompt again until tomorrow
REMIND_ME_TOMORROW = 3;
// Upgrade the Gradle and Plugin version
OK = 4;
}
}
// Gradle Sync details
message GradleSyncStats {
// Cause of sync
optional Trigger trigger = 1;
// Total time, the rest of the non negative times should add to this value
optional int64 total_time_ms = 2;
// Time in ms spent on gradle (can be negative in case of failure)
optional int64 gradle_time_ms = 3;
// Time in ms spent on IDE (can be negative in case of failure)
optional int64 ide_time_ms = 4;
// Whether the embedded maven repository is enabled
optional bool embedded_repo_enabled = 5;
// What type of sync was requested
optional GradleSyncType sync_type = 6;
// What type of sync was actually performed
optional GradleSyncType actual_sync_type = 7;
// The version of our Android Gradle plugin from the last known successful
// sync. (e.g. 3.5.0-dev)
optional string last_known_android_gradle_plugin_version = 8;
// The version of AGP used for this sync, if known. (e.g. 3.5.0)
optional string android_gradle_plugin_version = 9;
// Whether or not the project uses Groovy build files ("build.gradle")
optional bool uses_build_gradle = 10;
// Whether or not the project uses Kotlin build files ("build.gradle.kts")
optional bool uses_build_gradle_kts = 11;
// List of triggers for gradle Sync
enum Trigger {
// Default, should not be explicitly set
TRIGGER_UNKNOWN = 0;
// Used only when a project is opened
TRIGGER_PROJECT_LOADED = 1;
// Project modifications caused a sync. This is too generic, prefer a more
// specific value
TRIGGER_PROJECT_MODIFIED = 2;
// User has explicitly requested a sync using the sync button
TRIGGER_USER_REQUEST = 3;
// User clicked quickfix to enable embedded Maven repo
TRIGGER_EMBEDDED_REPO_ENABLED_BY_QUICKFIX = 4;
// User changed variant selection from Build Variants window
TRIGGER_VARIANT_SELECTION_CHANGED_BY_USER = 5;
// User made changes in PSD that require a sync
TRIGGER_PSD_CHANGES = 6;
// Sync was done as part of Android Studio testing (should not be used since
// logs from testing are stored in a different place)
TRIGGER_TEST_REQUESTED = 7;
// First marker for user initiated syncs
TRIGGER_USER_FIRST_MARKER = 100;
// Started by ""Sync now"" banner when there are pending changes
TRIGGER_USER_STALE_CHANGES = 101;
// User clicked on the try again hyperlink from a banner
TRIGGER_USER_TRY_AGAIN = 102;
// Started by user from sync action
TRIGGER_USER_SYNC_ACTION = 103;
// Syncing with additional arguments for c++ projects
TRIGGER_USER_REFRESH_LINKED_CPP_PROJECTS = 104;
// Sync was requested by user while the project was building
TRIGGER_USER_REQUEST_WHILE_BUILDING = 105;
// Last marker for user initiated syncs
TRIGGER_USER_LAST_MARKER = 199;
// First marker for syncs caused by quickfixes
TRIGGER_QF_FIRST_MARKER = 400;
// Upgrade appengine version using a quickfix
TRIGGER_QF_APPENGINE_VERSION_UPGRADED = 401;
// Install an artifact using a quickfix
TRIGGER_QF_ARTIFACT_INSTALLED = 402;
// Install build tools using a quickfix
TRIGGER_QF_BUILD_TOOLS_INSTALLED = 403;
// Build tools version removed using a quickfix
TRIGGER_QF_BUILD_TOOLS_VERISON_REMOVED = 404;
// Build tools version changed using a quickfix
TRIGGER_QF_BUILD_TOOLS_VERSION_CHANGED = 405;
// Install CMake using a quickfix
TRIGGER_QF_CMAKE_INSTALLED = 406;
// Change JDK to the one used by Android Studio itself from a quickfix
TRIGGER_QF_JDK_CHANGED_TO_CURRENT = 407;
// Change JDK to use the one embedded with Android Studio from a quickfix
TRIGGER_QF_JDK_CHANGED_TO_EMBEDDED = 408;
// Install NDK using a quickfix
TRIGGER_QF_NDK_INSTALLED = 409;
// Property android.useDeprecatedNdk was set to true using a quickfix
TRIGGER_QF_NDK_INTEGRATION_DEPRECATED_SET = 410;
// Offline mode was disabled using a quickfix
TRIGGER_QF_OFFLINE_MODE_DISABLED = 411;
// Offline mode was enabled using a quickfix
TRIGGER_QF_OFFLINE_MODE_ENABLED = 412;
// Install one or more platforms using a quickfix
TRIGGER_QF_PLATFORM_INSTALLED = 413;
// Sync passing --refresh-dependencies option from an hyperlink
TRIGGER_QF_REFRESH_DEPENDENCIES = 414;
// Repository added from a quickfix
TRIGGER_QF_REPOSITORY_ADDED = 415;
// Install repository from a quickfix
TRIGGER_QF_REPOSITORY_INSTALLED = 416;
// Install missing SDK packages from a quickfix
TRIGGER_QF_SDK_PACKAGE_INSTALLED = 417;
// SDK path was changed from a quickfix
TRIGGER_QF_SDK_PATH_CHANGED = 418;
// Install a missing SDK version from a quickfix
TRIGGER_QF_SDK_VERSION_INSTALLED = 419;
// Gradle wrapper was created using a quickfix
TRIGGER_QF_WRAPPER_CREATED = 420;
// Gradle version was changed in wrapper using a quickfix
TRIGGER_QF_WRAPPER_GRADLE_VERSION_FIXED = 421;
// SDK has been removed from manifest files
TRIGGER_QF_SDK_REMOVED_FROM_MANIFEST = 422;
// Last marker for syncs caused by quickfixes
TRIGGER_QF_LAST_MARKER = 999;
// First marker for syncs caused by a refactor
TRIGGER_REFACTOR_FIRST_MARKER = 1200;
// Migrate project to use Androidx
TRIGGER_REFACTOR_MIGRATE_TO_ANDROIDX = 1201;
// Migrate project to use resource namespaces
TRIGGER_REFACTOR_MIGRATE_TO_RESOURCE_NAMESPACES = 1202;
// A module was renamed using refactoring
TRIGGER_REFACTOR_MODULE_RENAMED = 1203;
// Last marker for syncs caused by a refactor
TRIGGER_REFACTOR_LAST_MARKER = 1299;
// First marker for syncs due to changes from PSD
TRIGGER_PSD_FIRST_MARKER = 1500;
// A dependency was removed using PSD (using
// GradleOperations#removeDependencies)
TRIGGER_PSD_DEPENDENCY_REMOVED = 1501;
// A module was removed from the PSD (using
// AndroidProjectStructureConfigurable.DeleteModuleAction)
TRIGGER_PSD_MODULE_REMOVED = 1502;
// Last marker for syncs due to changes from PSD
TRIGGER_PSD_LAST_MARKER = 1599;
// First marker for changes in SDK
TRIGGER_SDK_FIRST_MARKER = 1800;
// Android SDK path in local.properties was changed
TRIGGER_SDK_PATH_CHANGED = 1801;
// Last marker for changes in SDK
TRIGGER_SDK_LAST_MARKER = 1899;
// First marker for sync due to changes done by
// AndroidGradleJavaProjectModelModifier
TRIGGER_MODIFIER_FIRST_MARKER = 2100;
// An action was redone (from
// AndroidGradleJavaProjectModelModifier#registerUndoAction)
TRIGGER_MODIFIER_ACTION_REDONE = 2101;
// An action was undone (from
// AndroidGradleJavaProjectModelModifier#registerUndoAction)
TRIGGER_MODIFIER_ACTION_UNDONE = 2102;
// A dependency to a module was added
TRIGGER_MODIFIER_ADD_MODULE_DEPENDENCY = 2103;
// A dependency to an external library was added
TRIGGER_MODIFIER_ADD_LIBRARY_DEPENDENCY = 2104;
// Language level was changed
TRIGGER_MODIFIER_LANGUAGE_LEVEL_CHANGED = 2105;
// Last marker for sync due to changes done by
// AndroidGradleJavaProjectModelModifier
TRIGGER_MODIFIER_LAST_MARKER = 2199;
// First marker for changes in languages
TRIGGER_LANGUAGE_FIRST_MARKER = 2400;
// Java language level was changed
TRIGGER_LANGUAGE_JAVA_LEVEL_CHANGED = 2401;
// Kotlin was configured for current project
TRIGGER_LANGUAGE_KOTLIN_CONFIGURED = 2402;
// Last marker for changes in languages
TRIGGER_LANGUAGE_LAST_MARKER = 2499;
// First marker for syncs related to Single Variant Sync
TRIGGER_SVS_FIRST_MARKER = 2700;
// SVS is not supported. SVS was disabled and a new sync started
TRIGGER_SVS_NOT_SUPPORTED = 2701;
// Last marker for syncs related to Single Variant Sync
TRIGGER_SVS_LAST_MARKER = 2799;
// First marker for sync due to C++ changes
TRIGGER_CPP_FIRST_MARKER = 3000;
// Link an external C++ project with Gradle
TRIGGER_CPP_EXTERNAL_PROJECT_LINKED = 3001;
// Last marker for sync due to C++ changes
TRIGGER_CPP_LAST_MARKER = 3099;
// First marker for AddDependencyAction syncs
TRIGGER_ADDDEPENDENCYACTION_FIRST_MARKER = 3300;
// A dependency was added by Add dependency action
TRIGGER_ADDDEPENDENCYACTION_CALLED = 3301;
// Last marker for AddDependencyAction syncs
TRIGGER_ADDDEPENDENCYACTION_LAST_MARKER = 3399;
// First marker for syncs related to Espresso
TRIGGER_ESPRESSO_FIRST_MARKER = 3600;
// Espresso is enabled by RecordingDialog
TRIGGER_ESPRESSO_SETUP = 3601;
// Last marker for syncs related to Espresso
TRIGGER_ESPRESSO_LAST_MARKER = 3699;
// First marker for syncs caused by a build
TRIGGER_BUILD_FIRST_MARKER = 3900;
// Sync is needed before building an APK
TRIGGER_BUILD_BEFORE_BUILDING_APK = 3901;
// There was an error in the previous sync (before building) or there were
// changes after build was done that require a sync
TRIGGER_BUILD_SYNC_NEEDED_AFTER_BUILD = 3902;
// Last marker for syncs caused by a build
TRIGGER_BUILD_LAST_MARKER = 3999;
// First marker for sync started due to a run
TRIGGER_RUN_FIRST_MARKER = 4200;
// There are native unsynced variants before running
TRIGGER_RUN_NATIVE_UNSYNCED = 4201;
// Sync was not performed before running and there are changes that require
// a sync
TRIGGER_RUN_SYNC_NEEDED_BEFORE_RUNNING = 4202;
// Last marker for sync started due to a run
TRIGGER_RUN_LAST_MARKER = 4299;
// First marker for changes in Android Gradle Plugin
TRIGGER_AGP_FIRST_MARKER = 4500;
// Android Gradle plugin was updated
TRIGGER_AGP_VERSION_UPDATED = 4501;
// Last marker for changes in Android Gradle Plugin
TRIGGER_AGP_LAST_MARKER = 4599;
// First marker for project loading triggers
TRIGGER_PROJECT_LOADED_FIRST_MARKER = 4800;
// First sync after project was created from NPW
TRIGGER_PROJECT_NEW = 4801;
// Project was reopen from recent projects or after IDE restart
TRIGGER_PROJECT_REOPEN = 4802;
// There was a failure while trying to setup module from cache
TRIGGER_PROJECT_CACHED_SETUP_FAILED = 4803;
// Last marker for project loading triggers
TRIGGER_PROJECT_LOADED_LAST_MARKER = 4899;
// First marker for sync required while importing
TRIGGER_IMPORT_FIRST_MARKER = 5100;
// An ADT module was imported to the current project
TRIGGER_IMPORT_ADT_MODULE = 5101;
// One or more modules were copied and registered to current project
TRIGGER_IMPORT_MODULES_COPIED = 5102;
// Last marker for sync required while importing
TRIGGER_IMPORT_LAST_MARKER = 5199;
// First marker for sync after changes in variants
TRIGGER_VARIANT_FIRST_MARKER = 5400;
// Variant changed by user but a full sync is required
TRIGGER_VARIANT_SELECTION_FULL_SYNC = 5401;
// Last marker for sync after changes in variants
TRIGGER_VARIANT_LAST_MARKER = 5499;
// First marker for changes done by GradleDependencyManager
TRIGGER_GRADLEDEPENDENCY_FIRST_MARKER = 5700;
// A dependency was added
TRIGGER_GRADLEDEPENDENCY_ADDED = 5701;
// A dependency was updated
TRIGGER_GRADLEDEPENDENCY_UPDATED = 5702;
// Last marker for changes done by GradleDependencyManager
TRIGGER_GRADLEDEPENDENCY_LAST_MARKER = 5799;
}
// List of sync types
enum GradleSyncType {
// Default (used to identify sync done before we tracked this)
GRADLE_SYNC_TYPE_UNKNOWN = 0;
// IDEA sync
GRADLE_SYNC_TYPE_IDEA = 1;
// Single variant sync
GRADLE_SYNC_TYPE_SINGLE_VARIANT = 2;
// Compound sync
GRADLE_SYNC_TYPE_COMPOUND = 3;
// Shipped sync
GRADLE_SYNC_TYPE_SHIPPED = 4;
// New sync (without other features)
GRADLE_SYNC_TYPE_NEW_SYNC = 5;
}
}
// Gradle sync issue details.
message GradleSyncIssue {
// The type of the sync issue.
optional AndroidStudioEvent.GradleSyncIssueType type = 1;
// The list of quick-fixes offered to resolve the issue.
repeated AndroidStudioEvent.GradleSyncQuickFix offered_quick_fixes = 2;
}
// APK Debugging project information
message ApkDebugProject {
// Client-side salted hash of the package name for tracking purposes.
optional string package_id = 1;
}
// Details for layout inspector events
message LayoutInspectorEvent {
enum LayoutInspectorEventType {
UNKNOWN_EVENT_TYPE = 0;
// Capture view data from a window
CAPTURE = 1;
// Layout inspector was opened
OPEN = 2;
// Dump Display List of selected node
DUMP_DISPLAYLIST = 3;
// Pixel perfect feature used to overlay a design mock
OVERLAY_IMAGE = 4;
// Render a sub section of the captured view
RENDER_SUB_VIEW = 5;
// Navigate to declaration of a view resource by id
GO_TO_DECLARATION = 6;
// Capture view data timeout
CAPTURE_TIME_OUT = 7;
}
// Type of event
optional LayoutInspectorEventType type = 1;
// defined if LayoutInspectorEventType = CAPTURE, CAPTURE_TIME_OUT
optional int64 duration_in_ms = 2;
// defined if LayoutInspectorEventType = CAPTURE
// size of the captured view data in bytes
optional int64 data_size = 3;
// defined if LayoutInspectorEventType = CAPTURE or OPEN
// which version of the protocol is used to capture layout info
optional uint32 version = 4;
}
// Kotlin support information
message KotlinSupport {
// True if "Include Kotlin Support" option checked
// when Android project created, False otherwise.
// Set when kind = TEMPLATE_RENDER
optional bool include_kotlin_support = 1;
// Kotlin version used, e.g. "1.1.3-2".
optional string kotlin_support_version = 2;
// Android Ktx version used, e.g. "1.0.0".
optional string android_ktx_version = 3;
}
// Details for connection assistant event
message ConnectionAssistantEvent {
enum ConnectionAssistantEventType {
UNKNOWN_EVENT_TYPE = 0;
// Assistant is opened
OPEN = 1;
// Scan USB devices button clicked
SCAN_USB_DEVICES_CLICKED = 2;
// USB devices detected
USB_DEVICES_DETECTED = 3;
// Restart ADB devices button clicked
RESTART_ADB_CLICKED = 4;
// ADB devices detected
ADB_DEVICES_DETECTED = 5;
// Report issue button clicked, opens report dialog
REPORT_ISSUE_CLICKED = 6;
// Issue reported
ISSUE_REPORTED = 7;
}
// Type of event
optional ConnectionAssistantEventType type = 1;
// defined if ConnectionAssistantEventType = USB_DEVICES_DETECTED,
// ADB_DEVICES_DETECTEd
optional int32 usb_devices_detected = 2;
// defined if ConnectionAssistantEventType = USB_DEVICES_DETECTED,
// ADB_DEVICES_DETECTEd
optional int32 adb_devices_detected = 3;
}
// Details for Out of Memory Dialog event
message OomDialogEvent {
// Event type describing which memory the process ran out of
optional OomDialogEventType event_type = 1;
// Initial value of heap size (in MB)
optional int32 initial_heap_size = 2;
// Initial value of metaspace size (in MB)
optional int32 initial_metaspace_size = 3;
// Initial value of codecache size (in MB)
optional int32 initial_codecache_size = 4;
// New heap size (in MB)
optional int32 saved_heap_size = 5;
// New metaspace size (in MB)
optional int32 saved_metaspace_size = 6;
// New codecache size (in MB)
optional int32 saved_codecache_size = 7;
// true if user can modify memory size values
optional bool editing_enabled = 8;
// How user interacted with the dialog
optional SelectedAction selected_action = 9;
// Describes which memory type the process ran out of
enum OomDialogEventType {
UNKNOWN_EVENT_TYPE = 0;
// Out of heap memory
OOM_HEAP = 1;
// Out of permanent generation heap memory
OOM_PERM_GEN = 2;
// Out of metaspace memory
OOM_METASPACE = 3;
// Out of code cache memory
OOM_CODE_CACHE = 4;
// Not out of memory, but only small amount of heap available
// with frequent GC operations.
LOW_HEAP = 5;
}
// How user interacted with the dialog
enum SelectedAction {
UNKNOWN_ACTION = 0;
// Save new settings and continue
CONTINUE_ACTION = 1;
// Save new settings and quit
QUIT_ACTION = 2;
// Dialog dismissed without saving
CANCEL_ACTION = 3;
}
}
// Details for whats new assistant event
message WhatsNewAssistantEvent {
enum WhatsNewAssistantEventType {
UNKNOWN_EVENT_TYPE = 0;
// Assistant is opened
OPEN = 1;
// Auto Open on first load of a new AS version
AUTO_OPEN = 2;
// First interaction after opening
FIRST_INTERACTION = 3;
// Assistant is closed
CLOSED = 4;
// Button clicked
BUTTON_CLICKED = 5;
}
// Type of event
optional WhatsNewAssistantEventType type = 1;
}
// Information about a session running lint -- in build, in IDE, etc
message LintSession {
// analysis type - build, ide batch, ide incremental
optional AnalysisType analysis_type = 1;
// performance metrics regarding this session
optional LintPerformance lint_performance = 2;
// lint issue id's (counts, severity, etc)
repeated LintIssueId issue_ids = 3;
// Client-side salted, sha256 of the root project path.
// This exists to allow multiple instant run builds in one project by one
// user to be correlated.
//
// The salt is rotated every 28 days, so it is not a permanent pseudonymous
// identifier. It is anonymized and is unique per user, but has a 1-N
// relation.
optional string project_id = 4;
// true if user is using baselines
optional bool baseline_enabled = 5;
// true if user is analyzing test sources
optional bool including_test_sources = 6;
// true if user is analyzing generated sources
optional bool including_generated_sources = 7;
// true if user is analyzing dependencies
optional bool including_dependencies = 8;
// true if the build is configured to abort on error
optional bool abort_on_error = 9;
// true if the build is configured to only check errors, not warnings
optional bool ignore_warnings = 10;
// true if the build is configured to promote all warnings to errors
optional bool warnings_as_errors = 11;
// The type of lint run that was performed: in IDE, from build, etc
enum AnalysisType {
// Other
UNKNOWN_ANALYSIS_TYPE = 0;
// Explicit lint (batch) execution, typically for a single variant
// If reporting statistics for a complete multi-variant analysis (which
// involves running lint repeatedly on each variant and then combining
// the results) use BUILD_ALL_VARIANTS instead
BUILD = 1;
// Running lint implicitly as part of a release build, with a small
// subset of checks enabled
VITAL = 2;
// Running a full lint analysis from the IDE (Analyze > Inspect Code)
IDE_BATCH = 3;
// Running lint on the fly in the editor for a single file
IDE_FILE = 4;
// Running the "lint" target on a project to compute results for all
// variants and product flavors
BUILD_ALL_VARIANTS = 5;
}
}
// Information about a specific type of issue: frequency, severity, etc
message LintIssueId {
// The issue id is a unique identifier for this type of problem.
// Examples of issue id's are "HardcodedText" and "NewApi".
optional string issue_id = 1;
// Number of occurrences of this issue in this session
optional int64 count = 2;
// Severity assigned to issues of this type by the user
optional LintSeverity severity = 3;
// The severity of the issue: fatal, or just a warning, etc
enum LintSeverity {
// Unknown
UNKNOWN_SEVERITY = 0;
// User did not change it from whatever lint set it to
DEFAULT_SEVERITY = 1;
// Fatal
FATAL_SEVERITY = 2;
// Error
ERROR_SEVERITY = 3;
// Warning
WARNING_SEVERITY = 4;
// Informational
INFORMATIONAL_SEVERITY = 5;
// Ignore (disabled/hidden)
IGNORE_SEVERITY = 6;
// Issue is enabled in general, but was suppressed with a local
// annotation or comment
SUPPRESSED_LOCALLY = 7;
}
}
// Performance metrics about this lint analysis - duration, project size, etc
message LintPerformance {
// time to run lint in micro seconds
optional int64 analysis_time_ms = 1;
// number of files in project
optional int64 file_count = 2;
// number of gradle projects in session
optional int64 module_count = 3;
// number of Java source files in session
optional int64 java_source_count = 4;
// number of Kotlin source files in session
optional int64 kotlin_source_count = 5;
// number of resource files in session
optional int64 resource_file_count = 6;
// number of test soursce files in session. Note that test sources
// also contribute to the other file counts above.
optional int64 test_source_count = 7;
// time to initialize lint projects
optional int64 initialize_time_ms = 8;
// time to register custom detectors
optional int64 register_custom_detectors_time_ms = 9;
// time to compute the applicable detectors
optional int64 compute_detectors_time_ms = 10;
// time to run the first round of checks
optional int64 check_project_time_ms = 11;
// time to run any extra phases
optional int64 extra_phases_time_ms = 12;
// time to report baseline issues
optional int64 report_baseline_issues_time_ms = 13;
// time to dispose projects
optional int64 dispose_projects_time_ms = 14;
// time to generate repors
optional int64 report_generation_time_ms = 15;
}
// A quickfix for lint was invoked: data about issue type, fix type, etc
message LintAction {
// The issue id is a unique identifier for this type of problem.
// Examples of issue id's are "HardcodedText" and "NewApi".
optional string issue_id = 1;
// Client-side salted, sha256 of the root project path.
// This exists to allow multiple instant run builds in one project by one
// user to be correlated.
//
// The salt is rotated every 28 days, so it is not a permanent pseudonymous
// identifier. It is anonymized and is unique per user, but has a 1-N
// relation.
optional string project_id = 2;
// A unique identifier for this quickfix.
optional string fix_id = 3;
// Feedback about this lint check if available
optional LintFeedback lint_feedback = 4;
// The user has provided feedback about this issue: problems, sentiment, etc
enum LintFeedback {
// Something else
UNKNOWN_FEEDBACK = 0;
// Lint incorrectly diagnosed the code
FALSE_POSITIVE = 1;
// The message is not clear
UNCLEAR_MESSAGE = 2;
// I liked this check, thanks
LOVE_IT = 3;
}
}
message RunEvent {
enum Status {
UNKNOWN_STATUS = 0;
// The run finished successfully
SUCCESS = 1;
// The run finished with an error
FAIL = 2;
// The run was aborted mid-way
ABORT = 3;
}
optional Status status = 1;
// The executor used, from Executor::getId()
optional string executor = 2;
// Whether the app is debuggable
optional bool debuggable = 3;
// Whether instant run is enabled
optional bool instant_run_enabled = 4;
// Whether the apply changes button was used
optional bool apply_changes = 5;
// Whether the device dialog was open
optional bool user_selected_target = 6;
// Weather a device, like the emulator, was launched
optional bool launched_devices = 7;
// How many devices were targeted
optional int32 device_count = 8;
// True if this run event started mid-way
optional bool partial = 9;
// All the launch tasks executed during deploy
repeated LaunchTaskDetail launch_task_detail = 10;
// Timestamps in expected order
// The run cycle begins
optional int64 begin_timestamp_ms = 11;
// The before-run tasks start (i.e. running gradle)
optional int64 begin_before_run_tasks_timestamp_ms = 12;
// End of the before-run tasks
optional int64 end_before_run_tasks_timestamp_ms = 13;
// Before launching, we must wait for devices
optional int64 begin_wait_for_device_timestamp_ms = 14;
// All devices are now ready
optional int64 end_wait_for_device_timestamp_ms = 15;
// Launch tasks start being executed
optional int64 begin_launch_tasks_timestamp_ms = 16;
// All launch tasks completed
optional int64 end_launch_tasks_timestamp_ms = 17;
// The run cycle finished
optional int64 end_timestamp_ms = 18;
// Whether the run configuration was set to deploy as instant
optional bool deployed_as_instant = 19;
// Whether the run configuration was set to deploy from app bundle
optional bool deployed_from_bundle = 20;
// Enum name representing deploy failure reason
optional string deploy_failure_id = 21;
}
message LaunchTaskDetail {
// The id of the task
optional string id = 1;
// This task starts
optional int64 start_timestamp_ms = 2;
// This task ends
optional int64 end_timestamp_ms = 3;
// For the tasks that deploy artifacts, their details.
repeated ArtifactDetail artifact = 4;
// Thread ID this task is running on
optional int32 tid = 5;
// The completion status of the task. This value
// is populated from several enums in code (using enum.code())
// interface, each LaunchTask has its own set of error codes with
// some of them coming from device and being populated here. This is similar
// to the RunEvent.deploy_failure_id
optional string status = 6;
}
message StudioRunEvent {
option deprecated = true;
enum RunType {
UNKNOWN = 0;
RUN = 1;
DEBUG = 2;
PROFILE = 3;
}
enum SectionType {
UNKNOWN_SECTION = 0;
TOTAL = 1;
STUDIO = 2;
GRADLE = 3;
EMULATOR = 4;
DEPLOY = 5;
}
enum EventType {
NONE = 0;
START = 1;
FINISH = 2;
}
// mirrors com.android.tools.idea.gradle.util.BuildMode
enum BuildMode {
UNKNOWN_BUILD_MODE = 0;
/** Cleans the project.*/
CLEAN = 1;
/** Compiles Java code and invokes Android build tools. */
ASSEMBLE = 2;
/** Clean project and then {@link #ASSEMBLE}. */
REBUILD = 3;
/** Compiles Java code, in selected modules, without invoking Android
* build tools. */
COMPILE_JAVA = 4;
/** Generate Java source only (e.g. R.java). */
SOURCE_GEN = 5;
/** Build project with translation support. */
ASSEMBLE_TRANSLATE = 6;
/** Build with the Gradle "bundle" task*/
BUNDLE = 7;
/** Build APKS from the Gradle "bundle" task*/
APK_FROM_BUNDLE = 8;
}
enum DeployTask {
UNKNOWN_TASK = 0;
DEPLOY_APK = 1;
DEPLOY_INSTANT_APP = 2;
HOTSWAP = 3;
SPLIT_APK_DEPLOY = 4;
}
// The run id is a UUID within a single run of Android Studio
// for tracking a single run through various events
optional string run_id = 1;
// The type of "Run" Studio is performing
optional RunType run_type = 2;
// The section of the run this event is tracking
optional SectionType section_type = 3;
// The type of event: start or end or error
optional EventType event_type = 4;
// How long this section took, set when EventType is Finish or Failed
optional uint32 duration_ms = 5;
// Set if SectionType = Gradle AND EventType = Start
optional BuildMode build_mode = 6;
// Set if EventType = FINISH and SectionType = DEPLOY/TOTAL
optional bool is_successful = 7;
// Set if EventType = START and SectionType = DEPLOY
optional uint32 artifact_count = 8;
// Set if EventType = START and SectionType = DEPLOY
optional DeployTask deploy_task = 9;
// The number of features disabled by the user
// Set if SectionType = DEPLOY and EventType = START and
// BuildMode = BUNDLE/APK_FROM_BUNDLE
optional uint32 disabled_dynamic_features_count = 11;
// If this Run is using Instant Run, which may use HOTSWAP deploy task
// but could also use other deploy tasks.
// Set if SectionType = STUDIO and EventType = FINISH
optional bool instant_run = 12;
// If using SplitApkDeployTask and doing a partial install
// Set if SectionType = DEPLOY and DeployTask = SPLIT_APK_DEPLOY
optional bool patch_build = 13;
// If using SplitApkDeployTask and doing a resource only swap that
// does not restart the app
// Set if SectionType = DEPLOY and DeployTask = SPLIT_APK_DEPLOY
optional bool do_not_restart = 14;
// If the app's debuggable flag is set to true
// Set if SectionType = TOTAL and EventType = START
optional bool debuggable = 15;
// If the deploy target was picked by the user or auto selected by dialog
// Set if SectionType = STUDIO and EventType = FINISH
optional bool user_selected_target = 16;
// Set if EventType = START and SectionType = DEPLOY
// Details of each artifact being deployed.
repeated ArtifactDetail artifact_details = 17;
// Set when EventType = START and SectionType = TOTAL
// If user clicked the Run button instead of Apply Changes
optional bool force_coldswap = 18;
// Set when EventType = START and SectionType = TOTAL
// If Instant Run setting is enabled
optional bool instant_run_enabled = 19;
}
message ArtifactDetail {
// Size of the artifact in bytes.
optional uint64 size = 1;
}
// Statistics regarding IntelliJ project sizes
message IntellijProjectSizeStats {
enum FileType {
UNKNOWN_FILE_TYPE = 0;
JAVA = 1;
XML = 2;
DOT_CLASS = 3;
KOTLIN = 4;
}
// Search scope to decide counted file set
enum Scope {
UNKNOWN_SCOPE = 0;
// Whole project including both user sources and libraries
ALL = 1;
// All project libraries i.e. all jar files
LIBRARY = 2;
}
optional FileType type = 1;
optional Scope scope = 2;
optional int32 count = 3;
}
// Statistics regarding tool windows
message StudioToolWindowActionStats {
enum EventType {
UNKNOWN_EVENT_TYPE = 0;
REGISTERED_EVENT_TYPE = 1;
OPEN_EVENT_TYPE = 2;
CLOSED_EVENT_TYPE = 3;
}
// Id of the tool window
// e.g. 'Assistant'
optional string tool_window_id = 1;
optional EventType event_type = 2;
}
// Statistics related to PSD
message PSDEvent {
// Available PSD generations
enum PSDGeneration {
PROJECT_STRUCTURE_DIALOG_GENERATION_UNKNOWN = 0;
// Original PSD generation
PROJECT_STRUCTURE_DIALOG_GENERATION_001 = 1;
// "New PSD", use numbers just in case we get even a newer generation
PROJECT_STRUCTURE_DIALOG_GENERATION_002 = 2;
}
// Available left Configurables
enum PSDLeftConfigurable {
PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_UNKNOWN = 0;
// SDK
PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_SDK = 1;
// Project
PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_PROJECT = 2;
// Any service
PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_SERVICE = 3;
// Any module on version 1
PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_MODULE = 4;
// Variables
PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_VARIABLES = 100;
// Modules on version 2
PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_MODULES = 101;
// Dependencies
PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_DEPENDENCIES = 102;
// Build variants
PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_BUILD_VARIANTS = 103;
// Suggestions
PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_SUGGESTIONS = 104;
}
// Top tabs that can be selected in the models
enum PSDTopTab {
PROJECT_STRUCTURE_DIALOG_TOP_TAB_UNKNOWN = 0;
// Information
PROJECT_STRUCTURE_DIALOG_TOP_TAB_INFORMATION = 1;
// Properties
PROJECT_STRUCTURE_DIALOG_TOP_TAB_PROPERTIES = 2;
// Signing
PROJECT_STRUCTURE_DIALOG_TOP_TAB_SIGNING = 3;
// Flavors
PROJECT_STRUCTURE_DIALOG_TOP_TAB_FLAVORS = 4;
// Build types
PROJECT_STRUCTURE_DIALOG_TOP_TAB_BUILD_TYPES = 5;
// Dependencies
PROJECT_STRUCTURE_DIALOG_TOP_TAB_DEPENDENCIES = 6;
// Default Config
PROJECT_STRUCTURE_DIALOG_TOP_TAB_DEFAULT_CONFIG = 100;
// Signing Configs
PROJECT_STRUCTURE_DIALOG_TOP_TAB_SIGNING_CONFIGS = 101;
}
// Fields that can be modified
enum PSDField {
PROJECT_STRUCTURE_DIALOG_FIELD_UNKNOWN = 0;
// From SDK Location
PROJECT_STRUCTURE_DIALOG_FIELD_SDK_LOCATION_ANDROID_SDK_LOCATION = 20;
PROJECT_STRUCTURE_DIALOG_FIELD_SDK_LOCATION_JDK_LOCATION = 21;
PROJECT_STRUCTURE_DIALOG_FIELD_SDK_LOCATION_ANDROID_NDK_LOCATION = 22;
// From Project
PROJECT_STRUCTURE_DIALOG_FIELD_PROJECT_GRADLE_VERSION = 40;
PROJECT_STRUCTURE_DIALOG_FIELD_PROJECT_ANDROID_PLUGIN_VERSION = 41;
PROJECT_STRUCTURE_DIALOG_FIELD_PROJECT_ANDROID_PLUGIN_REPOSITORY = 42;
PROJECT_STRUCTURE_DIALOG_FIELD_PROJECT_DEFAULT_LIBRARY_REPOSITORY = 43;
// From Module
// From Information tab (there are no fileds, only a message)
// From Propertires tab
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_COMPILE_SDK_VERSION = 120;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_BUILD_TOLS_VERSION = 121;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_LIBRARY_REPOSITORY = 122;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_IGNORE_ASSETS_PATTERN =
123;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_INCREMENTAL_DEX = 124;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_SOURCE_COMPATIBILITY = 125;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_TARGET_COMPATIBILITY = 126;
// From Signing tab
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_SIGNING_NAME = 140;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_SIGNING_KEY_ALIAS = 141;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_SIGNING_KEY_PASSWORD = 142;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_SIGNING_STORE_FILE = 143;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_SIGNING_STORE_PASSWORD = 144;
// From Flavors tab
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_NAME = 160;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_APPLICATION_ID = 161;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_PROGUARD_FILE = 162;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_SIGNING_CONFIG = 163;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_TARGET_SDK_VERSION = 164;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_TEST_INSTRUMENTATION_RUNNER =
165;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_TEST_APPLICATION_ID = 166;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_VERSION_CODE = 167;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_VERSION_NAME = 168;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_VERSION_NAME_SUFFIX = 169;
// From Build Types tab
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_NAME = 180;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_DEBUGGABLE = 181;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_JNI_DEBUGGABLE = 182;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_SIGNING_CONFIG = 183;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_RENDERSCRIPT_DEBUGGABLE =
184;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_RENDERSCRIPT_OPTIM_LEVEL =
185;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_MINIFY_ENABLED = 186;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_PSEUDO_LOCAL_ENABLED = 187;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_PROGUARD_FILE = 188;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_APPLICATION_ID_SUFFIX = 189;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_VERSION_NAME_SUFFIX = 190;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_ZIP_ALLIGN_ENABLED = 191;
// From Dependencies tab
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_DEPENDENCIES_DEPENDENCY = 200;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_DEPENDENCIES_SCOPE = 201;
// From Variables
PROJECT_STRUCTURE_DIALOG_FIELD_VARIABLES_NAME = 300;
PROJECT_STRUCTURE_DIALOG_FIELD_VARIABLES_VALUE = 301;
// From Modules
// From Default Config
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_APPLICATION_ID = 400;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_TARGET_SDK_VERSION =
401;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_MIN_SDK_VERSION = 402;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_MAX_SDK_VERSION = 403;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_SIGNING_CONFIG = 404;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_PROGUARD_FILES = 405;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_MANIFEST_PLACEHOLDERS =
406;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_MULTI_DEX_ENABLED =
407;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_TEST_INSTRUMENTATION_RUNNER_CLASS_NAME =
408;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_TEST_INSTRUMENTATION_RUNNER_ARGUMENTS_KEY =
409;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_TEST_INSTRUMENTATION_RUNNER_ARGUMENTS_VALUE =
410;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_TEST_APPLICATION_ID =
411;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_VERSION_CODE = 412;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_VERSION_NAME = 413;
// From Signing Configs
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_SIGNINGCONFIGS_NAME = 420;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_SIGNINGCONFIGS_STORE_FILE = 421;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_SIGNINGCONFIGS_STORE_PASSWORD = 422;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_SIGNINGCONFIGS_KEY_ALIAS = 423;
PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_SIGNINGCONFIGS_KEY_PASSWORD = 424;
// From Dependencies
PROJECT_STRUCTURE_DIALOG_FIELD_DEPENDENCIES_REQUESTED_VERSION = 500;
// From Build Variants
// From Build Types
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_DEBUGGABLE = 600;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_JNI_DEBUGGABLE =
601;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_RENDERSCRIPT_DEBUGGABLE =
602;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_RENDERSCRIPT_OPTIMIZATION_LEVEL =
603;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_SIGNING_CONFIG =
604;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_PROGUARD_FILES =
605;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_MANIFEST_PLACEHOLDERS =
606;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_MINIFY_ENABLED =
607;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_MULTI_DEX_ENABLED =
608;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_APPLICATIOND_ID_SUFFIX =
609;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_VERSION_NAME_SUFFIX =
610;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_ZIP_ALIGN_ENABLED =
611;
// From Flavors
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_DIMENSION = 620;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_APPLICATION_ID = 621;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_TARGET_SDK_VERSION =
622;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_MIN_SDK_VERSION = 623;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_MAX_SDK_VERSION = 624;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_SIGNING_CONFIG = 625;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_PROGUARD_FILES = 626;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_MANIFEST_PLACEHOLDERS =
627;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_MULTI_DEX_ENABLED =
628;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_TEST_INSTRUMENTATION_RUNNER_CLASS_NAME =
629;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_TEST_INSTRUMENTATION_RUNNER_ARGUMENTS_KEY =
630;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_TEST_INSTRUMENTATION_RUNNER_ARGUMENTS_VALUE =
631;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_TEST_APPLICATION_ID =
632;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_VERSION_CODE = 633;
PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_VERSION_NAME = 634;
// From Suggestions
}
// Repository usage statistics in PSD.
message PSDRepositoryUsage {
// Types of repositories that can be searched.
enum PSDRepository {
PROJECT_STRUCTURE_DIALOG_REPOSITORY_UNKNOWN = 0;
PROJECT_STRUCTURE_DIALOG_REPOSITORY_GOOGLE = 1;
PROJECT_STRUCTURE_DIALOG_REPOSITORY_MAVEN_CENTRAL = 2;
PROJECT_STRUCTURE_DIALOG_REPOSITORY_JCENTER = 3;
PROJECT_STRUCTURE_DIALOG_REPOSITORY_LOCAL = 4;
PROJECT_STRUCTURE_DIALOG_REPOSITORY_OTHER = 5;
}
// The repository being accessed.
optional PSDRepository repository = 1;
// How long did it take to search the repository for a specific library
// from the user's perspective. Some repositories like Google's one
// requires multiple files to be fetched to complete the search.
optional uint64 duration_ms = 2;
}
// What PSD generation is used?
optional PSDGeneration generation = 1;
// Left Configurable from which the event was created
optional PSDLeftConfigurable left_configurable = 2;
// Tab from which the event is generated
optional PSDTopTab top_tab = 3;
// How long was PSD open?
optional uint64 duration_ms = 4;
// List of fields that were modified
repeated PSDField modified_fields = 5;
// Repositories searched.
repeated PSDRepositoryUsage repositories_searched = 6;
}
// UserSentiment describes how users feel about the product.
message UserSentiment {
// does the user feel positive or negative about the product at this time?
optional SentimentState state = 1;
// in our popup question the user can indicate a satisfaction level.
optional SatisfactionLevel level = 2;
enum SentimentState {
UNKNOWN_SENTIMENT_STATE = 0;
POSITIVE = 1;
NEGATIVE = 2;
// The user is feeling strong enough about the issue to start filing a bug.
FILE_BUG = 3;
// We popped up a question dialog on what the user's sentiment is instead of
// them chosing to submit feedback themselves
POPUP_QUESTION = 4;
}
enum SatisfactionLevel {
UNKNOWN_SATISFACTION_LEVEL = 0;
VERY_DISSATISFIED = 1;
DISSATISFIED = 2;
NEUTRAL = 3;
SATISFIED = 4;
VERY_SATISFIED = 5;
}
}
// Detailed info about emulator boot up.
message EmulatorBootInfo {
enum BootStatus {
UNKNOWN_STATUS = 0;
BOOT_COMPLETED = 1;
BOOT_FAILED = 2;
}
// Outcome of the emulator boot.
optional BootStatus boot_status = 1;
// How long it took to boot, either successfully or not.
optional uint64 duration_ms = 2;
}
// Reports information about how users invoke available dialogs.
message DialogStats {
enum DialogState {
UNKNOWN_DIALOG_STATE = 0;
SHOW = 1;
SELECT = 2;
APPLY = 3;
RESET = 4;
CLOSE = 5;
}
// java class name (our code, not customer) of the Dialog reported on
// e.g. ' com.intellij.openapi.options.newEditor.SettingsDialog'
optional string dialog_class_name = 1;
// State the dialog is transitioning to.
optional DialogState state = 2;
}
// Data Binding metrics
message DataBindingEvent {
// The detailed type of this event.
optional EventType type = 1;
// The context in which this event was triggered.
optional DataBindingContext context = 2;
// Set if |type| is |DATA_BINDING_BUILD_EVENT| or |DATA_BINDING_SYNC_EVENT|
optional DataBindingPollMetadata poll_metadata = 3;
// Type of data binding event
enum EventType {
UNKNOWN_TYPE = 0;
/// Polling events
// Triggered when a gradle sync happens
DATA_BINDING_SYNC_EVENT = 1;
// Triggered when a build happens
DATA_BINDING_BUILD_EVENT = 2;
/// User initiated events
// Completion related events
DATA_BINDING_COMPLETION_SUGGESTED = 101;
DATA_BINDING_COMPLETION_ACCEPTED = 102;
DATA_BINDING_COMPLETION_DECLINED = 103;
}
// Used to denote the context in which data binding events are triggered
enum DataBindingContext {
UNKNOWN_CONTEXT = 0;
// Data binding expression of the format @{() -> obj.func()}
DATA_BINDING_CONTEXT_LAMBDA = 1;
// Data binding expression of the format @{obj::func}
DATA_BINDING_CONTEXT_METHOD_REFERENCE = 2;
// Data binding xml tags. For example <variable> tag.
DATA_BINDING_CONTEXT_XML_TAG = 3;
}
// All of the stats we actively poll for
message DataBindingPollMetadata {
/// These are set when the message is a |DATA_BINDING_SYNC_EVENT|
// Whether user enabled data binding in gradle file.
optional bool data_binding_enabled = 1;
/// These are set when the message is a |DATA_BINDING_BUILD_EVENT|
// # of data binding layout xmls
optional uint32 layout_xml_count = 2;
// # of data binding imports
optional uint32 import_count = 3;
// # of data binding variables
optional uint32 variable_count = 4;
// # of data binding expressions in the xml
optional uint32 expression_count = 5;
// # of data binding related errors generated by compiler
optional uint32 error_count = 6;
// Observable type metrics
optional ObservableMetrics observable_metrics = 101;
// Binding adapter metrics
optional BindingAdapterMetrics binding_adapter_metrics = 102;
// Live Data metrics
optional LiveDataMetrics live_data_metrics = 103;
message ObservableMetrics {
// # of observable primitives used
optional uint32 primitive_count = 1;
// # of observable collections
optional uint32 collection_count = 2;
// # of user defined observable objects
optional uint32 observable_object_count = 3;
}
message BindingAdapterMetrics {
// # of user defined adapters
optional uint32 adapter_count = 1;
// # of references to user defined adapters in layout xml
optional uint32 adapter_reference_count = 2;
}
message LiveDataMetrics {
// # of live data objects
optional uint32 live_data_object_count = 1;
}
}
}
enum EditorFileType {
UNKNOWN = 0;
JAVA = 1;
KOTLIN = 2;
XML = 3;
GROOVY = 4;
PROPERTIES = 5;
JSON = 6;
KOTLIN_SCRIPT = 7; // .kts
NATIVE = 8; // .c, .cpp, .h, etc.
}
message TypingLatencyStats {
message LatencyRecord {
optional EditorFileType file_type = 1;
// Total number of keys typed.
optional int64 total_keys_typed = 2;
// Sum of latency for all keys typed.
optional int64 total_latency_ms = 3;
// Max latency recorded for a single key typed.
optional int64 max_latency_ms = 4;
// Full latency histogram.
optional Histogram histogram = 5;
}
// Per-file-type latency stats.
repeated LatencyRecord latency_records = 1;
}
message EditorHighlightingStats {
message Stats {
optional EditorFileType file_type = 1;
// Highlighting latencies in milliseconds.
optional Histogram histogram = 2;
}
repeated Stats by_file_type = 1;
}
// Details of events relating to the Android Studio Patch Updater
message StudioPatchUpdaterEvent {
//Removed as uses reserved words when building with mingw
}
// Event related to the resource manager
message ResourceManagerEvent {
optional Kind kind = 1;
optional ResourceType resource_type = 2;
enum Kind {
UNKNOWN_EVENT_KIND = 0;
// Resource Manager tool window is openend
TOOL_WINDOW_OPEN = 1;
// Asset added pressing the "Import Drawable" action
ASSET_ADDED_VIA_BUTTON = 2;
// Asset added using Drag and Drop on the resource manager
ASSET_ADDED_VIA_DND = 3;
// User open the view showing the different version of a resource
DETAIL_VIEW_OPENED = 4;
// A resource has been opened via the resource manager
ASSET_OPENED = 5;
// List mode has been changed to grid or list
LIST_MODE_CHANGED = 6;
// User shows or hide libraries assets
LIBRARIES_SHOWN = 7;
LIBRARIES_HIDDEN = 8;
// A density indicator was present in the imported file
DENSITY_INFERED = 9;
// Drop events
DROP_ON_XML_BLANK_SPACE = 10;
DROP_ON_XML_TAG = 11;
DROP_ON_XML_ATTRIBUTE = 12;
DROP_ON_LAYOUT_VIEW = 13;
DROP_ON_LAYOUT_VIEWGROUP = 14;
// Default drop type when the target does not recognize the resource url
// type
DROP_AS_TEXT = 15;
// When user tries to import more resources than the supported number
IMPORT_LIMIT_REACHED = 16;
}
// The type of the resource. It could be an Android type (e.g drawable)
// or an external type (e.g SVG, PNG)
enum ResourceType {
UNKNOWN = 0;
DRAWABLE = 1;
COLOR = 2;
LAYOUT = 3;
STRING = 4;
FONT = 5;
SVG = 6;
RASTER = 7;
}
}
message IdePluginInfo {
// The set of plugins enabled for the current session.
repeated IdePlugin plugins = 1;
}
message IdePlugin {
// Unique ID (e.g., "org.jetbrains.kotlin").
optional string id = 1;
// Version (e.g., "1.3.21-release-Studio3.4-1").
optional string version = 2;
// Whether this plugin (in its current version) came bundled with Studio.
optional bool bundled = 3;
}
// Information about the status of Windows Defender, which can have a
// significant impact on build speed. We check whether realtime scanning is
// enabled, and if so, whether several important directories are excluded from
// scanning. This message is sent once per project, since the project root is
// one such directory.
message WindowsDefenderStatus {
// Overall status of Windows Defender
optional Status status = 1;
// Whether the project root directory is excluded from scanning.
optional bool project_dir_excluded = 2;
// Status of Windows Defender - either scanning is disabled, or all, some, or
// none of the important directories are excluded, or there was some problem
// determining the status.
enum Status {
UNKNOWN_STATUS = 0;
SCANNING_DISABLED = 1;
ALL_EXCLUDED = 2;
SOME_EXCLUDED = 3;
NONE_EXCLUDED = 4;
}
}