blob: 71c2f4f3132ff706644af51099b9bd1f82632f2c [file] [log] [blame]
syntax = "proto2";
option java_package = "com.google.wireless.android.sdk.stats";
option java_outer_classname = "AndroidStudioStats";
// IntelliJ gets really 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
// or kind = GAME_TOOLS_PING
// or kind = AGDE_PING.
// 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
// or kind = DynamicLayoutInspectorEvent
// or kind = AppInspectionEvent and AppInspectionEvent.Type = PROCESS_SELECTED
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 (deprecated), use the repeated
// field emulator_ui_events instead.
optional EmulatorUiEvent emulator_ui_event = 25 [deprecated = true];
// 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 532 days), sha256 of the project id.
// set when kind = PROJECT_STRUCTURE_*
// or kind = APK_ANALYZER_STATS
// or kind = TSDKUA_EVENT
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 kind = GRADLE_CPP_SYNC_COMPLETED
optional GradleCppSyncStats gradle_cpp_sync_stats = 113;
// 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_RENDERER
// 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
// Deprecated since 3.6.0.8, replaced with WhatsNewAssistantUpdateEvent
optional WhatsNewAssistantEvent whats_new_assistant_event = 60
[deprecated = true];
// 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;
// Set when kind = MEMORY_SETTINGS_EVENT
optional MemorySettingsEvent memory_settings_event = 85;
// Set when kind = STUDIO_UPDATE_FLOW
optional StudioUpdateFlowEvent studio_update_flow_event = 86;
// set when kind = BUILD_OUTPUT_WINDOW_STATS
optional BuildOutputWindowStats build_output_window_stats = 87;
// set when kind = GRADLE_PLUGIN_DSL_USAGE_STATS
optional GradlePluginDslUsageStats gradle_plugin_dsl_usage_stats = 88;
// set when kind = WHATS_NEW_ASSISTANT_UPDATE_EVENT
optional WhatsNewAssistantUpdateEvent whats_new_assistant_update_event = 89;
// set when kind = DEFAULT_ACTIVITY_LOCATOR_STATS
optional DefaultActivityLocatorStats default_activity_locator_stats = 90;
// set when kind = MOTION_LAYOUT_EDITOR_EVENT
optional MotionLayoutEditorEvent motion_layout_editor_event = 91;
// set when kind = COMPOSE_SAMPLE_EVENT
// This is a sample project for Compose published on GitHub that can be
// imported through the sample browser UI or cloned and opened manually
optional ComposeSampleEvent compose_sample_event = 92;
// set when kind = IMPORT_SAMPLE_EVENT
// Logs the ID of the sample project imported through the sample browser UI,
// e.g. android/user-interface-samples/TextStyling
optional ImportSampleEvent import_sample_event = 93;
// set when kind = DYNAMIC_LAYOUT_INSPECTOR_EVENT
optional DynamicLayoutInspectorEvent dynamic_layout_inspector_event = 94;
// set when kind = BUILD_ATTRIBUTION_STATS
optional BuildAttributionStats build_attribution_stats = 95;
// set when kind = EDITOR_COMPLETION_STATS
optional EditorCompletionStats editor_completion_stats = 96;
// set when kind = MULTI_VIEW_EVENT
optional MultiViewEvent multi_view_event = 97;
// set when kind = BUILD_ATTRIBUTION_UI_EVENT
optional BuildAttributionUiEvent build_attribution_ui_event = 98;
// set when kind = VS_PLUGIN
optional VsPluginEvent vs_plugin_event = 99;
// set when kind = DESIGN_EDITOR_HELP_PANEL_EVENT
optional DesignEditorHelpPanelEvent design_editor_help_panel_event = 100;
// set when kind = APP_INSPECTION
optional AppInspectionEvent app_inspection_event = 101;
// set when kind = ML_MODEL_BINDING
optional MlModelBindingEvent ml_model_binding_event = 102;
// set when kind = DEPLOYMENT_TO_EMULATOR
optional AvdLaunchEvent avd_launch_event = 103;
// set when kind = NAV_SAFE_ARGS_EVENT
optional NavSafeArgsEvent nav_safe_args_event = 104;
// set when kind = DAGGER_EDITOR
optional DaggerEditorEvent dagger_editor_event = 105;
// set when kind = PARALLEL_ANDROID_TEST_REPORT_UI
optional ParallelAndroidTestReportUiEvent
parallel_android_test_report_ui_event = 106;
// set when kind = APPLY_CHANGES_AGENT_ERROR
optional ApplyChangesAgentError apply_changes_agent_error = 107;
// set when kind = WIZARD_TEMPLATES_USAGE
optional TemplatesUsage template_usage = 108;
// set when kind = UPGRADE_ASSISTANT_COMPONENT_EVENT
optional UpgradeAssistantComponentEvent upgrade_assistant_component_event =
109;
// set when kind = UPGRADE_ASSISTANT_PROCESSOR_EVENT
optional UpgradeAssistantProcessorEvent upgrade_assistant_processor_event =
110;
// set when kind = INTERACTIVE_PREVIEW_EVENT
optional InteractivePreviewEvent interactive_preview_event = 111;
// set when kind = COMPOSE_ANIMATION_TOOLING
optional ComposeAnimationToolingEvent compose_animation_tooling_event = 112;
// set when kind = EMULATOR_UI_EVENTS
repeated EmulatorUiEvent emulator_ui_events = 114;
// set when kind = SURVEY_RESPONSE
optional SurveyResponse survey_response = 115;
// set when kind = COMPOSE_DEPLOY
optional ComposeDeployEvent compose_deploy_event = 116;
// Deprecated, use suggested_import_event instead.
// set when kind = AUTO_IMPORT_EVENT
optional AutoImportEvent auto_import_event = 117 [deprecated = true];
// set when kind = FILE_USAGE
optional FileUsage file_usage = 118;
// set when kind = LIVE_LITERALS_EVENT
optional LiveLiteralsEvent live_literals_event = 119;
// set when kind = MIGRATE_TO_NON_TRANSITIVE_R_CLASS
optional NonTransitiveRClassMigrationEvent
non_transitive_r_class_migration_event = 120;
// set when kind = ANDROID_TEST_RETENTION_EVENT
optional AndroidTestRetentionEvent android_test_retention_event = 121;
// set when kind = SUGGESTED_IMPORT_EVENT
optional SuggestedImportEvent suggested_import_event = 122;
// set when kind = VFS_REFRESH
optional VfsRefresh vfs_refresh = 123;
// Set when kind is SIGNING_WIZARD_*_FAILED or SIGNING_WIZARD_*_SUCCEEDED
optional SigningWizardEvent signing_wizard_event = 124;
// set when kind = FILE_TYPE
optional FileType file_type = 125;
// set when kind is KOTLIN_PROJECT_CONFIGURATION
optional KotlinProjectConfiguration kotlin_project_configuration = 126;
// set when kind = RUN_START_DATA
optional RunStartData run_start_data = 127;
// set when kind = RUN_FINISH_DATA
optional RunFinishData run_finish_data = 128;
// set when kind = DEVICE_MANAGER
optional DeviceManagerEvent device_manager_event = 129;
// set when kind = WEAR_PAIRING
optional WearPairingEvent wear_pairing_event = 130;
// set when kind = GRADLE_JDK_INVALID
optional GradleJdkInvalidEvent gradle_jdk_invalid_event = 131;
// set when kind = DEVICE_EXPLORER
optional DeviceExplorerEvent device_explorer_event = 132;
// set when kind = OPTIN_METRICS
optional OptInToMetrics opt_in_to_metrics = 133;
// set when kind = OPTOUT_METRICS
optional OptOutOfMetrics opt_out_of_metrics = 134;
// set when kind = GRADLE_VERSION_CATALOG_DETECTOR
optional GradleVersionCatalogDetectorEvent
gradle_version_catalog_detector_event = 135;
// set when kind = COROUTINE_DEBUGGER
optional CoroutineDebuggerEvent coroutine_debugger_event = 136;
// set when kind = SPLITTING_TABS_USAGE
optional SplittingTabsUsageEvent splitting_tabs_usage_event = 137;
// set when kind = LOGCAT_USAGE
optional LogcatUsageEvent logcat_usage_event = 138;
// the project ids 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.
repeated string raw_project_ids = 139;
// Client-side salted (rotating every 28 days), sha256 of the project id.
// set when kind = PROJECT_STRUCTURE_* or kind = APK_ANALYZER_STATS
repeated string project_ids = 140;
// set when kind = OS_METRICS
optional OSMetrics os_metrics = 141;
// set when kind is SDK_INDEX_LIBRARY_HAS_CRITICAL_ISSUES,
// SDK_INDEX_LIBRARY_IS_OUTDATED or SDK_INDEX_LIBRARY_IS_NON_COMPLIANT
optional SdkIndexLibraryDetails sdk_index_library_details = 142;
// set when kind = EDITOR_PICKER
optional EditorPickerEvent editor_picker_event = 143;
// set when kind = COMPOSE_MULTI_PREVIEW
optional ComposeMultiPreviewEvent compose_multi_preview_event = 144;
// set when kind = LIVE_EDIT_EVENT
optional LiveEditEvent live_edit_event = 145;
// set when kind = STOP_EVENT
optional StopEvent stop_event = 146;
// set when kind = APP_QUALITY_INSIGHTS_USAGE
optional AppQualityInsightsUsageEvent app_quality_insights_usage_event = 147;
// set when kind = GOOGLE_LOGIN_EVENT
optional GoogleLoginPluginEvent google_login_event = 148;
// set when kind = DEVICE_MIRRORING_SESSION
optional DeviceMirroringSession device_mirroring_session = 149;
// set when kind = FAST_PREVIEW_EVENT
optional FastPreviewEvent fast_preview_event = 150;
// set when kind = MEMORY_USAGE_REPORT_EVENT
optional MemoryUsageReportEvent memory_usage_report_event = 151;
// set when kind = SDK_INDEX_LOADED_CORRECTLY
// or kind = SDK_INDEX_CACHING_ERROR
// or kind = SDK_INDEX_DEFAULT_DATA_ERROR
optional SdkIndexLoadingDetails sdk_index_loading_details = 152;
// set when kind = MANIFEST_MERGER_STATS
optional ManifestMergerStats manifest_merger_stats = 153;
// set when kind = THREADING_AGENT_STATS
optional ThreadingAgentUsageEvent threading_agent_usage_event = 154;
// set when kind = PROJECT_VIEW_SELECTION_CHANGE_EVENT
optional ProjectViewSelectionChangeEvent project_view_selection_change_event =
155;
// set when kind = HEAP_REPORT_EVENT
optional HeapReportEvent heap_report_event = 156;
// set when kind = CREATE_DIAGNOSTIC_REPORT_ACTION
optional CreateDiagnosticReportAction create_diagnostic_report_action_event =
157;
// set when kind = DIRECT_ACCESS_USAGE_EVENT
optional DirectAccessUsageEvent direct_access_usage_event = 158;
// set when kind = SAFE_MODE_STATS_EVENT
optional SafeModeStatsEvent safe_mode_stats_event = 159;
// set when kind = TSDKUA_EVENT
optional TSdkUAEvent tsdk_ua_event = 160;
// set when kind = INTELLIJ_NEW_UI_STATE_EVENT
optional IntelliJNewUIState intellij_new_ui_state_event = 161;
// set when kind = KOTLIN_GRADLE_PERFORMANCE
optional KotlinGradlePerformance kotlin_gradle_performance_event = 162;
// set when kind = BUILD_OUTPUT_DOWNLOADS_INFO_USER_INTERACTION
optional BuildOutputDownloadsInfoEvent build_output_downloads_info_event =
163;
// set when kind = DEVICE_MIRRORING_ABNORMAL_AGENT_TERMINATION
optional DeviceMirroringAbnormalAgentTermination
device_mirroring_abnormal_agent_termination = 164;
// set when kind = SYSTEM_HEALTH_EVENT
optional SystemHealthEvent system_health_event = 165;
// set when kind = COMPOSE_PREVIEW_CANVAS_EVENT
optional ComposePreviewCanvasEvent compose_preview_canvas_event = 166;
// set when kind = SML_COMPLETION_EVENT
optional SmlCompletionEvent sml_completion_event = 167;
// set when kind = SML_CODE_TRANSFORMATION_EVENT
optional SmlTransformEvent sml_transform_event = 168;
// set when kind = SML_CHATBOT_EVENT
optional SmlChatBotEvent sml_chat_bot_event = 169;
// set when kind = SML_CONFIGURATION_EVENT
optional SmlConfigurationEvent sml_configuration_event = 170;
// set when kind = KOTLIN_SUPPORT_DECLINED
optional KotlinSupportDeclined kotlin_support_declined = 171;
// set when kind = DEVICE_SCREENSHOT_EVENT
optional DeviceScreenshotEvent device_screenshot_event = 172;
// set when kind = EDITOR_NOTIFICATION
optional EditorNotification editor_notification = 173;
// set when kind = COMPOSE_PREVIEW_LITE_MODE
optional ComposePreviewLiteModeEvent compose_preview_lite_mode_event = 174;
// set when kind = UPGRADE_ANDROID_STUDIO_DIALOG
optional UpgradeAndroidStudioDialogStats upgrade_android_studio_dialog = 175;
// set when kind = DEBUGGER_EVENT
optional DebuggerEvent debugger_event = 176;
// set when kind = SOONG_SYNC_EVENT
optional SoongSyncStats soong_sync_stats = 177;
// set when kind = INTELLIJ_NEW_UI_SWITCH
optional IntelliJNewUISwitch intellij_new_ui_switch = 178;
// set when kind = ESSENTIALS_MODE_EVENT
optional EssentialsModeEvent essentials_mode_event = 179;
// set when kind = LINT_TOOLTIP_LINK_EVENT
optional LintTooltipLinkEvent lint_tooltip_link_event = 180;
// set when kind = SML_AI_EXCLUDE_EVENT
optional SmlAiExcludeEvent sml_ai_exclude_event = 181;
// set when kind = I_DEVICE_USAGE_EVENT
optional IDeviceUsageEvent i_device_usage_event = 182;
// set when kind = GRADLE_JDK_CONFIGURATION
optional GradleJdkConfigurationEvent gradle_jdk_configuration_event = 183;
// set when kind = RENDER_SECURITY_MANAGER_EVENT
optional RenderSecurityManagerEvent render_security_manager_event = 184;
// set when kind = PREVIEW_REFRESH_EVENT
optional PreviewRefreshEvent preview_refresh_event = 185;
// set when kind = WEAR_HEALTH_SERVICES_TOOL_WINDOW_EVENT
optional WearHealthServicesEvent wear_health_services_event = 186;
// set when kind = UI_DEVICE_SETTINGS_EVENT
optional UiDeviceSettingsEvent ui_device_settings_event = 187;
// set when kind = ADB_USAGE_EVENT
optional AdbUsageEvent adb_usage_event = 188;
// set when kind = SML_GEOLOCATION_EVENT
optional SmlGeolocationEvent sml_geolocation_event = 189;
// set when kind = SML_COMPLETION_REQUEST_ERROR
optional SmlCompletionRequestErrorEvent sml_completion_request_error = 190;
// set when kind = ADB_DEVICE_CONNECTED
optional DeviceConnectedNotificationEvent device_connected = 191;
// set when kind = SCREENSHOT_TEST_COMPOSE_PREVIEW
optional ScreenshotTestComposePreviewEvent
screenshot_test_compose_preview_event = 192;
// set when kind = TEST_SCENARIO_EVENT
optional TestScenarioEvent test_scenario_event = 193;
// set when kind = ADB_SERVER_STATE
optional AdbServerState adb_server_state = 194;
// set when kind = FIREBASE_MANAGEMENT_EVENT
optional FirebaseManagementEvent firebase_management_event = 195;
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 [deprecated = true];
// 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;
// The event is related to Splitting Tabs tool windows
SPLITTING_TABS = 28;
// The event is related to Logcat tool window
LOGCAT = 29;
// The event is related to Google Play SDK Index
GOOGLE_PLAY_SDK_INDEX = 30;
}
// 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 [deprecated = true];
// 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. (deprecated), use the
// repeated field EMULATOR_UI_EVENTS instead.
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
// Deprecated since 3.6.0.8, use WHATS_NEW_ASSISTANT_UPDATE_EVENT instead.
WHATS_NEW_ASSISTANT_EVENT = 130 [deprecated = true];
// 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;
// Memory settings configuration statistics
MEMORY_SETTINGS_EVENT = 183;
// Studio update flow events
STUDIO_UPDATE_FLOW = 184;
// Build output window statistics when build fails.
BUILD_OUTPUT_WINDOW_STATS = 185;
// Stats about the use of the Android Gradle Plugin DSL
GRADLE_PLUGIN_DSL_USAGE_STATS = 186;
// The event is related to What's New Assistant update flow
WHATS_NEW_ASSISTANT_UPDATE_EVENT = 188;
// APK reload operation started
APK_DEBUG_RELOAD_START = 189;
// APK reload finished without errors
APK_DEBUG_RELOAD_SUCCESS = 190;
// Information about how long DefaultActivityLocator blocked on getting
// a list of activities from the merged manifest.
DEFAULT_ACTIVITY_LOCATOR_STATS = 191;
// Motion Layout Editor event
MOTION_LAYOUT_EDITOR_EVENT = 192;
// Opening the Compose sample project
COMPOSE_SAMPLE_EVENT = 193;
// Importing a sample project from the sample browser UI
IMPORT_SAMPLE_EVENT = 194;
// Dynamic layout inspector (layout inspector v2) event
DYNAMIC_LAYOUT_INSPECTOR_EVENT = 195;
// Information on collected build attribution data and performance
BUILD_ATTRIBUTION_STATS = 196;
// Editor code completion stats.
EDITOR_COMPLETION_STATS = 197;
// Multi View Panel event
MULTI_VIEW_EVENT = 198;
// Build Attribution ui event
BUILD_ATTRIBUTION_UI_EVENT = 199;
VS_PLUGIN = 200;
// The event related to help panels in design editor
DESIGN_EDITOR_HELP_PANEL_EVENT = 201;
// Any event related to the app inspection tool window or any of its child
// inspector tabs.
APP_INSPECTION = 202;
// ML model binding feature events
ML_MODEL_BINDING = 203;
// Event related to Navigation Safe Args IDE support
NAV_SAFE_ARGS_EVENT = 205;
// The event related to Dagger editor support.
DAGGER_EDITOR = 206;
// The event related to test reporting UI.
PARALLEL_ANDROID_TEST_REPORT_UI = 207;
// Event related to Apply Changes agent error logs.
APPLY_CHANGES_AGENT_ERROR = 208;
GAME_TOOLS_PING = 209;
AGDE_PING = 210;
// Events related to Upgrade Assistant processing.
UPGRADE_ASSISTANT_COMPONENT_EVENT = 211;
UPGRADE_ASSISTANT_PROCESSOR_EVENT = 212;
// A new file/project is created by the wizards based on a template.
WIZARD_TEMPLATES_USAGE = 213;
// Interactive Preview event
INTERACTIVE_PREVIEW_EVENT = 214;
// Event related to Compose animation tooling, e.g. animation inspector.
COMPOSE_ANIMATION_TOOLING = 215;
// User clicked something in the Emulator UI.
EMULATOR_UI_EVENTS = 216;
// Event related to a survey response
SURVEY_RESPONSE = 217;
// Event related to deploying Compose previews.
COMPOSE_DEPLOY = 218;
// Deprecated, use SUGGESTED_IMPORT_EVENT instead.
// Event related to auto-import support.
AUTO_IMPORT_EVENT = 219 [deprecated = true];
// Event related to file usage data
FILE_USAGE = 220;
// Event related to live literals.
LIVE_LITERALS_EVENT = 221;
// Event related to Non-Transitive R class migration.
MIGRATE_TO_NON_TRANSITIVE_R_CLASS = 222;
// Event related to Android Test Retention
ANDROID_TEST_RETENTION_EVENT = 223;
// Event related to suggested import support.
SUGGESTED_IMPORT_EVENT = 224;
// Event related to IntelliJ collected VFS refresh
VFS_REFRESH = 225;
// Events related to Bundle/APK Signing wizard
// Dialog is opened
SIGNING_WIZARD_OPEN = 226;
// Ok action was performed ("Finish" button pressed)
SIGNING_WIZARD_OK_ACTION = 227;
// Cancel action was performed ("Cancel" button is pressed or dialog closed)
SIGNING_WIZARD_CANCEL_ACTION = 228;
// Failed to sign Gradle project
SIGNING_WIZARD_GRADLE_SIGNING_FAILED = 229;
// Gradle project successfully signed
SIGNING_WIZARD_GRADLE_SIGNING_SUCCEEDED = 230;
// Failed to sign Intellij project
SIGNING_WIZARD_INTELLIJ_SIGNING_FAILED = 231;
// INTELLIJ project successfully signed
SIGNING_WIZARD_INTELLIJ_SIGNING_SUCCEEDED = 232;
// File type information for a project
FILE_TYPE = 233;
// Kotlin project information logged by IntelliJ
KOTLIN_PROJECT_CONFIGURATION = 234;
// Event related to IntelliJ Run Start data being logged
RUN_START_DATA = 235;
// Event related to IntelliJ Run Finish data being logged
RUN_FINISH_DATA = 236;
// Event related to the device manager tool window, the replacement for the
// AVD manager
DEVICE_MANAGER = 237;
// Event related to Wear OS emulator pairing assistant
WEAR_PAIRING = 238;
// Event to report why Gradle JDK is invalid
GRADLE_JDK_INVALID = 239;
// Event related to the device explorer tool
DEVICE_EXPLORER = 240;
// Event related to user opting in to metrics
OPTIN_METRICS = 241;
// Event related to user opting out of metrics
OPTOUT_METRICS = 242;
// Event related to project Version Catalog usage detection
GRADLE_VERSION_CATALOG_DETECTOR = 243;
// Event related to coroutine debugger
COROUTINE_DEBUGGER = 244;
// Event related to usage of Splitting Tabs tool windows
SPLITTING_TABS_USAGE = 245;
// Event related to usage of the Logcat tool window
LOGCAT_USAGE = 246;
// OS-level metrics
OS_METRICS = 247;
// Events related to Google Play SDK Index
// SDK Index was loaded correctly
SDK_INDEX_LOADED_CORRECTLY = 248;
// Error while reading SDK Index from cache or network
SDK_INDEX_CACHING_ERROR = 249;
// Error while reading SDK Index from default resource
SDK_INDEX_DEFAULT_DATA_ERROR = 250;
// Link provided by the SDK Index was used
SDK_INDEX_LINK_FOLLOWED = 251;
// Library has critical issues in the SDK Index
SDK_INDEX_LIBRARY_HAS_CRITICAL_ISSUES = 252;
// Library has is marked as outdated in the SDK Index
SDK_INDEX_LIBRARY_IS_OUTDATED = 253;
// Library has is marked as non compliant in the SDK Index
SDK_INDEX_LIBRARY_IS_NON_COMPLIANT = 254;
// Event related to Pickers invoked from the Editor's gutter
EDITOR_PICKER = 255;
// Event type used when raw_project_ids set
PROJECT_IDS = 256;
// Event related to Compose MultiPreview
COMPOSE_MULTI_PREVIEW = 257;
// Event related to a LiveEdit action
LIVE_EDIT_EVENT = 258;
// User pressed stop button for configurations that run App Component
STOP_EVENT = 259;
// App Quality Insights Event
APP_QUALITY_INSIGHTS_USAGE = 260;
// Google Login plugin event
GOOGLE_LOGIN_EVENT = 261;
// Event recording mirroring of a device in the Running Devices tool window
DEVICE_MIRRORING_SESSION = 262;
// Event related to a Fast Preview action
FAST_PREVIEW_EVENT = 263;
// Event containing a per-component memory usage report
MEMORY_USAGE_REPORT_EVENT = 264;
// A sync between Android Studio and Gradle was cancelled.
GRADLE_SYNC_CANCELLED = 265;
// Event containing latency stats for manifest merge run from the IDE
MANIFEST_MERGER_STATS = 266;
// Event related to the usage of the threading agent
THREADING_AGENT_STATS = 267;
// Event marking a change of view selected in the Project tool window
PROJECT_VIEW_SELECTION_CHANGE_EVENT = 268;
// Event related to collection or analysis of client side heap reports
HEAP_REPORT_EVENT = 269;
// Action taken by user from create diagnostic report dialog
CREATE_DIAGNOSTIC_REPORT_ACTION = 270;
// Event when the AGP Upgrade Assistant CTA from an old AGP is dismissed
UPGRADE_ASSISTANT_CTA_OLD_AGP_DISMISSED = 271;
// Event marking interaction with Direct Access
DIRECT_ACCESS_USAGE_EVENT = 272;
// Event related to the usage of safe mode in Android Studio.
SAFE_MODE_STATS_EVENT = 273;
// Event related to targetSdkVersion Upgrade Assistant
TSDKUA_EVENT = 274;
// Event related to IntelliJ new UI state
INTELLIJ_NEW_UI_STATE_EVENT = 275;
// Event related to kotlin gradle performance
KOTLIN_GRADLE_PERFORMANCE_EVENT = 276;
// Event tracking user interactions with build output downloads info UI
BUILD_OUTPUT_DOWNLOADS_INFO_USER_INTERACTION = 277;
// Event recording abnormal termination of the Screen Sharing Agent.
DEVICE_MIRRORING_ABNORMAL_AGENT_TERMINATION = 278;
// Event related to system health
SYSTEM_HEALTH_EVENT = 279;
// Event related to compose preview canvas
COMPOSE_PREVIEW_CANVAS_EVENT = 280;
// Event related to ML based Code Completion
SML_COMPLETION_EVENT = 281;
// Event related to ML based Code Fixing/Transformation
SML_CODE_TRANSFORMATION_EVENT = 282;
// Event related to Studio Chat Bot
SML_CHATBOT_EVENT = 283;
// Configuration settings for ML based features
SML_CONFIGURATION_EVENT = 284;
// Event raised when user declines kotlin support for a project
KOTLIN_SUPPORT_DECLINED_EVENT = 285;
// Event raised when user accepted to migrate Gradle JDK to local.properties
GRADLE_JDK_MIGRATE_TO_LOCAL_PROPERTIES_DIALOG_ACCEPTED = 286;
// Event raised when user declined to migrate Gradle JDK to local.properties
GRADLE_JDK_MIGRATE_TO_LOCAL_PROPERTIES_DIALOG_CANCELED = 287;
// Event related to screenshots taken of running devices
DEVICE_SCREENSHOT_EVENT = 288;
// Event related to a notification being displayed to the user
EDITOR_NOTIFICATION = 289;
// Event related to Compose Preview Lite Mode
COMPOSE_PREVIEW_LITE_MODE = 290;
// Upgrade Android Studio dialog event
UPGRADE_ANDROID_STUDIO_DIALOG = 291;
// Event related to the Debugger tool window
DEBUGGER_EVENT = 292;
// Soong sync event
SOONG_SYNC_EVENT = 293;
// Event related to the user toggling the new UI state
INTELLIJ_NEW_UI_SWITCH = 294;
// Event related to essentials mode state changes
ESSENTIALS_MODE_EVENT = 295;
// Event for links clicked in Lint tooltips.
LINT_TOOLTIP_LINK_EVENT = 296;
// Event for Studio Bot aiexclude effects
SML_AI_EXCLUDE_EVENT = 297;
// Event for IDevice interface usage
I_DEVICE_USAGE_EVENT = 298;
// Event related to merged manifest view usage
MANIFEST_PANEL_EVENT = 299;
// Event to report Gradle JDK configuration during sync
GRADLE_JDK_CONFIGURATION = 300;
// Render Security manager event
RENDER_SECURITY_MANAGER_EVENT = 301;
// Event related to the refresh process of a preview tool
PREVIEW_REFRESH_EVENT = 302;
// Event related to Wear Health Services tool window
WEAR_HEALTH_SERVICES_TOOL_WINDOW_EVENT = 303;
// Event for UiSettingsPanel in the Running Devices Tool Window.
UI_DEVICE_SETTINGS_EVENT = 304;
// Event related to Adblib
ADB_USAGE_EVENT = 305;
// Event related to geolocation checks for Studio Bot.
SML_GEOLOCATION_EVENT = 306;
// Event related to Studio Bot completion request errors.
SML_COMPLETION_REQUEST_ERROR = 307;
// Event fired every time Studio detects a new device (via adb)
ADB_DEVICE_CONNECTED = 308;
// Event related to screenshot test with Compose Preview.
SCREENSHOT_TEST_COMPOSE_PREVIEW = 309;
// Event related to test scenario generation.
TEST_SCENARIO_EVENT = 310;
// ADB server state event
ADB_SERVER_STATE = 311;
// Firebase management event
FIREBASE_MANAGEMENT_EVENT = 312;
}
// 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; // corresponds to "Java or Kotlin Library"
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 [deprecated = true];
RES_FOLDER = 31;
ANDROID_TV_ACTIVITY = 32;
BLANK_WEAR_ACTIVITY = 33;
BASIC_ACTIVITIY = 34;
APP_WIDGET = 35;
ANDROID_INSTANT_APP_PROJECT = 36 [deprecated = true];
ANDROID_INSTANT_APP_MODULE = 37 [deprecated = true];
ANDROID_INSTANT_APP_BUNDLE_PROJECT = 38 [deprecated = true];
ANDROID_INSTANT_APP_DYNAMIC_MODULE = 39 [deprecated = true];
BENCHMARK_LIBRARY_MODULE = 40;
FRAGMENT_FULLSCREEN = 41;
FRAGMENT_GOOGLE_ADMOB_ADS = 42;
FRAGMENT_GOOGLE_MAPS = 43;
FRAGMENT_LOGIN = 44;
FRAGMENT_MODAL_BOTTOM_SHEET = 45;
FRAGMENT_SCROLL = 46;
FRAGMENT_SETTINGS = 47;
FRAGMENT_VIEWMODEL = 48;
COMPOSE_EMPTY_ACTIVITY = 49;
ANDROID_LIBRARY = 50;
DYNAMIC_FEATURE_MODULE = 51;
INSTANT_DYNAMIC_FEATURE_MODULE = 52;
AUTOMOTIVE_MODULE = 53;
THINGS_MODULE = 54 [deprecated = true];
AUTOMOTIVE_MEDIA_SERVICE = 55;
AUTOMOTIVE_MESSAGING_SERVICE = 56;
THINGS_ACTIVITY = 57 [deprecated = true];
WATCH_GOOGLE_MAPS_ACTIVITY = 58;
WATCH_FACE = 59;
ML_MODEL_BINDING_IMPORT_WIZARD = 60;
ML_MODEL_BINDING_FEATURE_OFF_NOTIFICATION = 61;
ANDROID_NATIVE_MODULE = 62;
RESPONSIVE_ACTIVITY = 63;
MACROBENCHMARK_LIBRARY_MODULE = 64;
GOOGLE_PAY_ACTIVITY = 65;
WEAR_OS_COMPOSE_ACTIVITY = 66;
GOOGLE_WALLET_ACTIVITY = 67;
BASELINE_PROFILES_MODULE = 68;
EXPERIMENTAL_ACTIVITY = 69;
KOTLIN_MULTIPLATFORM_LIBRARY_MODULE = 70;
}
// Wizard Templates Usage (New Project, New Module and New Component)
message TemplatesUsage {
// Rendered template component (eg Activity, Fragment, Service, etc)
optional TemplateComponent template_component = 1;
// Module used to generate code. Can be an existing or a new one.
optional TemplateModule template_module = 2;
// Project used to generate code. Can be an existing or a new one.
optional TemplateProject template_project = 3;
// Kotlin support information
optional KotlinSupport kotlin_support = 4;
// The various template components (eg Activities, Fragments, Services, etc)
// the template engine could be asked to render, and what UI context that
// was used by the user to make the request (eg menu, New Project Wizard,
// etc)
message TemplateComponent {
// The different template component (eg Activity, Fragment, Service, etc)
// the template engine could be asked to render
optional TemplateType template_type = 1;
// The UI context used by the user to make the request (eg menu,
// New Project Wizard, etc)
optional WizardUiContext wizard_ui_context = 2;
// The different template components (eg Activities, Fragments, Services,
// etc) the template engine could be asked to render
// Next ID: 63
enum TemplateType {
UNKNOWN_TEMPLATE = 0;
CUSTOM_TEMPLATE = 1;
NO_ACTIVITY = 2;
EMPTY_ACTIVITY = 3;
BASIC_ACTIVITY = 4;
NAVIGATION_DRAWER_ACTIVITY = 5;
LOGIN_ACTIVITY = 6;
TABBED_ACTIVITY = 7;
SCROLLING_ACTIVITY = 8;
FULLSCREEN_ACTIVITY = 9;
SETTINGS_ACTIVITY = 10;
PRIMARY_DETAIL_FLOW_ACTIVITY = 11;
COMPOSE_EMPTY_ACTIVITY = 12;
WEAR_GOOGLE_MAPS_ACTIVITY = 13;
WEAR_FACE_ACTIVITY = 14;
BLANK_WEAR_ACTIVITY = 15;
GOOGLE_MAPS_ACTIVITY = 16;
GOOGLE_ADMOBS_ADS_ACTIVITY = 17;
ANDROID_TV_EMPTY_ACTIVITY = 18;
THINGS_EMPTY_ACTIVITY = 19 [deprecated = true];
VIEW_MODEL_ACTIVITY = 20;
BOTTOM_NAVIGATION_ACTIVITY = 21;
CPP_EMPTY_ACTIVITY = 22;
RESPONSIVE_ACTIVITY = 57;
GOOGLE_PAY_ACTIVITY = 58;
CPP_GAME_ACTIVITY = 60;
GOOGLE_WALLET_ACTIVITY = 61;
FRAGMENT_LIST = 23;
FRAGMENT_BLANK = 24;
FRAGMENT_FULLSCREEN = 25;
FRAGMENT_GOOGLE_ADMOB_ADS = 26;
FRAGMENT_GOOGLE_MAPS = 27;
FRAGMENT_LOGIN = 28;
FRAGMENT_MODAL_BOTTOM_SHEET = 29;
FRAGMENT_SCROLL = 30;
FRAGMENT_SETTINGS = 31;
FRAGMENT_VIEW_MODEL = 32;
AUTOMOTIVE_MEDIA_SERVICE = 33;
AUTOMOTIVE_MESSAGING_SERVICE = 34;
ASSETS_FOLDER = 35;
JNI_FOLDER = 36;
JAVA_FOLDER = 37;
RES_FOLDER = 38;
AIDL_FOLDER = 39;
FONT_FOLDER = 40;
RAW_RESOURCES_FOLDER = 41;
JAVA_RESOURCES_FOLDER = 42;
XML_RESOURCES_FOLDER = 43;
RENDER_SCRIPT_FOLDER = 44;
AIDL_FILE = 45;
ANDROID_MANIFEST_FILE = 46;
APP_ACTIONS_XML_FILE = 47 [deprecated = true];
LAYOUT_XML_FILE = 48;
VALUES_XML_FILE = 49;
SHORTCUTS_XML_FILE = 59;
CUSTOM_VIEW = 50;
BROADCAST_RECEIVER = 51;
INTENT_SERVICE = 52;
APP_WIDGET = 53;
SERVICE = 54;
SLICE_PROVIDER = 55;
CONTENT_PROVIDER = 56;
EXPERIMENTAL_ACTIVITY = 62;
}
// The UI context used by the user to make the Template render request
enum WizardUiContext {
UNKNOWN_UI_CONTEXT = 0;
NEW_PROJECT = 1;
NEW_MODULE = 2;
MENU_GALLERY = 3;
ACTIVITY_GALLERY = 4;
FRAGMENT_GALLERY = 5;
GENERATE_RECYCLER = 6;
}
}
// Module used to generate code. Can be an existing or a new one.
message TemplateModule {
// The different Module Types that can be created. This information
// should be reliable to new Modules, but may not be possible to determine
// for existing ones.
optional ModuleType module_type = 1;
// Android Min SDK.
optional uint32 min_sdk = 2;
// Java bytecode level - Used for Android libraries
optional BytecodeLevel bytecode_level = 3;
// All different Module Types that can be created.
enum ModuleType {
UNKNOWN = 0;
NOT_APPLICABLE = 1;
PHONE_TABLET = 2;
ANDROID_LIBRARY = 3;
DYNAMIC_FEATURE = 4;
INSTANT_DYNAMIC_FEATURE = 5;
AUTOMOTIVE = 6;
WEAR_OS = 7;
ANDROID_TV = 8;
ANDROID_THINGS = 9 [deprecated = true];
IMPORT_GRADLE = 10;
IMPORT_ECLIPSE = 11;
IMPORT_JAR_AAR = 12;
JAVA_OR_KOTLIN_LIBRARY = 13;
BENCHMARK_LIBRARY = 14;
BASELINE_PROFILES = 15;
KOTLIN_MULTIPLATFORM_LIBRARY = 16;
}
// Java byte code level
enum BytecodeLevel {
LEVEL_6 = 0;
LEVEL_7 = 1;
LEVEL_8 = 2;
}
}
// Project used to generate code. Can be an existing or a new one.
message TemplateProject {
// True for old AppCompat projects.
optional bool uses_legacy_support = 1;
// Whether or not the project uses Kotlin build files ("build.gradle.kts")
optional bool uses_build_gradle_kts = 2;
}
}
// 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;
// Failure when Studio does not support too old AGP.
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;
GRADLE_DISTRIBUTION_INSTALL_ERROR = 33;
DISTRIBUTIONSHA256SUM_FOUND_IN_WRAPPER = 34;
GRADLE_JVM_NOT_COMPATIBLE_WITH_AGP = 35;
// Failure because older Studio does not support newer AGP.
ANDROID_PLUGIN_TOO_NEW = 36;
// Failure because Studio and AGP preview versions differ.
ANDROID_PLUGIN_VERSION_INCOMPATIBLE = 37;
// Failure because of multiple AGP versions detected in projects.
MULTIPLE_ANDROID_PLUGIN_VERSIONS = 38;
ANDROID_SYNC_NO_VALID_NATIVE_ABI_FOUND = 39;
ANDROID_SYNC_NO_VARIANTS_FOUND = 40;
ANDROID_SYNC_JDK_IMPORT_CHECK = 41;
// Next 2 are health check values helping to detect that some reasons remain
// unreported properly. Ideally counts of these should be next to 0. Report
// this when no specific value was reported but build issue was generated.
BUILD_ISSUE_CREATED_UNKNOWN_FAILURE = 42;
// Same as above but we also see it was generated by Android Studio code.
ANDROID_BUILD_ISSUE_CREATED_UNKNOWN_FAILURE = 43;
KTS_COMPILATION_ERROR = 44;
GROOVY_COMPILATION_ERROR = 45;
JAVA_COMPILATION_ERROR = 46;
INVALID_TOML_DEFINITION = 47;
}
// IDE brand containing the android plugin
enum IdeBrand {
UNKNOWN_IDE_BRAND = 0;
ANDROID_STUDIO = 1;
ANDROID_STUDIO_WITH_BLAZE = 2;
INTELLIJ = 3;
// For the Toolkit preview build released at Google IO 2019
ANDROID_STUDIO_TOOLKIT_2019_IO_PREVIEW = 4;
GAME_TOOLS = 5;
AGDE = 6;
// Android Studio for Platform (ASfP) - Public
ANDROID_STUDIO_FOR_PLATFORM = 7;
// Android Studio for Platform (ASfP) - Internal
ANDROID_STUDIO_FOR_PLATFORM_INTERNAL = 8;
}
// 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;
// Indicates that the project uses a deprecated configuration.
// This type is now replaced with TYPE_USING_DEPRECATED_CONFIGURATION
// because of an indexing issue in the past
// (see http://issuetracker.google.com/138278313).
TYPE_DEPRECATED_CONFIGURATION = 29 [deprecated = true];
// Indicates that the project uses a deprecated DSL value.
// This type is now replaced with TYPE_USING_DEPRECATED_DSL_VALUE
// because of an indexing issue in the past
// (see http://issuetracker.google.com/138278313).
TYPE_DEPRECATED_DSLVALUE = 30 [deprecated = true];
// 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;
// Indicates that the user has specified multiple default build types.
TYPE_AMBIGUOUS_BUILD_TYPE_DEFAULT = 38;
// Indicates that the user has specified multiple default product flavors.
TYPE_AMBIGUOUS_PRODUCT_FLAVOR_DEFAULT = 39;
// Indicates that the compileSdkVersion is missing.
TYPE_COMPILE_SDK_VERSION_NOT_SET = 40;
// Indicates that the `android.useAndroidX` property must be enabled but is
// currently disabled.
TYPE_ANDROID_X_PROPERTY_NOT_ENABLED = 41;
// Indicates that the project uses a deprecated configuration.
TYPE_USING_DEPRECATED_CONFIGURATION = 42;
// Indicates that the project uses a deprecated DSL value.
TYPE_USING_DEPRECATED_DSL_VALUE = 43;
// Generic build file issues with file/line number information
TYPE_BUILD_FILE_ISSUE = 44;
// dynamic feature declared in base module does not exist
TYPE_UNKNOWN_FEATURE = 45;
// Declared source sets is not actually used by a variant
TYPE_UNKNOWN_SOURCE_SET = 46;
// Retro lambda plugin is present instead of using D8/R8
TYPE_RETRO_LAMBDA_PRESENT = 47;
TYPE_RES_SHRINKER_WITH_APP_BUNDLE = 48;
TYPE_RES_SHRINKER_WITH_LIBRARY_MODULE = 49;
TYPE_INVALID_JAVA8_FLAGS = 50;
TYPE_MISSING_JAVA8_FLAG = 51;
TYPE_EDIT_LOCKED_DSL_VALUE = 52;
TYPE_MISSING_ANDROID_MANIFEST = 53;
// JCenter Maven is deprecated and it should not be used in build scripts.
TYPE_JCENTER_IS_DEPRECATED = 54;
// Java version used by AGP is too low.
TYPE_AGP_USED_JAVA_VERSION_TOO_LOW = 55;
// An AGP upgrade is recommended to use this compile sdk version.
TYPE_COMPILE_SDK_VERSION_TOO_HIGH = 56;
// A higher compileSdk is required for compilation.
TYPE_COMPILE_SDK_VERSION_TOO_LOW = 57;
// Trying to read/write to a variant api property that will not be used as
// the feature using it is disabled.
TYPE_ACCESSING_DISABLED_FEATURE_VARIANT_API = 58;
// Using the variant API to set the application ID to a dynamic value
TYPE_APPLICATION_ID_MUST_NOT_BE_DYNAMIC = 59;
// Using the removed API. The support for the API was removed
// but API and associated types were left intact to not fail sync with
// ClassNotFoundException which would be confusing to users.
TYPE_REMOVED_API = 60;
// KMP projects with java plugin creates incorrect sourceSets in IDE
TYPE_KMP_INCORRECT_PLATFORM_SOURCE_SET = 61;
// Empty dimension results in no variant in IDE
TYPE_EMPTY_FLAVOR_DIMENSION = 62;
// A sync issue type for exceptions that were converted to a sync issue.
TYPE_EXCEPTION = 63;
// Indicates that the namespace is missing.
TYPE_NAMESPACE_NOT_SET = 64;
// Inconsistent usage of build feature setting with regards to other DSL
// Settings or plugins applied
TYPE_INCONSISTENT_BUILD_FEATURE_SETTING = 65;
// NOTE: When adding a new type here, increment the index by 1. This index
// may not be consistent with the corresponding value in the Android Gradle
// plugin (e.g., it could be higher by 1), because of an indexing issue in
// the past (see http://issuetracker.google.com/138278313).
}
// 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;
DELETE_FILE_HYPERLINK = 45;
REMOVE_DISTRIBUTIONSHA256SUM_FROM_WRAPPER_HYPERLINK = 46;
CONFIRM_DISTRIBUTIONSHA256SUM_FROM_WRAPPER_HYPERLINK = 47;
ENABLE_ANDROIDX_HYPERLINK = 48;
REMOVE_JCENTER_HYPERLINK = 49;
OPEN_UPGRADE_ASSISTANT_HYPERLINK = 50;
SUPPRESS_UNSUPPORTED_SDK_HYPERLINK = 51;
}
}
// 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 architecture 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;
// Optional list of strings identifying experiments turned on for
// the installation of Android Studio this log is sent for.
// experiment_id Strings are generated by the Android Studio team and do not
// contain user data.
repeated string experiment_id = 8;
// The changelist used to generate the server flags for this installation
optional int64 server_flags_changelist = 9;
// 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;
VS_PLUGIN = 6;
GAME_TOOLS = 7;
}
// Chip the software is running on.
enum CpuArchitecture {
UNKNOWN_CPU_ARCHITECTURE = 0;
X86 = 1;
X86_64 = 2;
ARM = 3;
X86_ON_ARM = 4;
}
// 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;
HIGH_CONTRAST = 6;
CUSTOM = 7;
DARK = 8;
LIGHT_WITH_LIGHT_HEADER = 9;
}
}
// 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 [deprecated = true];
// 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 the type of mDNS connection (if any)
optional MdnsConnectionType mdns_connection_type = 11;
// Set of characteristics obtained from "ro.build.characteristics" property
repeated string characteristics = 12;
// ID of device provisioner plugin that created the device
optional string device_provisioner_id = 13;
// A unique identifier of the connection session, i.e. a contiguous time
// period when the device was connected to Studio. The format and semantic
// meaning (if any) of the id is defined by the device provisioner plugin.
optional string connection_id = 14;
// 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;
}
// Describes the type of mDNS connection (if any)
enum MdnsConnectionType {
// Default value when the field has not been set.
UNKNOWN_MDNS_CONNECTION_TYPE = 0;
// The device connected *without* using mDNS. This is most likely USB,
// emulator or legacy TCP.
MDNS_NONE = 1;
// The device connected through mDNS, unencrypted. This should be very rare,
// as this is typically a connection from Android TV and WearOS when adb is
// started with ADB_MDNS_AUTO_CONNECT=1.
MDNS_AUTO_CONNECT_UNENCRYPTED = 2;
// The device connected through mDNS, using TLS. This most likely implies a
// Wi-Fi connection from a physical device (i.e. phone).
MDNS_AUTO_CONNECT_TLS = 3;
}
}
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 session.
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;
}
// ML Model Binding feature metrics.
message MlModelBindingEvent {
// The detailed type of this event.
optional EventType event_type = 1;
// Related ML models information.
repeated ModelMetadata model_metadatas = 2;
// Set only when the event contains failure.
optional ErrorCode error_code = 3;
enum EventType {
UNKNOWN_EVENT_TYPE = 0;
// Import model from the model import wizard.
MODEL_IMPORT_FROM_WIZARD = 1;
// Move model from non-ml folder to ml folder via the "Move File" button
// in the notification banner.
MODEL_IMPORT_FROM_MOVE_FILE_BUTTON = 2;
// Open the model viewer.
MODEL_VIEWER_OPEN = 3;
// Generates light classes for model.
MODEL_API_GEN = 4;
}
message ModelMetadata {
// Model file size in bytes.
optional uint64 file_size = 1;
// Model content hash that we use to identify popular public models.
optional string file_hash = 2;
// Whether or not the model has valid model format.
optional bool is_valid_model = 3;
// Whether or not the model has metadata included.
optional bool has_metadata = 4;
}
enum ErrorCode {
UNKNOWN_ERROR_CODE = 0;
// The module's resource package name could not be determined.
MODULE_PACKAGE_NAME_NOT_FOUND = 1;
}
}
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;
}
// Metrics for Icebox invocations.
message EmulatorIcebox {
// Message for starting an icebox command.
message StartIcebox {
// Maximum number of snapshots set by users. -1 for infinite snapshots;
optional int32 max_snapshot_number = 1;
}
// Message for taking a snapshot.
message TakeSnapshot {
// The snapshot.
optional EmulatorSnapshot snapshot = 1;
}
// Message for finishing an icebox command.
message FinishIcebox {
// Maximum number of snapshots set by users. -1 for infinite snapshots;
optional int32 max_snapshot_number = 1;
// Actual number of snapshots taken.
optional uint32 actual_snapshot_number = 2;
}
// Kind of command of this message.
oneof kind {
StartIcebox start_icebox = 1;
TakeSnapshot take_snapshot = 2;
FinishIcebox finish_icebox = 3;
}
}
// 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 {
enum EmulatorLaunchType {
UNKNOWN_EMULATOR_LAUNCH_TYPE = 0;
CONTAINER = 1;
FUCHSIA = 2;
}
optional bool gps = 1;
optional bool sensors = 2;
optional bool virtualscene_config = 3;
// Use launch_type with "CONTAINER" instead.
optional bool container_launch = 4 [deprecated = true];
optional EmulatorLaunchType launch_type = 5;
}
// 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;
AOSP_ATD = 4;
GOOGLE_ATD = 5;
}
// 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;
DEV_2024_AVD = 11;
// Next tag: 12
}
enum EmulatorDeviceName {
UNKNOWN_EMULATOR_DEVICE_NAME = 0;
RESIZABLE = 1;
FOLDABLE_7_6_IN = 2;
SMALL_PHONE = 3;
MEDIUM_PHONE = 4;
MEDIUM_TABLET = 5;
PIXEL_C = 6;
PIXEL = 7;
PIXEL_XL = 8;
PIXEL_2 = 9;
PIXEL_2_XL = 10;
PIXEL_3 = 11;
PIXEL_3_XL = 12;
PIXEL_3A = 13;
PIXEL_3A_XL = 14;
PIXEL_4 = 15;
PIXEL_4_XL = 16;
PIXEL_4A = 17;
PIXEL_5 = 18;
PIXEL_6 = 19;
PIXEL_6_PRO = 20;
PIXEL_6A = 21;
PIXEL_7_PRO = 22;
PIXEL_7 = 23;
PIXEL_FOLD = 24;
PIXEL_TABLET = 25;
AUTOMOTIVE_1024P_LANDSCAPE = 26;
DESKTOP_SMALL = 27;
DESKTOP_MEDIUM = 28;
DESKTOP_LARGE = 29;
TV_4K = 30;
TV_1080P = 31;
TV_720P = 32;
WEAROS_LARGE_ROUND = 33;
WEAROS_SMALL_ROUND = 34;
WEAROS_RECT = 35;
WEAROS_SQUARE = 36;
PIXEL_7A = 37;
PIXEL_8 = 38;
PIXEL_8_PRO = 39;
PIXEL_8A = 40;
}
// 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 timestamp.
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;
// Device name of the AVD (for example, PIXEL_2)
optional EmulatorDeviceName device_name = 10;
}
// 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;
DEPRECATED_IGNORE_HOST_OPENGL_ERRORS = 21 [deprecated = true];
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;
CAR_ASSIST_BUTTON = 59;
HARDWARE_DECODER = 60;
NO_DELAY_CLOSE_COLOR_BUFFER = 61;
NO_DEVICE_FRAME = 62;
VIRTIO_GPU_NATIVE_SYNC = 63;
VIRTIO_WIFI = 64;
VULKAN_SHADER_FLOAT16_INT8 = 65;
CAR_ROTARY = 66;
MODEM_SIMULATOR = 67;
TV_REMOTE = 68;
NATIVE_TEXTURE_DECOMPRESSION = 69;
BPTC_TEXTURE_SUPPORT = 70;
GUEST_USES_ANGLE = 71;
VIRTIO_VSOCK_PIPE = 72;
S3TC_TEXTURE_SUPPORT = 73;
VIRTIO_MOUSE = 74;
VIRTCONSOLE_LOGCAT = 75;
VULKAN_QUEUE_SUBMIT_WITH_COMMANDS = 76;
VULKAN_BATCHED_DESCRIPTOR_SET_UPDATE = 77;
MINIGBM = 78;
NO_DRAW = 79;
GNSS_GRPC_V1 = 80;
MIGRATABLE_SNAPSHOT_SAVE = 81;
ANDROIDBOOT_PROPS = 82;
DEVICESKINOVERLAY = 83;
ANDROIDBOOT_PROPS2 = 84;
BLUETOOTH_EMULATION = 85;
DEVICESTATE_ON_BOOT = 86;
HWC_MULTI_CONFIGS = 87;
ASYNC_COMPOSE_SUPPORT = 88;
VIRTIO_SND_CARD = 89;
VIRTIO_TABLET = 90;
RGTC_TEXTURE_SUPPORT = 91 [deprecated = true];
VULKAN_NATIVE_SWAPCHAIN = 92;
VIRTIO_GPU_FENCE_CONTEXTS = 93;
VSOCK_SNAPSHOT_LOAD_FIXED_B231345789 = 94;
VULKAN_ASTC_LDR_EMULATION = 95;
VULKAN_YCBCR_EMULATION = 96;
VULKAN_ETC2_EMULATION = 97;
EXTERNAL_BLOB = 98;
DOWNLOADABLE_SNAPSHOT = 99;
SYSTEM_BLOB = 100;
NETSIMWEBUI = 101;
NETSIMCLIUI = 102;
WIFIPACKETSTREAM = 103;
SUPPORT_PIXEL_FOLD = 104;
DEVICE_KEYBOARD_HAS_ASSIST_KEY = 105;
VULKAN_ALLOCATE_DEVICE_MEMORY_ONLY = 106;
VULKAN_ALLOCATE_HOST_MEMORY = 107;
DEVICE_KEYBOARD_QT_RAW_INPUT = 108;
UWB = 109;
UX_TEST_2024 = 110;
// Next tag: 111
}
// 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 resizable display details
message EmulatorResizableDisplay {
// Counts for different display size types
optional uint32 display_phone_count = 1;
optional uint32 display_foldable_count = 2;
optional uint32 display_tablet_count = 3;
optional uint32 display_desktop_count = 4;
}
// 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 streaming screenshots.
message EmulatorStreamScreenshot {
// Size of a single screenshot in bytes, w * h * bpp
optional uint32 size = 1;
// This gives us an idea of delivery delay we are experiencing
// from the emulators perspective, and frames delivered.
optional PercentileEstimator delivery_delay = 2;
// # of frames generated by the emulator. max(delivery_delay.count) <= frames
optional uint32 frames = 3;
}
// Metrics for grpc invocations.
message EmulatorGrpc {
enum GrpcConnection {
// Unknown type of connection.
UNKNOWN_GRPC_CONNECTION = 0;
// An incoming call to emulator
SERVER = 1;
// Emulator making an outgoing call
CLIENT = 2;
}
// 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;
// Number of messages received
optional PercentileEstimator rcv = 7;
// Number of messages send
optional PercentileEstimator snd = 8;
// Type of connection
optional GrpcConnection type = 9;
}
// 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 features.
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;
// Metrics for streamScreenshot
optional EmulatorStreamScreenshot screenshot = 34;
// Metrics for Icebox
repeated EmulatorIcebox icebox = 35;
// Metrics for resizable display
optional EmulatorResizableDisplay resizable_display = 36;
// Process ID of the emulator wrapper process.
optional int32 emu_pid = 37;
// Process ID of the child qemu process that does the real job.
optional int32 qemu_pid = 38;
// Vulkan backend.
optional VulkanIcd vulkan_icd = 39;
// Next tag: 40
// 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
AEHD = 6; // Android Emulator hypervisor driver
// Next tag: 7
}
// Vulkan backend
enum VulkanIcd {
UNKNOWN_VK = 0;
HARDWARE_VK = 1;
SWIFTSHADER_VK = 2; // Swiftshader software renderer
MOLTEN_VK = 3; // Mac only
}
}
// 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;
EXTENDED_DISPLAYS_TAB = 2;
EXTENDED_CELLULAR_TAB = 3;
EXTENDED_BATTERY_TAB = 4;
EXTENDED_CAMERA_TAB = 5;
EXTENDED_TELEPHONY_TAB = 6;
EXTENDED_MIC_TAB = 7;
EXTENDED_FINGER_TAB = 8;
EXTENDED_SENSORS_TAB = 9;
EXTENDED_BUG_TAB = 10;
EXTENDED_SNAPSHOT_TAB = 11;
EXTENDED_RECORD_TAB = 12;
EXTENDED_SETTINGS_TAB = 13;
EXTENDED_HELP_TAB = 14;
}
}
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;
// The number of modules in the project (In the case of a build system that
// produces different modules for tests and production code, these modules are
// counted as one).
optional int64 module_count = 11;
// The number of distinct external dependencies in this project.
optional int64 lib_count = 12;
}
// 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;
// Number of dynamic feature modules in this app.
optional int64 dynamic_feature_module_count = 4;
// Number of android test modules in this app.
optional int64 test_module_count = 5;
// Number of kotlin multiplatform modules in this app.
optional int64 kotlin_multiplatform_module_count = 6;
}
// 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;
// Hardware specified as required in the manifest. Only logging the types
// from the allow-list. E.g. "android.hardware.type.watch".
optional string required_hardware = 8;
}
// 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 ndk version being used by this module
optional string ndk_version = 4;
// The various native build systems we support to be used from Gradle.
enum NativeBuildSystemType {
UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE = 0;
// The Gradle experimental 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;
// Custom build system that uses Ninja as back end.
NINJA = 5;
}
}
// 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;
// Set when the FindField inspection quickfix is used.
FIND_FIELD_INSPECTION_EVENT = 6;
// Set when the FindClass inspection quickfix is used.
FIND_CLASS_INSPECTION_EVENT = 7;
// Set when the RegisterNatives inspection quickfix is used.
REGISTER_NATIVES_INSPECTION_EVENT = 8;
// Set when the CallMethod inspection quickfix is used.
CALL_METHOD_INSPECTION_EVENT = 9;
// Set when the GetField inspection quickfix is used.
GET_FIELD_INSPECTION_EVENT = 10;
// Set when the SetField inspection quickfix is used.
SET_FIELD_INSPECTION_EVENT = 11;
// Set when FindClass completion is accepted.
FIND_CLASS_COMPLETION_EVENT = 12;
// Set when GetMethodID completion is accepted.
GET_METHOD_ID_COMPLETION_EVENT = 13;
// Set when GetFieldID completion is accepted.
GET_FIELD_ID_COMPLETION_EVENT = 14;
// Set when JNI function stub completion is accepted.
JNI_FUNCTION_STUB_COMPLETION_EVENT = 15;
// Set when RegisterNatives completion is accepted.
REGISTER_NATIVES_COMPLETION_EVENT = 16;
// Set when KotlinInternalExternalFunctionInspction is used.
KOTLIN_INTERNAL_EXTERNAL_FUNCTION_INSPECTION_EVENT = 17;
}
optional JniInspectionType type = 1;
// The category of this JNI inspection event. This indicates why the event is
// sent from user's Android Studio.
enum EventCategory {
UNKNOWN_EVENT_CATEGORY = 0;
// The user has "used" this inspectoin, e.g., applied a quickfix from an
// inspection or accepted the completion suggestion.
USAGE_EVENT = 1;
// Performance information for a given inspection or completion event. This
// is sent when the inspection or completion feature logic has finished
// computation.
PERFORMANCE_EVENT = 2;
}
// Indicates why this event is reported. If this event is not set (by old
// version of Android Studio), it means USAGE_EVENT.
optional EventCategory event_category = 2;
message PerformanceEvent {
// The time it takes for the IDE to execute the logic for the JNI inspection
// or completion.
optional uint32 delay_ms = 1;
}
// Performance metrics for the inspection or completion event. This field
// should only be set if `event_category` is `PERFORMANCE_EVENT`.
optional PerformanceEvent performance_event = 3;
}
// 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;
// Whether the feature Automatic Snapshot on Test Failure is enabled.
// Currently only set when test_invocation_type =
// ANDROID_STUDIO_THROUGH_GRADLE.
optional AutomaticSnapshotOnFailure automatic_snapshot_on_failure = 9;
// Only set when test_kind=PREVIEW_SCREENSHOT_TEST
optional PreviewScreenshotRun preview_screenshot_run = 10;
// 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;
PREVIEW_SCREENSHOT_TEST = 3;
}
// How instrumentation tests will be run
enum TestExecution {
UNKNOWN_TEST_EXECUTION = 0;
HOST = 1;
ANDROID_TEST_ORCHESTRATOR = 2;
NITROGEN = 3;
}
// Configuration for automatic snapshot for test failures.
message AutomaticSnapshotOnFailure {
enum Enabled {
UNSPECIFIED = 0;
// AutomaticSnapshotOnFailure is enabled by RunConfiguration in Android
// Studio.
ENABLED_BY_RUN_CONFIGURATION = 1;
// AutomaticSnapshotOnFailure is disabled by RunConfiguration in Android
// Studio.
DISABLED_BY_RUN_CONFIGURATION = 2;
// Use value from Gradle DSL.
USE_VALUE_IN_GRADLE_DSL = 3;
}
optional Enabled enabled = 1;
}
message PreviewScreenshotRun {
// Deprecated: use TestRun.number_of_tests_executed.
optional int32 screenshot_count = 1 [deprecated = true];
// Deprecated: use GradleBuildProfileSpan.
optional int64 total_run_time_ms = 2 [deprecated = true];
// Deprecated: use GradleBuildProfileSpan.
optional int64 discovery_run_time_ms = 3 [deprecated = true];
// Deprecated: use GradleBuildProfileSpan.
optional int64 rendering_run_time_ms = 4 [deprecated = true];
}
}
// Provides details on commonly used test libraries.
// Each string field of this message holds the exact version of the given
// library (e.g. "1.0.0") that the field name represents. The field is populated
// only if this project uses the given library.
// Next ID: 44
message TestLibraries {
// "com.android.support.test:runner".
optional string test_support_library_version = 1;
// "com.android.support.test:orchestrator".
optional string test_support_orchestrator_version = 22;
// "com.android.support.test:rules".
optional string test_support_rules_version = 23;
// "com.android.support.test.espresso:espresso-core".
optional string test_support_espresso_version = 25;
// "com.android.support.test.espresso:espresso-contrib".
optional string test_support_espresso_contrib_version = 26;
// "com.android.support.test.espresso:espresso-web".
optional string test_support_espresso_web_version = 27;
// "com.android.support.test.espresso:espresso-intents".
optional string test_support_espresso_intents_version = 28;
// "com.android.support.test.espresso:espresso-idling-resource".
optional string test_support_espresso_idling_resource_version = 29;
// "com.android.support.test.espresso:espresso-accessibility".
optional string test_support_espresso_accessibility_version = 30;
// "androidx.test:core".
optional string test_core_version = 12;
// "androidx.test:core-ktx".
optional string test_core_ktx_version = 13;
// "androidx.test:runner".
optional string test_runner_version = 24;
// "androidx.test:orchestrator".
optional string test_orchestrator_version = 10;
// "androidx.test:rules".
optional string test_rules_version = 11;
// "androidx.test.ext:junit".
optional string test_ext_junit_version = 14;
// "androidx.test.ext:junit-ktx".
optional string test_ext_junit_ktx_version = 15;
// "androidx.test.ext:truth".
optional string test_ext_truth_version = 16;
// "androidx.test.espresso:espresso-core"
optional string espresso_version = 2;
// "androidx.test.espresso:espresso-contrib"
optional string espresso_contrib_version = 5;
// "androidx.test.espresso:espresso-web"
optional string espresso_web_version = 6;
// "androidx.test.espresso:espresso-intents"
optional string espresso_intents_version = 7;
// "androidx.test.espresso:espresso-idling-resource"
optional string espresso_idling_resource_version = 8;
// "androidx.test.espresso:espresso-accessibility"
optional string espresso_accessibility_version = 9;
// "androidx.test.espresso:espresso-device"
optional string espresso_device_version = 41;
// "androidx.test.services:storage"
optional string test_services_storage_version = 42;
// "androidx.test.services:test-services"
optional string test_services_test_services_version = 43;
// "androidx.fragment:fragment-testing".
optional string fragment_testing_version = 17;
// "androidx.benchmark:benchmark-common".
optional string benchmark_common_version = 20;
// "androidx.benchmark:benchmark-junit4".
optional string benchmark_junit4_version = 21;
// "androidx.benchmark:benchmark-macro".
optional string benchmark_macro_version = 31;
// "androidx.benchmark:benchmark-macro-junit4".
optional string benchmark_macro_junit4_version = 32;
// "androidx.compose.ui:ui-test".
optional string compose_ui_test_version = 38;
// "androidx.compose.ui:ui-test-junit4".
optional string compose_ui_test_junit4_version = 39;
// "androidx.compose.ui:ui-test-manifest".
optional string compose_ui_test_manifest_version = 40;
// "org.robolectric:robolectric".
optional string robolectric_version = 3;
// "org.mockito:mockito-core".
optional string mockito_version = 4;
// "junit:junit"
optional string junit_version = 18;
// "com.google.truth:truth".
optional string truth_version = 19;
// "org.testng:testng"
optional string test_ng_version = 33;
// "org.junit.platform:junit-platform-launcher"
optional string junit_platform_launcher_version = 34;
// "org.junit.platform:junit-platform-runner"
optional string junit_platform_runner_version = 35;
// "org.junit.jupiter:junit-jupiter"
optional string junit_jupiter_version = 36;
// "org.junit.vintage:junit-vintage-engine"
optional string junit_vintage_engine_version = 37;
}
// 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;
// If at least one module has enableCompose set to true
optional bool compose_enabled = 20;
// If Gradle configuration caching is enabled.
optional bool configuration_caching_enabled = 21;
// If Gradle parallel task execution is enabled.
optional bool parallel_task_execution = 22;
}
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;
// The version of the firebase performance plugin applied to the project
// e.g. '1.3.0'
optional string firebase_performance_plugin_version = 14;
// If enableCompose is set to true
optional bool compose_enabled = 15;
// All of the gradle plugin names applied to this project,
// these are class names of the plugins, not free form names
// deprecated, use applied_plugins instead
repeated string plugin_names = 16 [deprecated = true];
// Record all of the task class names applied to the project
// e.g an example is ORG_GRADLE_API_TASKS_WRAPPER_WRAPPER_DECORATED
repeated string task_names = 17;
// Records use of APIs used at the sub-project level
optional ProjectApiUse project_api_use = 18;
// All the gradle plugins applied to this project.
repeated GradlePluginData applied_plugins = 19;
// Java compilation options
optional CompileOptions compile_options = 20;
// The NDK version
optional string ndk_version = 21;
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;
// The 'com.android.fused-library' plugin
FUSED_LIBRARIES = 8;
// the 'com.android.privacy-sandbox-sdk' plugin
PRIVACY_SANDBOX_SDK = 9;
// The 'com.android.kotlin.multiplatform.library' plugin
KOTLIN_MULTIPLATFORM_ANDROID_LIBRARY = 10;
}
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;
COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_APPPLUGIN = 57;
COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_LIBRARYPLUGIN = 58;
COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_DYNAMICFEATUREPLUGIN = 59;
COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_REPORTINGPLUGIN = 60;
COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_TESTPLUGIN = 61;
COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_VERSIONCHECKPLUGIN = 62;
PROGUARD_GRADLE_PROGUARDPLUGIN = 63;
}
// Java compilation options
message CompileOptions {
// Major version of the Java source code (e.g., 8)
optional int32 source_compatibility = 1;
// Major version of the generated Java bytecode (e.g., 8)
optional int32 target_compatibility = 2;
// Major language version of the Java toolchain if it is used (e.g., 17)
optional int32 toolchain_language_version = 3;
}
}
// Data of a gradle plugin.
message GradlePluginData {
// The name of the plugin class. e.g. com.android.build.gradle.LintPlugin
optional string class_name = 1;
// The name of the jar containing the plugin class, will be on the form:
// artifactId-version. e.g. "kotlin-gradle-plugin-1.5.30"
optional string jar_name = 2;
}
// Records use of APIs used at the gradle project level
message ProjectApiUse {
// Whether the device provider API is used in this project.
optional bool builder_test_api_device_provider = 1;
// Whether the test server API is used in this project.
optional bool builder_test_api_test_server = 2;
}
// 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 explicitly 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 explicitly 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 explicitly 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;
// Module property keys (experimental properties) that are explicitly set.
// A reference to the proto enum in android git, see ModulePropertyKeys in
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
repeated int32 module_property_keys = 8;
}
// 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 comprehensive 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;
// Whether annotation processing could be run incrementally
optional bool is_annotation_processing_incremental = 22;
// Whether this variant (a base module or dynamic feature) is marked as
// instant enabled in its manifest (Google Play Instant / Instant Apps)
optional bool is_instant_enabled = 23;
// Whether coreLibraryDesugaring is enabled for the variant
optional bool core_library_desugaring_enabled = 24;
// container for variant api accesses if the variant api was used.
optional VariantApiUsage variant_api_access = 25;
// Kotlin-specific options in build files
optional KotlinOptions kotlin_options = 26;
// List of registered classes transforms
repeated AsmClassesTransformRegistration asm_classes_transforms = 27;
// List of updates to the frames computation mode
repeated AsmFramesComputationModeUpdate frames_computation_mode_updates = 28;
// Native diagnostic codes logged while processing this variant. For a list
// of possible values, see
// /tools/base/common/src/main/java/com/android/utils/cxx/CxxDiagnosticCode.kt
repeated int32 cxx_diagnostic_codes = 29 [packed = true];
// whether this variant has unit tests enabled
optional bool has_unit_test = 30;
// whether this variant has android tests enabled
optional bool has_android_test = 31;
// whether this variant has test fixtures enabled
optional bool has_test_fixtures = 32;
// information about the privacy sandbox SDKs this project consumes
optional PrivacySandboxDependenciesInfo privacy_sandbox_dependencies_info =
33;
// 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;
// For a java library (java or java-library plugin, for the standalone lint
// plugin)
JAVA_LIBRARY = 9;
// For test fixtures components.
TEST_FIXTURES = 10;
// main artifact of the privacy sandbox sdk bundle plugin
PRIVACY_SANDBOX_SDK = 11;
// Main variant of the kotlin multiplatform android library plugin
KOTLIN_MULTIPLATFORM_ANDROID_LIBRARY = 12;
// Test component for host side screenshot testing
SCREENSHOT_TEST = 13;
}
// 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 KotlinOptions {
// if IR backend is enabled
optional bool use_ir = 1;
// Language version (e.g., "2.0")
optional string language_version = 2;
}
// Information collected when assigning IDs to each Privacy
// Sandbox SDK this variant depends on
message PrivacySandboxDependenciesInfo {
// The Privacy Sandbox SDKs this variant depends on
repeated RuntimeEnabledSdk sdk = 1;
// Privacy sandbox SDKs can only be published via Google Play, this
// corresponds to runtime_enabled_sdk_config.proto which is the reference
// pushed as part of this app's app
// bundle to Google Play to allow the SDK dependency to be matched to the
// device.
message RuntimeEnabledSdk {
// Package name of the runtime-enabled SDK.
optional string package_name = 1;
// Major version of the runtime-enabled SDK.
optional int32 version_major = 2;
// Minor version of the runtime-enabled SDK.
optional int32 version_minor = 3;
// Patch version of the runtime-enabled SDK.
// The dependency on a specific patch version is a build-time soft
// dependency, that ensures reproducibility of local builds; it does not
// imply that all
// app stores will honour it when delivering apps to end-users. For
// instance, some stores may just honour the dependency on a specific
// major and minor,
// while serve the latest available patch for the given major.minor
// version of the SDK.
optional int32 build_time_version_patch = 4;
}
}
}
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;
// Whether the annotation processor is
// incremental(isolating/aggregating/dynamic)
optional bool is_incremental = 3;
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;
// From KSP
KSP = 3;
}
}
// 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;
ARTIFACT_TRANSFORM = 17;
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()
// DEPRECATED since 11/2022 (AGP 8.0). Use task_state instead.
optional bool did_work = 2 [deprecated = true];
// Whether the task was skipped (TaskState#getSkipped())
// DEPRECATED since 11/2022 (AGP 8.0). Use task_state instead.
optional bool skipped = 3 [deprecated = true];
// Whether the task was up to date (TaskState#getUpToDate())
// DEPRECATED since 11/2022 (AGP 8.0). Use task_state instead.
optional bool up_to_date = 4 [deprecated = true];
// Whether the task failed
// DEPRECATED since 11/2022 (AGP 8.0). Use task_state instead.
optional bool failed = 5 [deprecated = true];
// State of the task during the build
optional TaskState task_state = 6;
// State of a task during a build, similar to
// https://docs.gradle.org/current/javadoc/org/gradle/testkit/runner/TaskOutcome.html
enum TaskState {
UNKNOWN = 0;
UP_TO_DATE = 1;
FROM_CACHE = 2;
DID_WORK_INCREMENTAL = 3;
DID_WORK_NON_INCREMENTAL = 4;
SKIPPED = 5;
FAILED = 6;
}
}
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
// Historical, was used before adding transform_class_name field
optional int32 type = 1 [deprecated = true];
// 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;
// Name of the class executing the transform.
// Example: ShrinkResourcesTransform
optional string transform_class_name = 3;
}
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 invoked 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 parent window/menu/toolbar that contains this action.
// this is a software identifier specified in code in our product and does
// not contain user data. Examples: "MainMenu", "Editor", "NavBarToolbar".
optional string ui_place = 5;
// For toggle UI actions to track whether they are turning on or off.
optional bool toggling_on = 6;
// 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;
// Density 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;
COMPOSE = 5;
CUSTOM_VIEWS = 6;
GLANCE_WEAR_TILE = 7;
GLANCE_APP_WIDGET = 8;
VALIDATION_TOOL = 9;
WEAR_TILE = 10;
}
// 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 preview mode
enum PreviewMode {
UNKNOWN_PREVIEW_MODE = 0;
STATIC_PREVIEW_MODE = 1;
INTERACTIVE_PREVIEW_MODE = 2;
}
// 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;
// Indicates how user previews the layout, whether it is a static (classic)
// preview or an interactive (animated) mode
optional PreviewMode preview_mode = 7;
}
// 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;
// The id of rendered device, such as "pixel", "pixel_3", "pixel_3_xl",
// "wearos_square", "tv_4k".
// Device ids are built-in in the sdk and studio. There is no enum or list of
// them. For all custom android virtual devices (AVDs), they should be
// recorded as "_custom_avd".
optional string device_id = 9;
}
// Details related to an ATF fix suggestion.
message AtfFixDetail {
// Type of an ATF fix suggestion
enum AtfFixType {
UNKNOWN = 0;
SET_VIEW_ATTRIBUTE = 1;
REMOVE_VIEW_ATTRIBUTE = 2;
COMPOUND = 3;
}
// The type of the applied ATF fix
optional AtfFixType fix_type = 3;
}
// Record of Accessibility Testing Framework(ATF) audit results.
message AtfAuditResult {
enum Trigger {
UNKNOWN_TRIGGER = 0;
// Through the entry button
USER = 1;
// Through opening the issue panel
ISSUE_PANEL = 2;
// Through experimental flag
EXPERIMENTAL_FLAG = 3;
}
// Each count for Accessibility Testing Framework result.
message AtfResultCount {
// Type of lint issue created by the accessibility testing framework.
enum CheckResultType {
UNKNOWN = 0;
ERROR = 1;
WARNING = 2;
INFO = 3;
NOT_RUN = 4;
SUPPRESSED = 5;
}
// Accessibility Testing Framework result's source check name, to uniquely
// identify the lint issue created by it.
optional string check_name = 1;
// Its result type
optional CheckResultType result_type = 2;
// Error expanded for more information by user
optional bool error_expanded = 3;
// ATF fix suggestions which are provided for this ATF check result
repeated AtfFixDetail fixes = 4;
}
// What triggered Accessibility testing framework
optional Trigger trigger = 1;
// result count.
repeated AtfResultCount counts = 2;
// Render result. True if render was successful. False otherwise.
optional bool render_result = 3;
// Number of components rendered
optional int32 component_count = 4;
// Time it took for audit to run in milliseconds, per render.
optional int64 audit_duration_ms = 5;
// Full render time in ms
optional int64 total_render_time_ms = 6;
// Errors displayed in the error panel, including non ATF errors.
optional int32 error_count = 7;
}
// Details related to an ATF check result
message AtfResultDetail {
// Simple name of the ATF check which produced the check result
optional string check_name = 1;
// The result type of the ATF check result
optional AtfAuditResult.AtfResultCount.CheckResultType result_type = 2;
}
// Details related to an ATF fix which been applied by the user
message ApplyAtfFixEvent {
// Details related to the ATF result which has been fixed
optional AtfResultDetail atf_result = 1;
// Details related to the ATF fix which has been applied
optional AtfFixDetail atf_fix = 2;
}
// Details related to an ATF result which has been marked as ignored by the user
message IgnoreAtfResultEvent {
// Details related to the ATF result which has been ignored
optional AtfResultDetail atf_result = 1;
}
// Details related to undoing an applied ATF fix by the user
message UndoAppliedAtfFixEvent {
// Details related to the ATF result which produced the undone fix suggestion
optional AtfResultDetail atf_result = 1;
// Details related to the ATF fix that was undone
optional AtfFixDetail atf_fix = 2;
}
// A user interaction with the layout editor animation previewer
message AnimationPreviewEvent {
// The type of animation bar. Each offers different UI and/or control panels
// to interact with user.
enum ToolbarType {
UNKNOWN_TOOLBAR_TYPE = 0;
// This toolbar type is provided for endless animation.
// For example, if the animation repeats itself, then it is considered as
// endless.
UNLIMITED_ANIMATION = 1;
// This toolbar type is provided for endable animation.
// It provides a slider bar to control the current animation progress.
LIMITED_ANIMATION = 2;
// This toolbar type is provided for animated selector.
// It provides a dropdown button for switching the previewing animation
// inside this animated selector.
ANIMATED_SELECTOR = 3;
}
// The type of tool bar which provided for the previewed animation.
optional ToolbarType toolbar_type = 1;
// The operation which user executed.
enum UserAction {
UNKNOWN_CONTROL = 0;
PLAY = 1;
PAUSE = 2;
STOP = 3;
FRAME_FORWARD = 4;
FRAME_BACKWARD = 5;
// Control the frame by draggig the progress bar.
FRAME_CONTROL = 6;
// Select the preview animation when previewing animated selector.
SELECT_ANIMATION = 7;
}
// The operation from user to control the animation preview, such like play,
// pause, or stop.
optional UserAction user_action = 2;
}
// Details of an event linked to visual linting
message VisualLintEvent {
// Type of issues creating by visual linting
enum IssueType {
UNKNOWN_TYPE = 0;
BOUNDS = 1;
BOTTOM_NAV = 2;
BOTTOM_APP_BAR = 3;
OVERLAP = 4;
LONG_TEXT = 5;
ATF = 6;
LOCALE_TEXT = 7;
TEXT_FIELD_SIZE = 8;
BUTTON_SIZE = 9;
WEAR_MARGIN = 10;
ATF_COLORBLIND = 11;
}
// Type of events affecting visual lint issues
enum IssueEvent {
UNKNOWN_EVENT = 0;
CREATE_ISSUE = 1;
EXPAND_ISSUE = 2;
IGNORE_ISSUE = 3;
ENABLE_RULE = 4;
DISABLE_RULE = 5;
ENABLE_BACKGROUND_RULE = 6;
DISABLE_BACKGROUND_RULE = 7;
CLICK_DOCUMENTATION_LINK = 8;
CANCEL_BACKGROUND_ANALYSIS = 9;
}
// Possible origins for visual lint event
enum EventOrigin {
UNKNOWN_ORIGIN = 0;
XML_LINTING = 1;
UI_CHECK = 2;
}
// The type of the visual lint issue affected by this event
optional IssueType issue_type = 1;
// The kind of event affecting the issue
optional IssueEvent issue_event = 2;
// The origin that triggered the visual lint event
optional EventOrigin event_origin = 3;
// The time it took for UI Check mode to start in ms
optional int64 ui_check_start_time_ms = 4;
// The number of visible previews in UI Check
optional int32 visible_previews_number = 5;
}
message UniversalProblemsPanelEvent {
// Type of interaction events of universal problems panel.
enum InteractionEvent {
UNKNOWN_INTERACTION = 0;
// A tab is activated. By either manually or automatically switching the tab
TAB_ACTIVATED = 1;
// A user clicks an issue
ISSUE_SINGLE_CLICKED = 2;
// A user double clicks an issue
ISSUE_DOUBLE_CLICKED = 3;
}
// Currently activated tab. This is usually done by clicking tab, but in some
// scenarios the tab may be activated without the interactions.
enum ActivatedTab {
UNKNOWN_TAB = 0;
// IJ's current file tab
CURRENT_FILE = 1;
// IJ's project errors tab
PROJECT_ERRORS = 2;
// This is the shared issue panel, used by compose, layout editor, etc.
DESIGN_TOOLS = 3;
// UI Check mode tab
UI_CHECK = 4;
}
// Event of triggering navigatable of an issue. This is usually done by double
// clicking an issue or pressing enter on the selected issue.
enum IssueNavigated {
UNKNOWN_NAVIGATION = 0;
OPEN_VALIDATION_TOOL = 1;
OPEN_FILE = 2;
}
// True if IJ's problems pane is visible, false otherwise.
optional bool problems_panel_visibility = 1;
// User interactions event of universal problems panel.
optional InteractionEvent interaction_event = 2;
// The type of the activated tab affected by this event
optional ActivatedTab activated_tab = 3;
// The Navigation event of the issues.
optional IssueNavigated issue_navigated = 4;
}
// 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;
}
// Event for the picker panel that can be invoked from the editor gutter. The
// picker is a panel to assist in modifying an element in the source file. For
// example, the Preview picker surfaces the Compose @Preview annotation fields
// and provides context-correct values for the fields that require it.
message EditorPickerEvent {
// The type of picker panel
enum PickerType {
UNKNOWN_PICKER_TYPE = 0;
// Picker for Compose @Preview annotation
PREVIEW = 1;
}
// Contains data for actions that can be performed in an editor picker.
message EditorPickerAction {
// Describes a modification performed through a Preview picker, defined by
// the parameter that was modified and the value assigned to it. Since a
// modification can contain virtually any value, the values tracked are a
// subset of predefined values available through the picker, all other
// open-ended values are generalized as Text or Number.
message PreviewPickerModification {
// The parameters available through the picker panel. It does not
// necessarily match the values in the Preview annotation since the ui
// might surface them as several parameters, such as the Device field.
enum PreviewPickerParameter {
UNKNOWN_PREVIEW_PICKER_PARAMETER = 0;
// Name of the Preview Composable, visible in the Preview panel
NAME = 1;
// User-defined group, to manage different Previews within a file
GROUP = 2;
// The api-level used for the renderer in the Preview panel
API_LEVEL = 3;
// A custom width applied to the Composable for the Preview rendering
WIDTH = 4;
// A custom height applied to the Composable for the Preview rendering
HEIGHT = 5;
// The locale used by the Preview renderer
LOCALE = 6;
// Amount (in percentage) to modify the font size on the Preview
FONT_SCALE = 7;
// Show the rendered Composable within the context of a mocked device ui
SHOW_SYSTEM_UI = 8;
// Show a solid background under the rendered Composable
SHOW_BACKGROUND = 9;
// Defines the color of the background when show_background is true
BACKGROUND_COLOR = 10;
// The uiMode value applied to the application context for Preview
// rendering
UI_MODE = 11;
// String that defines a device by id, display name, or screen specs
DEVICE = 12;
// Width when defining a device by its screen specs
DEVICE_WIDTH = 13;
// Height when defining a device by its screen specs
DEVICE_HEIGHT = 14;
// Unit of width/height when defining a device by its screen specs
DEVICE_DIM_UNIT = 15;
// Dpi when defining a device by its screen specs
DEVICE_DPI = 16;
// Orientation of Device in the Preview panel
DEVICE_ORIENTATION = 17;
}
// Typical device targets for Android applications
enum DeviceType {
UNKNOWN_DEVICE_TYPE = 0;
PHONE = 1;
TABLET = 2;
DESKTOP = 3;
WEAR = 4;
TV = 5;
GENERIC = 6;
CUSTOM = 7;
}
// Value definition for a modification action, meant to represent relevant
// predefined values available in the picker, usually within a dropdown
// menu, any other values should fallback to UnsupportedOrOpenEnded
enum PreviewPickerValue {
UNKNOWN_PREVIEW_PICKER_VALUE = 0;
// Fallback for open-ended values or other not listed predefined values
UNSUPPORTED_OR_OPEN_ENDED = 1;
// Parameter's value was deleted/cleared
CLEARED = 2;
// A selected device that do not match any of the offered reference
// devices, typically either a custom device or an AvdManager device
DEVICE_REF_NONE = 3;
// Phone option in the 'Reference Devices' submenu of the Device
// dropdown
DEVICE_REF_PHONE = 4;
// Foldable option in the 'Reference Devices' submenu of the Device
// dropdown
DEVICE_REF_FOLDABLE = 5;
// Tablet option in the 'Reference Devices' submenu of the Device
// dropdown
DEVICE_REF_TABLET = 6;
// Desktop option in the 'Reference Devices' submenu of the Device
// dropdown
DEVICE_REF_DESKTOP = 7;
// Use 'px' as unit for the given device width/heigh
UNIT_PIXELS = 8;
// Use 'dp' as unit for the given device width/heigh
UNIT_DP = 9;
// Show device in portrait orientation in the Preview
ORIENTATION_PORTRAIT = 10;
// Show device in landscape orientation in the Preview
ORIENTATION_LANDSCAPE = 11;
// Set device screen dpi to 'ldpi'
DENSITY_LOW = 12;
// Set device screen dpi to 'mdpi'
DENSITY_MEDIUM = 13;
// Set device screen dpi to 'hdpi'
DENSITY_HIGH = 14;
// Set device screen dpi to 'xhdpi'
DENSITY_X_HIGH = 15;
// Set device screen dpi to 'xxhdpi'
DENSITY_XX_HIGH = 16;
// Set device screen dpi to 'xxxhdpi'
DENSITY_XXX_HIGH = 17;
// The assigned UiMode value does not set the 'Night' flag
UI_MODE_NOT_NIGHT = 18;
// The assigned UiMode value explicitly sets the 'Night' flag
UI_MODE_NIGHT = 19;
}
// Parameter modified
optional PreviewPickerParameter parameter = 1;
// The device type that closest resembles the device used in the preview
optional DeviceType closest_device_type = 2;
// The assigned value, as described by PreviewPickerValue
optional PreviewPickerValue assigned_value = 3;
}
oneof action_info {
// Available when a @Preview field was modified through the Preview
// picker. Describes the modification performed, such as the parameter
// modified and the value assigned to it.
PreviewPickerModification preview_modification = 1;
}
}
// Defines the type of picker invoked, this should be defined based on the
// kind of text element intended to be modified. E.g.: The picker that
// modifies the Compose @Preview annotation is the 'Preview' picker.
optional PickerType type = 1;
// Contains any additional data related to the action performed for the type
// of picker in use.
repeated EditorPickerAction action = 2;
}
// 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;
HELPERS = 18;
}
// 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;
SELECT_TEXT_MODE = 35;
SELECT_SPLIT_MODE = 36;
SELECT_VISUAL_MODE = 37;
OPEN_MOTION_LAYOUT_EDITOR_MODE = 38;
SHOW_LAYOUT_VISUALIZATION_TOOL = 39;
HIDE_LAYOUT_VISUALIZATION_TOOL = 40;
ADD_CONSTRAINT = 41;
DELETE_CONSTRAINT = 42;
INFLATE_ONLY = 43;
RENDER_ONLY = 44;
ENABLE_LAYOUTLIB_NATIVE = 45;
DISABLE_LAYOUTLIB_NATIVE = 46;
ATF_AUDIT_RESULT = 47;
APPLY_ATF_FIX = 48;
IGNORE_ATF_RESULT = 49;
UNDO_APPLIED_ATF_FIX = 50;
ANIMATION_PREVIEW = 51;
VISUAL_LINT = 52;
UNIVERSAL_PROBLEMS_PANEL = 53;
}
// 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;
// Result of the atf audit (type = ATF_AUDIT_RESULT)
optional AtfAuditResult atf_audit_result = 7;
// Details related to applying an atf fix (type = APPLY_ATF_FIX)
optional ApplyAtfFixEvent apply_atf_fix_event = 8;
// Details related to ignoring an atf result (type = IGNORE_ATF_FIX)
optional IgnoreAtfResultEvent ignore_atf_result_event = 9;
// Details related to undoing an applied atf fix (type = UNDO_APPLIED_ATF_FIX)
optional UndoAppliedAtfFixEvent undo_applied_atf_fix_event = 10;
// Details related to interacting animation preview (type = ANIMATION_PREVIEW)
optional AnimationPreviewEvent animation_preview_event = 11;
// Details related to visual linting (type = VISUAL_LINT)
optional VisualLintEvent visual_lint_event = 12;
// Details related to universal problems panel (type =
// UNIVERSAL_PROBLEMS_PANEL)
optional UniversalProblemsPanelEvent universal_problems_panel_event = 13;
// Type of the file, i.e. which language the file in the editor is in
optional EditorFileType editor_file_type = 14;
}
// Details for navigation editor events
message NavEditorEvent {
enum NavEditorEventType {
UNKNOWN_EVENT_TYPE = 0;
OPEN_FILE = 1;
// Deprecated by LayoutEditorEventType.SELECT_VISUAL_MODE
SELECT_DESIGN_TAB = 2 [deprecated = true];
// Deprecated by LayoutEditorEventType.SELECT_TEXT_MODE
SELECT_XML_TAB = 3 [deprecated = true];
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;
// Deprecated by LayoutEditorEventType.ZOOM_IN
ZOOM_IN = 30 [deprecated = true];
// Deprecated by LayoutEditorEventType.ZOOM_OUT
ZOOM_OUT = 31 [deprecated = true];
// Deprecated by LayoutEditorEventType.ZOOM_FIT
ZOOM_FIT = 32 [deprecated = true];
CUT = 33;
COPY = 34;
PASTE = 35;
// next index: 39
}
// Identifies the mode of the navigation editor
enum NavEditorMode {
UNKNOWN_MODE = 0;
// Single view displaying only the navigation editor itself
VISUAL_ONLY_MODE = 1;
// Split view with text and design editor side-by-side
SPLIT_MODE = 2;
// Single view displaying only the text editor
TEXT_ONLY_MODE = 3;
}
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;
// Mode of navigation editor: design-only, text-only, or split view
optional NavEditorMode mode = 8;
}
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;
MIME_TYPE = 27;
}
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;
}
message NavSafeArgsEvent {
optional EventContext event_context = 1;
optional ProjectMetadata project_metadata = 2;
enum EventContext {
UNKNOWN_EVENT_CONTEXT = 0;
SYNC_EVENT_CONTEXT = 1;
BUILD_EVENT_CONTEXT = 2;
}
message ProjectMetadata {
// # of modules in this project
optional uint32 module_count = 1;
// # of modules with the java safe args plugin enabled
optional uint32 java_plugin_count = 2;
// # of modules with the kotlin safe args plugin enabled
optional uint32 kotlin_plugin_count = 3;
}
}
// 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;
optional ValidationSummary validation_summary = 11;
optional IntentFilterFix intent_filter_fix = 12;
optional LinkFilterOption link_filter_option = 13;
// The information of an interacted link collected for impact tracking.
optional LinksRecord links_record = 14;
// UI event source.
enum EventSource {
// Will be deprecated and replaced by NEW_LINK_CREATION_SIDE_PANEL.
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 new link creation panel.
NEW_LINK_CREATION_SIDE_PANEL = 20;
// The main page of the new App Links Assistant.
OVERVIEW_TABLE = 22;
OVERVIEW_TABLE_FIX_ALL_APP_CHECKS_BUTTON = 23;
OVERVIEW_TABLE_FIX_ALL_WEB_CHECKS_BUTTON = 24;
OVERVIEW_TABLE_SEARCH_BOX = 25;
OVERVIEW_TABLE_FILTERS = 26;
// App link details page of new App Links Assistant.
DETAILS = 27;
DETAILS_FIX_ONE_LINK_APP_CHECKS_BUTTON = 28;
DETAILS_FIX_ONE_LINK_WEB_CHECKS_BUTTON = 29;
DETAILS_RUN_CHECKS_BUTTON = 30;
// Manual fix guidance page of new App Links Assistant.
MANUAL_FIX = 31;
MANUAL_FIX_ROW = 32;
// Fix web checks page of new App Links Assistant.
FIX_WEB_CHECKS_CREATE_JSON_BUTTON = 33;
FIX_WEB_CHECKS_SAVE_JSON_BUTTON = 34;
// Event sources that are not tied to any particular UI.
VALIDATION = 35;
}
// 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;
}
// Message to be sent when validation is run.
message ValidationSummary {
// Stats of custom scheme links
optional int64 total_cs_links = 1;
optional int64 total_valid_cs_links = 2;
// cs_links_app_check_failed = total_cs_links - total_valid_cs_links
// Stats of app links
optional int64 total_app_links = 3;
optional int64 total_valid_app_links = 4;
// Number of links with app checks issues
optional int64 app_links_app_check_failed = 5;
// Number of links with web checks issues
optional int64 app_links_web_check_failed = 6;
// Number of links with Google Ads policy notifications
optional int64 app_links_google_ads_policy_failed = 7;
// Stats of domains
optional int64 total_domains = 8;
// Number of domains with issues
optional int64 domains_web_check_failed = 9;
// Time taken to perform validation
optional uint64 validation_runtime_millis = 10;
// Whether user is consented to performing web check validations.
optional bool dal_apis_consented = 11;
}
message IntentFilterFix {
// Total number of links that we are trying to fix in this operation
optional int64 total_links = 1;
// Initial number of invalid links
optional int64 num_broken_links_before = 2;
// Number of invalid links after fixing (i.e. links that need manual fixes)
optional int64 num_broken_links_after = 3;
}
enum LinkFilterOption {
UNKNOWN = 0; // We don't expect this to actually be used.
NONE = 1;
MANIFEST_ISSUES = 2;
JSON_ISSUES = 3;
}
message LinksRecord {
// Salted (rotating every 540 days) and SHA256 hashed value of raw_schemes.
repeated string anonymized_schemes = 1;
// the scheme values defined by the <data android:scheme> tag in
// AndroidManifest.xml, e.g. 'https", "twitter"
// This may be sensitive information because the scheme can be a custom
// string and thus restricted to "raw" sawmill access.
// This data is only available in and for PWG approved scenarios.
repeated string raw_schemes = 2;
// Salted (rotating every 540 days) and SHA256 hashed value of raw_hosts.
repeated string anonymized_hosts = 3;
// the host values defined by the <data android:host> tag in
// AndroidManifest.xml, e.g. "www.google.com", "*.twitter.com" This may be
// sensitive information because the host can be unreleased and thus
// restricted to "raw" sawmill access. This data is only available in and
// for PWG approved scenarios.
repeated string raw_hosts = 4;
// Salted (rotating every 540 days) and SHA256 hashed value of raw_paths.
repeated string anonymized_paths = 5;
// the path patterns defined by the <data android:path> or <data
// android:pathPattern>, etc. tags in AndroidManifest.xml, e.g. "/test",
// "/product/.*".This may be sensitive information because the path can be
// unreleased and thus restricted to "raw" sawmill access. This data is only
// available in and for PWG approved scenarios.
repeated string raw_paths = 6;
// The path type defined in <data android:path> or <data
// android:pathPattern>, etc. tags, used as additional information to
// distinguish the same path string under different types. For example,
// a path "/p" and a path prefix "/p" match different URLs.
// This field should match the raw_paths and anonymized_paths field elements
// one to one.
repeated PathType path_types = 7 [packed = true];
enum PathType {
PATH_TYPE_UNSPECIFIED = 0;
PATH = 1;
PATH_PATTERN = 2;
PATH_PREFIX = 3;
PATH_EMPTY = 4;
PATH_SUFFIX = 5;
PATH_ADVANCED_PATTERN = 6;
}
// The user's interaction on the link, used as the reason we log this link.
optional InteractionType interaction_type = 8;
enum InteractionType {
INTERACTION_TYPE_UNSPECIFIED = 0;
// The recorded links are misconfigured and viewed by the user in link
// details page.
BROKEN_LINK_IN_DETAIL_PAGE = 1;
// The recorded links are misconfigured and auto-fixed.
BROKEN_LINK_AUTO_FIXED = 2;
// The recorded links are misconfigured and manually fixed after shown
// in the manual fix UI.
// The fixed link will be seen as a new link in the Play released version.
BROKEN_LINK_MANUALLY_FIXED = 3;
// The recorded links are created using the "creation new link" feature.
NEW_LINK_CREATED = 4;
// The recorded links are misconfigured and shown in the manual fix page.
// They are generally links that miss some link component.
// The client doesn't have to report this kind of links for the purpose of
// ads impact tracking, as the fixed links will no longer match the ones
// that miss some link component.
BROKEN_LINK_MANUAL_FIX_PAGE = 5;
// The recorded links are valid. The client doesn't have to report this
// kind of links for the purpose of ads impact tracking, as they are not
// contributing to additional ads revenue.
VALID_LINK_IN_DETAIL_PAGE = 6;
}
}
}
// 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 recording, 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 N+
ATRACE = 3;
// Use Perfetto for advanced Android profiling, works on Android P+
PERFETTO = 4;
}
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
// Deprecated by STOP_FAILED_* enum constants.
STOP_CAPTURING_FAILURE = 2 [deprecated = true];
// Deprecated by PARSING_FAILED_* enum constants.
PARSING_FAILURE = 3 [deprecated = true];
// User aborted parsing the trace after being notified it was too large
USER_ABORTED_PARSING = 4;
// Deprecated by PREPROCESS_FAILED_* enum constants.
PREPROCESS_FAILURE = 5 [deprecated = true];
// There was no ongoing capture to stop.
STOP_FAILED_NO_GOING_PROFILING = 6;
// The profiled app process died.
STOP_FAILED_APP_PROCESS_DIED = 7;
// The PID of the profiled app process changed (it's another process).
STOP_FAILED_APP_PID_CHANGED = 8;
// The profiler process (e.g., simpleperf process) died.
STOP_FAILED_PROFILER_PROCESS_DIED = 9;
// The shell/DDMS command to stop capture didn't return successfully.
STOP_FAILED_STOP_COMMAND_FAILED = 10;
// The capture didn't stop after the stop command.
STOP_FAILED_STILL_PROFILING_AFTER_STOP = 11;
// The wait for the trace file to complete couldn't be initiated.
STOP_FAILED_CANNOT_START_WAITING = 12;
// The wait for the trace file to complete timed out.
STOP_FAILED_WAIT_TIMEOUT = 13;
// The wait for the trace file to complete had unspecified failure.
STOP_FAILED_WAIT_FAILED = 14;
// Couldn't read events while waiting for the trace file to complete.
STOP_FAILED_CANNOT_READ_WAIT_EVENT = 15;
// Couldn't copy/move the trace file within the device.
STOP_FAILED_CANNOT_COPY_FILE = 16;
// Couldn't form the trace file into the format expected by Studio.
STOP_FAILED_CANNOT_FORM_FILE = 17;
// Couldn't read the content of the trace file.
STOP_FAILED_CANNOT_READ_FILE = 18;
// The trace file doesn't exist or is a directory.
PARSING_FAILED_PATH_INVALID = 19;
// The trace file cannot be read.
PARSING_FAILED_READ_ERROR = 20;
// Couldn't identify correct parser for the trace file.
PARSING_FAILED_PARSER_UNKNOWN = 21;
// The trace file failed file header verification.
PARSING_FAILED_FILE_HEADER_ERROR = 22;
// The trace file cannot be parsed by the identified parser, e.g. ART parser
// for Java method traces.
PARSING_FAILED_PARSER_ERROR = 23;
// The trace file failed to be parsed due to unknown reasons.
PARSING_FAILED_CAUSE_UNKNOWN = 24;
// Couldn't preprocess the simpleperf trace: empty file.
PREPROCESS_FAILED_SIMPLEPERF_EMPTY_FILE = 25;
// Couldn't preprocess the simpelperf trace: the report-sample command
// reported errors at exit.
PREPROCESS_FAILED_SIMPLEPERF_ERRORS_AT_EXIT = 26;
// Couldn't preprocess the simpelperf trace: I/O error while executing
// the report-sample command.
PREPROCESS_FAILED_SIMPLEPERF_IO_ERROR = 27;
// Couldn't preprocess the simpelperf trace: InterruptedException while
// waiting for the report-sample command.
PREPROCESS_FAILED_SIMPLEPERF_FAILED_TO_WAIT = 28;
}
enum CpuProfilerEntryPoint {
// The entry point was not specified.
UNKNOWN = 0;
// User enters the CpuProfilerStage by clicking the CpuMonitor.
CPU_MONITOR = 1;
// User enters the CpuProfilerStage by performing a startup trace.
STARTUP_PROFILING = 2;
// User enters the CpuProfilerStage via the Energy Profiler deprecation
// panel hyperlink.
ENERGY_DEPRECATION_LINK = 3;
// User selects an ongoing session performing a capture.
ONGOING_SESSION_SELECTION = 4;
// User navigates back to parent stage or the child stage fails to load.
CHILD_STAGE_BACK_BTN_OR_FAILURE = 5;
// User enters the CpuProfilerStage via an Energy Task.
ENERGY_TASK = 6;
}
// 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;
// How much time it took to stop CPU recording.
optional int32 stopping_time_ms = 8;
// Whether the trace contains Compose Tracing nodes
optional bool has_compose_tracing_nodes = 9;
// The entry point to the cpu profiling stage (cpu profiler)
optional CpuProfilerEntryPoint cpu_profiler_entry_point = 10;
}
// 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;
PERFETTO_TECHNOLOGY = 4;
}
// 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;
// Whether the trace contains Compose Tracing nodes
optional bool has_compose_tracing_nodes = 3;
}
// 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 TransportDaemonStartedInfo {
// Whether it's a restart due to reasons from the device such as a crash or
// being killed by the OS (not because IDE or Project is closed and then
// reopened, or USB cable is unplugged).
optional bool is_restart = 1;
// Set only when it's a restart.
optional int64 millisec_since_last_start = 2;
}
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;
}
message MemoryInstanceFilterMetadata {
enum FilterType {
UNKNOWN_FILTER_TYPE = 0;
ACTIVITY_FRAGMENT_LEAKS = 1;
PROJECT_CLASSES = 2;
}
optional FilterType filter_type = 1;
}
message TraceProcessorDaemonManagerStats {
// Time to spawn the daemon in milliseconds
optional uint64 time_to_spawn_ms = 1;
}
message TraceProcessorDaemonQueryStats {
/// Data for all query types:
// Time to perform the whole method
optional uint64 method_duration_ms = 1;
// Time to perform the gRPC query only
optional uint64 grpc_query_duration_ms = 2;
// The return status of the query
optional QueryReturnStatus query_status = 3;
/// Set when |TPD_QUERY_LOAD_TRACE|
// The file size in bytes of the trace we tried to load.
optional uint64 trace_size_bytes = 100;
// TODO: Define fields based on error/warnings returned from the
// parser
enum QueryReturnStatus {
UNKNOWN = 0;
// The query returned successfully.
OK = 1;
// The query returned, but TPD identified a problem in the query so it might
// have some missing data.
QUERY_ERROR = 2;
// The backend was unable to perform the query (e.g. the daemon couldn’t be
// reached)
QUERY_FAILED = 3;
}
}
// Metadata for when an adt-ui box selection is performed.
message AdtUiBoxSelectionMetadata {
// Selection duration in microseconds, i.e. x-axis.
optional uint64 duration_us = 1;
// Number of tracks included in the selection, i.e. y-axis.
optional uint32 track_count = 2;
}
// Metadata for an adt-ui track group action.
message AdtUiTrackGroupMetadata {
// Pre-defined track group title in Android Studio, e.g. Display, Threads.
// Does not contain user-defined strings.
optional string title = 1;
// Track group action type, e.g. collapsing a track group.
optional TrackGroupActionType action_type = 2;
enum TrackGroupActionType {
UNKNOWN = 0;
MOVE_UP = 1;
MOVE_DOWN = 2;
COLLAPSE = 3;
EXPAND = 4;
MOUSE_OVER = 5;
}
}
// Metadata for RUN_WITH_PROFILING action.
message RunWithProfilingMetadata {
// Profiling mode controls the whether the built APK is profileable or
// debuggable.
optional ProfilingMode profiling_mode = 1;
// Information about the active build variant.
optional BuildVariantMetadata build_variant_metadata = 2;
enum ProfilingMode {
UNKNOWN_PROFILING_MODE = 0;
PROFILEABLE = 1;
DEBUGGABLE = 2;
}
message BuildVariantMetadata {
// True if the active build variant is debuggable.
optional bool is_debuggable = 1;
// True if the active build variant is profileable.
optional bool is_profileable = 2;
}
}
// Metadata for PERFETTO_SDK_HANDSHAKE (for apps relying on tracing-perfetto)
message PerfettoSdkHandshakeMetadata {
// Outcome of the handshake
optional HandshakeResult handshake_result = 1;
// Adapted from tracing-perfetto response codes: http://shortn/_nogjJTzVBc
// with the following changes:
// - different indexing as by proto convention we reserve 0 for UNKNOWN value
// - no enum value for BINARY_MISSING as it's expected and part of the process
// - new enum value for BINARY_UNAVAILABLE when Studio tries to fetch binaries
// from Maven but is unable to, e.g. because of lack of Internet connection
enum HandshakeResult {
UNKNOWN_RESULT = 0;
UNSUPPORTED = 1; // If the app does have tracing-perfetto as a dependency
SUCCESS = 2;
ALREADY_ENABLED = 3; // Not an error; still worth tracking
ERROR_BINARY_UNAVAILABLE = 4; // E.g. if no Internet connection
ERROR_BINARY_VERSION_MISMATCH = 5;
ERROR_BINARY_VERIFICATION_ERROR = 6;
ERROR_OTHER = 7;
}
}
// Metadata for RESOLVE_COMPOSE_TRACING_CODE_LOCATION (navigating to source for
// Compose Tracing events in the Profiler UI)
message ResolveComposeTracingCodeLocationMetadata {
// Number of source-code locations resolved for the query
optional int32 result_count = 1;
}
// Metadata for POWER_PROFILER_DATA_CAPTURED event tracking the number of
// power rails and battery counters captured in a power profiler trace
message PowerProfilerCaptureMetadata {
// Number of power rails
optional int32 power_rail_count = 1;
// Number of battery counters
optional int32 battery_counter_count = 2;
}
// Metadata for a task recorded in the Android Studio Profiler.
message TaskMetadata {
// The type of task recorded.
optional ProfilerTaskType task_type = 1;
// The task id is the same to the id of the session backing the task. This id
// is unique per Studio instance.
optional int64 task_id = 2;
// The origin of a task's recording data.
optional TaskDataOrigin task_data_origin = 3;
// The point in the process lifecycle the task began. Only set to a
// non-unspecified value if the |task_data_origin| is |NEW|.
optional TaskAttachmentPoint task_attachment_point = 4;
// The exposure level of the process the task utilized. Only set to a
// non-unspecified value if the |task_data_origin| is |NEW|.
optional ExposureLevel exposure_level = 5;
// The task configuration used (if the task has a customizable configuration).
optional TaskConfig task_config = 6;
enum ProfilerTaskType {
PROFILER_TASK_TYPE_UNSPECIFIED = 0;
CALLSTACK_SAMPLE = 1;
SYSTEM_TRACE = 2;
JAVA_KOTLIN_METHOD_TRACE = 3 [deprecated = true];
JAVA_KOTLIN_METHOD_SAMPLE = 4 [deprecated = true];
HEAP_DUMP = 5;
NATIVE_ALLOCATIONS = 6;
JAVA_KOTLIN_ALLOCATIONS = 7;
LIVE_VIEW = 8;
JAVA_KOTLIN_METHOD_RECORDING = 9;
}
enum TaskDataOrigin {
TASK_DATA_ORIGIN_UNSPECIFIED = 0;
// The task was not launched from a prior capture and was based on a new
// recording taken in the Studio session.
NEW = 1;
// The task was launched from a recording taken within the same Studio
// session.
PAST_RECORDING = 2;
// The task was launched from an imported recording.
IMPORTED = 3;
}
enum TaskAttachmentPoint {
TASK_ATTACHMENT_POINT_UNSPECIFIED = 0;
NEW_PROCESS = 1;
EXISTING_PROCESS = 2;
}
enum ExposureLevel {
UNKNOWN = 0;
RELEASE = 1;
PROFILEABLE = 2;
DEBUGGABLE = 3;
}
message TaskConfig {
oneof union {
CallstackSampleTaskConfig callstack_sample_task_config = 1;
JavaKotlinMethodTraceTaskConfig java_kotlin_method_trace_task_config = 2;
JavaKotlinMethodSampleTaskConfig java_kotlin_method_sample_task_config =
3;
NativeAllocationsTaskConfig native_allocations_task_config = 4;
}
}
message CallstackSampleTaskConfig {
optional int32 sample_interval_us = 1;
}
message JavaKotlinMethodTraceTaskConfig {
optional int32 buffer_size_mb = 1;
}
message JavaKotlinMethodSampleTaskConfig {
optional int32 sample_interval_us = 1;
optional int32 buffer_size_mb = 2;
}
message NativeAllocationsTaskConfig {
optional int32 sample_interval_bytes = 1;
}
}
// Metadata for the TASK_ENTERED event (when a user enters a task).
message TaskEnteredMetadata {
// The task data.
optional TaskMetadata task_data = 1;
}
// Metadata for the TASK_FINISHED event (when a task finishes).
message TaskFinishedMetadata {
// The task data.
optional TaskMetadata task_data = 1;
// The state of the task on finish.
optional TaskFinishedState task_finished_state = 2;
enum TaskFinishedState {
TASK_FINISHED_STATE_UNSPECIFIED = 0;
COMPLETED = 1;
USER_CANCELLED = 2;
}
}
// Metadata for the TASK_FAILED event (when a task fails).
message TaskFailedMetadata {
// The task data.
optional TaskMetadata task_data = 1;
// The point in the task lifecycle it failed.
optional FailingPoint failing_point = 2;
enum FailingPoint {
FAILING_POINT_UNSPECIFIED = 0;
TASK_START = 1;
TASK_STOP = 2;
TASK_PROCESSING = 3;
}
oneof union {
// Set if |failing_point| is |TASK_START|
TaskStartFailedMetadata task_start_failure_metadata = 3;
// Set if |failing_point| is |TASK_STOP|
TaskStopFailedMetadata task_stop_failure_metadata = 4;
// Set if |failing_point| is |TASK_PROCESSING|
TaskProcessingFailedMetadata task_processing_failure_metadata = 5;
}
message TaskStartFailedMetadata {
oneof union {
TraceStartStatus trace_start_status = 1;
AllocationTrackStatus track_status = 2;
HeapDumpStatus heap_dump_start_status = 3;
}
}
message TaskStopFailedMetadata {
oneof union {
CpuCaptureMetadata cpu_capture_metadata = 1;
TraceStopStatus trace_stop_status = 2;
AllocationTrackStatus track_status = 3;
}
}
message TaskProcessingFailedMetadata {
optional CpuCaptureMetadata cpu_capture_metadata = 1;
}
message TraceStartStatus {
enum Status {
STATUS_UNSPECIFIED = 0;
SUCCESS = 1;
FAILURE = 2;
UNRECOGNIZED = 3;
}
// Each enum value must be an integer with at most 1 bit set in the binary
// format.
enum ErrorCode {
// No error during trace start
NO_ERROR_TRACE_START = 0; // 0x0000
// No trace type specified
NO_TRACE_TYPE_SPECIFIED = 1; // 0x0001
// App is already being profiled with ART
APP_ALREADY_PROFILED_WITH_ART = 2; // 0x0002
// Unable to run profile start command
UNABLE_TO_RUN_PROFILE_START = 4; // 0x0004
// Requested buffer size is too small
REQUESTED_BUFFER_SIZE_TOO_SMALL = 8; // 0x0008
// Failed to run atrace start.
FAILED_TO_RUN_ATRACE_START = 16; // 0x0010
// Atrace could not allocate enough memory to record a trace.
ATRACE_NOT_ALLOCATE_MEMORY_TO_RECORD_TRACE = 32; // 0x0020
// Perfetto is already running unable to start new trace.
PERFETTO_ALREADY_RUNNING_UNABLE_START_NEW_TRACE = 64; // 0x0040
// Tracer is already running unable to run perfetto.
TRACER_ALREADY_RUNNING_UNABLE_RUN_PERFETTO = 128; // 0x0080
// Failed to launch perfetto.
FAILED_TO_LAUNCH_PERFETTO = 256; // 0x0100
// Failed to launch tracer.
FAILED_TO_LAUNCH_TRACER = 512; // 0x0200
// Failed to launch traced.
FAILED_TO_LAUNCH_TRACED = 1024; // 0x0400
// Failed to launch traced_probes.
FAILED_TO_LAUNCH_TRACED_PROBES = 2048; // 0x0800
// Simpleperf is already running; start tracing failed.
SIMPLEPREF_ALREADY_RUNNING = 4096; // 0x1000
// Unable to get process id to profile.
UNABLE_TO_GET_PROCESS_ID_TO_PROFILE = 8192; // 0x2000
// Unable to setprop to enable profiling.
UNABLE_TO_SETPROP_TO_ENABLE_PROFILING = 16384; // 0x4000
// Unable to create(fork) simpleperf process
UNABLE_TO_CREATE_FORK_SIMPLEPREF = 32768; // 0x8000
// Ongoing capture already exists
ONGOING_CAPTURE_EXISTS = 65536; // 0x10000
// No technology-specific tracing options set.
NO_TRACING_OPTIONS_SET = 131072; // 0x20000
}
optional Status status = 1;
// This is bitmap constructed using values defined in ErrorCode
optional int64 error_code = 2;
// The time at which the trace was started (in nanoseconds).
optional int64 start_time_ns = 3;
}
message TraceStopStatus {
enum Status {
STATUS_UNSPECIFIED = 0;
SUCCESS = 1;
NO_ONGOING_PROFILING = 2;
APP_PROCESS_DIED = 3;
APP_PID_CHANGED = 4;
PROFILER_PROCESS_DIED = 5;
STOP_COMMAND_FAILED = 6;
STILL_PROFILING_AFTER_STOP = 7;
CANNOT_START_WAITING = 8;
WAIT_TIMEOUT = 9;
WAIT_FAILED = 10;
CANNOT_READ_WAIT_EVENT = 11;
CANNOT_COPY_FILE = 12;
CANNOT_FORM_FILE = 13;
CANNOT_READ_FILE = 14;
// Generic failure status for non-defined failures.
OTHER_FAILURE = 15;
UNRECOGNIZED = 16;
}
// Each enum value must be an integer with at most 1 bit set in the binary
// format.
enum ErrorCode {
// No error during trace stop
NO_ERROR_TRACE_STOP = 0; // 0x0000
// Failed to read trace from device
FAILED_TO_READ_TRACE_FROM_DEVICE = 1; // 0x0001
// Unable to monitor trace file for completion
UNABLE_TO_MONITOR_TRACE_FILE_FOR_COMPLETION = 2; // 0x0002
// Unable to run profile stop command
UNABLE_TO_RUN_PROFILE_STOP = 4; // 0x0004
// Cannot read events while waiting for ART trace file.
CANNOT_READ_WHILE_WAITING_FOR_ART_TRACE_FILE = 8; // 0x0008
// Wait for ART trace file failed.
WAIT_FOR_ART_TRACE_FILE_FAILED = 16; // 0x0010
// Wait for ART trace file timed out.
WAIT_FOR_ART_TRACE_FILE_TIMED_OUT = 32; // 0x0020
// Failed to stop atrace.
FAILED_TO_STOP_ATRACE = 64; // 0x0040
// Failed to stop tracer.
FAILED_TO_STOP_TRACER = 128; // 0x0080
// Failed to stop perfetto.
FAILED_TO_STOP_PERFETTO = 256; // 0x0100
// This app was not being profiled.
APP_WAS_NOT_BEING_PROFILED = 512; // 0x0200
// App died since profiling started.
APP_DIED_SINCE_PROFILEING_STARTED = 1024; // 0x0400
// Recorded pid and current app pid do not match
RECORDED_PIP_AND_CURRENT_APP_PID_DO_NOT_MATCH = 2048; // 0x0800
// Failed to send SIGTERM to simpleperf
FAILED_TO_SEND_SIGTERM_TO_SIMPLEPREF = 4096; // 0x1000
// Unable to copy simpleperf raw trace.
UNABLE_TO_COPY_SIMPLEPREF_RAW_TRACE = 8192; // 0x2000
// Waitpid failed with message
WAIT_PID_FAILED = 16384; // 0x4000
// Simpleperf did not exit as expected.
SIMPLE_PREF_NOT_EXIT_AS_EXPECTED = 32768; // 0x8000
// No ongoing capture exists
NO_ONGOING_CAPTURE = 65536; // 0x10000
// No technology-specific tracing options found on trace stoppage.
NO_TRACING_OPTIONS_FOUND = 131072; // 0x20000
// No trace type specified
NO_TRACE_TYPE_SPECIFIED_STOP = 262144; // 0x40000
}
optional Status status = 1;
// This is bitmap constructed using values defined in ErrorCode
optional int64 error_code = 2;
// The time taken (i.e. elapsed duration) to stop the trace (in
// nanoseconds).
optional int64 stopping_duration_ns = 3;
}
// Return status for allocation tracking
message AllocationTrackStatus {
enum Status {
STATUS_UNSPECIFIED = 0;
SUCCESS = 1;
IN_PROGRESS = 2; // A tracking session is already in-progress
NOT_ENABLED = 3; // A tracking session is not started.
// Profiling has not started on the specified pid.
// Only used by the legacy pipeline.
NOT_PROFILING = 4;
// Only used by the legacy pipeline.
FAILURE_UNKNOWN = 5;
UNRECOGNIZED = 6;
AGENT_UN_ATTACHABLE = 7;
}
optional Status status = 1;
// If |SUCCESS|, the start time of the AllocationInfo message which
// can be used to retrieve the record.
optional int64 start_time_ns = 2;
}
// Return status for the HEAP_DUMP command.
message HeapDumpStatus {
enum Status {
STATUS_UNSPECIFIED = 0;
SUCCESS = 1;
// A heap dump is already in progress.
IN_PROGRESS = 2;
// Profiling has not started on the specified pid.
// Only used by the legacy pipeline.
NOT_PROFILING = 3;
// Only used by the legacy pipeline.
FAILURE_UNKNOWN = 4;
UNRECOGNIZED = 5;
}
optional Status status = 1;
// If |SUCCESS|, the start time of the HeapDumpInfo record which
// can be used to retrieve the record.
optional int64 start_time_ns = 2;
}
}
// 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 superseded 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;
// Set if |type| is |MEMORY_INSTANCE_FILTER|
optional MemoryInstanceFilterMetadata memory_instance_filter_metadata = 16;
// Set if |type| is |TRANSPORT_DAEMON_STARTED|
optional TransportDaemonStartedInfo transport_daemon_started_info = 17;
// Set if |type| is |TPD_MANAGER_*|
optional TraceProcessorDaemonManagerStats tpd_manager_stats = 18;
// Set if |type| is |TPD_QUERY_*|
optional TraceProcessorDaemonQueryStats tpd_query_stats = 19;
// Set if |type| is |SELECT_BOX|
optional AdtUiBoxSelectionMetadata box_selection_metadata = 20;
// Set if |type| is |TRACK_GROUP_METADATA|
optional AdtUiTrackGroupMetadata track_group_metadata = 21;
// Set if |type| is |SELECT_FRAME|, |TOGGLE_ALL_FRAMES|, or |TOGGLE_LIFECYCLE|
optional uint32 event_count = 22;
// Set if |type| is |LOADING|
optional Loading loading = 23;
// Set if |type| is |RUN_WITH_PROFILING|
optional RunWithProfilingMetadata run_with_profiling_metadata = 24;
// Set if |type| is |PERFETTO_SDK_HANDSHAKE|
optional PerfettoSdkHandshakeMetadata perfetto_sdk_handshake_metadata = 25;
// Set if |type| is |RESOLVE_COMPOSE_TRACING_CODE_LOCATION|
optional ResolveComposeTracingCodeLocationMetadata
resolve_compose_tracing_code_location_metadata = 26;
// Set if |type| is |POWER_PROFILER_DATA_CAPTURED|
optional PowerProfilerCaptureMetadata power_profiler_capture_metadata = 27;
// Set if |type| is |TASK_ENTERED|
optional TaskEnteredMetadata task_entered_metadata = 28;
// Set if |type| is |TASK_FINISHED|
optional TaskFinishedMetadata task_finished_metadata = 29;
// Set if |type| is |TASK_FAILED|
optional TaskFailedMetadata task_failed_metadata = 30;
// Set if |type| is |TASK_SETTINGS_OPENED|
optional bool is_task_settings_changed = 31;
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;
CPU_CAPTURE_STAGE = 7;
MEMORY_HEAP_DUMP_STAGE = 8;
MEMORY_NATIVE_RECORDING_STAGE = 9;
MEMORY_JVM_RECORDING_STAGE = 10;
LIVE_STAGE = 11;
}
enum MemoryHeap {
UNKNOWN_HEAP = 0;
DEFAULT_HEAP = 1;
IMAGE_HEAP = 2;
ZYGOTE_HEAP = 3;
APP_HEAP = 4;
JNI_HEAP = 5;
NATIVE_HEAP = 6;
ALL_HEAP = 7;
}
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;
// Triggered when the transport daemon is started.
TRANSPORT_DAEMON_STARTED = 10;
/// General
CHANGE_DEVICE = 101;
CHANGE_PROCESS = 102;
GO_BACK = 103;
SELECT_MONITOR = 104;
ZOOM_IN = 105;
ZOOM_OUT = 106;
ZOOM_RESET = 107;
ZOOM_TO_SELECTION = 114;
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;
// Create a box selection. Should be correlated with |stage|.
SELECT_BOX = 115;
// Perform an action on a track group. Should be correlated with |stage|.
TRACK_GROUP_ACTION = 116;
// A loading event
LOADING = 117;
// Triggered when a Compose Tracing slice is engaged in an to attempt to
// navigate to code
RESOLVE_COMPOSE_TRACING_CODE_LOCATION = 118;
/// 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;
SELECT_FRAME = 220;
TOGGLE_ALL_FRAMES = 221;
TOGGLE_LIFECYCLE = 222;
PERFETTO_SDK_HANDSHAKE = 223;
/// 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|
// This type should have |memory_instance_filter_metadata|
MEMORY_INSTANCE_FILTER = 311;
/// 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;
POWER_PROFILER_DATA_CAPTURED = 603;
/// 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;
/// TraceProcessorDaemon
// Daemon Management
TPD_MANAGER_SPAWN_OK = 700;
TPD_MANAGER_SPAWN_FAILED = 701;
// Query Stats
TPD_QUERY_LOAD_TRACE = 710;
TPD_QUERY_PROCESS_METADATA = 711;
TPD_QUERY_LOAD_CPU_DATA = 712;
TPD_QUERY_LOAD_MEMORY_DATA = 713;
// Task Stats
TASK_ENTERED = 800;
TASK_FINISHED = 801;
TASK_FAILED = 802;
// Task Configuration Stats
TASK_SETTINGS_OPENED = 810;
}
message Loading {
// Type of recording event
optional Type type = 1;
// Whether this is an attempt or a success
optional bool is_success = 2;
// Size of the trace or file to load (in KB)
optional uint32 size_kb = 3;
// Event count or instance count, depending on the type
optional uint64 event_count = 4;
// Set if |is_success|
optional uint32 elapsed_ms = 5;
// Number of logical cores
optional uint32 core_count = 6;
// Memory available in the machine (in MB)
optional uint32 machine_memory_mb = 7;
// Memory set aside for studio (in MB)
optional uint32 studio_max_memory_mb = 8;
// Memory available for studio (in MB) when event is sent
optional uint32 studio_free_memory_mb = 9;
enum Type {
UNSPECIFIED = 0;
HPROF = 1;
HEAP_PROFD = 2;
LEGACY_ALLOC = 3; // pre-O
LIVE_ALLOC = 4;
PERFETTO_PROCESS_LIST = 5;
PERFETTO_PROCESS = 6;
SIMPLEPERF = 7;
ART = 8;
}
}
}
// 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;
// Deprecated.
// Use user_requested_sync_type and studio_requested_sync_execution_type.
// The Sync execution type: whether it uses Sequential or parallel model
// fetching.
optional GradleSyncExecutionType sync_execution_type = 12 [deprecated = true];
// The type of sync execution user requested. Note that this may be overridden
// by [sync_execution_type] property.
optional UserRequestedExecution user_requested_sync_type = 13;
// The type of sync execution Studio requested. Note that e.g. even if
// parallel is requested, Gradle may decide to run it sequentially.
optional StudioRequestedExecution studio_requested_sync_type = 14;
// Data on downloads happened during sync.
optional BuildDownloadsAnalysisData downloads_data = 15;
// Data on Version Catalog use.
optional GradleVersionCatalogDetectorEvent.State
version_catalog_detector_state = 16;
// Data on phases executed during sync.
// Set only for sync finish events, when kind = GRADLE_SYNC_ENDED,
// GRADLE_SYNC_CANCELLED, GRADLE_SYNC_FAILURE or GRADLE_SYNC_FAILURE_DETAILS
repeated GradleSyncPhaseData gradle_sync_phases_data = 17;
// 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;
// Re-run was requested by user from command line output console with
// additional options
TRIGGER_USER_REQUEST_RERUN_WITH_ADDITIONAL_OPTIONS = 106;
// 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;
// Gradle distribution file has been deleted
TRIGGER_QF_GRADLE_DISTRIBUTION_DELETED = 423;
// Property distributionSha256Sum was removed from Gradle wrapper
TRIGGER_QF_DISTRIBUTIONSHA256SUM_REMOVED_FROM_WRAPPER = 424;
// User confirmed distributionSha256Sum in Gradle wrapper
TRIGGER_QF_DISTRIBUTIONSHA256SUM_CONFIRMED_BY_USER = 425;
// gradleJvm set to USE_PROJECT_JDK in gradle.xml
TRIGGER_QF_GRADLEJVM_TO_USE_PROJECT_JDK = 426;
// Remove JCenter from repositories
TRIGGER_QF_REMOVE_JCENTER_FROM_REPOSITORIES = 427;
// Select signing config using a quickfix
TRIGGER_QF_SIGNING_CONFIG_SELECTED = 428;
// Remove unsupported modules from a quickfix
TRIGGER_QF_REMOVE_UNSUPPORTED_MODULES = 429;
// minCompileSdk version is updated using a quickfix
TRIGGER_QF_MIN_COMPILE_SDK_UPDATED = 430;
// 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;
// Migrate project to use non-transitive R classes
TRIGGER_REFACTOR_MIGRATE_TO_NON_TRANSITIVE_R_CLASSES = 1204;
// Migrate BuildConfig setting from gradle.properties to build files
TRIGGER_REFACTOR_MIGRATE_BUILD_CONFIG_FROM_GRADLE_PROPERTIES = 1205;
// 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;
// Rollback of Android Gradle plugin update was requested
TRIGGER_AGP_VERSION_UPDATE_ROLLED_BACK = 4502;
// 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;
// First marker for changes related to Version Catalogs
TRIGGER_VERSION_CATALOG_FIRST_MARKER = 6000;
// A Version Catalog file was added
TRIGGER_VERSION_CATALOG_FILE_ADDED = 6001;
// Last marker for changes related to Version Catalogs
TRIGGER_VERSION_CATALOG_LAST_MARKER = 6099;
}
// 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;
}
// Deprecated: use StudioRequestedExecution and UserRequestedExecution.
// Sync execution type: whether Sync fetches model builders in parallel or
// sequentially
enum GradleSyncExecutionType {
option deprecated = true;
// Gradle sync runs sequentially
GRADLE_SYNC_RUNS_SEQUENTIALLY = 0;
// Gradle sync runs in parallel
GRADLE_SYNC_RUNS_IN_PARALLEL = 1;
}
enum UserRequestedExecution {
UNKNOWN_USER_REQUESTED_EXECUTION_TYPE = 0;
// User requested sequential sync.
USER_REQUESTED_SEQUENTIAL = 1;
// User requested parallel sync.
USER_REQUESTED_PARALLEL = 2;
}
enum StudioRequestedExecution {
UNKNOWN_STUDIO_REQUESTED_EXECUTION_TYPE = 0;
// Studio requested sequential sync.
STUDIO_REQUESTD_SEQUENTIAL = 1;
// Studio requested parallel sync.
STUDIO_REQUESTD_PARALLEL = 2;
}
message GradleSyncPhaseData {
// List of nested phase names defining this phase.
// The most inner phase goes last.
repeated SyncPhase phase_stack = 1 [packed = true];
optional int64 phase_start_timestamp_ms = 2;
optional int64 phase_end_timestamp_ms = 3;
optional PhaseResult phase_result = 4;
// Sync phase names. As phases can be nested, a list of them defines any
// particular phase. SYNC_TOTAL corresponds to the whole sync process and
// includes all phases. GRADLE_* are the phases inside gradle invocation.
enum SyncPhase {
UNKNOWN_PHASE = 0;
UNKNOWN_GRADLE_PHASE = 1;
GRADLE_CONFIGURE_ROOT_BUILD = 2;
GRADLE_CONFIGURE_BUILD = 3;
GRADLE_RUN_MAIN_TASKS = 4;
GRADLE_RUN_WORK = 5;
PROJECT_SETUP = 6;
SYNC_TOTAL = 7;
}
enum PhaseResult {
UNKNOWN_RESULT = 0;
SUCCESS = 1;
FAILURE = 2;
CANCELLED = 3;
}
}
}
// 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;
}
// Metrics for native workspace sync. The data is collected in Android Studio
// after native workspace sync, which happens after Gradle sync is completed.
message GradleCppSyncStats {
// The time it takes to sync native workspace after Gradle sync is completed.
optional int64 native_workspace_sync_time_ms = 1;
repeated NativeModuleStats synced_native_module_stats = 2;
message NativeModuleStats {
// The total number of C files in this native module
optional int32 c_source_file_count = 1;
// The total number of C++ files in this native module
optional int32 cpp_source_file_count = 2;
// The number of distinct compiler flags.
optional int32 distinct_compiler_flag_lists_count = 3;
// The number of CIDR configurations created for this module.
optional int32 cidr_configuration_count = 4;
}
// The estimated memory footprint of the CIDR workspace. This value is
// expensive to compute so it's sampled.
optional int32 cidr_workspace_size = 3;
}
// 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;
}
// Details for dynamic layout inspector (inspector v2) events
message DynamicLayoutInspectorEvent {
enum DynamicLayoutInspectorEventType {
UNKNOWN_EVENT_TYPE = 0;
// Layout inspector was opened
OPEN = 1;
// User tried to attach to a device
ATTACH_REQUEST = 2;
// Device attached successfully
ATTACH_SUCCESS = 3;
// First render after connection
INITIAL_RENDER = 4;
// First render after connection without images
INITIAL_RENDER_NO_PICTURE = 5;
// First render after connection with bitmap images
INITIAL_RENDER_BITMAPS = 6;
// User tried to attach to a device using compatibility mode
COMPATIBILITY_REQUEST = 7;
// Device attached successfully in compatibility mode
COMPATIBILITY_SUCCESS = 8;
// First render after connection in compatibility mode
COMPATIBILITY_RENDER = 9;
// First render after connection without images in compatibility mode
COMPATIBILITY_RENDER_NO_PICTURE = 10;
// Session Data after a session ended
SESSION_DATA = 11;
// User saved a snapshot
SNAPSHOT_CAPTURED = 12;
// User loaded a snapshot
SNAPSHOT_LOADED = 13;
// Error loading a snapshot
SNAPSHOT_LOAD_ERROR = 14;
// User cancelled the snapshot saving process
SNAPSHOT_CANCELLED = 15;
// There was an error during initial connect
ATTACH_ERROR = 16;
// An attach attempt was cancelled or preempted by the user
ATTACH_CANCELLED = 17;
// Info about auto-connect to foreground process
AUTO_CONNECT_INFO = 18;
// A transport-related error
TRANSPORT_ERROR = 19;
}
// Type of event
optional DynamicLayoutInspectorEventType type = 1;
// Data for the layout inspector session
optional DynamicLayoutInspectorSession session = 2;
// Additional information that will be available when looking at a snapshot
optional DynamicLayoutInspectorSnapshotInfo snapshot_info = 3;
// Extra info for error-related events
optional DynamicLayoutInspectorErrorInfo error_info = 4;
// Extra info about auto connect to foreground process
optional DynamicLayoutInspectorAutoConnectInfo auto_connect_info = 5;
// An error from the transport that prevents Layout Inspector from starting
optional DynamicLayoutInspectorTransportError transport_error = 6;
}
// Transport related errors
message DynamicLayoutInspectorTransportError {
// Types of transport errors
enum Type {
UNSPECIFIED_STATE = 0;
// The transport failed to start the daemon
TRANSPORT_FAILED_TO_START_DAEMON = 1;
// A device is sending events with wrong timestamp
TRANSPORT_OLD_TIMESTAMP_BIGGER_THAN_NEW_TIMESTAMP = 2;
}
optional Type type = 1;
}
message DynamicLayoutInspectorAutoConnectInfo {
// The result of the handshake
enum HandshakeResult {
UNSPECIFIED_RESULT = 0;
// It's not known if auto-connection is supported
SUPPORT_UNKNOWN = 1;
// Auto-connection is supported
SUPPORTED = 2;
// Auto-connection is not supported
NOT_SUPPORTED = 3;
}
// Deprecated, use HandshakeConversion instead
enum HandshakeUnknownConversion {
// A device with UNKNOWN support state converted to SUPPORTED
UNKNOWN_TO_SUPPORTED = 0;
// A device with UNKNOWN support state converted to NOT_SUPPORTED
UNKNOWN_TO_NOT_SUPPORTED = 1;
// A device with UNKNOWN support state was unplugged before converting
UNKNOWN_NOT_RESOLVED = 2;
}
// Indicates when a handshake state converts to another
enum HandshakeConversion {
UNSPECIFIED_CONVERSION = 0;
// A device with SUPPORT_UNKNOWN state converted to SUPPORTED
FROM_UNKNOWN_TO_SUPPORTED = 1;
// A device with SUPPORT_UNKNOWN state converted to NOT_SUPPORTED
FROM_UNKNOWN_TO_NOT_SUPPORTED = 2;
// A device with SUPPORT_UNKNOWN state was unplugged before converting
FROM_UNKNOWN_TO_DISCONNECTED = 3;
// A device with NOT_SUPPORTED state converted to SUPPORTED (false negative)
FROM_NOT_SUPPORTED_TO_SUPPORTED = 4;
}
// Reason why the HandshakeResult is NOT_SUPPORTED
enum AutoConnectReasonNotSupported {
UNSPECIFIED_REASON = 0;
// Dumpsys was not found
DUMPSYS_NOT_FOUND = 1;
// Grep was not found
GREP_NOT_FOUND = 2;
// Dumpsys found no top activity and no sleeping activities
DUMPSYS_NO_TOP_ACTIVITY_NO_SLEEPING_ACTIVITIES = 3;
// Dumpsys found no top activity but found awake activities
DUMPSYS_NO_TOP_ACTIVITY_BUT_HAS_AWAKE_ACTIVITIES = 4;
}
// The result of the handshake. Does the device support auto connect?
optional HandshakeResult handshake_result = 1;
// Deprecated, use handshake_conversion_info instead
optional HandshakeUnknownConversion handshake_conversion = 2
[deprecated = true];
// Additional info about why the handshake_result is NOT_SUPPORTED
optional AutoConnectReasonNotSupported reason_not_supported = 3;
// Indicates when a handshake state converts to another
optional HandshakeConversion handshake_conversion_info = 4;
// Indicates whether this auto-connect info is about a recovery handshake
optional bool is_recovery_handshake = 5;
}
// Extra info for error-related events
message DynamicLayoutInspectorErrorInfo {
// How far the inspector attach process got before an error occurred.
// Order matters: later states are farther along in the process.
enum AttachErrorState {
UNKNOWN_ATTACH_ERROR_STATE = 0;
NOT_STARTED = 1;
// Test ADB roundtrip to device successful
ADB_PING = 4;
// App Inspection states
// ---------------------------------
// Studio has established an app inspection connection to the device
ATTACH_SUCCESS = 7;
// Studio sent a request to start capturing
START_REQUEST_SENT = 10;
// The inspector received the request to start capturing
START_RECEIVED = 20;
// The inspector registered the root view detector
STARTED = 30;
// The inspector found root views and registered invalidation callbacks
ROOTS_EVENT_SENT = 40;
// Studio received the root views
ROOTS_EVENT_RECEIVED = 50;
// The inspector got a callback from the platform
VIEW_INVALIDATION_CALLBACK = 60;
// The inspector captured a screenshot or serialized an SKP
SCREENSHOT_CAPTURED = 70;
// The inspector executed the view hierarchy capture code
VIEW_HIERARCHY_CAPTURED = 80;
// The inspector sent a response
RESPONSE_SENT = 90;
// Studio received the response
LAYOUT_EVENT_RECEIVED = 100;
// Compose-related states
// ---------------------------------
// Request sent to Compose inspector
COMPOSE_REQUEST_SENT = 110;
// TODO: compose inspector device-side states
// Studio received a response from the compose inspector
COMPOSE_RESPONSE_RECEIVED = 200;
// Legacy inspector states
// ---------------------------------
LEGACY_WINDOW_LIST_REQUESTED = 210;
LEGACY_WINDOW_LIST_RECEIVED = 220;
LEGACY_HIERARCHY_REQUESTED = 230;
LEGACY_HIERARCHY_RECEIVED = 240;
LEGACY_SCREENSHOT_REQUESTED = 250;
LEGACY_SCREENSHOT_RECEIVED = 260;
// Common states
// ---------------------------------
PARSED_COMPONENT_TREE = 270;
// Model is updated with received info
MODEL_UPDATED = 280;
}
// The error code encountered
enum AttachErrorCode {
// Unknown error code
UNKNOWN_ERROR_CODE = 0;
// --------------------------------------
// Error code from the View Client
// --------------------------------------
// Api lower than 29
LOW_API_LEVEL = 1;
// Timeout with fallback to Legacy mode
CONNECT_TIMEOUT = 2;
// --------------------------------------
// Error codes from the View Agent
// --------------------------------------
UNKNOWN_VIEW_AGENT_ERROR = 101;
// No hardware acceleration
NO_HARDWARE_ACCELERATION = 102;
// The app seems to have no UI
NO_ROOT_VIEWS_FOUND = 103;
// --------------------------------------
// Error codes from App Inspection Layer
// --------------------------------------
// General fallback if we were unable to map the app inspection exception
UNKNOWN_APP_INSPECTION_ERROR = 201;
// The device in not found among the ABD devices
APP_INSPECTION_CANNOT_FIND_DEVICE = 202;
// The process is no longer found
APP_INSPECTION_PROCESS_NO_LONGER_EXISTS = 203;
// The inspector is incompatible with the library in the running app
APP_INSPECTION_INCOMPATIBLE_VERSION = 204;
// The targeted library does not exist in the app
APP_INSPECTION_MISSING_LIBRARY = 205;
// The target app is proguarded
APP_INSPECTION_PROGUARDED_APP = 206;
// An inspector artifact can't be resolved
APP_INSPECTION_ARTIFACT_NOT_FOUND = 207;
// The compose:ui:ui version file was missing
APP_INSPECTION_VERSION_FILE_NOT_FOUND = 208;
// Snapshot version used, but use.snapshot.jar flag is not set
APP_INSPECTION_SNAPSHOT_NOT_SPECIFIED = 209;
// Compose inspector not found.
APP_INSPECTION_COMPOSE_INSPECTOR_NOT_FOUND = 210;
// Failed to download compose inspector from maven
APP_INSPECTION_FAILED_MAVEN_DOWNLOAD = 211;
// ----------------------------------
// Error codes from Transport Layer
// ----------------------------------
TRANSPORT_UNKNOWN_ERROR = 301;
TRANSPORT_PUSH_FAILED_FILE_NOT_FOUND = 302;
// ----------------------------------
// Generic errors
// ----------------------------------
UNEXPECTED_ERROR = 401;
}
// How far we got on initial connect before an error happened, when sending
// ATTACH_ERROR
optional AttachErrorState attach_error_state = 1;
// The error encountered to abort the attach attempt
optional AttachErrorCode attach_error_code = 2;
}
// Information specific to snapshots
message DynamicLayoutInspectorSnapshotInfo {
// The version of the snapshot file format. Current versions are:
// 1 - non-dynamic inspector
// 2 - new version of non-dynamic inspector, never enabled in production
// 3 - dynamic inspector in legacy mode (API < 28)
// 4 - dynamic inspector in normal mode
optional int32 snapshot_version = 1;
// What program saved the snapshot
enum SaveSource {
UNKNOWN = 0;
STUDIO = 1;
}
// What program saved the snapshot
optional SaveSource save_source = 2;
// The version of studio (or some other future tool) that saved it
optional string save_version = 3;
// Was the inspector in live mode when the snapshot was saved
optional bool live_when_saved = 4;
// How long it took to save the snapshot in milliseconds
optional uint32 save_duration_ms = 5;
// How long it took to load the snapshot in milliseconds
optional uint32 load_duration_ms = 6;
}
// Session data for dynamic layout inspector (inspector v2)
message DynamicLayoutInspectorSession {
// Session data around live versus refresh mode
optional DynamicLayoutInspectorLiveMode live = 1;
// Session data around 3D rotation
optional DynamicLayoutInspectorRotation rotation = 2;
// Session data around memory usage
optional DynamicLayoutInspectorMemory memory = 3;
// Session data around compose
optional DynamicLayoutInspectorCompose compose = 4;
// Session data around the system view toggle
optional DynamicLayoutInspectorSystemNode system = 5;
// Session data around goto declaration
optional DynamicLayoutInspectorGotoDeclaration goto_declaration = 6;
// Session data around attachment to process
optional DynamicLayoutInspectorAttachToProcess attach = 7;
}
// Session data for dynamic layout inspector (inspector v2) around live mode
message DynamicLayoutInspectorLiveMode {
// Number of times the refresh button was clicked
optional uint32 refresh_button_clicks = 1;
// Component selection count while in live update mode
optional uint32 clicks_with_live_updates = 2;
// Component selection count while in manual refresh mode
optional uint32 clicks_without_live_updates = 3;
}
// Session data for dynamic layout inspector (inspector v2) around 3D rotation
message DynamicLayoutInspectorRotation {
// Component selection count in image while showing in 3D
optional uint32 image_clicks_in_3d = 1;
// Component selection count in image while showing in 2D
optional uint32 image_clicks_in_2d = 2;
// Component selection count in the component tree while showing in 3D
optional uint32 component_tree_clicks_in_3d = 3;
// Component selection count in the component tree while showing in 2D
optional uint32 component_tree_clicks_in_2d = 4;
}
// Session data for dynamic layout inspector (inspector v2) around the system
// view toggle
message DynamicLayoutInspectorCompose {
// Is the kotlin reflection library included in the project
optional bool kotlin_reflection_available = 1;
// Number of times a compose node was selected in image
optional uint32 image_clicks = 2;
// Number of times a compose node was selected in the component tree
optional uint32 component_tree_clicks = 3;
// Number of times a link in the property value section was clicked
optional uint32 go_to_source_from_property_value_clicks = 4;
// The max recomposition count seen for a composable in a session
optional uint32 max_recomposition_count = 5;
// The max recomposition skips seen for a composable in a session
optional uint32 max_recomposition_skips = 6;
// The max highlight amount seen in a session
optional float max_recomposition_highlight = 7;
// Number of times the recomposition counts were explicitly reset
optional uint32 recomposition_reset_clicks = 8;
// Number of frames received where the recomposition counts were shown
optional uint32 frames_with_recomposition_counts_on = 9;
// Number of frames received where the recomposition counts were in red
optional uint32 frames_with_recomposition_color_red = 10;
// Number of frames received where the recomposition counts were in blue
optional uint32 frames_with_recomposition_color_blue = 11;
// Number of frames received where the recomposition counts were in green
optional uint32 frames_with_recomposition_color_green = 12;
// Number of frames received where the recomposition counts were in yellow
optional uint32 frames_with_recomposition_color_yellow = 13;
// Number of frames received where the recomposition counts were in purple
optional uint32 frames_with_recomposition_color_purple = 14;
// Number of frames received where the recomposition counts were in orange
optional uint32 frames_with_recomposition_color_orange = 15;
}
// Session data for dynamic layout inspector (inspector v2) around hiding of
// system nodes
message DynamicLayoutInspectorSystemNode {
// Number of selections while the system views are hidden
optional uint32 clicks_with_hidden_system_views = 1;
// Number of selections while the system views are visible
optional uint32 clicks_with_visible_system_views = 2;
}
// Session data for dynamic layout inspector (inspector v2) around memory usage
message DynamicLayoutInspectorMemory {
// Memory snapshot for the first image rendered
optional Snapshot initial_snapshot = 1;
// Memory snapshot for the image requiring the most memory in the session
optional Snapshot largest_snapshot = 2;
message Snapshot {
// True if the image was based on a skia snapshot, false it was a bitmap
optional bool skia_image = 1;
// The size used in the capture in mega bytes
optional uint64 capture_size_mb = 2;
// The time it took to measure the memory used
optional uint64 measurement_duration_ms = 3;
}
}
// Session data around goto declaration
message DynamicLayoutInspectorGotoDeclaration {
// Number of clicks on "Goto Declaration" menu action
optional uint32 clicks_menu_action = 1;
// Number of times the "Goto Declaration" menu action was activated with key
// shortcut
optional uint32 key_strokes_shortcut = 2;
// Number of times double click was used to "Goto Declaration"
// from component tree
optional uint32 double_clicks = 3;
// Number of times double click was used to "Goto Declaration"
// from device render
optional uint32 double_clicks_from_render = 4;
}
// Session data for dynamic layout inspector (inspector v2) process attaching
message DynamicLayoutInspectorAttachToProcess {
// Client type: Legacy or AppInspection
optional ClientType client_type = 1;
// True if the attach to process succeeded
optional bool success = 2;
// Error information if the attach failed
optional DynamicLayoutInspectorErrorInfo error_info = 3;
// Error information if the compose inspector failed
optional DynamicLayoutInspectorErrorInfo.AttachErrorCode compose_error_code =
4;
// When we attached to a process, were there multiple projects open?
optional bool multiple_projects_open = 5;
// Was the debugger running for this session
optional bool debugger_attached = 6;
// Was the debugger paused during the attach
optional bool debugger_paused_during_attach = 7;
// Was auto connect enabled for this session
optional bool auto_connect_enabled = 8;
// Was Layout Inspector embedded in the Running Devices Tool Window
optional bool is_embedded_layout_inspector = 9;
// The time it took for attach to start and end.
// It can end because of success, error or cancellation.
optional int64 attach_duration_ms = 10;
// The Client type
enum ClientType {
// Unknown client
UNKNOWN_CLIENT_TYPE = 0;
// Client using DdmClient.dumpViewHierarchy to retrieve View information
LEGACY_CLIENT = 1;
// Client using app inspection to retrieve View and Compose information
APP_INSPECTION_CLIENT = 2;
// Data loaded from a file
SNAPSHOT_CLIENT = 3;
}
}
// 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;
}
// Upgrade Android Studio Dialog stats
message UpgradeAndroidStudioDialogStats {
optional UserAction user_action = 1;
enum UserAction {
// We don't know
UNKNOWN_USER_ACTION = 0;
// The user closed the dialog
CANCEL = 1;
// Upgrade Android Studio button
UPGRADE_STUDIO = 2;
// Do not show the prompt again
DO_NOT_ASK_AGAIN = 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
// Deprecated since 3.6.0.8, use WhatsNewAssistantUpdateEvent instead.
message WhatsNewAssistantEvent {
option deprecated = true;
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;
}
// Details for What's New Assistant and its interactive contents utilisation.
message WhatsNewAssistantUpdateEvent {
// Details about action button usage in What's New Assistant.
// Track actions created/updated and action button clicks.
message ActionButtonEvent {
// Type of the action button
enum ActionButtonType {
UNKNOWN_BUTTON = 0;
// Build analyzer action button
BUILD_ANALYZER_SHOW = 1;
// App Inspection action button
APP_INSPECTION_SHOW = 2;
}
// State of the action button, tracks what message is shown at the moment.
// Each feature can define their own states if there are any.
enum ActionButtonState {
UNKNOWN_STATE = 0;
// Build analyzer can not be used because of old AGP version.
BUILD_ANALYZER_AGP_VERSION_LOW = 1;
// Build analyzer doesn't have data yet. Build will run on the click.
BUILD_ANALYZER_NO_DATA = 2;
// Build is running at the moment to gather data.
BUILD_ANALYZER_BUILD_RUNNING = 3;
// Build failed to finish and no data ready to be shown.
BUILD_ANALYZER_BUILD_FAILED = 4;
// Build analyzer data exist to be opened right away.
BUILD_ANALYZER_DATA_READY = 5;
}
enum EventType {
UNKNOWN_TYPE = 0;
BUTTON_CREATED = 1;
BUTTON_CLICK = 2;
BUTTON_STATE_UPDATED = 3;
}
// Type of the action button
optional ActionButtonType action_button_type = 1;
// Type of the event
optional EventType event_type = 2;
// State of the button action at the moment of the event
optional ActionButtonState action_button_state = 3;
// Time between opening window and clicking state button
optional int64 time_from_wna_open = 4;
}
// Whether this window was auto opened
optional bool auto_opened = 1;
// Whether this is the update flow or regular WNA
optional bool update_flow = 2;
// Whether the user scrolled to the bottom of the pane
optional bool scrolled_to_bottom = 3;
// Time between opening window and scrolling to bottom
optional int64 time_to_scrolled_to_bottom = 7;
// Whether the window was closed due to clicking "Dismiss"
optional bool dismissed = 4;
// Time between opening window and clicking update button
optional int64 time_to_update_ms = 5;
// Time between opening window and closing it
optional int64 time_to_close_ms = 6;
// Action button events occurred during this session
repeated ActionButtonEvent action_button_events = 8;
}
// Details for Design Editor's Help Panel update
message DesignEditorHelpPanelEvent {
// What sort of action was performed
optional HelpPanelAction action = 1;
// Help panel type
optional HelpPanelType help_panel_type = 2;
// Time between opening window and closing it
optional int64 time_to_close_ms = 3;
enum HelpPanelAction {
UNKNOWN_ACTION = 0;
OPEN = 1;
BUTTON_CLICKED = 2;
CLOSE = 3;
REACHED_END = 4;
}
enum HelpPanelType {
UNKNOWN_PANEL_TYPE = 0;
// Full default option
FULL_ALL = 1;
// Constraint layout specific panel
CONSTRAINT_LAYOUT = 2;
// Motion layout specific panel
MOTION_LAYOUT = 3;
// Nav editor specific panel
NAV_EDITOR = 4;
// Compose specific panel
COMPOSE = 5;
}
}
// 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, for example, build failed.
ABORT = 3;
// Deprecated
BEFORE_RUN_TASK_FAIL = 4 [deprecated = true];
// The run event was never completed for unknown reasons.
ABANDONED = 5;
}
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;
// Whether the user configured AC to fall back to Run
optional bool apply_changes_fallback_to_run = 22;
// Whether the user configured ACC to fall back to Run
optional bool apply_code_changes_fallback_to_run = 23;
// Whether the user configured Run to disable overlay installs.
optional bool run_always_install_with_pm = 24;
enum AppComponent {
UNKNOWN = 0;
ACTIVITY = 1;
WATCH_FACE = 2;
TILE = 3;
COMPLICATION = 4;
}
// Type of AppComponent user wants to run
optional AppComponent app_component_type = 25;
// Whether or not the deployed project is a Compose project.
optional bool is_compose_project = 26;
// Client-side salted (rotating every 28 days), sha256 of the project base
// path. Used to correlate LiveEdit usage with Compose projects.
optional string project_id = 27;
}
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 StopEvent {
// Whether the stop succeeded
optional RunEvent.Status status = 1;
// The executor used, from Executor::getId()
optional string executor = 2;
// Whether the app is debuggable
optional bool debuggable = 3;
// The stop cycle begins
optional int64 begin_timestamp_ms = 4;
// The stop cycle finished
optional int64 end_timestamp_ms = 5;
// Type of AppComponent user wants to stop
optional RunEvent.AppComponent app_component_type = 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;
enum ArtifactType {
UNKNOWN = 0;
APK = 1;
BASELINE_PROFILE = 2;
}
optional ArtifactType type = 2;
}
// Statistics regarding IntelliJ project sizes
message IntellijProjectSizeStats {
enum FileType {
UNKNOWN_FILE_TYPE = 0;
JAVA = 1;
XML = 2;
DOT_CLASS = 3;
KOTLIN = 4;
NATIVE = 5;
}
// 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;
// Project files only
PROJECT = 3;
}
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;
}
// "View Mode" in the UI
enum ToolWindowType {
// Default tool window type
UNKNOWN_TOOL_WINDOW_TYPE = 0;
// "Dock Pinned" in the UI
DOCKED_TOOL_WINDOW_TYPE = 1;
// "Float" in the UI
FLOATING_TOOL_WINDOW_TYPE = 2;
// "Undock" in the UI
SLIDING_TOOL_WINDOW_TYPE = 3;
// "Window" in the UI
WINDOWED_TOOL_WINDOW_TYPE = 4;
}
// Id of the tool window
// e.g. 'Assistant'
optional string tool_window_id = 1;
optional EventType event_type = 2;
// "View Mode" in the UI
optional ToolWindowType tool_window_type = 3;
}
// 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 fields, 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;
// Collects view binding layout count when |type| = |DATA_BINDING_BUILD_EVENT|
optional ViewBindingPollMetadata view_binding_metadata = 4;
// 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;
}
// Data binding 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;
// # 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;
// # of modules in this project
optional uint32 module_count = 7;
// # of modules with data binding enabled
optional uint32 data_binding_enabled_module_count = 8;
// 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;
}
}
// View binding stats we poll for
message ViewBindingPollMetadata {
// Whether user enabled view binding in gradle dsl.
optional bool view_binding_enabled = 1;
// Number of view binding layout xmls.
optional uint32 layout_xml_count = 2;
}
}
enum EditorFileType {
UNKNOWN = 0; // Anything not explicitly in this list.
JAVA = 1;
KOTLIN = 2;
XML = 3; // .xml, unless more specific info is available (see below).
GROOVY = 4;
PROPERTIES = 5;
JSON = 6;
KOTLIN_SCRIPT = 7; // .kts
NATIVE = 8; // .c, .cpp, .h, etc.
XML_MANIFEST = 9; // AndroidManifest.xml
// XML resource types come from com.android.resources.ResourceFolderType.
XML_RES_ANIM = 10;
XML_RES_ANIMATOR = 11;
XML_RES_COLOR = 12;
XML_RES_DRAWABLE = 13;
XML_RES_FONT = 14;
XML_RES_INTERPOLATOR = 15;
XML_RES_LAYOUT = 16;
XML_RES_MENU = 17;
XML_RES_MIPMAP = 18;
XML_RES_NAVIGATION = 19;
XML_RES_RAW = 20;
XML_RES_TRANSITION = 21;
XML_RES_VALUES = 22;
XML_RES_XML = 23;
KOTLIN_COMPOSE = 24;
TOML = 25;
CMAKE = 26;
}
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;
// Whether the IDE was in Essential Highlighting or not
optional bool essential_highlighting = 2;
}
message EditorHighlightingStats {
message Stats {
optional EditorFileType file_type = 1;
// Highlighting latencies in milliseconds.
optional Histogram histogram = 2;
}
repeated Stats by_file_type = 1;
}
message EditorCompletionStats {
message Stats {
// File type (e.g., Java).
optional EditorFileType file_type = 1;
// Time in milliseconds to show initial completion popup.
optional Histogram popup_latency = 2;
// Time in milliseconds to fill *all* completion results.
optional Histogram full_completion_latency = 3;
// Time in milliseconds to insert a selected completion item.
optional Histogram insertion_latency = 4;
}
// Completion stats for each file type.
repeated Stats by_file_type = 1;
}
// Details of events relating to the Android Studio Patch Updater
message StudioPatchUpdaterEvent {
optional Kind kind = 1;
// Information about the patch itself
optional Patch patch = 2;
// Details about patch updater issues presented to the user.
optional IssueDialog issue_dialog = 3;
// Options chosen by the user from the
optional IssueDialogChoices issue_dialog_choices = 4;
// The kind of event reported
enum Kind {
UNKNOWN_EVENT_KIND = 0;
// Android Studio Patch Updater: Startup
START = 1;
// Android Studio Patch Updater: Display Patch details
PATCH_DETAILS_SHOW = 2;
// Android Studio Patch Updater: Show generic retry-able error dialog
RETRYABLE_ERROR_DIALOG_SHOW = 3;
// Android Studio Patch Updater: Show generic fatal error dialog
FATAL_ERROR_DIALOG_SHOW = 4;
// Android Studio Patch Updater: Show (potentially recoverable) validation
// issue dialog
VALIDATION_PROBLEMS_DIALOG_SHOW = 5;
// Android Studio Patch Updater: Validation issue dialog was closed.
VALIDATION_PROBLEMS_DIALOG_CLOSE = 6;
// Android Studio Patch Updater: Enter phase of the update process
PHASE_UNKNOWN = 7;
PHASE_EXTRACTING_PATCH_FILES = 8;
PHASE_VALIDATING_INSTALLATION = 9;
PHASE_BACKING_UP_FILES = 10;
PHASE_PREPARING_UPDATE = 11;
PHASE_APPLYING_PATCH = 12;
PHASE_REVERTING = 13;
PHASE_CLEANING_UP = 14;
// Android Studio Patch Updater: Successful exit
EXIT_OK = 15;
// Android Studio Patch Updater: Exit with controlled abort
EXIT_ABORT = 16;
// Android Studio Patch Updater: Exit with unexpected exception
EXIT_EXCEPTION = 17;
}
// Information about the patch itself
message Patch {
// The version of studio patching from, e.g. '183.5153.38.35.5240547'
optional string studio_version_from = 1;
// The version of studio patching to, e.g. '183.5153.38.35.5256920'
optional string studio_version_to = 2;
}
// The options available for the user to address the
// patch updater errors.
enum ValidationOption {
UNKNOWN_VALIDATION_OPTION = 0;
NONE = 1;
IGNORE = 2;
KEEP = 3;
REPLACE = 4;
DELETE = 5;
KILL_PROCESS = 6;
}
// Details about patch updater issues presented to the user.
message IssueDialog {
// The issues presented in the table to the user,
// which may or may not be actionable.
repeated Issue issue = 1;
message Issue {
// The type of issue presented
enum Kind {
UNKNOWN_KIND = 0;
INFO = 1;
CONFLICT = 2;
ERROR = 3;
}
// The action the updater was attempting to perform
enum Action {
UNKNOWN_ACTION = 0;
CREATE = 1;
UPDATE = 2;
DELETE = 3;
NO_ACTION = 4;
VALIDATE = 5;
}
// The type of issue presented
optional Kind kind = 1;
// The action that the patcher was attempting to perform
optional Action action = 2;
// The options available to the user
repeated ValidationOption presented_option = 3;
}
}
// The resolution choices chosen by the user from the issue dialog
message IssueDialogChoices {
repeated Choice choice = 1;
// A single choice made by the user
message Choice {
optional ValidationOption chosen_option = 1;
}
}
}
// 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;
// Resource Manager opened as Resource Picker Dialog
RESOURCE_PICKER_DIALOG_OPEN = 17;
// 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 hides dependent module assets
DEPENDENT_MODULES_SHOWN = 18;
DEPENDENT_MODULES_HIDDEN = 19;
// User shows or hides libraries assets
LIBRARIES_SHOWN = 7;
LIBRARIES_HIDDEN = 8;
// User shows or hides framework assets
FRAMEWORK_SHOWN = 20;
FRAMEWORK_HIDDEN = 21;
// User shows or hides theme attributes assets
THEME_ATTR_SHOWN = 22;
THEME_ATTR_HIDDEN = 23;
// User enables a filter by resource type (E.g: Filter 'vector' Drawables)
ENABLE_FILTER_BY_TYPE = 24;
// 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;
// When the user manually refreshes the preview of a resource
REFRESH_RES_PREVIEW = 25;
// When the user manually refreshes all previews whithin a ResourceType
REFRESH_ALL_RES_TYPE_PREVIEWS = 26;
}
// 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;
NAVIGATION = 8;
MENU = 9;
// Animation related resources (animator, interpolator, transition, etc.)
ANIMATION = 10;
STYLE = 11;
// Any other value-like resource (plurals, integers, etc.)
VALUE = 12;
XML = 13;
}
}
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;
// Deprecated, excluded paths information not available anymore
ALL_EXCLUDED = 2 [deprecated = true];
// Deprecated, excluded paths information not available anymore
SOME_EXCLUDED = 3 [deprecated = true];
// Deprecated, excluded paths information not available anymore
NONE_EXCLUDED = 4 [deprecated = true];
CHECK_IGNORED = 5;
ENABLED_AUTO = 6;
ENABLED_MANUAL = 7;
}
}
// Event for memory settings configuration and recommendation
message MemorySettingsEvent {
// Kind of the event.
optional EventKind kind = 1;
// Current memory settings.
optional MemorySettings current = 2;
// Recommended memory settings.
optional MemorySettings recommended = 3;
// New memory settings changed by users (may or may not be saved yet).
optional MemorySettings changed = 4;
enum EventKind {
UNKNOWN = 0;
// Configuration dialog shown.
SHOW_CONFIG_DIALOG = 1;
// Users change the settings and save.
SETTINGS_CHANGE_SAVED = 2;
// Users change the settings but do not save.
SETTINGS_CHANGE_CANCELLED = 3;
// Session uses the non-default recommended heap size.
NON_DEFAULT_RECOMMENDATION_USED = 4;
// Users click the "Apply recommendation" button in the memory panel.
APPLY_RECOMMENDATION_BUTTON_CLICKED = 5;
// Recommendation notification shown.
SHOW_RECOMMENDATION = 6;
// Users click "Save and Restart" from recommendation notification.
SAVE_AND_RESTART = 7;
// Users click "Configure" from recommendation notification.
CONFIGURE = 8;
// Users click "Remind me later" from recommendation notification.
REMIND_ME_LATER = 9;
// Users click "Do not ask again" from recommendation notification.
DO_NOT_ASK = 10;
}
}
message MemorySettings {
optional int32 ide_xmx = 1;
optional int32 gradle_daemon_xmx = 2;
optional int32 kotlin_daemon_xmx = 3;
}
// Event related to studion update flow
message StudioUpdateFlowEvent {
optional Kind event_kind = 1;
// Version we are updating to, e.g. "182.5107.16.33.5314842"
optional string studio_new_version = 2;
// Set when event_kind = DIALOG_OPEN
optional DialogTrigger dialog_trigger = 3;
// Set when event_kind = DIALOG_CLICK_ACTION
// Some extra buttons can be added to the update dialog with
// the build xml entry. The action is to open provided link in the browser.
// Typically it is 'Release notes' button, but since it is not fixed,
// seems good to send the name of the action.
// This text comes as part of an update information xml from Google
// and does not contain any end user information.
optional string action_name = 4;
enum Kind {
UNKNOWN_KIND = 0;
NOTIFICATION_SHOWN = 1;
// User clicked on the notification update action
NOTIFICATION_UPDATE_LINK_CLICKED = 2;
// Update dialog was opened
DIALOG_OPEN = 3;
// Dialog button clicks
DIALOG_CLICK_UPDATE = 4;
DIALOG_CLICK_IGNORE = 5;
DIALOG_CLICK_LATER = 6;
// Other non-fixed actions (typically 'Release notes' link)
DIALOG_CLICK_ACTION = 7;
// Patch download result
PATCH_DOWNLOAD_SUCCESS = 8;
PATCH_DOWNLOAD_FAILURE = 9;
}
// What triggers update dialog to open
enum DialogTrigger {
UNKNOWN_DIALOG_TRIGER = 0;
// User clicks check for updates action to open dialog
MANUAL = 1;
// User clicked on the notification update action to open dialog
NOTIFICATION = 2;
}
}
// Contains information on what we show on the build output window when the
// build fails.
message BuildErrorMessage {
enum ErrorType {
UNKNOWN_ERROR_TYPE = 0;
JAVA_COMPILER = 1;
KOTLIN_COMPILER = 2;
CLANG = 3;
CMAKE = 4;
DATA_BINDING = 5;
XML_PARSER = 6;
AAPT = 7;
D8 = 8;
R8 = 9;
RESOURCE_AND_ASSET_MERGER = 10;
GENERAL_ANDROID_GRADLE_PLUGIN = 11;
INVALID_TOML_DEFINITION = 12;
CONFIGURATION_CACHE = 13;
}
enum FileType {
UNKNOWN_FILE_TYPE = 0;
// The file location is pointing to a build generated file.
BUILD_GENERATED_FILE = 1;
// The file location is pointing to a project file.
PROJECT_FILE = 2;
}
// The tool produced the error.
optional ErrorType error_shown_type = 1;
// Whether the file location was parsed and shown successfully.
optional bool file_location_included = 2;
// The included file type.
optional FileType file_included_type = 3;
// Whether the line location in file was parsed and shown successfully.
optional bool line_location_included = 4;
}
// Statistics for what we show on the build output window.
message BuildOutputWindowStats {
repeated BuildErrorMessage build_error_messages = 1;
}
// Statistics for Android Gradle Plugin DSL methods that are invoked in
// build scripts or by other Gradle plugins.
message GradlePluginDslUsageStats {
// A data point for each DSL method the user invokes.
repeated DslElementUse dsl_element_use = 1;
// Statistics for an individual Android Gradle Plugin DSL method
message DslElementUse {
// The DSL method called in the build script or by another Gradle Plugin
// This is an enum in android git:
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
// DslElementType
optional int32 type = 1;
// The number of times this method is called within this multi-project build
optional int32 count = 2;
}
}
// Information about how long DefaultActivityLocator blocked on getting
// a list of activities from the merged manifest.
message DefaultActivityLocatorStats {
// Whether getting information from the merged manifest blocked the UI thread.
optional bool blocks_ui_thread = 1;
// Whether we're leveraging an index to determine the module's activities.
optional bool index_based = 2;
// Whether DefaultActivityLocator used a potentially stale manifest (as
// opposed to blocking on a fresh view of the merged manifest).
optional bool used_potentially_stale_manifest = 3;
// How long it took us to obtain the list of activiteis
// from the merged manifest.
optional uint64 latency_ms = 4;
}
// Details for motion layout editor events
message MotionLayoutEditorEvent {
// List of event types available in motion layout editor
enum MotionLayoutEditorEventType {
UNKNOWN_EVENT_TYPE = 0;
CREATE_CONSTRAINT = 1;
CREATE_TRANSITION = 2;
CREATE_ONCLICK = 3;
TOGGLE_LAYOUT = 4;
CREATE_KEY_POSITION = 5;
CREATE_KEY_ATTRIBUTES = 6;
CREATE_KEY_CYCLE = 7;
CREATE_KEY_TRIGGER = 8;
CREATE_KEY_TIME_CYCLE = 9;
CONVERT_TO_CONSTRAINT = 10;
CONVERT_TO_SECTIONED_CONSTRAINT = 11;
CLEAR_CONSTRAINT = 12;
SHOW_TIMELINE = 13;
SHOW_CONSTRAINTSET = 14;
SHOW_LAYOUT = 15;
CONSTRAINT_TABLE_SELECT = 16;
LAYOUT_TABLE_SELECT = 17;
TIMELINE_TABLE_SELECT = 18;
MOTION_PLAY = 19;
MOTION_SPEED = 20;
MOTION_PAUSE = 21;
MOTION_DIRETION_TOGGLE = 22;
}
// Type of event
optional MotionLayoutEditorEventType type = 1;
}
// Details for Validation Tool events
// Note: Validation Tool was called multi view or visualization tool.
message MultiViewEvent {
// List of event types available in Validation Tool
enum MultiViewEventType {
UNKNOWN_EVENT_TYPE = 0;
OPEN_PIXEL_DEVICES = 1;
OPEN_PROJECT_LOCALES = 2;
OPEN_CUSTOM_CONFIGURATION_SETS = 3;
OPEN_COLOR_BLIND_MODE = 4;
OPEN_LARGE_FONT = 5;
OPEN_LARGE_DISPLAY = 6;
// Select wear device category in Validation Tool
OPEN_WEAR_DEVICES = 7;
OPEN_REFERENCE_DEVICES = 8;
// Select custom category which is created by user.
OPEN_USER_DEFINED_CUSTOM_SETS = 9;
}
// Mode of the editor associated to this Validation Tool
enum AssociatedSplitEditorMode {
UNKNOWN_MODE = 0;
TEXT_MODE = 1;
SPLIT_MODE = 2;
VISUAL_MODE = 3;
}
enum ToggleIssuePanel {
UNKNOWN_OPERATION = 0;
// Open issue panel from Validation Tool
OPEN_ISSUE_PANEL = 1;
// Close issue panel from Validation Tool
CLOSE_ISSUE_PANEL = 2;
}
// Type of event
optional MultiViewEventType type = 1;
// The mode of the editor to the Validation Tool window
optional AssociatedSplitEditorMode associated_split_editor_mode = 2;
// The event of opening or closing the issue panel in Validation Tool
optional ToggleIssuePanel toggle_issue_panel = 3;
}
// Details for Compose animation tooling event
message ComposeAnimationToolingEvent {
enum ComposeAnimationToolingEventType {
UNKNOWN_EVENT_TYPE = 0;
OPEN_ANIMATION_INSPECTOR = 1;
CLOSE_ANIMATION_INSPECTOR = 2;
// Track when the animation inspector is available for Compose previews.
ANIMATION_INSPECTOR_AVAILABLE = 3;
TRIGGER_PLAY_ACTION = 4;
TRIGGER_PAUSE_ACTION = 5;
ENABLE_LOOP_ACTION = 6;
DISABLE_LOOP_ACTION = 7;
CHANGE_ANIMATION_SPEED = 8;
TRIGGER_JUMP_TO_START_ACTION = 9;
TRIGGER_JUMP_TO_END_ACTION = 10;
CHANGE_START_STATE = 11;
CHANGE_END_STATE = 12;
TRIGGER_SWAP_STATES_ACTION = 13;
CLICK_ANIMATION_INSPECTOR_TIMELINE = 14;
DRAG_ANIMATION_INSPECTOR_TIMELINE = 15;
EXPAND_ANIMATION_CARD = 16;
COLLAPSE_ANIMATION_CARD = 17;
OPEN_ANIMATION_IN_TAB = 18;
CLOSE_ANIMATION_TAB = 19;
LOCK_ANIMATION = 20;
UNLOCK_ANIMATION = 21;
RESET_TIMELINE = 22;
DRAG_TIMELINE_LINE = 23;
// Open the picker to change the state of the animation.
OPEN_PICKER = 24;
}
// Type of event.
optional ComposeAnimationToolingEventType type = 1;
// Multiplier of the animation speed (e.g. 1.5x, 0.25x).
// Set when type is CHANGE_ANIMATION_SPEED.
optional float animation_speed_multiplier = 2;
}
// Details for Compose MultiPreview event
message ComposeMultiPreviewEvent {
// One for each new or modified node in the MultiPreview graph, in terms of
// annotation relations, detected when the process of finding preview
// elements is executed in a file.
repeated ComposeMultiPreviewNodeInfo multi_preview_nodes = 1;
// True if Compose Preview Lite Mode is enabled when logging the event.
optional bool is_compose_preview_lite_mode = 2;
// Information about MultiPreview, in particular as information about a node
// in the directed graph formed by a Composable function, and its related
// Preview and MultiPreview annotations.
message ComposeMultiPreviewNodeInfo {
enum NodeType {
UNKNOWN_NODE_TYPE = 0;
ROOT_COMPOSABLE_FUNCTION_NODE = 1;
MULTIPREVIEW_NODE = 2;
PREVIEW_NODE = 3;
}
// Type of node in the MultiPreview graph.
optional NodeType node_type = 1;
// Anonymized id for the Composable node that is the root of this graph.
optional int64 anonymized_composable_id = 2;
// Number of direct childs which are Preview annotations.
optional int32 preview_childs_count = 3;
// Number of direct childs which are MultiPreview annotations.
optional int32 multi_preview_childs_count = 4;
// Number of nodes in the subtree rooted at this node and defined by the
// graph traversal, which are Preview annotations.
optional int32 subtree_previews_count = 5;
// Number of nodes in the subtree rooted at this node and defined by the
// graph traversal, which are MultiPreview annotations.
optional int32 subtree_multi_previews_count = 6;
// Number of nodes in the subtree rooted at this node and defined by the
// graph traversal, which are not important for MultiPreview.
optional int32 subtree_useless_nodes_count = 7;
// Length of the path traversed from the root Composable to this node.
optional int32 depth_level = 8;
}
}
// Details for Compose Preview Lite Mode event
message ComposePreviewLiteModeEvent {
enum ComposePreviewLiteModeEventType {
UNKNOWN_EVENT_TYPE = 0;
// A file containing previews is opened and the preview(s) render.
OPEN_AND_RENDER = 1;
// Compose Preview Lite Mode was enabled/disabled.
PREVIEW_LITE_MODE_SWITCH = 2;
// Android Studio Essentials Mode was enabled/disabled.
STUDIO_ESSENTIALS_MODE_SWITCH = 3;
}
// Type of event
optional ComposePreviewLiteModeEventType type = 1;
// True if Compose Preview Lite Mode is enabled when logging the event.
// For switch events, the value is logged after the switch happens.
optional bool is_compose_preview_lite_mode = 2;
}
// Details for Preview refresh event
message PreviewRefreshEvent {
// A type corresponding to a preview tool or context in which the refresh
// happened
enum PreviewType {
UNKNOWN_TYPE = 0;
COMPOSE = 1;
WEAR = 2;
GLANCE = 3;
CUSTOM_VIEW = 4;
}
// The result of the refresh process as a whole. Note that this is not
// directly tied to the RenderResult of each preview being refreshed
enum RefreshResult {
UNKNOWN_RESULT = 0;
SUCCESS = 1;
SKIPPED = 2;
USER_CANCELLED = 3;
AUTOMATICALLY_CANCELLED = 4;
FAILED = 5;
}
optional PreviewType type = 1;
optional RefreshResult result = 2;
// The in queue time corresponds to the time that a refresh request waits
// inside the queue of a RefreshManager before being processed or skipped
optional int32 in_queue_time_millis = 3;
// The refresh time starts when the refresh request is taken out of the
// queue and starts to be processed and ends when the refresh process
// finishes or gets cancelled.
optional int32 refresh_time_millis = 4;
// The total number of previews not filtered out by the flows and present
// in the panel at once
optional int32 previews_count = 5;
// The number of previews out of previews_count that this refresh should
// have refreshed
optional int32 previews_to_refresh = 6;
// Some information for each preview that was actually rendered
repeated SinglePreviewRender preview_renders = 7;
message SinglePreviewRender {
enum RenderResult {
UNKNOWN_RESULT = 0;
SUCCESS = 1;
ERROR = 2;
}
optional RenderResult result = 1;
// True when the render also included executing the inflation step
optional bool inflate = 2;
// Quality value between 0 and 1 used for rendering
optional float render_quality = 3;
// Time taken by the render, including inflation time when corresponds
optional int32 render_time_millis = 4;
// Simple class name of the exception thrown in a render error, e.g.
// IllegalStateException or ClassNotFoundException
optional string render_exception_simple_name = 5;
}
}
// Details for Compose deploy event
message ComposeDeployEvent {
enum ComposeDeployEventType {
UNKNOWN_EVENT_TYPE = 0;
DEPLOY_FROM_GUTTER = 1;
DEPLOY_FROM_TOOLBAR = 2;
}
// Type of event.
optional ComposeDeployEventType type = 1;
}
// Details for Compose sample event
message ComposeSampleEvent {
enum ComposeSampleEventType {
UNKNOWN_EVENT_TYPE = 0;
// Sample project is opened (package name matches)
OPEN = 1;
}
// Type of event
optional ComposeSampleEventType type = 1;
}
// Details for import sample event
message ImportSampleEvent {
// The ID of the sample imported. This is not user content, it will always be
// a string generated by us since we publish the samples to the GitHub
// repositories
optional string import_sample_id = 1;
}
// The plugin identifier used in build attribution
message BuildAttributionPluginIdentifier {
enum PluginType {
UNKNOWN_TYPE = 0;
BUILD_SCRIPT = 1;
// Deprecated, use OTHER_PLUGIN instead
BINARY_PLUGIN = 2 [deprecated = true];
BUILD_SRC = 3;
OTHER_PLUGIN = 4;
}
// Either a binary plugin or a build script plugin
optional PluginType type = 1;
// The display name of the plugin, that is the string used in the build script
// when calling apply. ex: com.android.application, kotlin-android
// Should not be set in the case of a build script
optional string plugin_display_name = 2;
// The class name of the gradle plugin.
// ex: org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper
optional string plugin_class_name = 3;
}
// The task identifier used in build attribution
message BuildAttribuitionTaskIdentifier {
// The class name of the task
// ex: MergeResources, JavaPreCompileTask
optional string task_class_name = 1;
// The plugin that registered this task
optional BuildAttributionPluginIdentifier origin_plugin = 2;
}
// Data about tasks that always run
message AlwaysRunTasksAnalyzerData {
message AlwaysRunTask {
enum AlwaysRunReason {
UNKNOWN_REASON = 0;
NO_OUTPUTS_WITHOUT_ACTIONS = 1;
NO_OUTPUTS_WITH_ACTIONS = 2;
UP_TO_DATE_WHEN_FALSE = 3;
}
// Reason the task is always running
optional AlwaysRunReason reason = 1;
// The origin plugin of the always running task
// Deprecated, use task_identifier instead
optional BuildAttributionPluginIdentifier plugin_identifier = 2
[deprecated = true];
// The always running task identifier
optional BuildAttribuitionTaskIdentifier task_identifier = 3;
}
// The always running tasks detected by the analyzer
repeated AlwaysRunTask always_run_tasks = 1;
}
// Data about non incremental annotation processors
message AnnotationProcessorsAnalyzerData {
message NonIncrementalAnnotationProcessor {
// The duration of applying the annotation processor
optional int64 compilation_duration_ms = 1;
// The class name of the annotation processor.
// ex: dagger.internal.codegen.ComponentProcessor,
// com.google.auto.value.processor.AutoValueProcessor
optional string annotation_processor_class_name = 2;
}
// The non incremental annotation processors detected by the analyzer
repeated NonIncrementalAnnotationProcessor
non_incremental_annotation_processors = 1;
}
// Data about the critical path of the build
message CriticalPathAnalyzerData {
message PluginBuildData {
// Sum of build duration of tasks on the critical path that this plugin
// created
optional int64 build_duration_ms = 1;
// The plugin identifier
optional BuildAttributionPluginIdentifier plugin_identifier = 2;
}
// The total duration of the critical path
optional int64 critical_path_duration_ms = 1;
// The number of tasks on the critical path
optional int32 number_of_tasks_on_critical_path = 2;
// The critical path grouped by plugin contribution
repeated PluginBuildData plugins_critical_path = 3;
// The total duration of the tasks determining build duration
optional int64 tasks_determining_build_duration_ms = 4;
// The number of tasks determining build duration
optional int32 number_of_tasks_determining_build_duration = 5;
}
// Data about project configuration phase
message ProjectConfigurationAnalyzerData {
// Configuration data for a plugin
message PluginConfigurationData {
// The time it took to configure the plugin
optional int64 plugin_configuration_time_ms = 1;
// The plugin identifier
optional BuildAttributionPluginIdentifier plugin_identifier = 2;
}
message ConfigurationStep {
enum StepType {
UNKNOWN_STEP = 0;
NOTIFYING_BUILD_LISTENERS = 1;
RESOLVING_DEPENDENCIES = 2;
COMPILING_BUILD_SCRIPTS = 3;
EXECUTING_BUILD_SCRIPT_BLOCKS = 4;
OTHER = 5;
}
// The type of the configuration step
optional StepType type = 1;
// Configuration step duration
optional int64 configuration_time_ms = 2;
}
// Configuration data for a subproject
message ProjectConfigurationData {
// The total configuration time for the subproject
optional int64 configuration_time_ms = 1;
// The plugin configuration data for the subproject
repeated PluginConfigurationData plugins_configuration_data = 2;
// Project configuration steps that are not plugins configuration
repeated ConfigurationStep configuration_steps = 3;
}
// The configuration data for all subprojects configured during the build
repeated ProjectConfigurationData project_configuration_data = 1;
// The configuration data summed for all subproject configured during the
// build
optional ProjectConfigurationData overall_configuration_data = 2;
}
// Data about misconfigured tasks
message TasksConfigurationIssuesAnalyzerData {
// Set of tasks that declare the same output
message TasksSharingOutputData {
// Plugins that created the tasks declaring the same output
// Deprecated, use tasks_sharing_output instead
repeated BuildAttributionPluginIdentifier
plugins_created_sharing_output_tasks = 1 [deprecated = true];
// The tasks that are sharing the same output
repeated BuildAttribuitionTaskIdentifier tasks_sharing_output = 2;
}
// The sets of tasks that declare the same output as detected by the analyzer
repeated TasksSharingOutputData tasks_sharing_output_data = 1;
}
// Data about configuration cache compatibility
message ConfigurationCacheCompatibilityData {
enum CompatibilityState {
UNKNOWN_STATE = 0;
// Configuration cache property not set, AGP version is incompatible
AGP_NOT_COMPATIBLE = 1;
AGP_DOES_NOT_PROVIDE_PLUGINS_DATA = 2;
// CC property not set, some plugins detected as incompatible
INCOMPATIBLE_PLUGINS_DETECTED = 3;
// CC property not set, no plugins detected as incompatible
// but some unknown plugins or buildSrc code might be incompatible
INCOMPATIBLE_PLUGINS_NOT_DETECTED = 4;
// CC property set to true
CONFIGURATION_CACHE_TURNED_ON = 5;
CONFIGURATION_CACHE_TRIAL_FLOW_BUILD = 6;
// CC property set to false
CONFIGURATION_CACHE_TURNED_OFF = 7;
}
optional CompatibilityState compatibility_state = 1;
// Non empty only if INCOMPATIBLE_PLUGINS_DETECTED state.
repeated BuildAttributionPluginIdentifier incompatible_plugins = 2;
}
// Data about jetifier usage in the project
message JetifierUsageData {
enum JetifierUsageState {
UNKNOWN_STATE = 0;
JETIFIER_NOT_USED = 1;
// Jetifier is used in project
// but no existing checkJetifier task results found
JETIFIER_USED_CHECK_REQUIRED = 2;
JETIFIER_CAN_BE_REMOVED = 3;
JETIFIER_REQUIRED_FOR_LIBRARIES = 4;
}
optional JetifierUsageState jetifier_usage_state = 1;
// Size of the libraries list found by checkJetifier task
optional int32 number_of_libraries_require_jetifier = 2;
// True if this build had ran checkJetifier task
optional bool check_jetifier_task_build = 3;
}
message BuildDownloadsAnalysisData {
message RepositoryStats {
enum RepositoryType {
UNKNOWN_REPOSITORY = 0;
GOOGLE = 1;
MAVEN_CENTRAL = 2;
JCENTER = 3;
OTHER_REPOSITORY = 4;
}
// Type of the repository, if it is one of the known ones.
optional RepositoryType repository_type = 1;
optional int32 success_requests_count = 2;
optional int64 success_requests_total_time_ms = 3;
optional int64 success_requests_total_bytes_downloaded = 4;
optional int32 failed_requests_count = 5;
optional int64 failed_requests_total_time_ms = 6;
optional int64 failed_requests_total_bytes_downloaded = 7;
// Missed request is when file was not found in the repository.
// These are not marked as failed but data downloaded is 0 bytes.
optional int32 missed_requests_count = 8;
optional int64 missed_requests_total_time_ms = 9;
}
// Aggregated result per repository requested for file downloads.
repeated RepositoryStats repositories = 1;
}
message TaskCategoryIssuesData {
enum TaskCategoryIssue {
UNKNOWN_ISSUE = 0;
NON_FINAL_RES_IDS_DISABLED = 1;
NON_TRANSITIVE_R_CLASS_DISABLED = 2;
RESOURCE_VALIDATION_ENABLED = 3;
MINIFICATION_ENABLED_IN_DEBUG_BUILD = 4;
}
repeated TaskCategoryIssue reported_issues = 1 [packed = true];
}
// Data about build attribution analyzers
message BuildAttributionAnalyzersData {
// Total build time in microseconds
optional int64 total_build_time_ms = 1;
// Data from the always running tasks analyzer
optional AlwaysRunTasksAnalyzerData always_run_tasks_analyzer_data = 2;
// Data from the annotation processors analyzer
optional AnnotationProcessorsAnalyzerData
annotation_processors_analyzer_data = 3;
// Data from the critical path analyzer
optional CriticalPathAnalyzerData critical_path_analyzer_data = 4;
// Data from the project configuration analyzer
optional ProjectConfigurationAnalyzerData
project_configuration_analyzer_data = 5;
// Data from the tasks configuration issues analyzer
optional TasksConfigurationIssuesAnalyzerData
tasks_configuration_issues_analyzer_data = 6;
// Data from configuration caching compatibility analyzer
optional ConfigurationCacheCompatibilityData
configuration_cache_compatibility_data = 7;
// Data from jetifier usage analyzer
optional JetifierUsageData jetifier_usage_data = 8;
// Data from downloads analyzer
optional BuildDownloadsAnalysisData downloads_analysis_data = 9;
// Data from task category issues
optional TaskCategoryIssuesData task_category_issues_data = 10;
}
// Data about build attribution performance
message BuildAttributionPerformanceStats {
// The duration it takes from when the build is finished, until all build
// attribution analyzers finish
optional int64 post_build_analysis_duration_ms = 1;
// The duration it takes to build the UI
optional int64 ui_creation_duration_ms = 2;
// The latency introduced by the tooling API events (the duration from
// when the build is finished until when the build finished event is received)
optional int64 tooling_api_build_finished_event_latency_ms = 3;
// The number of partial result files generated in AGP which corresponds to
// the number of build services created per the build, which corresponds to
// the number of classloaders.
optional int32 number_of_generated_partial_results = 4;
}
// Stats about build attribution
message BuildAttributionStats {
enum BuildAnalysisStatus {
UNKNOWN_STATUS = 0;
// Build successful, analysis successful.
SUCCESS = 1;
// Build failed, no analysis done.
BUILD_FAILURE = 2;
// Build analyzer failed during events processing or post-processing.
ANALYSIS_FAILURE = 3;
}
enum BuildType {
UNKNOWN_BUILD_TYPE = 0;
REGULAR_BUILD = 1;
// Build triggered from Build Analyzer configuration cache warning page.
CONFIGURATION_CACHE_TRIAL_FLOW_BUILD = 2;
// Build triggered from Build Analyzer jetifier warning page.
CHECK_JETIFIER_BUILD = 3;
}
// Data from build attribution analyzers
optional BuildAttributionAnalyzersData build_attribution_analyzers_data = 1;
// Stats about the performance of build attribution
optional BuildAttributionPerformanceStats
build_attribution_performance_stats = 2;
// The session id is a UUID tracking a single build report generated
// to associate build attribution events together
optional string build_attribution_report_session_id = 3;
optional BuildAnalysisStatus build_analysis_status = 4;
optional BuildType build_type = 5;
}
// Tracks user interaction with build attribution UI.
message BuildAttributionUiEvent {
enum EventType {
UNKNOWN_TYPE = 0;
// New build attribution tab created.
TAB_CREATED = 1;
// Tab was opened by the user.
TAB_OPENED_WITH_TAB_CLICK = 2;
TAB_OPENED_WITH_BUILD_OUTPUT_LINK = 3;
// User closed the tab completely.
TAB_CLOSED = 4;
// User switched to another tab (e.g. back to build or sync).
TAB_HIDDEN = 5;
// New content is shown in existing build attribution tab.
CONTENT_REPLACED = 6;
// User clicked 'more info' link on one of the report pages.
HELP_LINK_CLICKED = 7;
// User switched to another page of the report.
PAGE_CHANGE_TREE_CLICK = 8;
PAGE_CHANGE_TREE_KEYBOARD = 9;
PAGE_CHANGE_LINK_CLICK = 10;
// User clicked on issue report link.
GENERATE_REPORT_LINK_CLICKED = 11;
// User used copy button from report dialog.
REPORT_DIALOG_TEXT_COPY_CLICKED = 12;
// User closed report dialog.
REPORT_DIALOG_CLOSED = 13;
// Sent to mark the moment when current build info becomes inaccessible.
// It can be as a result of a new build or closing the project.
USAGE_SESSION_OVER = 14;
// Tab was opened using button in What's New Assistant.
TAB_OPENED_WITH_WNA_BUTTON = 15;
// View changed using data combo box.
DATA_VIEW_COMBO_SELECTED = 16;
// Data grouping changed using grouping control.
GROUPING_CHANGED = 17;
// Open memory settings button clicked.
OPEN_MEMORY_SETTINGS_BUTTON_CLICKED = 18;
// Applied filter state change on tasks or warnings page.
FILTER_APPLIED = 19;
CONFIGURE_GC_WARNING_SUSPEND_CLICKED = 20;
UPGRADE_AGP_BUTTON_CLICKED = 21;
RERUN_BUILD_WITH_CONFIGURATION_CACHE_CLICKED = 22;
TURN_ON_CONFIGURATION_CACHE_IN_PROPERTIES_LINK_CLICKED = 23;
// Update plugin button on configuration cache warnings.
UPDATE_PLUGIN_BUTTON_CLICKED = 24;
RUN_CHECK_JETIFIER_TASK_CLICKED = 25;
REMOVE_JETIFIER_PROPERTY_CLICKED = 26;
// Use of an action on jetifier warning page that searches for where
// the problematic library is defined in build files.
FIND_LIBRARY_DECLARATION_CLICKED = 27;
// Sent when tool window balloon is shown notifying about warnings.
TOOL_WINDOW_BALLOON_SHOWN = 28;
TOOL_WINDOW_BALLOON_DETAILS_LINK_CLICKED = 29;
TOOL_WINDOW_BALLOON_DONT_SHOW_AGAIN_LINK_CLICKED = 30;
MIGRATE_NON_TRANSITIVE_R_CLASS_ACTION_CLICKED = 31;
TAB_OPENED_WITH_ACTION = 32;
DEFENDER_WARNING_SUPPRESS_CLICKED = 33;
DEFENDER_WARNING_AUTO_EXCLUDE_SUCCESS = 34;
DEFENDER_WARNING_AUTO_EXCLUDE_FAILURE = 35;
DEFENDER_WARNING_SUPPRESS_GLOBALLY_CLICKED = 36;
DEFENDER_WARNING_MANUAL_INSTRUCTIONS_CLICKED = 37;
}
message Page {
// All different page types shown in build attribution report.
enum PageType {
UNKNOWN_PAGE = 0;
BUILD_SUMMARY = 1;
CRITICAL_PATH_TASKS_ROOT = 2;
CRITICAL_PATH_TASK_PAGE = 3;
PLUGINS_ROOT = 4;
PLUGIN_PAGE = 5;
PLUGIN_CRITICAL_PATH_TASKS_ROOT = 6;
PLUGIN_CRITICAL_PATH_TASK_PAGE = 7;
PLUGIN_TASK_SETUP_ISSUE_ROOT = 8;
PLUGIN_TASK_SETUP_ISSUE_PAGE = 9;
PLUGIN_ALWAYS_RUN_ISSUE_ROOT = 10;
PLUGIN_ALWAYS_RUN_NO_OUTPUTS_PAGE = 11;
PLUGIN_ALWAYS_RUN_UP_TO_DATE_OVERRIDE_PAGE = 12;
TASK_SETUP_ISSUE_ROOT = 13;
TASK_SETUP_ISSUE_PAGE = 14;
ALWAYS_RUN_ISSUE_ROOT = 15;
ALWAYS_RUN_NO_OUTPUTS_PAGE = 16;
ALWAYS_RUN_UP_TO_DATE_OVERRIDE_PAGE = 17;
ANNOTATION_PROCESSORS_ROOT = 18;
ANNOTATION_PROCESSOR_PAGE = 19;
CONFIGURATION_TIME_ROOT = 20;
CONFIGURATION_TIME_PROJECT = 21;
CONFIGURATION_TIME_PLUGIN = 22;
// Plugin warnings page when grouped by plugin.
PLUGIN_WARNINGS_ROOT = 23;
WARNINGS_ROOT = 24;
// Task warnings page when grouped by plugin.
PLUGIN_TASK_WARNINGS = 25;
CONFIGURATION_CACHE_ROOT = 26;
CONFIGURATION_CACHE_PLUGIN_WARNING = 27;
JETIFIER_USAGE_WARNING = 28;
DOWNLOADS_INFO = 29;
// Group by Task Category page in critical path window.
TASK_CATEGORY_PAGE = 30;
// Single task category page.
TASK_CATEGORY_CRITICAL_PATH_TASKS_ROOT = 31;
// Task page in Group by Category page.
TASK_CATEGORY_CRITICAL_PATH_TASK_PAGE = 32;
// Task category warning on 'Warnings' page
TASK_CATEGORY_WARNING_ROOT = 33;
WINDOWS_DEFENDER_WARNING_PAGE = 34;
// Not a page inside Build Analyzer but a place containing user actions
// so can be used to distinguish those from the value above.
WINDOWS_DEFENDER_NOTIFICATION = 35;
}
// Type of current page.
optional PageType page_type = 1;
// Page number of this type in current report.
// Used to distinguish different pages of the same type in the same report.
// ex: 1, 2, 3, 4...
optional int32 page_entry_index = 2;
}
// All external links used in the report.
enum OutgoingLinkTarget {
UNKNOWN_OUTGOING_LINK_TARGET = 0;
CRITICAL_PATH_HELP = 1;
DUPLICATE_OUTPUT_FOLDER_ISSUE_HELP = 2;
NO_OUTPUTS_DECLARED_ISSUE_HELP = 3;
UP_TO_DATE_EQUALS_FALSE_ISSUE_HELP = 4;
NON_INCREMENTAL_ANNOTATION_PROCESSORS_HELP = 5;
OPTIMIZE_CONFIGURATION_PHASE_HELP = 6;
CONFIGURE_GC = 7;
CONFIGURATION_CACHING = 8;
JETIFIER_MIGRATION = 9;
DOWNLOADS_INFO = 10;
RENDERSCRIPT_MIGRATE = 11;
AIDL_INFO = 12;
NON_TRANSITIVE_R_CLASS = 13;
WINDOWS_DEFENDER_INSTRUCTIONS = 14;
}
// Filter consists of items that might be included or not.
// Current filter state is represented by items that are included (turned on).
// Next ID: 11
enum FilterItem {
UNKNOWN_FILTER_ITEM = 0;
// Filters by task type.
SHOW_ANDROID_PLUGIN_TASKS = 1;
SHOW_THIRD_PARTY_TASKS = 2;
SHOW_PROJECT_CUSTOMIZATION_TASKS = 3;
// Filters by warning type.
SHOW_ALWAYS_RUN_TASK_WARNINGS = 4;
SHOW_TASK_SETUP_ISSUE_WARNINGS = 5;
SHOW_ANNOTATION_PROCESSOR_WARNINGS = 6;
SHOW_CONFIGURATION_CACHE_WARNINGS = 9;
SHOW_JETIFIER_USAGE_WARNINGS = 10;
// Other task attributes filters
SHOW_WARNINGS_FOR_TASK_NOT_FROM_CRITICAL_PATH = 7;
SHOW_TASKS_WITHOUT_WARNINGS = 8;
}
// Type of this build attribution UI event.
optional EventType event_type = 1;
// What page was opened when this event happened.
optional Page current_page = 2;
// What page will be opened because of this event (if page changes).
optional Page target_page = 3;
// The session id is a UUID tracking a single build report generated
// to associate build attribution events together
optional string build_attribution_report_session_id = 4;
// Target of the external link clicked. Set when event type HELP_LINK_CLICKED.
optional OutgoingLinkTarget link_target = 5;
// List of filter items applied now, set when event type FILTER_APPLIED.
repeated FilterItem applied_filters = 6;
// How much time did it take to react on this user action.
optional int64 event_processing_time_ms = 7;
// Width of the Build Analyzer tool window in pixels.
optional int64 width = 8;
// Height of the Build Analyzer tool window in pixels.
optional int64 height = 9;
}
message VsPluginEvent {
enum VsPluginEventType {
UNSPECIFIED_VS_PLUGIN_EVENT_TYPE = 0;
BUILD = 1;
DEBUG = 2;
}
optional VsPluginEventType type = 1;
optional BuildEvent build_event = 2;
optional DebugEvent debug_event = 3;
message BuildEvent {
// A GUID for the build session, this session ID is per project and is
// intended to correlate build events for a particular project.
optional string build_session = 1;
optional string msbuild_version = 2;
optional DeviceInfo.ApplicationBinaryInterface platform = 3;
optional string ndk_version = 4;
optional bool is_debug_build = 5;
optional int64 duration_ms = 6;
optional bool is_using_incredibuild = 7;
// The absolute path of the project on user's computer being built. This
// value is anonymized before uploaded with salt.
optional string msbuild_project_path = 12;
optional BuildEventType type = 8;
enum BuildEventType {
UNSPECIFIED_BUILD_EVENT_TYPE = 0;
BUILD_COMPLETE = 1;
COMPILE_COMPLETE = 2;
LINK_COMPLETE = 3;
GRADLE_COMPLETE = 4;
}
optional BuildCompleteInfo build_complete_info = 9;
// Information about building the whole project. This event is sent when the
// build completes.
message BuildCompleteInfo {
optional bool succeeded = 1;
optional int32 c_source_file_count = 3;
optional int32 cpp_source_file_count = 4;
}
optional CompileCompleteInfo compile_complete_info = 10;
// Information about compiling a batch of C/C++ files, e.g. one event per
// ClangCompile task run.
message CompileCompleteInfo {
// The language level of the majority of files.
optional LanguageLevel language_level = 1;
// The number of source files of this language level.
optional int32 source_file_count = 2;
// All batches of various language level in this project.
repeated LanguageLevelBatch all_languge_levels = 3;
message LanguageLevelBatch {
// The language level of this batch.
optional LanguageLevel language_level = 1;
// The number of source files in this batch.
optional int32 source_file_count = 2;
}
}
optional LinkCompleteInfo link_complete_info = 11;
// Information about linking.
message LinkCompleteInfo {
enum WellKnownLibraries {
UNSPECIFIED_WELL_KNOWN_LIBRARIES = 0;
ANGLE = 1;
BORINGSSL = 2;
CARTOGRAPHER = 3;
COCOS2D = 4;
DAYDREAM = 5;
FLATBUFFER = 6;
FREEGLUT = 7;
GAMESDK = 8;
GAUSSIANLIB = 9;
OGRE = 10;
OPENCV = 11;
OPENVR = 12;
OPEN_GL = 13;
OPEN_SSL = 14;
QT5 = 15;
SDL2 = 16;
SDL3 = 17;
SHADERC = 18;
SQLITE = 19;
UNITY = 20;
UNREAL = 21;
VULKAN = 22;
}
repeated WellKnownLibraries library_dependencies = 1;
}
enum LanguageLevel {
UNSPECIFIED_LANGUAGE_LEVEL = 0;
C89 = 1;
GNU89 = 2;
CPP98 = 3;
GNUPP98 = 4;
C99 = 5;
GNU99 = 6;
C11 = 7;
GNU11 = 8;
CPP11 = 9;
GNUPP11 = 10;
CPP14 = 11;
GNUPP14 = 12;
C17 = 13;
GNU17 = 14;
CPP17 = 15;
GNUPP17 = 16;
CPP20 = 17;
GNUPP20 = 18;
}
optional NativeBuildBackend native_build_backend = 13;
enum NativeBuildBackend {
UNSPECIFIED_NATIVE_BUILD_BACKEND = 0;
ORIGINAL_MSBUILD = 1;
MULTITOOLTASK_MSBUILD = 2;
NINJA = 3;
}
// TODO: try adding gradle info like the app_id.
}
message DebugEvent {
// A GUID for the debug session
optional string session = 1;
// The numerical version of Visual Studio, For example, 15.9.
optional string vs_version = 2;
optional DeviceInfo.ApplicationBinaryInterface platform = 3;
optional bool is_using_emulator = 4;
optional bool is_debug_build = 5;
// Time that it takes each debugging event to complete. For example, if the
// type is `START_WITHOUT_DEBUGGING`, this duration is how long it takes
// Visual Studio to send the intent to launch the main activity after build
// finishes.
optional int64 duration_ms = 6;
optional DebugEventType type = 7;
enum DebugEventType {
UNSPECIFIED_DEBUG_EVENT_TYPE = 0;
START_WITHOUT_DEBUGGING = 1;
START_WITH_DEBUGGING = 2;
// User cancels debugging/launching before app starts running or device is
// attached.
CANCEL = 3;
DEVICE_ATTACHED = 4;
ADD_BREAKPOINT = 5;
REMOVE_BREAKPOINT = 6;
HIT_BREAKPOINT = 7;
STEP_OVER = 8;
STEP_INTO = 9;
STEP_OUT = 10;
SUSPEND = 11;
STOP = 12;
CONTINUE = 13;
EXECUTE_COMMAND = 14;
}
}
}
message AppInspectionEvent {
enum Type {
UNKNOWN_EVENT_TYPE = 0;
// This is a wrapped event fired by an inspector. One of the inspector
// fields below should be set
INSPECTOR_EVENT = 1;
ERROR_OCCURRED = 2;
TOOL_WINDOW_OPENED = 3;
TOOL_WINDOW_HIDDEN = 4;
PROCESS_SELECTED = 5;
// To distinguish between user-initiated stops vs. crash-initiated stops,
// compare with |ERROR_OCCURRED| counts.
INSPECTION_STOPPED = 6;
// Inspection restarted after a crash
INSPECTION_RESTARTED = 7;
}
enum ErrorKind {
UNKNOWN_ERROR_KIND = 0;
INSPECTOR_CRASHED = 1;
APP_DISCONNECTED = 2;
}
message EnvironmentMetadata {
optional uint32 num_processes = 1;
optional uint32 num_devices = 2;
}
// The detailed type of this event
optional Type type = 1;
// Set if |type| is |INSPECTOR_EVENT|
oneof inspector_event {
// Event associated with the user interacting with the database inspector
DatabaseInspectorEvent database_inspector_event = 2;
// Event associated with the user interacting with the WorkManager inspector
WorkManagerInspectorEvent work_manager_inspector_event = 3;
// Event associated with the user interacting with the Network inspector
NetworkInspectorEvent network_inspector_event = 4;
// Event associated with the user interacting with background task inspector
BackgroundTaskInspectorEvent background_task_inspector_event = 5;
}
// Set if |type| is |ERROR_OCCURRED|
optional ErrorKind error_kind = 101;
// Set if |type| is |TOOL_WINDOW_OPENED|, |PROCESS_SELECTED|
optional EnvironmentMetadata environment_metadata = 102;
// App inspection fields above this point
// Inspector definitions below this point
message DatabaseInspectorEvent {
enum Type {
UNKNOWN_EVENT_TYPE = 0;
ERROR_OCCURRED = 1;
// A user modified a cell in a table
TABLE_CELL_EDITED = 2;
// A user manually requested refreshing some (potentially stale) data
TARGET_REFRESHED = 3;
STATEMENT_EXECUTED = 4;
STATEMENT_EXECUTION_CANCELED = 5;
LIVE_UPDATES_TOGGLED = 8;
OFFLINE_MODE_ENTERED = 9;
ENTER_OFFLINE_MODE_USER_CANCELED = 10;
OFFLINE_DATABASE_DOWNLOAD_FAILED = 11;
EXPORT_DIALOG_OPENED = 12;
EXPORT_OPERATION_COMPLETED = 13;
}
enum ErrorKind {
UNKNOWN_ERROR_KIND = 0;
IS_RECOVERABLE_TRUE = 1;
IS_RECOVERABLE_FALSE = 2;
IS_RECOVERABLE_UNKNOWN = 3;
}
enum TargetType {
UNKNOWN_TARGET_TYPE = 0;
SCHEMA_TARGET = 1;
TABLE_TARGET = 2;
}
enum StatementContext {
UNKNOWN_STATEMENT_CONTEXT = 0;
SCHEMA_STATEMENT_CONTEXT = 1;
GUTTER_STATEMENT_CONTEXT = 2;
USER_DEFINED_STATEMENT_CONTEXT = 3;
}
enum ConnectivityState {
UNKNOWN_CONNECTIVITY_STATE = 0;
CONNECTIVITY_ONLINE = 1;
CONNECTIVITY_OFFLINE = 2;
}
// Information relevant when we switch to offline mode
message OfflineModeMetadata {
// How long it takes to download database data from the device
optional int32 total_download_time_ms = 1;
// How many bytes of database data were downloaded
optional int64 total_download_size_bytes = 2;
}
// Information related to the opening of an "export data" dialog
message ExportDialogOpenedEvent {
enum Origin {
UNKNOWN_ORIGIN = 0;
SCHEMA_TREE_CONTEXT_MENU = 1;
SCHEMA_TREE_EXPORT_BUTTON = 2;
QUERY_RESULTS_EXPORT_BUTTON = 3;
TABLE_CONTENTS_EXPORT_BUTTON = 4;
}
// What context kicked off the opening of the export dialog?
optional Origin origin = 1;
}
// Information about an export that successfully completed.
message ExportOperationCompletedEvent {
enum Source {
UNKNOWN_SOURCE = 0;
DATABASE_SOURCE = 1;
TABLE_SOURCE = 2;
QUERY_SOURCE = 3;
}
enum SourceFormat {
UNKNOWN_SOURCE_FORMAT = 0;
FILE_FORMAT = 1;
IN_MEMORY_FORMAT = 2;
}
enum Destination {
UNKNOWN_DESTINATION = 0;
DB_DESTINATION = 1;
SQL_DESTINATION = 2;
CSV_DESTINATION = 3;
}
enum Outcome {
UNKNOWN_OUTCOME = 0;
SUCCESS_OUTCOME = 1;
CANCELLED_BY_USER_OUTCOME = 2;
// Export operation was cancelled due to entering/leaving offline mode.
CANCELLED_BY_OFFLINE_MODE_CHANGE_OUTCOME = 3;
// Cancelled due to normal flow, e.g. Studio shutting down.
CANCELLED_OTHER_OUTCOME = 4;
// Genuine error while performing an export operation.
ERROR_OUTCOME = 5;
}
// What kind of data was being exported
optional Source source = 1;
// What is the format of the source data
optional SourceFormat source_format = 2;
// What file type was the data exported as
optional Destination destination = 3;
// How long did the export take in milliseconds?
optional int32 export_duration_ms = 4;
// Was the operation successful? If not, how did it fail?
optional Outcome outcome = 5;
}
// The detailed type of this event
optional Type type = 1;
// Set if |type| is |ERROR_OCCURRED|
optional ErrorKind error_kind = 2;
// Set if |type| is |TARGET_REFRESHED|
optional TargetType target_type = 3;
// Set if |type| is |STATEMENT_EXECUTED|, |STATEMENT_EXECUTION_CANCELED|
optional StatementContext statement_context = 4;
// Set if |type| is |LIVE_UPDATING_TOGGLED|
optional bool live_updating_enabled = 5;
// Set if |type| is |STATEMENT_EXECUTED|, |STATEMENT_EXECUTION_CANCELED|,
// |EXPORT_OPERATION_COMPLETED|
optional ConnectivityState connectivity_state = 6;
// Set if |type| is |OFFLINE_MODE_ENTERED|
optional OfflineModeMetadata offline_mode_metadata = 7;
// Set if |type| is |EXPORT_DIALOG_OPENED|
optional ExportDialogOpenedEvent export_dialog_opened_event = 8;
// Set if |type| is |EXPORT_OPERATION_COMPLETED|
optional ExportOperationCompletedEvent export_completed_event = 9;
}
// Deprecated. Use BackgroundTaskInspectorEvent instead.
// Event associated with the user interacting with the WorkManager inspector
message WorkManagerInspectorEvent {
// The detailed type of this event
enum Type {
UNKNOWN_EVENT_TYPE = 0;
// Global events
// Fired when the user requests viewing data in table form
TABLE_MODE_SELECTED = 1;
// Fired when the user requests viewing data in graph form
GRAPH_MODE_SELECTED = 2;
// Worker-centric events
// Fired when a worker is actively selected by the user
WORK_SELECTED = 101;
// Fired when the user clicks on a link that jumps into code
JUMPED_TO_SOURCE = 102;
// Fired when the user requests stopping a running worker
WORK_CANCELED = 103;
}
// UI context associated with the current event
enum Context {
UNKNOWN_CONTEXT = 0;
// The current event is related to the table view
TABLE_CONTEXT = 1;
// The current event is related to the graph view
GRAPH_CONTEXT = 2;
// The current event is related to the details panel
DETAILS_CONTEXT = 3;
// The current event is related to the tool buttons bar
TOOL_BUTTON_CONTEXT = 4;
}
// Active UI layout when the current event was sent
enum Mode {
UNKNOWN_MODE = 0;
// The table view is currently active
TABLE_MODE = 1;
// The graph view is currently active
GRAPH_MODE = 2;
}
// Information about the chain of workers a worker is part of
message ChainInfo {
// The total number of all workers in this work chain
optional int32 worker_count = 1;
// The total number of all connections between workers
optional int32 dependency_count = 2;
// The longest chain of parents / children
optional int32 max_depth = 3;
// The widest chain of siblings
optional int32 max_width = 4;
}
// The detailed type of this event
optional Type type = 1;
// UI context associated with the current event
optional Context context = 2;
// Active UI layout when the current event was sent
optional Mode mode = 3;
// Set if event indicates we're going to update the graph view, i.e.
// |type| is |GRAPH_MODE_SELECTED|,
// |type| is |WORK_SELECTED| when |mode| is |GRAPH_MODE|
optional ChainInfo chain_info = 4;
}
// Events associated with users interacting with the network inspector
message NetworkInspectorEvent {
enum Type {
UNKNOWN_EVENT_TYPE = 0;
// User clicks on the migration prompt in profilers
MIGRATION_LINK_SELECTED = 1;
// User selects a connection to bring up the details panel
CONNECTION_DETAIL_SELECTED = 2;
// Connection details panel
// User selects the request tab
REQUEST_TAB_SELECTED = 3;
// User selects the response tab
RESPONSE_TAB_SELECTED = 4;
// User selects the callstack tab
CALLSTACK_TAB_SELECTED = 5;
// User creates a new rule
RULE_CREATED = 6;
// User edits the rule details panel
RULE_UPDATED = 7;
// A network response is intercepted
RESPONSE_INTERCEPTED = 8;
}
message RuleUpdatedEvent {
enum Component {
UNKNOWN_COMPONENT = 0;
URL_PROTOCOL = 1;
URL_HOST = 2;
URL_PORT = 3;
URL_PATH = 4;
URL_QUERY = 5;
FIND_CODE = 6;
FIND_REPLACE_CODE = 7;
ADD_HEADER = 8;
FIND_REPLACE_HEADER = 9;
FIND_REPLACE_BODY = 10;
REPLACE_BODY = 11;
}
optional Component component = 1;
}
message ResponseInterceptedEvent {
optional bool status_code = 1;
optional bool header_added = 2;
optional bool header_replaced = 3;
optional bool body_replaced = 4;
optional bool body_modified = 5;
}
optional Type type = 1;
optional RuleUpdatedEvent rule_detail_updated = 2;
optional ResponseInterceptedEvent response_intercepted = 3;
}
// Events associated with users interacting with the background task inspector
message BackgroundTaskInspectorEvent {
enum Type {
UNKNOWN_EVENT_TYPE = 0;
// General events
// User clicks on the migration prompt in profilers
MIGRATION_LINK_SELECTED = 1;
// Fired when the user requests viewing data in table form
TABLE_MODE_SELECTED = 2;
// Fired when the user requests viewing data in graph form
GRAPH_MODE_SELECTED = 3;
// Fired when the user clicks on a link that jumps into code
JUMPED_TO_SOURCE = 4;
// Entry selection events
// Clicks on a standalone job
JOB_SELECTED = 101;
// Clicks on a job associated with a work
JOB_UNDER_WORK_SELECTED = 102;
// Clicks on an alarm
ALARM_SELECTED = 103;
// Clicks on a standalone wake lock
WAKE_LOCK_SELECTED = 104;
// Clicks on a wake lock associated with a job
WAKE_LOCK_UNDER_JOB_SELECTED = 105;
// Fired when a worker is actively selected by the user
WORK_SELECTED = 106;
// Work events
// Fired when the user requests stopping a running worker
WORK_CANCELED = 201;
}
// UI context associated with the current event
enum Context {
UNKNOWN_CONTEXT = 0;
// The current event is related to the table view
TABLE_CONTEXT = 1;
// The current event is related to the graph view
GRAPH_CONTEXT = 2;
// The current event is related to the details panel
DETAILS_CONTEXT = 3;
// The current event is related to the tool buttons bar
TOOL_BUTTON_CONTEXT = 4;
}
// Active UI layout when the current event was sent
enum Mode {
UNKNOWN_MODE = 0;
// The table view is currently active
TABLE_MODE = 1;
// The graph view is currently active
GRAPH_MODE = 2;
}
// Information about the chain of workers a worker is part of
message ChainInfo {
// The total number of all workers in this work chain
optional int32 worker_count = 1;
// The total number of all connections between workers
optional int32 dependency_count = 2;
// The longest chain of parents / children
optional int32 max_depth = 3;
// The widest chain of siblings
optional int32 max_width = 4;
}
// The detailed type of this event
optional Type type = 1;
// UI context associated with the current event
optional Context context = 2;
// Active UI layout when the current event was sent
optional Mode mode = 3;
// Set if event indicates we're going to update the graph view, i.e.
// |type| is |GRAPH_MODE_SELECTED|,
// |type| is |WORK_SELECTED| when |mode| is |GRAPH_MODE|
optional ChainInfo chain_info = 4;
}
}
message AvdLaunchEvent {
// Describes how the AVD was launched. Always present.
optional LaunchType launch_type = 1;
// The class of the launched AVD. Always present.
optional AvdClass avd_class = 2;
enum LaunchType {
UNKNOWN_LAUNCH_TYPE = 0;
STANDALONE = 1;
IN_TOOL_WINDOW = 2;
}
enum AvdClass {
UNKNOWN_AVD_CLASS = 0;
GENERIC = 1;
FOLDABLE = 2;
TV = 3;
AUTOMOTIVE = 4;
WEARABLE = 5;
}
}
// Tracks user interaction with tooling support for Dagger
message DaggerEditorEvent {
enum Type {
UNKNOWN_EVENT_TYPE = 0;
NAVIGATED = 1;
OPENED_LINK_FROM_ERROR = 2;
FIND_USAGES_NODE_WAS_DISPLAYED = 3;
CLICKED_ON_GUTTER = 4;
GUTTER_WAS_DISPLAYED = 5;
}
enum ElementType {
UNKNOWN_ELEMENT_TYPE = 0;
PROVIDER = 1;
CONSUMER = 2;
COMPONENT = 3;
SUBCOMPONENT = 4;
MODULE = 5;
ENTRY_POINT = 6;
COMPONENT_METHOD = 7;
ENTRY_POINT_METHOD = 8;
ASSISTED_INJECTED_CONSTRUCTOR = 9;
ASSISTED_FACTORY_METHOD = 10;
}
// Detailed description of naviganion event
message NavigationMetadata {
enum NavigationContext {
UNKNOWN_CONTEXT = 0;
CONTEXT_GUTTER = 1;
CONTEXT_USAGES = 2;
}
// Context from which a navigation was called
optional NavigationContext context = 1;
// ElementType that is source of navigation
optional ElementType from_element = 2;
// ElementType that is target of navigation
optional ElementType to_element = 3;
}
// The detailed type of this event
optional Type type = 1;
// Set if |type| is |NAVIGATED|
optional NavigationMetadata navigation_metadata = 2;
// Set if |type| is |FIND_USAGES_NODE_WAS_DISPLAYED|, |CLICKED_ON_GUTTER|,
// |GUTTER_WAS_DISPLAYED|
optional ElementType owner_element_type = 3;
// Set if |type| is |FIND_USAGES_NODE_WAS_DISPLAYED|, |GUTTER_WAS_DISPLAYED|
optional int64 calculation_time_ms = 4;
// Indicates whether built-in (true) or custom Dagger (false) annotation
// search is in use.
optional bool using_built_in_annotation_search = 5;
}
// Track Android Test Retention events.
message AndroidTestRetentionEvent {
// Compatibility check result related to one retention snapshot.
message SnapshotCompatibility {
enum Result {
UNKNOWN_FAILURE = 0;
LOADABLE = 1;
SNAPSHOT_FILE_NOT_FOUND = 2;
EMULATOR_EXEC_NOT_FOUND = 3;
SNAPSHOT_PROTO_FILE_NOT_FOUND = 4;
EMULATOR_LOADABLE_CHECK_FAILURE = 5;
}
// Compatibility check result.
optional Result result = 1;
// More detailed failure reason returned by the emulator. Only set when
// result=EMULATOR_LOADABLE_CHECK_FAILURE.
optional EmulatorSnapshotFailureReason emulator_check_failure_reason = 2;
}
optional SnapshotCompatibility snapshot_compatibility = 1;
}
// Tracks UI impressions and user interactions in the test report UI.
message ParallelAndroidTestReportUiEvent {
// IDs to identify UI element.
enum UiElement {
UNKNOWN_UI_ELEMENT = 0;
TEST_SUITE_VIEW = 1;
TEST_SUITE_VIEW_TABLE_ROW = 2;
TEST_SUITE_DETAILS_HORIZONTAL_VIEW = 3;
TEST_SUITE_DETAILS_VERTICAL_VIEW = 4;
TEST_SUITE_LOG_VIEW = 5;
TEST_SUITE_DEVICE_INFO_VIEW = 6;
TEST_SUITE_OPT_IN_BANNER = 7;
TEST_SUITE_RETENTION_VIEW = 8;
// A dialog that is displayed after you click on run button
// to promote Android instrumentation test execution using
// Gradle from Android Studio. b/190209774.
GRADLE_ANDROID_TEST_RUNNER_OPT_IN_DIALOG = 9;
}
// All IDs of UI element that are displayed to users.
repeated UiElement impressions = 1;
// Tracks details information of a user interaction.
message UserInteraction {
// Represents type of a user interaction.
enum UserInteractionType {
UNKNOWN_UI_INTERACTION = 0;
CLICK = 1;
}
optional UserInteractionType type = 1;
// The UI element ID of which this user interaction occurred.
optional UiElement ui_element = 2;
// Represents result type of a user interaction.
enum UserInteractionResultType {
UNKNOWN_UI_INTERACTION_RESULT = 0;
ACCEPT = 1;
DISMISS = 2;
}
optional UserInteractionResultType result = 3;
}
// All interactions occurred.
repeated UserInteraction interactions = 2;
}
message ApplyChangesAgentError {
enum AgentPurpose {
UNKNOWN_PURPOSE = 0;
STARTUP_AGENT = 1;
APPLY_CHANGES = 2;
APPLY_CODE_CHANGES = 3;
}
// Framework & runtime classes that the Apply Changes agent may instrument.
enum TargetClass {
UNKNOWN_TARGET_CLASS = 0;
ACTIVITY_THREAD = 1;
DEX_PATH_LIST_ELEMENT = 2;
DEX_PATH_LIST = 3;
RESOURCES_MANAGER = 4;
THREAD = 5;
}
// When the last agent was attached, measured on the device's steady clock.
optional int64 agent_attach_time_ms = 1;
// How many times the AC agent has attached to this VM.
optional int32 agent_attach_count = 2;
// When this crash occurred, measured on the device's steady clock.
optional int64 event_time_ms = 3;
// The operation that caused the most recent agent to attach.
optional AgentPurpose agent_purpose = 4;
// If the failure was related to an instrumentation failure, this contains
// a list of classes that could not be instrumented.
repeated TargetClass target_classes = 5;
}
// Record of a single variant API use. Each variant API used will be recorded
// and can either be a Variant API method call, a VariantProperties API method
// call or an access to the Gradle public artifacts.
message VariantApiUsage {
// this represents a method call on the Variant interface and sub types.
repeated VariantAccess variant_access = 1;
// this represents a method call on the VariantProperties interface and sub
// types.
repeated VariantPropertiesAccess variant_properties_access = 2;
// this represents an access to any of the public artifact type we make
// available through the [Artifacts] interface. Access can be reading (GET) or
// producing (CREATE, APPEND, ...).
repeated ArtifactAccess artifact_access = 3;
}
// Record of a single public artifact access through the public variant API.
message ArtifactAccess {
// Identification of the type of artifact access.
optional AccessType type = 1;
// The artifact type used as an input (read).
// This is an enum in android git:
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
// will only be set when type == TRANSFORM_MANY
optional int32 input_artifact_type = 2;
// The artifact type used as an output.
// This is an enum in android git:
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
optional int32 output_artifact_type = 3;
enum AccessType {
UNKNOWN_ACCESS_TYPE = 0;
GET = 1;
GET_ALL = 2;
CREATE = 3;
APPEND = 4;
TRANSFORM = 5;
TRANSFORM_MANY = 6;
}
}
// Record of a single Variant API method call.
message VariantAccess {
// The method enum value that was used.
// This is the VariantMethodType enum in android git:
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
optional int32 type = 1;
}
// Record of a single VariantProperties API method call.
message VariantPropertiesAccess {
// The method enum value that was used.
// This is the VariantPropertiesMethodType enum in android git:
// tools/analytics-library/protos/src/main/proto/analytics_enums.proto
optional int32 type = 1;
}
message UpgradeAssistantComponentInfo {
enum UpgradeAssistantComponentKind {
UNKNOWN_ASSISTANT_COMPONENT_KIND = 0;
AGP_CLASSPATH_DEPENDENCY = 1;
GMAVEN_REPOSITORY = 2;
GRADLE_VERSION = 3;
JAVA8_DEFAULT = 4;
COMPILE_RUNTIME_CONFIGURATION = 5;
FABRIC_CRASHLYTICS = 6;
MIGRATE_TO_BUILD_FEATURES = 7;
REMOVE_SOURCE_SET_JNI = 8;
MIGRATE_TO_ANDROID_RESOURCES = 9;
REMOVE_BUILD_TYPE_USE_PROGUARD = 10;
REMOVE_IMPLEMENTATION_PROPERTIES = 11;
GRADLE_PLUGINS = 12;
MIGRATE_TO_INSTALLATION = 13;
MIGRATE_TO_EMULATOR_SNAPSHOTS = 14;
MIGRATE_TO_TEST_COVERAGE = 15;
MIGRATE_PACKAGING_OPTIONS = 16;
MIGRATE_TO_LINT = 17;
REWRITE_DEPRECATED_OPERATORS = 18;
REDUNDANT_PROPERTIES = 19;
ANDROID_MANIFEST_PACKAGE = 20;
R8_FULL_MODE_DEFAULT = 21;
RENDER_SCRIPT_DEFAULT = 22;
NON_TRANSITIVE_R_CLASS_DEFAULT = 23;
AIDL_DEFAULT = 24;
BUILD_CONFIG_DEFAULT = 25;
PROJECT_JDK = 26;
NON_CONSTANT_R_CLASS_DEFAULT = 27;
ANDROID_MANIFEST_EXTRACT_NATIVE_LIBS = 28;
ANDROID_MANIFEST_USE_EMBEDDED_DEX = 29;
SHADERS_DEFAULT = 30;
MIGRATE_TEST_COVERAGE_ENABLED = 31;
}
message Java8DefaultProcessorSettings {
enum NoLanguageLevelAction {
UNKNOWN_NO_LANGUAGE_LEVEL_ACTION = 0;
ACCEPT_NEW_DEFAULT = 1;
INSERT_OLD_DEFAULT = 2;
}
optional NoLanguageLevelAction no_language_level_action = 1;
}
message R8FullModeDefaultProcessorSettings {
enum NoPropertyPresentAction {
UNKNOWN_NO_PROPERTY_PRESENT_ACTION = 0;
ACCEPT_NEW_DEFAULT = 1;
INSERT_OLD_DEFAULT = 2;
}
optional NoPropertyPresentAction no_property_present_action = 1;
}
// The kind of processor.
optional UpgradeAssistantComponentKind kind = 1;
// Whether the processor is enabled.
optional bool is_enabled = 2;
// Settings of the processor. Will be set if kind is
// JAVA8_DEFAULT.
optional Java8DefaultProcessorSettings java8_default_settings = 3;
// Settings of the processor. Will be set if kind is
// R8_FULL_MODE_DEFAULT.
optional R8FullModeDefaultProcessorSettings r8_full_mode_default_settings = 4;
}
message UpgradeAssistantEventInfo {
enum UpgradeAssistantEventKind {
UNKNOWN_UPGRADE_ASSISTANT_EVENT_KIND = 0;
FIND_USAGES = 1;
PREVIEW_REFACTORING = 2;
EXECUTE = 3;
FAILURE_PREDICTED = 4;
SYNC_SKIPPED = 5;
SYNC_FAILED = 6;
SYNC_SUCCEEDED = 7;
INTERNAL_ERROR = 8;
BLOCKED = 9;
}
// The kind of event.
optional UpgradeAssistantEventKind kind = 1;
// The number of usages. Will be set if kind is FIND_USAGES,
// PREVIEW_REFACTORING, EXECUTE, SYNC_SKIPPED, SYNC_FAILED, or
// SYNC_SUCCEEDED.
optional int32 usages = 2;
// The number of files involved in the build. Will be set if
// kind is FIND_USAGES, PREVIEW_REFACTORING, EXECUTE,
// SYNC_SKIPPED, SYNC_FAILED, or SYNC_SUCCEEDED.
optional int32 files = 3;
}
message UpgradeAssistantComponentEvent {
// The uuid for a session of the upgrade assistant.
optional string upgrade_uuid = 1;
// The software version of AGP used by the project.
optional string current_agp_version = 2;
// The software version of AGP after upgrade.
optional string new_agp_version = 3;
// The software version of Gradle used by the project.
optional string current_gradle_version = 4;
// The software version of Gradle after upgrade.
optional string new_gradle_version = 5;
// Information about the component involved in the event.
optional UpgradeAssistantComponentInfo component_info = 6;
// Information about the event.
optional UpgradeAssistantEventInfo event_info = 7;
}
message UpgradeAssistantProcessorEvent {
// The uuid for a session of the upgrade assistant.
optional string upgrade_uuid = 1;
// The software version of AGP used by the project.
optional string current_agp_version = 2;
// The software version of AGP after upgrade.
optional string new_agp_version = 3;
// The software version of Gradle used by the project.
optional string current_gradle_version = 4;
// The software version of Gradle after upgrade.
optional string new_gradle_version = 5;
// Information about the components involved in the event.
repeated UpgradeAssistantComponentInfo component_info = 6;
// Information about the event.
optional UpgradeAssistantEventInfo event_info = 7;
}
// Details for interactive preview event
message InteractivePreviewEvent {
// List of event types available in an interactive preview
enum InteractivePreviewEventType {
UNKNOWN_EVENT_TYPE = 0;
REPORT_FPS = 1;
REPORT_STARTUP_TIME = 2;
}
// Type of event
optional InteractivePreviewEventType type = 1;
// Frame rate (frames per second) in the interactive preview session
optional int32 fps = 2;
// Interactive session duration in milliseconds
optional int32 duration_ms = 3;
// Number of user actions during the interactive session
optional int32 actions = 4;
// Startup time of the interactive session in milliseconds
optional int32 startup_time_ms = 5;
// Number of the previews on the surface the preview for this interactive
// session belongs to
optional int32 peer_previews = 6;
}
// A user's response to a survey
message SurveyResponse {
// Name of the survey
// This is one of a set of string constants set by Google,
// i.e. "analytics/surveys/satisfaction"
optional string name = 1;
// One or more responses selected by the user
repeated int32 responses = 2;
}
// Record of a registered transform
message AsmClassesTransformRegistration {
// List of scopes available for transforming
enum Scope {
UNKNOWN_SCOPE = 0;
PROJECT = 1;
ALL = 2;
}
// Name of the factory class supplied in registration.
// Example: FireperfClassVisitorFactory
optional string class_visitor_factory_class_name = 1;
// Scope of the classes to be transformed
optional Scope scope = 2;
}
// An action to set the asm frames computation mode for the asm classes
// transforms
message AsmFramesComputationModeUpdate {
// List of frames computation modes
enum Mode {
UNKNOWN_MODE = 0;
COPY_FRAMES = 1;
COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS = 2;
COMPUTE_FRAMES_FOR_INSTRUMENTED_CLASSES = 3;
COMPUTE_FRAMES_FOR_ALL_CLASSES = 4;
}
// The requested frames computation mode
optional Mode mode = 1;
}
// Deprecated, use SuggestedImportEvent instead.
// Tracks user interaction with auto-import support.
message AutoImportEvent {
option deprecated = true;
// GMaven coordinate, which is generated by Google(not user data).
optional string artifact_id = 1;
}
// Data collected by IntelliJ's FileTypeUsageCounterCollector regarding files
message FileUsage {
enum EventType {
UNKNOWN_TYPE = 0;
SELECT = 1;
EDIT = 2;
OPEN = 3;
CLOSE = 4;
}
// Anonymized guid representing file path
optional string file_path = 1;
// Type of file, i.e. kotlin, java
optional string file_type = 2;
// Plugin type
optional string plugin_type = 3;
// Plugin version
optional string plugin_version = 4;
// Event type
optional EventType event_type = 5;
}
// Details for live literal events
message LiveLiteralsEvent {
enum LiveLiteralsEventType {
UNKNOWN_EVENT_TYPE = 0;
// User manually enabled live literals
USER_ENABLE = 1;
// User manually disabled live literals
USER_DISABLE = 2;
// Device with live literals started
START = 3;
// Device with live literals stopped
STOP = 4;
// Aggregated live literals deployment stats
DEPLOY_STATS = 5;
}
// Describes the type of device used for LiveLiterals
enum LiveLiteralsDeviceType {
UNKNOWN_DEVICE_TYPE = 0;
PHYSICAL = 1;
EMULATOR = 2;
PREVIEW = 3;
}
// Type of event
optional LiveLiteralsEventType event_type = 1;
// Device type for [START, STOP] events
optional LiveLiteralsDeviceType device_type = 2;
// Deployment stats per device type
repeated LiveLiteralsDeployStats deploy_stats = 3;
// Details for live literals deploy stats
message LiveLiteralsDeployStats {
// The device type for these aggregated stats.
optional LiveLiteralsDeviceType device_type = 1;
// Devices of this type.
optional uint32 devices_count = 2;
// Number of successful deployments.
optional uint32 successful_deployments = 3;
// Number of failed deployments.
optional uint32 failed_deployments = 4;
// Stats for number of reported deployment problems.
optional PercentileEstimator number_of_problems = 5;
// Stats for deployment type.
optional PercentileEstimator deployment_time_ms = 6;
}
}
// Data collected when running Migrate to Non-Transitive R class action.
message NonTransitiveRClassMigrationEvent {
// The uuid for a session of the migration.
optional string migration_uuid = 1;
enum NonTransitiveRClassMigrationEventKind {
UNKNOWN_MIGRATION_EVENT_KIND = 0;
FIND_USAGES = 1;
PREVIEW_REFACTORING = 2;
EXECUTE = 3;
SYNC_SKIPPED = 4;
SYNC_FAILED = 5;
SYNC_SUCCEEDED = 6;
}
// The kind of event.
optional NonTransitiveRClassMigrationEventKind kind = 2;
// The number of usages. Will be set if kind is FIND_USAGES,
// PREVIEW_REFACTORING or EXECUTE.
optional int32 usages = 3;
}
// Tracks user interaction with suggested import support.
message SuggestedImportEvent {
// GMaven coordinate, which is generated by Google(not user data).
// E.g. androidx.recyclerview:recyclerview
optional string artifact_id = 1;
}
// Data collected by IntelliJ's RefreshProgress
message VfsRefresh {
// Duration of the VFS refresh in milliseconds
optional uint64 duration_ms = 1;
}
// Tracks user interactions with signing wizard
message SigningWizardEvent {
enum SigningWizardFailureCause {
FAILURE_CAUSE_UNKNOWN = 0;
FAILURE_CAUSE_NO_MODULE_FACET = 1;
FAILURE_CAUSE_NO_MODULE_ROOT_PATH = 2;
FAILURE_CAUSE_NO_ANDROID_MODEL = 3;
FAILURE_CAUSE_NO_VARIANTS_SELECTED = 4;
FAILURE_CAUSE_ENCRYPTION_ERROR = 5;
FAILURE_CAUSE_COMPILE_ABORTED = 6;
FAILURE_CAUSE_COMPILE_ERRORS = 7;
FAILURE_CAUSE_CANNOT_CREATE_APK = 8;
FAILURE_CAUSE_ZIP_ALIGN_ERROR = 9;
}
enum SigningTargetType {
TARGET_TYPE_UNKNOWN = 0;
TARGET_TYPE_APK = 1;
TARGET_TYPE_BUNDLE = 2;
}
// Specify cause when signing fails
optional SigningWizardFailureCause failure_cause = 1;
// Details when building and signing a Gradle project
optional SigningTargetType target_type = 2;
// Number of modules in project
optional uint32 number_of_modules = 3;
// Number of variants selected for signing
optional uint32 number_of_variants = 4;
// Private key is stored?
optional bool is_private_key_exported = 5;
}
// File type information for a project
message FileType {
// Type of file, i.e. kotlin, java, xml
optional string file_type = 1;
// Plugin type, i.e. platform
optional string plugin_type = 2;
// Number of files of this type in the project
optional uint32 number_of_files = 3;
}
// Kotlin project configuration information logged by IntelliJ
message KotlinProjectConfiguration {
enum EventType {
TYPE_UNKNOWN = 0;
BUILD = 1;
}
// Build system, i.e. Gradle
optional string system = 1;
// plugin version
optional string plugin_version = 2;
// plugin name, i.e. org.jetbrains.kotlin
optional string plugin = 3;
// plugin type, i.e. JB_BUNDLED
optional string plugin_type = 4;
// platform, i.e. jvm
optional string platform = 5;
// indicates whether this a kotlin multiplatform programming project
optional bool is_multiplatform = 6;
// indicates the type of the configuration event (i.e. build)
optional EventType event_type = 7;
// bitfield for future flags added by kotlin plugin
optional uint64 event_flags = 8;
}
// Data collected by IntelliJ when a run is started
message RunStartData {
// Unique id for activity. This number is generated sequentially
// and exists only across the lifetime of the process.
optional int32 ide_activity_id = 1;
// Type of launch performed, i.e. Run, Debug, etc.
optional string executor = 2;
// Type of run configuration, i.e. AndroidRunConfigurationType
optional string run_configuration = 3;
}
// Data collected by IntelliJ when a run is finished
message RunFinishData {
// duration of the run in ms
optional int64 duration_ms = 1;
// Unique id for activity
optional int32 ide_activity = 2;
}
// Event related to the device manager tool window, the replacement for the AVD
// manager
message DeviceManagerEvent {
// The kind of DeviceManagerEvent
optional EventKind kind = 1;
// The count of devices under the Virtual tab. Set when kind =
// VIRTUAL_DEVICE_COUNT.
optional int32 virtual_device_count = 2;
// The kind of DeviceManagerEvent
enum EventKind {
// Default kind
UNSPECIFIED = 0;
// The count of devices under the Virtual tab
VIRTUAL_DEVICE_COUNT = 1;
// The Launch action under the Virtual tab was clicked
VIRTUAL_LAUNCH_ACTION = 2;
// The Device file explorer action under the Virtual tab was clicked
VIRTUAL_DEVICE_FILE_EXPLORER_ACTION = 3;
// The Edit action under the Virtual tab was clicked
VIRTUAL_EDIT_ACTION = 4;
// The Pair device action under the Virtual tab was clicked
VIRTUAL_PAIR_DEVICE_ACTION = 5;
// The Duplicate action under the Virtual tab was clicked
VIRTUAL_DUPLICATE_ACTION = 6;
// The Wipe data action under the Virtual tab was clicked
VIRTUAL_WIPE_DATA_ACTION = 7;
// The Cold boot now action under the Virtual tab was clicked
VIRTUAL_COLD_BOOT_NOW_ACTION = 8;
// The Show on disk action under the Virtual tab was clicked
VIRTUAL_SHOW_ON_DISK_ACTION = 9;
// The Delete action under the Virtual tab was clicked
VIRTUAL_DELETE_ACTION = 10;
// The Stop action under the Virtual tab was clicked
VIRTUAL_STOP_ACTION = 11;
// The Device file explorer action under the Physical tab was clicked
PHYSICAL_DEVICE_FILE_EXPLORER_ACTION = 12;
// The Pair device action under the Physical tab was clicked
PHYSICAL_PAIR_DEVICE_ACTION = 13;
// The Delete action under the Physical tab was clicked
PHYSICAL_DELETE_ACTION = 14;
// The Unpair device action under the Virtual tab was clicked
VIRTUAL_UNPAIR_DEVICE_ACTION = 15;
// The Unpair device action under the Physical tab was clicked
PHYSICAL_UNPAIR_DEVICE_ACTION = 16;
}
}
// Event related to Wear OS emulator pairing assistant
message WearPairingEvent {
// The kind of WearPairingEvent
optional EventKind kind = 1;
// The kind of WearPairingEvent
enum EventKind {
// Default kind
UNSPECIFIED = 0;
// Assistant was launched with no pre-selected device (ie two columns)
SHOW_ASSISTANT_FULL_SELECTION = 1;
// Assistant was launched with a pre-selected device (ie single column)
SHOW_ASSISTANT_PRE_SELECTION = 2;
// "Successful Pairing" screen is displayed
SHOW_SUCCESSFUL_PAIRING = 3;
// "Install Wear OS Companion" screen is displayed
SHOW_INSTALL_WEAR_OS_COMPANION = 4;
// Devices lost connection and then automatically reconnected
AUTOMATIC_RECONNECT = 5;
}
}
// Event related to Wear Health Services Tool Window
message WearHealthServicesEvent {
// The kind of Wear Health Services event
optional EventKind kind = 1;
// Definition for the kind of Wear Health Services event
enum EventKind {
// Default
UNSPECIFIED = 0;
// WHS tool was bound to the emulator
EMULATOR_BOUND = 1;
// WHS tool had a connection error
CONNECTION_ERROR = 2;
// WHS tool successfully applied changes
APPLY_CHANGES_SUCCESS = 3;
// WHS tool failed to apply changes
APPLY_CHANGES_FAILURE = 4;
}
}
// Event for UiSettingsPanel in the Running Devices Tool Window
message UiDeviceSettingsEvent {
// The kind of UiSettingsPanel operation
optional OperationKind operation = 1;
enum OperationKind {
// Default
UNSPECIFIED = 0;
// Dark Theme or night mode was changed
DARK_THEME = 1;
// App Language was changed
APP_LANGUAGE = 2;
// TalkBack was turned on or off
TALKBACK = 3;
// Select to Speak was turned on or off
SELECT_TO_SPEAK = 4;
// Font Size was changed
FONT_SIZE = 5;
// Screen Density was changed
SCREEN_DENSITY = 6;
// Reset all UI settings to factory default values
RESET = 7;
// Gesture Navigation was changed
GESTURE_NAVIGATION = 8;
// Debug Layout was changed
DEBUG_LAYOUT = 9;
}
}
message GradleJdkInvalidEvent {
// Reason to consider JDK as invalid
optional InvalidJdkReason reason = 1;
// List of invalid JDK reasons
enum InvalidJdkReason {
// Default (not specified)
INVALID_JDK_UNSPECIFIED_REASON = 0;
// JDK is not specified (Neither gradleJvm nor project-jdk-name are defined)
INVALID_JDK_UNDEFINED_JDK = 1;
// gradleJvm is set to #USE_PROJECT_JDK but project-jdk-name is not defined
INVALID_JDK_PROJECT_JDK_UNDEFINED = 2;
// gradleJvm set to #USE_JAVA_HOME but JAVA_HOME is not a valid path
INVALID_JDK_JAVA_HOME_INVALID = 3;
// gradleJvm set to #USE_INTERNAL_JAVA but SystemProperties.javaHome is not
// a valid JDK
INVALID_JDK_INTERNAL_JAVA_INVALID = 4;
// A JDK name is defined but the JDK table does not have it
INVALID_JDK_NAME_NOT_IN_TABLE = 5;
// JDK can be found in the JDK table but the home path is not defined on it
INVALID_JDK_HOME_PATH_NOT_DEFINED = 6;
// There is no bin/javac in the JDK path
INVALID_JDK_NO_JAVAC = 7;
// Some required files are missing from the JDK path
INVALID_JDK_MISSING_FILES = 8;
// The java.home isn't defined in the project .gradle/config.properties
UNDEFINED_GRADLE_LOCAL_JAVA_HOME = 9;
// The java.home defined in the project .gradle/config.properties is invalid
INVALID_GRADLE_LOCAL_JAVA_HOME = 10;
// The org.gradle.java.home isn't defined in the gradle.properties
UNDEFINED_GRADLE_PROPERTIES_JAVA_HOME = 11;
// The org.gradle.java.home defined in the gradle.properties is invalid
INVALID_GRADLE_PROPERTIES_JAVA_HOME = 12;
// The system environment variable JAVA_HOME isn't defined
UNDEFINED_ENVIRONMENT_VARIABLE_JAVA_HOME = 13;
// The system environment variable JAVA_HOME is invalid
INVALID_ENVIRONMENT_VARIABLE_JAVA_HOME = 14;
// The system environment variable STUDIO_GRADLE_JDK isn't defined
UNDEFINED_ENVIRONMENT_VARIABLE_STUDIO_GRADLE_JDK = 15;
// The system environment variable STUDIO_GRADLE_JDK is invalid
INVALID_ENVIRONMENT_VARIABLE_STUDIO_GRADLE_JDK = 16;
// The studio config jdk.table.xml doesn't contain gradleJvm table entry
UNDEFINED_GRADLE_JVM_TABLE_ENTRY = 17;
// The studio config jdk.table.xml contains gradleJvm table entry with
// undefined javaHome path
UNDEFINED_GRADLE_JVM_TABLE_ENTRY_JAVA_HOME = 18;
// The studio config jdk.table.xml contains gradleJvm table entry with
// invalid javaHome path
INVALID_GRADLE_JVM_TABLE_ENTRY_JAVA_HOME = 19;
// Unsupported gradleJvm #GRADLE_LOCAL_JAVA_HOME macro to configure JDK
UNSUPPORTED_GRADLE_LOCAL_JAVA_HOME_MACRO = 20;
}
}
message GradleJdkConfigurationEvent {
// Gradle JDK configuration defined for the project
optional GradleJdkConfiguration configuration = 1;
// List of supported Gradle JDK configurations
enum GradleJdkConfiguration {
// Undefined Gradle JDK configuration
UNDEFINED_JDK_CONFIGURATION = 0;
// Use #JAVA_INTERNAL macro pointing to the studio embedded JDK
JAVA_INTERNAL = 1;
// Use #JAVA_HOME macro pointing to defined java home environment variable
JAVA_HOME = 2;
// Use #GRADLE_JAVA_HOME from org.gradle.java.home property value defined on
// gradle.properties file under GRADLE_USER_HOME, project or installation
GRADLE_JAVA_HOME = 3;
// Use #GRADLE_LOCAL_JAVA_HOME macro pointing to java.home property value
// defined on project ./gradle/config.properties file
GRADLE_LOCAL_JAVA_HOME = 4;
// Use STUDIO_GRADLE_JDK custom naming pointing to the environment variable
STUDIO_GRADLE_JDK = 5;
// Use jdk.table.xml entry defined under studio configuration directory
JDK_TABLE_ENTRY = 6;
}
}
message DeviceExplorerEvent {
optional Action action = 1;
// Number of files (Only valid for transfer actions)
optional int32 transfer_file_count = 2;
// Total size in bytes (Only valid for transfer actions)
optional int32 transfer_total_size = 3;
// Total time in ms (Only valid for transfer actions)
optional int32 transfer_time_ms = 4;
enum Action {
// Default
UNSPECIFIED = 0;
// The user changed the device in the dropdown.
DEVICE_CHANGE = 1;
// The user created a new file
NEW_FILE = 2;
// The user created a new directory
NEW_DIRECTORY = 3;
// The user downloaded a file using "save as"
SAVE_AS = 4;
// The user uploaded a file using "upload..."
UPLOAD = 5;
// The user uploaded a file using drag and drop
DROP = 6;
// The user deleted a path
DELETE = 7;
// The user resync'ed a path
SYNC = 8;
// The user copied a path
COPY_PATH = 9;
// The user expanded a data/data/* directory
EXPAND_APP_DATA = 10;
// The user force stopped a process
FORCE_STOP = 11;
// The user killed a process
KILL = 12;
// The user attached the debugger to a process
ATTACH_DEBUGGER = 13;
// The user refreshed the process list
REFRESH_PROCESSES = 14;
// The user toggled application ID filtering
APPLICATION_ID_FILTER_TOGGLED = 15;
// The user clicked on the files tab
FILES_TAB_CLICKED = 16;
// The user clicked on the process tab
PROCESS_TAB_CLICKED = 17;
// The user toggled on application ID filtering
APPLICATION_ID_FILTER_TOGGLED_ON = 18;
// The user toggled off application ID filtering
APPLICATION_ID_FILTER_TOGGLED_OFF = 19;
}
}
// Event raised when user opts in to metrics
message OptInToMetrics {}
// Event raised when user opts out of metrics
message OptOutOfMetrics {}
// Event related to detection of Version Catalog use in a project
message GradleVersionCatalogDetectorEvent {
// The state of Version Catalog use as detected
optional State state = 1;
enum State {
// Default state
UNKNOWN_GRADLE_VERSION_CATALOG_DETECTOR_STATE = 0;
// The build system does not support Version Catalogs
UNSUPPORTED = 1;
// The project does not use Version Catalogs
NONE = 2;
// There is explicit configuration or use of Version Catalogs in
// the project configuration files
EXPLICIT = 3;
// There is implicit use of Version Catalogs in the project
// without explicit mention in configuration files
IMPLICIT = 4;
}
}
// Events raised by user interactions with the coroutine debugger
message CoroutineDebuggerEvent {
enum Type {
// Default
UNKNOWN_EVENT_TYPE = 0;
// Studio tried to launch the coroutine debugger
LAUNCH_EVENT = 1;
}
optional Type type = 1;
// can be set if event type is LAUNCH_EVENT
// the user can enable or disable the coroutine debugger from studio settings
optional bool disabled_in_settings = 2;
}
// Events raised by user interactions with Splitting Tabs tool windows
message SplittingTabsUsageEvent {
// The type of Splitting Tabs tool window
optional ToolWindowType tool_window_type = 1;
// The event type
optional EventType event_type = 2;
// Set if type is PANEL_SPLIT
optional SplitType split_type = 3;
// The tool window subsystem using the Splitting Tabs component
enum ToolWindowType {
// Default
UNKNOWN_TOOL_WINDOW_TYPE = 0;
// A Logcat tool window.
LOGCAT_TOOL_WINDOW = 1;
}
// The type of event
enum EventType {
// Default
UNKNOWN_EVENT_TYPE = 0;
// A panel is created.
PANEL_CREATED = 1;
// A tab is created.
TAB_CREATED = 2;
// A panel is split.
PANEL_SPLIT = 3;
// A panel is moved.
PANEL_MOVED = 4;
// A panel is renamed.
PANEL_RENAMED = 5;
// A panel is closed.
PANEL_CLOSED = 6;
}
// Details of a Split event. Set if event_type is a PANEL_SPLIT
message SplitType {
// The orientation of the split
optional Orientation orientation = 1;
// The UI component the Split event was initiated from
optional Source source = 2;
// The orientation of the Split
enum Orientation {
// Default
UNKNOWN_ORIENTATION = 0;
// Horizontal orientation
HORIZONTAL = 1;
// Vertical orientation
VERTICAL = 2;
}
// The source of the event
enum Source {
// Default
UNKNOWN_SOURCE = 0;
// The split action in the Tab header
TAB = 1;
// The aplit action in the panel context menu
PANEL = 2;
}
}
}
// Events raised by user interactions with Logcat tool windows
message LogcatUsageEvent {
// The event type
optional Type type = 1;
// Historical, no longer used for writing as of 02/2022
optional LogcatFormatConfiguration format_dialog = 2 [deprecated = true];
// A logcat filter. Set when type is FILTER_ADDED_TO_HISTORY.
optional LogcatFilterEvent logcat_filter = 3;
// The Logcat format configuration set by the format dialog
optional LogcatFormatDialog format_dialog_applied = 4;
// A Logcat panel was added
optional LogcatPanelEvent panel_added = 5;
// The type of event
enum Type {
// Default
UNKNOWN_EVENT_TYPE = 0;
// Format Dialog Applied
FORMAT_DIALOG = 1;
// We don't want to log filters on every keystroke so we only log when a
// filter is added to history which is much less frequent.
FILTER_ADDED_TO_HISTORY = 2;
// A Logcat panel was added
PANEL_ADDED = 3;
}
// The state of a Logcat format dialog when applied
message LogcatFormatDialog {
// The Logcat format configuration the dialog represents
optional LogcatFormatConfiguration configuration = 1;
// The state of the "set as default" checkbox
optional bool is_default_preset = 2;
// True if the "Apply" button was used as opposed to "OK"
optional bool is_apply_button_used = 3;
}
// The state of a Logcat Format Dialog
message LogcatFormatConfiguration {
// Show timestamp field
optional bool is_show_timestamp = 1;
// Timestamp format includes the date
optional bool is_show_date = 2;
// Show the process id field
optional bool is_show_process_id = 3;
// Show the thread id field
optional bool is_show_thread_id = 4;
// Show the tag field
optional bool is_show_tags = 5;
// Show repeated tags
optional bool is_show_repeated_tags = 6;
// The width of the tag field
optional int32 tag_width = 7;
// Show the package field
optional bool is_show_packages = 8;
// Show repeated packages
optional bool is_show_repeated_packages = 9;
// The width of the package field
optional int32 package_width = 10;
// The preset configuration if applicable
optional Preset preset = 11;
// Historical, no longer used for writing as of 02/2022
optional bool is_default_preset = 12 [deprecated = true];
// Historical, no longer used for writing as of 02/2022
optional bool is_apply_button_used = 13 [deprecated = true];
// Logcat Format presets
enum Preset {
// Default
UNKNOWN_PRESET = 0;
// The standard format
STANDARD = 1;
// The compact format
COMPACT = 2;
}
}
// A summary of a logcat search filter
// (Logcat is the logging from an Android device the developer is testing
// their app on)
message LogcatFilterEvent {
// Summary of search terms pertaining to the log entry 'tag' field
optional TermVariants tag_terms = 1;
// Summary of search terms pertaining to the log entry 'package' field
optional TermVariants package_terms = 2;
// Summary of search terms pertaining to the log entry 'message' field
optional TermVariants message_terms = 3;
// Summary of search terms pertaining to entire log entry
optional TermVariants line_terms = 4;
// Number of search terms pertaining to entire log entry. Differs from the
// above as these terms do not use the 'line:' prefix.
optional int32 implicit_line_terms = 5;
// Number of search terms pertaining to the 'level' field.
optional int32 level_terms = 6;
// Number of search terms pertaining to the 'timestamp' field. As in
// "how long ago the entry was logged"
optional int32 age_terms = 7;
// Number of the search terms of the form 'package:mine'.
optional int32 package_project_terms = 8;
// Number of or operators in the expression
optional int32 or_operators = 9;
// Number of and operators in the expression
optional int32 and_operators = 10;
// Number of parentheses pairs in the expressions
optional int32 parentheses = 11;
// Does the filter contain an error
optional bool contains_errors = 12;
// Is this filter saved as a favorite
optional bool is_favorite = 13;
// Number of 'is:crash' search terms.
optional int32 crash_terms = 14;
// Number of 'is:stacktrace' search terms.
optional int32 stacktrace_terms = 15;
// Summary of search terms pertaining to the log entry 'process' field
optional TermVariants process_terms = 16;
// A summary of a term with regex and negated variants
message TermVariants {
// Number of normal terms (for example 'tag:foo')
optional int32 count = 1;
// Number of negated terms (for example '-tag:foo')
optional int32 count_negated = 2;
// Number of regex terms (for example 'tag~:foo')
optional int32 count_regex = 3;
// Number of negated regex terms (for example '-tag~:foo')
optional int32 count_negated_regex = 4;
}
}
// Details of a Logcat panel
message LogcatPanelEvent {
// True if the panel is created from a restore-state.
optional bool is_restored = 1;
// The formatting configuration of the panel
optional LogcatFormatConfiguration format_configuration = 2;
// The panel filter.
optional LogcatFilterEvent filter = 3;
// The buffer size.
optional int32 buffer_size = 4;
}
}
// Memory and CPU counters as reported by the OS
message OSMetrics {
// Processes started by Android Studio
// (Android Studio itself, daemons, emulator, etc.)
repeated Process processes = 1;
// Process details: start time, memory and CPU usage
message Process {
// Process ID
optional int32 pid = 1;
// Parent's process ID
optional int32 parent_pid = 2;
// Process start time
optional int64 start_timestamp_ms = 3;
// Total CPU used by the process so far
optional int64 total_cpu_use_milliseconds = 4;
// Detected process type
optional ProcessType type = 5;
// Type of last not-unknown parent process
optional ProcessType last_known_parent_type = 6;
// Linux, MacOS: Resident Set Size in 1024-units.
// Memory allocated to this process and currently in RAM
optional int64 rss = 7;
// Windows: Working Set Size (in bytes).
// Amount of memory this process needs to execute efficiently
optional int64 working_set_size = 8;
// Windows: Private Page Count (in bytes).
// Count of bytes accessible only by this process
optional int64 private_page_count = 9;
}
// Known processes started by Android Studio
enum ProcessType {
// Unknown process
UNKNOWN_PROCESS_TYPE = 0;
// Instance of Android Studio's JVM
ANDROID_STUDIO = 1;
// File-system notifier
FS_NOTIFIER = 2;
// Gradle daemon
GRADLE_DAEMON = 3;
// Emulator
EMULATOR = 4;
// Kotlin daemon
KOTLIN_DAEMON = 5;
// Console host (Windows only)
CONSOLE_HOST = 6;
}
}
message SdkIndexLibraryDetails {
// Group Id of library
optional string group_id = 1;
// Artifact Id of library
optional string artifact_id = 2;
// Version of library
optional string version_string = 3;
// Is this library reported as blocking publishing on Google Play?
optional bool is_blocking = 4;
}
message SdkIndexLoadingDetails {
enum SourceType {
UNKNOWN_SOURCE = 0;
// Test data, not to be used in production
TEST_DATA = 1;
// Cache file is too old but no network is available
CACHE_FILE_EXPIRED_NO_NETWORK = 2;
// Cache file is too old, network is available but was not able to update
CACHE_FILE_EXPIRED_NETWORK_ERROR = 3;
// Cache file exist but cannot tell if too old
CACHE_FILE_EXPIRED_UNKNOWN = 4;
// Cache file exists and has not expired
CACHE_FILE_RECENT = 5;
// Cache file and was just downloaded
CACHE_FILE_NEW = 6;
// Default data was used
DEFAULT_DATA = 7;
// Cache file exists and expired but server reported not modified
CACHE_FILE_NOT_MODIFIED = 8;
}
enum ReadErrorType {
NO_ERROR = 0;
// Function used to get the data caused an exception
DATA_FUNCTION_EXCEPTION = 1;
// Function used to get the data returned null
DATA_FUNCTION_NULL_ERROR = 2;
// There was an exception while decompressing the raw data
GZIP_EXCEPTION = 3;
// Exception while parsing decompressed data
INDEX_PARSE_EXCEPTION = 4;
// Resulted Index was null after parsing
INDEX_PARSE_NULL_ERROR = 5;
}
// Specify the source of the Index data
optional SourceType source_type = 1;
// What is the type of error when the Index could not be loaded
optional ReadErrorType read_error_type = 2;
}
message LiveEditEvent {
enum Status {
UNKNOWN = 0;
// LiveEdit push succeeded
SUCCESS = 1;
// LiveEdit push failed due to transport issues
PUSH_FAILED = 2;
// LiveEdit failed because the user added a method
UNSUPPORTED_ADDED_METHOD = 3;
// LiveEdit failed because the user removed a method
UNSUPPORTED_REMOVED_METHOD = 4;
// LiveEdit failed because the user added a class
UNSUPPORTED_ADDED_CLASS = 5;
// LiveEdit failed because the user added a field
UNSUPPORTED_ADDED_FIELD = 6;
// LiveEdit failed because the user removed a field
UNSUPPORTED_REMOVED_FIELD = 7;
// LiveEdit failed because of an error with inlining
UNSUPPORTED_MODIFY_INLINE = 8;
// LiveEdit failed because the user changed the class hierarchy
// DEPRECATED
// USE UNSUPPORTED_SUPER_CLASS or UNSUPPORTED_INTERFACE
UNSUPPORTED_MODIFY_INHERITANCE = 9 [deprecated = true];
// The following are from LiveEditUpdateException.Error
// We DO NOT log this. If this shows up in metrics, we know we have a bug at
// hand.
ANALYSIS_ERROR = 10;
// We DO NOT log this. If this shows up in metrics, we know we have a bug at
// hand.
COMPILATION_ERROR = 11;
NON_KOTLIN = 12;
NON_PRIVATE_INLINE_FUNCTION = 13;
UNABLE_TO_INLINE = 14;
UNABLE_TO_LOCATE_COMPOSE_GROUP = 15;
UNSUPPORTED_BUILD_SRC_CHANGE = 16;
// DEPRECATED
UNSUPPORTED_SRC_CHANGE_RECOVERABLE = 17 [deprecated = true];
// DEPRECATED
UNSUPPORTED_SRC_CHANGE_UNRECOVERABLE = 18 [deprecated = true];
UNSUPPORTED_TEST_SRC_CHANGE = 19;
UNABLE_TO_DESUGAR = 20;
INTERNAL_ERROR = 21;
KNOWN_ISSUE = 22;
// Semantic unsafe operations
PENDING_ERROR_IN_ANOTHER_FILE_AUTO_MODE = 23;
UNSUPPORTED_BUILD_LIBRARY_DESUGAR = 24;
BAD_MIN_API = 25;
UNSUPPORTED_COMPOSE_RUNTIME_VERSION = 26;
UNKNOWN_LIVE_UPDATE_DEPLOYER_ERROR = 27;
UNSUPPORTED_ADDED_ACCESS = 28;
UNSUPPORTED_REMOVED_ACCESS = 29;
UNSUPPORTED_MODIFIED_FIELD = 30;
UNSUPPORTED_CONSTRUCTOR = 31;
UNSUPPORTED_CLINIT = 32;
UNSUPPORTED_INIT = 33;
UNSUPPORTED_ENCLOSING_METHOD = 34;
UNSUPPORTED_INTERFACE = 35;
UNSUPPORTED_SUPER_CLASS = 36;
UNSUPPORTED_SIGNATURE = 37;
UNSUPPORTED_USER_CLASS_ADDED = 38;
UNSUPPORTED_WHEN_ENUM_PATH = 39;
KOTLIN_EAP = 40;
VIRTUAL_FILE_NOT_EXIST = 41;
INTERNAL_ERROR_NO_BINDING_CONTEXT = 42;
INTERNAL_ERROR_NO_COMPILER_OUTPUT = 43;
INTERNAL_ERROR_FILE_OUTSIDE_MODULE = 44;
INTERNAL_ERROR_FILE_CODE_GEN = 45;
INTERNAL_ERROR_FILE_COMPILE_COMMAND_EXCEPTION = 46;
INTERNAL_ERROR_FILE_MULTI_MODULE = 47;
NO_COMPOSE_PLUGIN = 48;
NO_IWI = 49;
}
enum Mode {
UNKNOWN_MODE = 0;
// The LiveEdit push was triggered automatically.
AUTO = 1;
// The LiveEdit push was triggered by the user on hot key.
MANUAL = 2;
// The LiveEdit push was triggered by the user on save.
ON_SAVE = 3;
}
// Result of the LiveEdit device push
optional Status status = 1;
// Whether the changed code involves a non-@Composable method
optional bool has_non_compose = 2;
// The duration of the LiveEdit compile, in milliseconds
optional int64 compile_duration_ms = 3;
// The duration of the LiveEdit push, in milliseconds
optional int64 push_duration_ms = 4;
// How the LiveEdit push was triggered
optional Mode mode = 5;
// Client-side salted (rotating every 28 days), sha256 of the project base
// path. Used to correlate LiveEdit usage with Compose projects.
optional string project_id = 6;
enum Device {
NONE = 0; // Possible bug or device disconnected between actions.
PHYSICAL = 1;
EMULATOR = 2;
MULTI = 3;
}
optional Device target_device = 7;
}
message GoogleLoginPluginEvent {
enum EventKind {
UNKNOWN_EVENT_TYPE = 0;
LOGIN_WITH_SUCCESS = 1;
LOGIN_WITH_FAILURE = 2;
// Forced logout is performed as a first step to recover from
// `TokenResponseException`
FORCE_LOGOUT = 3;
LOGOUT_WITH_SUCCESS = 5;
LOGOUT_WITH_FAILURE = 6;
LOGGED_IN_ON_STUDIO_START = 7;
}
message LoginFeatures {
repeated string features = 1; // e.g. "Gemini";
}
optional EventKind event = 1;
optional LoginFeatures features = 2;
}
message DeviceMirroringSession {
enum DeviceKind {
UNKNOWN_DEVICE_KIND = 0;
PHYSICAL = 1;
VIRTUAL = 2;
}
optional DeviceKind device_kind = 1;
optional int64 duration_sec = 2;
// Time it took to push the Screen Sharing Agent to the device.
optional int64 agent_push_time_millis = 3;
// Time between the end of agent push and the arrival of the first frame.
optional int64 first_frame_delay_millis = 4;
}
message DeviceMirroringAbnormalAgentTermination {
optional int32 exit_code = 1;
optional int64 run_duration_millis = 2;
}
message SystemHealthEvent {
enum SystemHealthEventType {
UNKNOWN_EVENT = 0;
// UI freeze detected
UI_FREEZE_STARTED = 1;
// Periodic update on freeze status
UI_FREEZE_UPDATE = 2;
// UI Freeze finished
UI_FREEZE_FINISHED = 3;
// Studio ecnountered JVM crash
EXIT_JVM_CRASH = 4;
// Graceful Studio exit
EXIT_GRACEFUL = 5;
// Studio shutdown without calling app exit hooks
// (but not due to JVM crash)
EXIT_NONGRACEFUL = 6;
// GC reported low memory warning
MEMORY_LOW_MEMORY_WARNING = 7;
// Long GC pause detected
MEMORY_LONG_GC_PAUSE = 8;
// OOM error detected
MEMORY_OOM_ERROR = 9;
// Exception reported to crash
EXCEPTION = 10;
}
enum DeadlockStatus {
UNKNOWN = 0;
// Always sent on UI_FREEZE_FINISHED
NO_DEADLOCK = 1;
// Likely a deadlock, but couldn't make final determination
SUSPECTED = 2;
// Deadlock detected
CONFIRMED = 3;
}
enum LowMemoryWarningType {
UNKNOWN_TYPE = 0;
// Low memory before GC
BEFORE_GC = 1;
// Low memory after GC
AFTER_GC = 2;
}
message UIFreeze {
// Unique freeze id (per session)
optional int64 freeze_id = 1;
// Duration of the freeze so far. Total duration when UI_FREEZE_FINISHED
optional int64 duration_ms = 2;
// Current status of deadlock detection
optional DeadlockStatus deadlock = 3;
}
message Exit {
// Session ID of:
// * previous session when EXIT_JVM_CRASH or EXIT_NONGRACEFUL
// * current session when EXIT_GRACEFUL
optional string studio_session_id = 1;
// For EXIT_JVM_CRASH, UNIX signal number
optional int32 jvm_signal_number = 2;
}
message Memory {
optional LowMemoryWarningType low_memory_warning_type = 1;
// Time spent in GC over reported period (GC pause reporting)
optional int64 period_cumulative_gc_time_ms = 2;
// Duration of the sampled period (GC pause reporting)
optional int64 period_duration_ms = 3;
}
message Exception {
// Stable signature for the exception
optional string stable_signature = 1;
// Crash ReportID if assigned for the report
// Special value "[timeout]" indicates report id was not set in required
// time.
optional string crash_report_id = 2;
// Index of the exception in this session
optional int64 exception_index = 3;
// Index of exception with this signature in this session
optional int64 signature_index = 4;
// As some reports may be skipped if they happen too often,
// this field tells how many were skipped for the given signature
optional int64 signature_reports_skipped = 5;
}
optional SystemHealthEventType event_type = 1;
// Additional information about current UI freeze
optional UIFreeze ui_freeze = 2;
// Additional information how this/previous session terminated
optional Exit exit = 3;
// Additional information about memory events
optional Memory memory = 4;
// Exception details
optional Exception exception = 5;
// Whether the IDE is in Essentials Mode
optional bool essentials_mode = 6;
}
message ComposePreviewCanvasEvent {
enum EventType {
UNKNOWN_EVENT_TYPE = 0;
SELECT_LAYOUT = 1;
}
enum LayoutName {
UNKNOWN_LAYOUT_NAME = 0;
LIST = 1;
GRID = 2;
GROUPED_LIST = 3;
GROUPED_GRID = 4;
GALLERY = 5;
}
// What kind of interaction or event happens in the compose preview canvas
optional EventType event_type = 1;
// The chosen layout id in the compose preview canvas, i.e. ListLayout
optional LayoutName layout_name = 2;
}
message AppQualityInsightsUsageEvent {
enum AppQualityInsightsUsageEventType {
UNKNOWN_EVENT = 0;
// AQI Panel is opened
ZERO_STATE = 1;
// AQI Fetches Crashes
CRASHES_FETCHED = 2;
// Interactions with Crash Details view
CRASH_LIST_DETAILS_VIEW = 3;
// AQI Stacktrace clicked
STACKTRACE_CLICKED = 4;
// AQI User leaves to see crash in console
FB_CONSOLE_LINK_CLICKED = 5;
// AQI matchers run
MATCHERS_INITIATED = 6;
// AQI Experiences an error
ERROR = 7;
// User closed/opened the issue from AQI
ISSUE_STATUS_CHANGED = 8;
// User added/removed/edited a note to an issue
NOTE = 9;
// AQI transitioned to offline or online mode
MODE_TRANSITION = 10;
// For measuring performance in AQI
PERFORMANCE_STATS = 11;
}
enum CrashType {
UNKNOWN_TYPE = 0;
FATAL = 1;
NON_FATAL = 2;
}
enum Confidence {
UNKNOWN_CONFIDENCE = 0;
LOW = 1;
MEDIUM = 2;
HIGH = 3;
}
enum Resolution {
UNKNOWN_RESOLUTION = 0;
LINE = 1;
METHOD = 2;
CLASS = 3;
FAILED = 4;
}
message AppQualityInsightsZeroStateDetails {
enum EmptyState {
UNKNOWN_STATE = 0;
// User isn't logged into Android Studio
NO_LOGIN = 1;
// User doesn't have a google-services.json in the module
// Deprecated by NO_ACCESS below
NO_FIREBASE = 2 [deprecated = true];
// User doesn't have access to any apps
NO_ACCESS = 3;
}
optional EmptyState empty_state = 1;
}
message AppQualityInsightsFetchDetails {
message VcsIntegrationDetails {
optional bool has_app_vcs_info = 1;
}
enum TimeFilter {
UNKNOWN_FILTER = 0;
THIRTY_DAYS = 1;
SIXTY_DAYS = 2;
NINETY_DAYS = 3;
SEVEN_DAYS = 4;
TWENTYFOUR_HOURS = 5;
}
enum FetchSource {
UNKNOWN_SOURCE = 0;
// Passive background refresh
BACKGROUND = 1;
// User initiated refresh
REFRESH = 2;
// User applied filter
FILTER = 3;
// User selected a different project
PROJECT_SELECTION = 4;
}
enum SeverityFilter {
UNKNOWN_SEVERITY = 0;
FATAL = 1;
NON_FATAL = 2;
ALL = 3;
}
enum SignalFilter {
UNKNOWN_SIGNAL = 0;
ALL_SIGNAL = 1;
EARLY_SIGNAL = 2;
FRESH_SIGNAL = 3;
REGRESSIVE_SIGNAL = 4;
REPETITIVE_SIGNAL = 5;
}
enum VisibilityFilter {
UNKNOWN_VISIBILITY = 0;
ALL_VISIBILITY = 1;
USER_PERCEIVED = 2;
}
// The Time filter used for this fetch of crashes
optional TimeFilter time_filter = 1;
// Whether the version filter is enabled for this fetch (false means all
// versions)
optional bool version_filter = 2;
// The Severity filter used for this fetch of crashes
optional SeverityFilter severity_filter = 3;
// True if the project fetched for was the default project for the variant
optional bool default_project = 4;
// The source triggering this fetch
optional FetchSource fetch_source = 5;
// The number of retries required to get the data (0 means it got it first
// try)
optional int32 num_retries = 6;
// Whether the fetch hit a cached result (true means no network request was
// made)
optional bool cache = 7;
// The signal filter used for this fetch
optional SignalFilter signal_filter = 8;
// Whether the os filter is enabled for this fetch (false means all OSes)
optional bool os_filter = 9;
// Whether the device filter is enabled for this fetch (false means all
// devices)
optional bool device_filter = 10;
// The visibility type used for this fetch.
optional VisibilityFilter visibility_filter = 11;
// The app vcs info got from this fetch.
optional VcsIntegrationDetails vcs_integration_details = 12;
}
message AppQualityInsightsCrashOpenDetails {
enum CrashOpenSource {
UNKNOWN_SOURCE = 0;
// Crash was opened in AQI panel
LIST = 1;
// Crash was opened directly from codebase
INSPECTION = 2;
}
optional CrashType crash_type = 1;
optional CrashOpenSource source = 2;
}
message AppQualityInsightsStacktraceDetails {
enum ClickLocation {
// Old events will by default have ClickLocation set to UNKNOWN_LOCATION
// when they should be treated as TARGET_FILE_HYPER_LINK
UNKNOWN_LOCATION = 0;
// Click on a resolved file target from the parsed trace
TARGET_FILE_HYPER_LINK = 1;
// Click on an attached "diff link" inlay element where the app vcs info
// is available
DIFF_INLAY = 2;
}
optional CrashType crash_type = 1;
// True if the file is part of the users project (ie: not a library)
optional bool local_file = 2;
optional Confidence confidence = 3;
optional Resolution resolution = 4;
optional ClickLocation click_location = 5;
}
message AppQualityInsightsConsoleLinkDetails {
enum ConsoleOpenSource {
UNKNOWN_SOURCE = 0;
// Console was opened from details view
DETAILS = 1;
// Console was opened by inspection quick-fix action
INSPECTION = 2;
}
optional CrashType crash_type = 1;
optional ConsoleOpenSource source = 2;
optional Confidence confidence = 3;
optional Resolution resolution = 4;
}
message AppQualityInsightsMatcherDetails {
enum MatcherSource {
UNKNOWN_SOURCE = 0;
// Matcher was run to fill in details panel
DETAILS = 1;
// Matcher was run to populate in code highlighting
INSPECTION = 2;
}
optional Confidence confidence = 1;
optional Resolution resolution = 2;
optional MatcherSource source = 3;
optional CrashType crash_type = 4;
}
message AppQualityInsightsErrorDetails {
enum ErrorSource {
UNKNOWN_SOURCE = 0;
// Occurred during scan for google-services.json
CONFIG_SCAN = 1;
// Occurred during RPC (fetching data)
RPC = 2;
// Occurred while trying to match stacktrace to local code
MATCHERS = 3;
// Occurred during authentication (fetching auth token)
AUTHENTICATION = 4;
}
optional ErrorSource source = 1;
optional int32 api_error_code = 2;
}
message AppQualityInsightsIssueChangedDetails {
enum StatusChange {
UNKNOWN_CHANGE = 0;
OPENED = 1;
CLOSED = 2;
}
optional StatusChange status_change = 1;
}
message AppQualityInsightsNotesDetails {
enum NoteEvent {
UNKNOWN_EVENT = 0;
ADDED = 1;
REMOVED = 2;
}
optional NoteEvent note_event = 1;
}
enum AppQualityInsightsModeTransitionDetails {
UNKNOWN_TRANSITION = 0;
ONLINE_TO_OFFLINE = 1;
OFFLINE_TO_ONLINE = 2;
}
message PerformanceStats {
message VersionControlBasedLineNumberMappingLatency {
optional int64 min_latency_ms = 1;
optional int64 p50_latency_ms = 2;
optional int64 p90_latency_ms = 3;
optional int64 max_latency_ms = 4;
}
optional VersionControlBasedLineNumberMappingLatency
vc_based_line_number_mapping_latency = 1;
}
enum AppQualityInsightsProductType {
UNKNOWN_PRODUCT_TYPE = 0;
CRASHLYTICS = 1;
PLAY_VITALS = 2;
}
// 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 = 1;
// Type of event
optional AppQualityInsightsUsageEventType type = 2;
// set when type = ZERO_STATE
optional AppQualityInsightsZeroStateDetails zero_state_details = 3;
// set when type = CRASHES_FETCHED
optional AppQualityInsightsFetchDetails fetch_details = 4;
// set when type = CRASH_LIST_DETAILS_VIEW
optional AppQualityInsightsCrashOpenDetails crash_open_details = 5;
// set when type = STACKTRACE_CLICKED
optional AppQualityInsightsStacktraceDetails stacktrace_details = 6;
// set when type = FB_CONSOLE_LINK_CLICKED
optional AppQualityInsightsConsoleLinkDetails console_link_details = 7;
// set when type = MATCHERS_INITIATED
optional AppQualityInsightsMatcherDetails matcher_details = 8;
// set when type = ERROR
optional AppQualityInsightsErrorDetails error_details = 9;
// set when type = ISSUE_STATUS_CHANGED
optional AppQualityInsightsIssueChangedDetails issue_changed_details = 10;
// set when type = NOTE
optional AppQualityInsightsNotesDetails notes_details = 11;
// This event occurred while AQI was in offline mode
optional bool is_offline = 12;
// set when type = MODE_TRANSITION
optional AppQualityInsightsModeTransitionDetails mode_transition_details = 13;
// Required for all event types.
optional AppQualityInsightsProductType product_type = 14;
// set when type = PERFORMANCE_STATS
optional PerformanceStats performance_stats = 15;
}
message FastPreviewEvent {
enum Type {
UNKNOWN = 0;
// Fast Preview was enabled by the user
USER_ENABLED = 1;
// Fast Preview was disable by the user
USER_DISABLED = 2;
// Fast Preview was disabled automatically after an error
AUTO_DISABLED = 3;
// Fast Preview compilation completed
COMPILE = 4;
}
message CompilationResult {
enum Status {
UNKNOWN = 0;
// Compilation was successful
SUCCESS = 1;
// The code could not be compiled because the compiler daemon
// failed to start
DAEMON_START_ERROR = 2;
// Compilation failed
FAILED = 3;
}
// Result of the Compilation
optional Status status = 1;
// Number of files compiled
optional int64 compiled_files = 2;
// The duration of the compilation, in milliseconds
optional int64 compile_duration_ms = 3;
// The duration of the refresh, in milliseconds
optional int64 refresh_duration_ms = 4;
}
// Result of the LiveEdit device push
optional Type type = 1;
// The compilation result when type = COMPILE
optional CompilationResult compilation_result = 2;
}
// Event containing a report on the memory usage of Android Studio components
message MemoryUsageReportEvent {
// Number of objects and their total size
message ObjectsStatistics {
// Number of objects
optional uint32 objects_count = 1;
// Total size of objects in bytes
optional uint64 total_size_bytes = 2;
}
// Characteristics of the object tree. It contains total number of objects in
// the subtree and their total size. It also contains the number and total
// size of objects declared in IntelliJ platform code from the subtree.
//
// MemoryTrafficStatistics is an outdated name: data here no longer represents
// memory traffic, but the name was kept to maintain backward compatibility.
// ObjectTreeStatistics is
// a better name.
message MemoryTrafficStatistics {
// Statistics of a subtree objects.
optional ObjectsStatistics total_stats = 1;
// Historical: we no longer track object creation timestamps
optional ObjectsStatistics new_generation_stats = 2 [deprecated = true];
// Historical: we no longer track object creation timestamps
repeated ObjectsStatistics old_generations_stats = 3 [deprecated = true];
// Statistics of IntelliJ platform declared objects from the subtree.
optional ObjectsStatistics platform_objects_stats = 4;
// Statistics of the objects from the subtree that are retained by the
// IntelliJ platform declared objects.
optional ObjectsStatistics platform_retained_stats = 5;
}
// Statistics of objects of the cluster(component or category). Contains data
// on the subtrees owned and retained by the cluster.
message ClusterObjectsStatistics {
// Statistics of the subtree owned by the cluster.
optional MemoryTrafficStatistics owned_cluster_stats = 1;
// Statistics of the subtree retained by the cluster.
optional MemoryTrafficStatistics retained_cluster_stats = 2;
}
// Statistics of the cluster.
message ClusterMemoryUsage {
// Label of the component/category.
optional string label = 1;
// Statistics of the cluster objects.
optional ClusterObjectsStatistics stats = 2;
// Number of the instances of tracked classes.
// (these class names are listed in memory_usage_reporting.textproto)
map<string, int32> instance_count_per_class_name = 3;
}
// Information about the cluster for which the owning component wasn't
// unambiguously determined
message SharedClusterMemoryUsage {
// Ids of the components, enumerated according to used_components field
repeated int32 ids = 1 [packed = true];
// Statistics of the objects from the shared cluster.
optional MemoryTrafficStatistics stats = 2;
}
// Metadata of the report collection
message MemoryUsageCollectionMetadata {
// Status code of the report collection.
enum StatusCode {
NO_ERROR = 0;
HEAP_IS_TOO_BIG = 1;
CANT_TAG_OBJECTS =
2; // JVM doesn't have a capability of tagging objects configured
OBJECTS_MAP_IS_TOO_BIG =
3; // The size of the object map exceeded the limit
CLASS_FIELDS_CACHE_IS_TOO_BIG =
4; // The size of the class fields cache exceeded the limit
WRONG_ROOT_OBJECT_ID = 5; // Something went wrong: one of the root
// objects had the wrong id after enumeration
LOW_MEMORY = 6; // LowMemory state occurred during the heap traversal
// (and collecting was immediately stopped)
AGENT_LOAD_FAILED = 7; // Loading object tagging java agent failed
POWER_SAVING_MODE_ENABLED = 8; // Power saving mode is enabled, report
// collection will be aborted to reduce
// the CPU load.
}
// Status code of the report collection
optional StatusCode status_code = 1;
// Statistics of the total memory used by Android Studio
optional MemoryTrafficStatistics total_heap_objects_stats = 2;
// Peak size of internal field cache
optional uint32 field_cache_count_peak = 3;
// Peak length of object queue used for traverse BFS
optional uint32 object_queue_length_peak = 4;
// number of objects that were enumerated during the first traverse, but
// GCed after that and were not reached during the second pass.
optional uint32 garbage_collected_before_2pass_count = 5;
// The time it took to collect the report
optional double collection_time_seconds = 6;
// Was the power save mode enabled at the time of sending the report
optional bool is_in_power_save_mode = 7;
// The number of unsuccessful attempts to access the field via reflection.
// This may be due, for example, to the fact that VM limited the access to
// some fields.
optional uint32 unsuccessful_field_accesses_count = 8;
// Uptime of the Java virtual machine at the start of the report collecting
optional double collection_start_timestamp_seconds = 9;
// Sequence number of report collection iteration that happened in this
// IDE session.
optional int32 collection_iteration = 10;
// Was essentials mode enabled at the time of sending the report
optional bool is_in_essentials_mode = 11;
}
// Statistics of the components
repeated ClusterMemoryUsage component_stats = 1;
// Statistics of the shared clusters
repeated SharedClusterMemoryUsage shared_component_stats = 2;
// Statistics of the categories
repeated ClusterMemoryUsage component_category_stats = 4;
// Report collection metadata
optional MemoryUsageCollectionMetadata metadata = 6;
}
message ManifestMergerStats {
// The following run times measure how long it takes to creating a new
// MergedManifestSnapshot, including calling into the manifest merger
// component. This corresponds to the amount of time spent in a cancellable
// read action.
// Histogram of run times with successful completion
optional Histogram success_run_time_ms = 1;
// Histogram of run times when execution was canceled due to read lock being
// canceled in favor of a write lock
optional Histogram canceled_run_time_ms = 2;
// Histogram of run times when execution failed with a parsing or other error
optional Histogram failed_run_time_ms = 3;
}
message ThreadingAgentUsageEvent {
// The number of times the threading agent verified that a method was invoked
// on a UI thread
optional int64 verify_ui_thread_count = 1;
// The number of times the threading agent verified that a method was invoked
// on a worker thread
optional int64 verify_worker_thread_count = 2;
}
message ProjectViewSelectionChangeEvent {
enum ProjectViewContent {
UNKNOWN = 0;
ANDROID = 1;
PROJECT = 2;
OTHER = 3;
}
// For init event 'before' will be UNKNOWN
optional ProjectViewContent view_before_change = 1;
optional ProjectViewContent view_after_change = 2;
}
message HeapReportEvent {
enum Status {
UNKNOWN = 0;
LOW_MEMORY_EVENT = 1;
INSUFFICIENT_DISK_SPACE = 2;
HEAP_TOO_SMALL = 3;
RATE_LIMITED = 4;
EXCESS_FREE_MEMORY = 5;
FORCED_GC = 6;
EXCESS_FREE_MEMORY_AFTER_GC = 7;
REPORT_ALREADY_PENDING = 8;
CAPTURE_SNAPSHOT_FAILED = 9;
ANALYSIS_STARTED = 10;
ERROR_DURING_ANALYSIS = 11;
ANALYSIS_FINISHED = 12;
REVIEW_DIALOG_SHOWN = 13;
REVIEW_ACCEPTED = 14;
REVIEW_DECLINED = 15;
REPORT_UPLOADED = 16;
REPORT_UPLOAD_FAILED = 17;
}
// mirrors com.android.tools.idea.diagnostic.report.MemoryReportReason
enum Reason {
NONE = 0;
USER_INVOKED = 1;
INTERNAL_USER_INVOKED = 2;
FREQUENT_LOW_MEMORY_NOTIFICATION = 3;
LOW_MEMORY = 4;
OUT_OF_MEMORY = 5;
}
optional Status status = 1;
optional Reason reason = 2; // set when status = LOW_MEMORY_EVENT
optional int64 freed_memory = 3; // set when status = FORCED_GC
}
message CreateDiagnosticReportAction {
enum ActionType {
UNKNOWN_ACTION_TYPE = 0;
CANCELLED = 1;
CREATED = 2;
}
// Indicates which action the user took
optional ActionType action_type = 1;
}
message DirectAccessUsageEvent {
enum DirectAccessUsageEventType {
UNKNOWN_EVENT = 0;
// User requested to reserve a device
RESERVE_DEVICE = 1;
// Connect during initial reservation or user requested to reconnect
CONNECT_DEVICE = 2;
// Video stream started from device
STREAM_STARTED = 3;
// User requested to extend current device reservation
EXTEND_RESERVATION = 4;
// User requested to end reservation
END_RESERVATION = 5;
// Device disconnected
DISCONNECT_DEVICE = 6;
}
enum FailureReason {
UNKNOWN_FAILURE = 0;
// Generic Reasons
USER_LOGGED_OUT = 1;
// CouroutineScope was cancelled leading to the failure.
SCOPE_CANCELLED = 2;
// Studio project is closing
PROJECT_CLOSING = 3;
// Disconnect Reasons
// Device failed to connect to ADB
CONNECTION_FAILED = 11;
// Device disconnected from ADB
ADB_DISCONNECTED = 12;
// Device disconnected due to latency
LATENCY_DISCONNECT = 13;
// Session ended normally or through ERROR
SESSION_ENDED = 14;
// User clicked disconnect before device could connect
DISCONNECT_BEFORE_CONNECTED = 15;
// End Reservation Reasons
// Server side failed to allocate a device or the request expired in queue
FAILED_TO_ALLOCATE_DEVICE = 21;
}
message ReserveDeviceDetails {
// True if reserve device request succeeded
optional bool success = 1;
// Time measured between the user clicking reserve (run) button and getting
// a reserved device
optional uint32 reserve_time_ms = 2;
}
message ConnectDeviceDetails {
// True if connect device request succeeded
optional bool success = 1;
// Reconnecting to reserved device or connecting during reservation request
optional bool reconnect = 2;
// Time taken to connect to device
optional uint32 connect_time_ms = 3;
}
message StreamStartedDetails {
// True if studio successfully received video stream from device
optional bool success = 1;
// Recorded latency of first stream
optional uint32 latency_ms = 2;
}
message ExtendReservationDetails {
enum ExtendReservationDuration {
NONE = 0;
THIRTY_MINUTES = 1;
SIXTY_MINUTES = 2;
FIFTEEN_MINUTES = 3;
}
// True if extend reservation request succeeded
optional bool success = 1;
// Duration for which session should be extended
optional ExtendReservationDuration extend_reservation_duration = 2;
}
message DisconnectDeviceDetails {
// True if device successfully disconnects
optional bool success = 1;
// True if user disconnected device, false if it was disconnected by other
// reasons such as reservation end or error
optional bool user_disconnected = 2;
}
message ConnectionMetrics {
// Maximum observed latency
optional uint32 max_latency_ms = 1;
// p50 latency
optional uint32 p50_latency_ms = 2;
// p90 latency
optional uint32 p90_latency_ms = 3;
}
message EndReservationDetails {
enum EndReservationType {
UNKNOWN = 0;
// Reservation ended due to an error on FTL side
ERROR = 1;
// Reservation time expired
EXPIRE = 2;
// User force checked-in the device
FORCE_CHECK_IN = 3;
}
// True if end reservation request succeeded
optional bool success = 1;
// User ended reservation or reservation expired
// Deprecated by end_reservation_type
optional bool user_ended = 2 [deprecated = true];
// Total reservation time
// MAX_VALUE: 4,294,967,295 -> ~49710 days
optional uint32 total_reservation_time_sec = 3;
// Average connection latency calculated over the entire session
// Deprecated by ConnectionMetrics
optional uint32 average_connection_latency_ms = 4 [deprecated = true];
// Tracks how the reservation ended.
optional EndReservationType end_reservation_type = 5;
// Connection metrics measured during the reservation
optional ConnectionMetrics connection_metrics = 6;
}
// Type of event
optional DirectAccessUsageEventType type = 1;
// Session ID of current reservation/session for tracking events
// during a session
// Client-side salted, sha256 of session ID with salt rotated every 28 day.
optional string device_session_id = 2;
// set when type = RESERVE_DEVICE
optional ReserveDeviceDetails reserve_device_details = 3;
// set when type = CONNECT_DEVICE
optional ConnectDeviceDetails connect_device_details = 4;
// set when type = STREAM_STARTED
optional StreamStartedDetails stream_started_details = 5;
// set when type = EXTEND_RESERVATION
optional ExtendReservationDetails extend_reservation_details = 6;
// set when type = END_RESERVATION
optional EndReservationDetails end_reservation_details = 7;
// set when any of the above event fails (success bool is marked false)
optional FailureReason failure_reason = 8;
// Set when type = DISCONNECT_DEVICE
optional DisconnectDeviceDetails disconnect_device_details = 9;
}
message SafeModeStatsEvent {
enum OS {
UNKNOWN_OS = 0;
WINDOWS = 1;
MAC = 2;
LINUX = 3;
}
enum EntryPoint {
UNKNOWN_ENTRY_POINT = 0;
SCRIPT = 1;
IDE = 2;
CONTEXT_MENU = 3;
POPUP = 4;
}
enum Trigger {
UNKNOWN_TRIGGER = 0;
STARTUP_FAILED = 1;
}
enum StartUpResult {
UNKNOWN_STARTUP_RESULT = 0;
SAFE_MODE_SUCCESS = 1;
STARTUP_SUCCESS_AFTER_SAFE_MODE = 2;
}
optional OS os = 1;
optional EntryPoint entry_point = 2;
optional Trigger trigger = 3;
optional StartUpResult start_up_result = 4;
optional string studio_version = 5;
optional string jdk_modified = 6;
optional string kotlin_modified = 7;
repeated string disabled_plugins = 8;
repeated string vmoptions_modified = 9;
}
message TSdkUAEvent {
oneof content {
StateUpdate state_update = 1;
FilterRun filter_run = 2;
UserMotion user_motion = 3;
}
message StateUpdate {
optional uint64 timestamp_ms = 1;
// The version of `active_steps`'s interpretation (step <-> bit index)
optional uint32 mapping_version = 2;
// The encoding of which step is active/inactive, as a bitvector
optional bytes active_steps = 3;
// The type of state update this entry is
optional Type type = 4;
// What does this state update describe?
enum Type {
UNSPECIFIED_TYPE = 0;
// The finalized initial state
INIT = 1;
// A post-init step completion change
DELTA = 2;
}
}
message FilterRun {
optional uint32 filter_id = 1;
optional uint32 filter_version = 2;
optional uint32 elapsed_ms = 3;
oneof result {
uint32 count = 4;
Problem problem = 5;
}
optional Origin origin = 6;
enum Problem {
UNSPECIFIED_PROBLEM = 0;
TIMEOUT = 1;
ERROR = 2;
}
// What kicked off this filter run?
enum Origin {
UNSPECIFIED_ORIGIN = 0;
// The "run all filters at assistant open" behavior
RUN_ON_START = 1;
// The user pressed a "rerun filter" button
RERUN_BUTTON = 2;
}
}
// Tracking user movement through the assistant
message UserMotion {
oneof motion {
Opened opened = 1;
Closed closed = 2;
}
// User opened part of the assistant
message Opened {
optional string block_id = 1;
}
// User closed part of the assistant w/ how long they were there
message Closed {
optional string block_id = 1;
optional uint64 elapsed_ms = 2;
}
}
}
message IntelliJNewUIState {
// Indicates whether the user has enabled the new IntelliJ UI
optional bool is_enabled = 1;
}
message KotlinGradlePerformance {
enum FirUsage {
UNSPECIFIED = 0;
NONE = 1;
PARTIAL = 2;
TOTAL = 3;
}
// Indicates whether FIR usage is total, partial, or none
optional FirUsage use_fir = 1;
optional string kotlin_api_version = 2; // e.g. 1.5.0
optional string kotlin_compiler_version = 3; // e.g. 1.8.0
optional string kotlin_language_version = 4; // e.g. 1.5.0
optional string kotlin_stdlib_version = 5; // e.g.1.8.0
optional string plugin_version = 6; // e.g.223-18.0-release
// Flags to indicate the presence of common compiler plugins
optional bool enabled_compiler_plugin_all_open = 7;
optional bool enabled_compiler_plugin_atomicfu = 8;
optional bool enabled_compiler_plugin_jpa_support = 9;
optional bool enabled_compiler_plugin_lombok = 10;
optional bool enabled_compiler_plugin_no_arg = 11;
optional bool enabled_compiler_plugin_parcelize = 12;
optional bool enabled_compiler_plugin_sam_with_receiver = 13;
// Indicates usage of Kotlin script
optional bool kts_used = 14;
}
message BuildOutputDownloadsInfoEvent {
enum View {
UNKNOWN_VIEW = 0;
SYNC_VIEW = 1;
BUILD_VIEW = 2;
}
enum Interaction {
UNKNOWN_INTERACTION = 0;
OPEN_DOWNLOADS_INFO_UI = 1;
CLICK_LEARN_MORE_LINK = 2;
SELECT_REPOSITORY_ROW = 3;
NOTIFICATION_TRIGGERED = 4;
NOTIFICATION_LINK_CLICK = 5;
}
optional View view = 1;
optional Interaction interaction = 2;
// 'true' if this build/sync already finished, 'false' if still running
optional bool build_finished = 3;
// Indicates time of this event in ms since this build/sync started
optional uint32 ms_since_build_start = 4;
}
message SmlResponseMetadata {
// Trace id (provided by the server) for this response
optional int64 rpc_global_id = 1;
// AIDA server-side experiment ids.
repeated int32 server_experiment_ids = 2;
}
message SmlCompletionEvent {
// DEPRECATED Use CompletionAggregateEvent instead
message CompletionRequest {
option deprecated = true;
enum Trigger {
UNKNOWN = 0 [deprecated = true];
USER = 1 [deprecated = true];
AUTOMATIC = 2 [deprecated = true];
}
// Historical: Not used starting with Android Studio 2023.2.1.11
optional Trigger trigger = 1 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
optional EditorFileType file_type = 2 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
optional uint32 prefix_length = 3 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
optional uint32 suffix_length = 4 [deprecated = true];
}
// DEPRECATED Use CompletionAggregateEvent instead
message CompletionError {
option deprecated = true;
// Historical: Not used starting with Android Studio 2023.2.1.11
optional int32 status_code = 1 [deprecated = true];
}
// DEPRECATED Use CompletionAggregateEvent instead
message CompletionResult {
option deprecated = true;
// Historical: Not used starting with Android Studio 2023.2.1.11
optional SmlResponseMetadata metadata = 1 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
optional uint64 latency_ms = 2 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
optional int32 num_completions = 3 [deprecated = true];
}
// DEPRECATED Use CompletionAggregateEvent instead
message CompletionResponse {
option deprecated = true;
// Historical: Not used starting with Android Studio 2023.2.1.11
optional CompletionResult result = 1 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
optional CompletionError backend_error = 2 [deprecated = true];
}
// DEPRECATED Use CompletionAggregateEvent instead
message CompletionShown {
option deprecated = true;
// Historical: Not used starting with Android Studio 2023.2.1.11
optional SmlResponseMetadata metadata = 1 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
optional int32 shown_suggestion_index = 2 [deprecated = true];
}
// DEPRECATED Use CompletionAggregateEvent instead
message CompletionAccepted {
option deprecated = true;
// Historical: Not used starting with Android Studio 2023.2.1.11
optional SmlResponseMetadata metadata = 1 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
optional int32 accepted_suggestion_index = 2 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
optional int32 accepted_suggestion_length = 3 [deprecated = true];
}
message CompletionAggregateEvent {
enum Trigger {
UNKNOWN = 0;
// User explicitly triggered completion
USER = 1;
// Completion was automatically triggered
AUTOMATIC = 2;
}
optional string model_id = 1;
optional Trigger trigger = 2;
optional EditorFileType file_type = 3;
optional uint32 completions_shown = 4;
optional uint32 completions_accepted = 5;
optional Histogram latencies_ms = 6;
optional Histogram not_accepted_shown_durations_ms = 7;
}
oneof completion {
// Historical: Not used starting with Android Studio 2023.2.1.11
CompletionRequest request = 1 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
CompletionResponse response = 2 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
CompletionShown shown = 3 [deprecated = true];
// Historical: Not used starting with Android Studio 2023.2.1.11
CompletionAccepted accepted = 4 [deprecated = true];
CompletionAggregateEvent aggregate = 5;
}
}
message SmlTransformEvent {
message TransformRequest {
// Full file size if it's attached to a request.
// In case of multiple files it would be a sum of all sizes.
optional uint32 context_length = 1;
// A size of a code snippet passed to models:
// It could be a user selection in case of simple transform,
// or a region extended to the closest declaration.
optional uint32 selection_length = 2;
}
message TransformResult {
optional SmlResponseMetadata metadata = 1;
optional uint64 latency_ms = 2;
optional int32 num_transformations = 3;
}
message TransformError {
optional int32 status_code = 1;
}
message TransformResponse {
oneof response {
TransformResult result = 1;
TransformError backend_error = 2;
}
}
message TransformShown {
optional SmlResponseMetadata metadata = 1;
}
message TransformAccepted {
optional SmlResponseMetadata metadata = 1;
}
oneof transform {
TransformRequest request = 1;
TransformResponse response = 2;
TransformShown shown = 3;
TransformAccepted accepted = 4;
}
enum TransformKind {
UNKNOWN = 0;
CUSTOM = 1;
DOCUMENT = 2;
}
// The kind of transform, which will be used to differentiate
// metrics for Document action, Custom transforms etc.
optional TransformKind transform_kind = 5;
}
message SmlChatBotEvent {
message BotResponse {
optional SmlResponseMetadata metadata = 1;
optional uint64 latency_ms = 2;
// Currently, fact retrieval is a different API from the chat API. But
// retrieval's only use is for the chat API, so here we model it as part
// of the chat event since we'll very likely want to associate it with
// the corresponding chat event. (Note that retrieval by itself doesn't
// have a trace id, so including it here allows us to associate it with the
// chat event).
optional uint64 retrieval_latency_ms = 3;
}
message UserFeedback {
optional SmlResponseMetadata metadata = 1;
enum Sentiment {
UNKNOWN = 0;
POSITIVE = 1;
NEGATIVE = 2;
}
optional Sentiment sentiment = 2;
}
enum EntryPoint {
UNKNOWN = 0;
DOCUMENT = 1;
COMMENT = 2;
SIMPLIFY = 3;
EXPLAIN = 4;
OTHER_EDITOR = 5;
IDE_ERROR = 6;
SYNC = 7;
BUILD = 8;
CRASHLYTICS = 9;
PLAY_VITALS = 10;
LOGCAT = 11;
}
message BotInvoked {
optional SmlResponseMetadata metadata = 1;
optional EntryPoint entry_point = 2;
}
enum Action {
INVALID = 0;
MOVE_TO_EDITOR = 1;
MOVE_TO_CARET = 2;
MOVE_TO_NEW_FILE = 3;
ADD_DEPENDENCY = 4;
BROWSE_TOPIC = 5;
EXPLORE_IN_PLAYGROUND = 6;
MERGE_MANIFEST = 7;
MERGE_SUGGESTION = 9;
INSERT_RESOURCES = 10;
INSERT_NAME_SUGGESTIONS = 11;
}
message ActionInvoked {
optional SmlResponseMetadata metadata = 1;
optional Action action = 2;
optional EditorFileType file_type = 3;
}
message ActionResult {
optional SmlResponseMetadata metadata = 1;
optional Action action = 2;
optional EditorFileType file_type = 3;
optional bool success = 4;
}
message DependencySuggestion {
optional SmlResponseMetadata metadata = 1;
optional bool accepted = 2;
}
enum Command {
CMD_OTHER = 0;
CMD_ABOUT = 1;
CMD_HELP = 2;
CMD_CLEAR = 3;
CMD_HISTORY = 4;
CMD_CLOSE = 5;
CMD_SCREENSHOT = 6;
CMD_SAVE = 7;
CMD_ME = 8;
CMD_EDIT = 9;
CMD_UNDO = 10;
CMD_REDO = 11;
CMD_FORMAT = 12;
CMD_RENAME = 13;
CMD_BUILD = 14;
CMD_RUN = 15;
CMD_DEBUG = 16;
CMD_PROFILE = 17;
CMD_TEST = 18;
CMD_STOP = 19;
CMD_SYNC = 20;
CMD_TERMINAL = 21;
CMD_SPLIT = 22;
CMD_UNSPLIT = 23;
CMD_OPEN = 24;
CMD_GOTOTEST = 25;
}
message SlashAction {
optional Command command = 1;
}
message ParseResult {
optional SmlResponseMetadata metadata = 1;
optional EditorFileType file_type = 2;
// success indicates that the code snippet was able to be parsed
// without throwing any errors, e.g. PSI related exceptions.
optional bool success = 3 [deprecated = true];
// has_error indicates that the code snippet was parsed successfully,
// but contains one or more syntax errors.
optional bool has_error = 4;
optional bool did_timeout = 5;
}
enum CodeDomain {
UNDEFINED = 0;
COMPOSE = 1;
}
enum HallucinationType {
OTHER = 0;
// covers unresolved symbols, mismatched types in calls, wrong number
// of parameters, wrong receiver type, etc. - anything which means the
// model made up an API or used one in the wrong way.
BAD_API = 1;
// covers errors that arise when the semantics of composables are not
// followed, like invoking a composable from a non-composable context
COMPOSE_SEMANTICS = 2;
}
message HallucinationDetectorResult {
optional SmlResponseMetadata metadata = 1;
optional bool has_hallucination = 2;
optional EditorFileType file_type = 3;
// libraries, frameworks, or other categories applicable to the code snippet
repeated CodeDomain code_domains = 4 [packed = true];
// types of hallucinations detected in the snippet
repeated HallucinationType hallucination_types = 5 [packed = true];
optional bool did_timeout = 6;
}
oneof content {
BotResponse response = 1;
UserFeedback user_feedback = 2;
ActionInvoked action_invoked = 3;
ActionResult action_result = 4;
ParseResult parse_result = 5;
BotInvoked bot_invoked = 6;
SlashAction slash_action = 7;
DependencySuggestion dependency_suggestion = 8;
HallucinationDetectorResult hallucination_detector_result = 9;
}
}
message SmlConfigurationEvent {
// Whether SML features are available to this user.
optional bool sml_available = 1;
// Whether this user has started Studio Bot onboarding.
optional bool bot_onboarding_started = 4;
// Whether this user has completed Studio Bot onboarding.
optional bool bot_onboarding_completed = 5;
// User has ML completion enabled.
optional bool completion_enabled = 2;
// User has ML based fixes enabled.
optional bool transform_enabled = 3;
// User agrees to sending project context with queries
optional bool project_context_enabled = 6;
}
message SmlAiExcludeEvent {
// Paste into chat
optional bool paste_blocked = 1;
// Editor actions (e.g. document, simplify)
optional bool intention_action_blocked = 2;
// Passive editor effects/actions (e.g. transform)
optional bool passive_action_blocked = 3;
// Code included as context for a query
optional bool context_blocked = 4;
}
message SmlGeolocationEvent {
optional string model_id = 1;
optional bool check_successful = 2;
optional int32 grpc_error_response_code = 3;
}
message SmlCompletionRequestErrorEvent {
optional string model_id = 1;
optional int32 grpc_error_response_code = 3;
}
message TestScenarioEvent {
// Logged for every test scenario model invocation
message TestScenarioRequest {
// Length of the initial test scenario prompt
optional uint32 context_length = 1;
// Deprecated. FileType of target / selected file.
optional FileType target_file_type = 2 [deprecated = true];
// Deprecated. FileType of generated test file
optional FileType test_file_type = 3 [deprecated = true];
// EditorFileType of target / selected file
optional EditorFileType target_file_language = 4;
// EditorFileType of generated test file
optional EditorFileType test_file_language = 5;
}
message InconsistentCount {
// This is only logged if the number of test scenarios and actual test
// signatures do not match.
optional int32 test_scenarios_count = 1;
optional int32 test_signatures_count = 2;
}
oneof transform {
TestScenarioRequest request = 1;
InconsistentCount inconsistent_count = 2;
}
}
// An event fired up each time a device connects
message DeviceConnectedNotificationEvent {
enum DeviceConnectionType {
UNKNOWN_DEVICE_CONNECTION_TYPE = 0;
USB = 1;
SOCKET = 2;
}
optional DeviceConnectionType type = 1;
// ADB's detected device maximum speed (Mbps)
optional uint64 max_speed_mbps = 2;
// ADB's detected device negotiated speed (Mbps)
optional uint64 negotiated_speed_mbps = 3;
// Is the notification disabled by StudioFlags
optional bool speed_notifications_studio_disabled = 4;
// Is the notification disabled by user preferences
optional bool speed_notifications_user_disabled = 5;
}
message IDeviceUsageEvent {
// Identifier of the `IDevice` method
enum Method {
METHOD_UNSPECIFIED = 0;
GET_NAME = 1;
EXECUTE_SHELL_COMMAND_1 = 2;
EXECUTE_SHELL_COMMAND_2 = 3;
EXECUTE_SHELL_COMMAND_3 = 4;
EXECUTE_SHELL_COMMAND_4 = 5;
EXECUTE_SHELL_COMMAND_5 = 6;
GET_SYSTEM_PROPERTY = 7;
GET_SERIAL_NUMBER = 8;
GET_AVD_NAME = 9;
GET_AVD_PATH = 10;
GET_AVD_DATA = 11;
CREATE_AVD_DATA = 12;
GET_STATE = 13;
GET_PROPERTIES = 14;
GET_PROPERTY_COUNT = 15;
GET_PROPERTY = 16;
ARE_PROPERTIES_SET = 17;
SUPPORTS_FEATURE_1 = 18;
SUPPORTS_FEATURE_2 = 19;
SERVICES = 20;
TO_STRING = 21;
IS_ONLINE = 22;
IS_EMULATOR = 23;
IS_OFFLINE = 24;
IS_BOOT_LOADER = 25;
GET_CLIENTS = 26;
GET_CLIENT = 27;
GET_PROFILEABLE_CLIENTS = 28;
CREATE_FORWARD_1 = 29;
CREATE_FORWARD_2 = 30;
REMOVE_FORWARD = 31;
GET_CLIENT_NAME = 32;
PUSH_FILE = 33;
PULL_FILE = 34;
INSTALL_PACKAGE_1 = 35;
INSTALL_PACKAGE_2 = 36;
INSTALL_PACKAGE_3 = 37;
INSTALL_PACKAGES_1 = 38;
INSTALL_PACKAGES_2 = 39;
GET_LAST_INSTALL_METRICS = 40;
SYNC_PACKAGE_TO_DEVICE = 41;
INSTALL_REMOTE_PACKAGE = 42;
REMOVE_REMOTE_PACKAGE = 43;
UNINSTALL_PACKAGE = 44;
UNINSTALL_APP = 45;
ROOT = 46;
FORCE_STOP = 47;
KILL = 48;
IS_ROOT = 49;
GET_ABIS = 50;
GET_DENSITY = 51;
GET_VERSION = 52;
EXECUTE_REMOTE_COMMAND_1 = 53;
EXECUTE_REMOTE_COMMAND_2 = 54;
EXECUTE_REMOTE_COMMAND_3 = 55;
EXECUTE_REMOTE_COMMAND_4 = 56;
RAW_EXEC2 = 57;
STAT_FILE = 58;
UNSUPPORTED_METHOD = 59;
CREATE_REVERSE = 60;
REMOVE_REVERSE = 61;
}
// Whether this event is coming from `AdblibIDeviceWrapper` or `DeviceImpl`
enum SourceType {
SOURCE_TYPE_UNSPECIFIED = 0;
DEVICE_IMPL = 1;
ADBLIB_I_DEVICE_WRAPPER = 2;
}
// 'IDevice' method
optional Method method = 1;
// `IDevice` implementation
optional SourceType source_type = 2;
// Whether method threw an exception
optional bool is_exception = 3;
}
message AdbUsageEvent {
oneof event {
JdwpProcessPropertiesCollectorEvent process_properties_event = 1;
// Add other types of events, e.g. attaching debugger, etc
}
message JdwpProcessPropertiesCollectorEvent {
// Whether the collection is successful
optional bool success = 1;
// If failed then the type of failure
enum FailureType {
FAILURE_TYPE_UNSPECIFIED = 0;
// No response (handshake) when trying to use a `jdwp:<pid>` command
// to send HELO and FEAT commands
NO_RESPONSE = 1;
// Properties collection failed with ClosedChannelException
CLOSED_CHANNEL_EXCEPTION = 2;
// Error like:
// 'closed' error on device serial #emulator-5554 executing service
// 'jdwp:29038'
// at
// com.android.adblib.impl.services.AdbServiceRunner.readFailResponseAndThrow
CONNECTION_CLOSED_ERROR = 3;
// Other `IOException`
IO_EXCEPTION = 5;
// All other errors
OTHER_ERROR = 4;
}
optional FailureType failure_type = 2;
// If a property collection previously failed, specifies how many times it
// happened
optional int32 previously_failed_count = 3;
// If a property collection previously failed, specifies the type of the
// last failure
optional FailureType previous_failure_type = 4;
}
}
message KotlinSupportDeclined {
// template renderer used
optional AndroidStudioEvent.TemplateRenderer template_renderer = 1;
}
message DeviceScreenshotEvent {
// The type of the device the screenshot is taken on
optional DeviceType device_type = 1;
// The type of decoration used for the screenshot
optional DecorationOption decoration_option = 2;
enum DeviceType {
UNKNOWN_DEVICE_TYPE = 0;
PHONE = 1;
WEAR = 2;
TV = 3;
}
enum DecorationOption {
UNKNOWN_DECORATION_OPTION = 0;
RECTANGULAR = 1;
DISPLAY_SHAPE_CLIP = 2;
PLAY_COMPATIBLE = 3;
FRAMED = 4;
}
}
message EditorNotification {
// The type of notification being displayed to the user
optional NotificationType notification_type = 1;
enum NotificationType {
UNKNOWN = 0;
ESSENTIALS_MODE = 1;
}
}
message DebuggerEvent {
// The event type
optional Type type = 1;
optional BreakpointAdded breakpoint_added = 2;
optional FramesViewUpdated frames_view_updated = 3;
enum Type {
UNKNOWN = 0;
BREAKPOINT_ADDED_EVENT = 1;
FRAMES_VIEW_UPDATED = 2;
}
message BreakpointAdded {
optional string type = 1;
optional string plugin_type = 2;
optional bool in_session = 3;
}
message FramesViewUpdated {
optional uint64 duration_ms = 1;
optional int32 total_frames = 2;
repeated FileTypeInfo file_type_infos = 3;
message FileTypeInfo {
optional string file_type = 1;
optional int32 num_frames = 2;
}
}
}
message SoongSyncStats {
// Cause of sync
optional Trigger trigger = 1;
// Status of sync
optional Status status = 2;
// Total time of the entire sync process
optional int64 total_time_ms = 3;
// Lunch target used for sync
optional string lunch_target = 4;
// Module paths that were synced. These are paths relative
// to the Platform repo checkout and do not contain PII.
repeated string module_paths = 5;
enum Trigger {
TRIGGER_UNKNOWN = 0;
PROJECT_OPEN = 1;
USER_SYNC_ACTION = 2;
}
enum Status {
STATUS_UNKNOWN = 0;
SUCCESS = 1;
FAIL = 2;
CANCELLED = 3;
}
}
message IntelliJNewUISwitch {
enum SwitchSource {
SOURCE_UNKNOWN = 0;
ENABLE_NEW_UI_ACTION = 1;
DISABLE_NEW_UI_ACTION = 2;
WELCOME_PROMO = 3;
WHATS_NEW_PAGE = 4;
SETTINGS_PAGE = 5;
}
// Source of the new ui status switch
optional SwitchSource switch_source = 1;
// updated status of new ui
optional bool new_ui = 2;
}
message EssentialsModeEvent {
// when the mode was just enabled or not
optional bool enabled = 1;
}
// Logged when a user clicks a link in a Lint warning/error tooltip in the
// code editor. We only do this for Lint issues where the issue vendor is
// Google or AOSP.
message LintTooltipLinkEvent {
// The issue id is a unique identifier for each type of coding issue found by
// Lint. We only log a LintTooltipLinkEvent for issues where the vendor is
// Google or AOSP. Examples of issue ids are "HardcodedText" and "NewApi".
optional string issue_id = 1;
// The URL of the link that was clicked, which will usually be to some
// developer documentation or article. The URL is from the issue description.
// The issue description was written by us (Google) as part of the lint check.
// Examples of some of the URLs we link to:
// https://developer.android.com/guide/topics/resources/localization.html
// https://goo.gle/GetInstance
// https://krebsonsecurity.com/2021/11/trojan-source-bug-threatens-the-security-of-all-code/
optional string url = 2;
}
message RenderSecurityManagerEvent {
enum Type {
TYPE_UNKNOWN = 0;
// A RenderSecurityManager was manually disabled by the user.
USER_DISABLED = 1;
// A security exception was raised to prevent using a resource.
RESOURCE_USAGE_DENIED = 2;
// A resource was used and a warning was logged in the Studio log.
// This is used in cases where the usage should be denied but it is not
// at the moment because of limitations of the implementation, for example,
// thread creation.
RESOURCE_USAGE_WARNING = 3;
}
// The resource id that is trigger this security event when type is
// RESOURCE_USAGE_DENIED or RESOURCE_USAGE_WARNING. Example of resource ids
// are "Read", "Property" or "Clipboard".
optional Type type = 1;
optional string resource = 2;
}
message AdbServerState {
enum MDNDBackend {
TYPE_MDNS_UNKNOWN = 0;
TYPE_MDNS_DEFAULT = 1;
TYPE_BONJOUR = 2;
TYPE_OPENSCREEN = 3;
}
enum USBBackend {
TYPE_USB_UNKNOWN = 0;
TYPE_USB_DEFAULT = 1;
TYPE_LIBUSB = 2;
TYPE_NATIVE = 3;
}
optional bool is_managed = 1;
optional string version = 2;
optional MDNDBackend mdns_backend = 3;
optional USBBackend usb_backend = 4;
}
message ScreenshotTestComposePreviewEvent {
enum Type {
TYPE_UNKNOWN = 0;
PREVIEW_DISCOVERY = 1;
PREVIEW_RENDERING = 2;
}
optional Type type = 1;
message PreviewDiscovery {
// Number of processed java classes by preview annotation detector.
optional uint32 num_processed_classes = 1;
// Duration of the building multipreview in milliseconds.
optional uint64 duration_building_multipreview_ms = 2;
}
// This message is populated when the type is PREVIEW_DISCOVERY.
optional PreviewDiscovery preview_discovery = 2;
message PreviewRendering {
// Number of rendered images. This number includes failed rendering attempts
// that yields a blank image.
optional uint32 num_rendered_images = 1;
// Duration of the rendering previews in milliseconds.
optional uint64 duration_rendering_previews_ms = 2;
// Number of rendering attempts that succeeded.
optional uint32 num_rendering_succeeded = 3;
// Number of rendering attempts that failed.
optional uint32 num_rendering_errors = 4;
// Number of rendering attempts that succeeded with warning.
optional uint32 num_rendering_warnings = 5;
}
// This message is populated when the type is PREVIEW_RENDERING.
optional PreviewRendering preview_rendering = 3;
}
message FirebaseManagementEvent {
enum FirebaseManagementEventType {
UNKNOWN_EVENT = 0;
// User created a new firebase cloud project during login process
CREATE_FIREBASE_PROJECT = 1;
}
message CreateFirebaseProjectDetails {
enum CreateFirebaseProjectState {
UNKNOWN = 0;
// Started the firebase project creation task
STARTED = 1;
// User did not accepted the term of service before
TOS_NEEDED = 2;
// User accepted the term of service
TOS_ACCEPTED = 3;
// Firebase project created
CREATED = 4;
// Failed to create the firebase project
FAILED = 5;
}
optional CreateFirebaseProjectState state = 1;
}
optional FirebaseManagementEventType type = 1;
// Client-side salted, sha256 of firebase project ID with salt rotated every
// 28 days
optional string project_id = 2;
// Set when type = CREATE_FIREBASE_PROJECT
optional CreateFirebaseProjectDetails create_firebase_project_details = 3;
}