| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/system/phonehub/phone_hub_metrics.h" |
| |
| #include "base/metrics/histogram_functions.h" |
| #include "base/metrics/user_metrics.h" |
| |
| namespace ash::phone_hub_metrics { |
| |
| namespace { |
| |
| std::string GetInterstitialScreenEventHistogramName(Screen screen) { |
| switch (screen) { |
| case Screen::kPhoneDisconnected: |
| return "PhoneHub.InterstitialScreenEvent.PhoneDisconnected"; |
| case Screen::kBluetoothOrWifiDisabled: |
| return "PhoneHub.InterstitialScreenEvent.BluetoothOrWifiDisabled"; |
| case Screen::kPhoneConnecting: |
| return "PhoneHub.InterstitialScreenEvent.PhoneConnecting"; |
| case Screen::kTetherConnectionPending: |
| return "PhoneHub.InterstitialScreenEvent.TetherConnectionPending"; |
| case Screen::kOnboardingExistingMultideviceUser: |
| return "PhoneHub.InterstitialScreenEvent.Onboarding." |
| "ExistingMultideviceUser2"; |
| case Screen::kOnboardingNewMultideviceUser: |
| return "PhoneHub.InterstitialScreenEvent.Onboarding." |
| "NewMultideviceUser2"; |
| case Screen::kOnboardingDismissPrompt: |
| return "PhoneHub.InterstitialScreenEvent.OnboardingDismissPrompt"; |
| default: |
| DCHECK(false) << "Invalid interstitial screen"; |
| return ""; |
| } |
| } |
| |
| } // namespace |
| |
| void LogInterstitialScreenEvent(Screen screen, InterstitialScreenEvent event) { |
| base::UmaHistogramEnumeration(GetInterstitialScreenEventHistogramName(screen), |
| event); |
| |
| // NOTE(https://crbug.com/1187255): The new- and existing-user metrics were |
| // previously reversed. For continuity, we continue logging the old metrics in |
| // reverse. The new metrics |
| // "PhoneHub.InterstitialScreenEvent.Onboarding.NewMultideviceUser2" and |
| // "PhoneHub.InterstitialScreenEvent.Onboarding.ExistingMultideviceUser2" are |
| // logged correctly. |
| if (screen == Screen::kOnboardingExistingMultideviceUser) { |
| base::UmaHistogramEnumeration( |
| "PhoneHub.InterstitialScreenEvent.Onboarding.NewMultideviceUser", |
| event); |
| } else if (screen == Screen::kOnboardingNewMultideviceUser) { |
| base::UmaHistogramEnumeration( |
| "PhoneHub.InterstitialScreenEvent.Onboarding.ExistingMultideviceUser", |
| event); |
| } |
| } |
| |
| void LogScreenOnBubbleOpen(Screen screen) { |
| base::UmaHistogramEnumeration("PhoneHub.ScreenOnBubbleOpen", screen); |
| } |
| |
| void LogScreenOnBubbleClose(Screen screen) { |
| base::UmaHistogramEnumeration("PhoneHub.ScreenOnBubbleClose", screen); |
| } |
| |
| void LogScreenOnSettingsButtonClicked(Screen screen) { |
| base::UmaHistogramEnumeration("PhoneHub.ScreenOnSettingsButtonClicked", |
| screen); |
| } |
| |
| void LogTabContinuationChipClicked(int tab_index) { |
| base::UmaHistogramCounts100("PhoneHub.TabContinuationChipClicked", tab_index); |
| } |
| |
| void LogQuickActionClick(QuickAction action) { |
| base::UmaHistogramEnumeration("PhoneHub.QuickActionClicked", action); |
| } |
| |
| void LogNotificationCount(int count) { |
| base::UmaHistogramCounts100("PhoneHub.NotificationCount", count); |
| } |
| |
| void LogNotificationInteraction(NotificationInteraction interaction) { |
| base::UmaHistogramEnumeration("PhoneHub.NotificationInteraction", |
| interaction); |
| } |
| |
| void LogNotificationMessageLength(int length) { |
| base::UmaHistogramCounts10000("PhoneHub.NotificationMessageLength", length); |
| } |
| |
| std::string GetCameraRollMediaTypeSubcategoryName( |
| CameraRollMediaType mediaType) { |
| switch (mediaType) { |
| case CameraRollMediaType::kPhoto: |
| return ".Photo"; |
| case CameraRollMediaType::kVideo: |
| return ".Video"; |
| default: |
| DCHECK(false) << "Invalid Camera Roll media type"; |
| return ""; |
| } |
| } |
| |
| void LogCameraRollContentShown(int index, CameraRollMediaType mediaType) { |
| std::string subcategory = GetCameraRollMediaTypeSubcategoryName(mediaType); |
| switch (index) { |
| case 0: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.Content.Shown" + subcategory, |
| static_cast<int>(CameraRollContentShown::kContentShown1)); |
| break; |
| case 1: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.Content.Shown" + subcategory, |
| static_cast<int>(CameraRollContentShown::kContentShown2)); |
| break; |
| case 2: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.Content.Shown" + subcategory, |
| static_cast<int>(CameraRollContentShown::kContentShown3)); |
| break; |
| case 3: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.Content.Shown" + subcategory, |
| static_cast<int>(CameraRollContentShown::kContentShown4)); |
| break; |
| default: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.Content.Shown" + subcategory, |
| static_cast<int>(CameraRollContentShown::kContentShownGTE5)); |
| break; |
| } |
| } |
| |
| void LogCameraRollContentClicked(int index, CameraRollMediaType mediaType) { |
| std::string subcategory = GetCameraRollMediaTypeSubcategoryName(mediaType); |
| switch (index) { |
| case 0: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.Content.Clicked" + subcategory, |
| static_cast<int>(CameraRollContentClicked::kContentClicked1)); |
| break; |
| case 1: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.Content.Clicked" + subcategory, |
| static_cast<int>(CameraRollContentClicked::kContentClicked2)); |
| break; |
| case 2: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.Content.Clicked" + subcategory, |
| static_cast<int>(CameraRollContentClicked::kContentClicked3)); |
| break; |
| case 3: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.Content.Clicked" + subcategory, |
| static_cast<int>(CameraRollContentClicked::kContentClicked4)); |
| break; |
| default: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.Content.Clicked" + subcategory, |
| static_cast<int>(CameraRollContentClicked::kContentClickedGTE5)); |
| break; |
| } |
| } |
| |
| void LogCameraRollContextMenuDownload(int index, |
| CameraRollMediaType mediaType) { |
| std::string subcategory = GetCameraRollMediaTypeSubcategoryName(mediaType); |
| switch (index) { |
| case 0: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.ContextMenu.Download" + subcategory, |
| static_cast<int>(CameraRollContextMenuDownload::kDownload1)); |
| break; |
| case 1: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.ContextMenu.Download" + subcategory, |
| static_cast<int>(CameraRollContextMenuDownload::kDownload2)); |
| break; |
| case 2: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.ContextMenu.Download" + subcategory, |
| static_cast<int>(CameraRollContextMenuDownload::kDownload3)); |
| break; |
| case 3: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.ContextMenu.Download" + subcategory, |
| static_cast<int>(CameraRollContextMenuDownload::kDownload4)); |
| break; |
| default: |
| base::UmaHistogramSparse( |
| "PhoneHub.CameraRoll.ContextMenu.Download" + subcategory, |
| static_cast<int>(CameraRollContextMenuDownload::kDownloadGTE5)); |
| break; |
| } |
| } |
| |
| void LogCameraRollContentPresent() { |
| base::UmaHistogramBoolean("PhoneHub.CameraRoll.Content.Present", true); |
| } |
| |
| void LogMoreAppsButtonAnimationOnShow( |
| MoreAppsButtonLoadingState loading_state) { |
| base::UmaHistogramEnumeration("PhoneHub.MoreAppsButton.LoadingState", |
| loading_state); |
| } |
| |
| void LogMoreAppsButtonFullAppsLatency(const base::TimeDelta latency) { |
| base::UmaHistogramTimes("PhoneHub.LauncherButton.Loading.Latency", latency); |
| } |
| |
| void LogRecentAppsStateOnBubbleOpened(RecentAppsUiState ui_state) { |
| switch (ui_state) { |
| case RecentAppsUiState::HIDDEN: |
| [[fallthrough]]; |
| case RecentAppsUiState::PLACEHOLDER_VIEW: |
| break; |
| case RecentAppsUiState::LOADING: |
| base::UmaHistogramEnumeration("PhoneHub.RecentApps.State.OnBubbleOpened", |
| RecentAppsViewUiState::kLoading); |
| break; |
| case RecentAppsUiState::CONNECTION_FAILED: |
| base::UmaHistogramEnumeration("PhoneHub.RecentApps.State.OnBubbleOpened", |
| RecentAppsViewUiState::kError); |
| break; |
| case RecentAppsUiState::ITEMS_VISIBLE: |
| base::UmaHistogramEnumeration("PhoneHub.RecentApps.State.OnBubbleOpened", |
| RecentAppsViewUiState::kApps); |
| break; |
| default: |
| break; |
| } |
| } |
| |
| void LogRecentAppsTransitionToFailedLatency(const base::TimeDelta latency) { |
| base::UmaHistogramTimes("PhoneHub.RecentApps.TransitionToFailed.Latency", |
| latency); |
| } |
| |
| void LogRecentAppsTransitionToSuccessLatency(const base::TimeDelta latency) { |
| base::UmaHistogramTimes("PhoneHub.RecentApps.TransitionToSuccess.Latency", |
| latency); |
| } |
| |
| void LogMultiDeviceSetupNotificationInteraction() { |
| base::UmaHistogramCounts100("MultiDeviceSetup.NotificationInteracted", 1); |
| } |
| |
| } // namespace ash::phone_hub_metrics |