Chromium Code Reviews| Index: chrome/browser/media/router/media_router_metrics.cc |
| diff --git a/chrome/browser/media/router/media_router_metrics.cc b/chrome/browser/media/router/media_router_metrics.cc |
| index cda93c8ee399e6496c6acc6dec6cc25fdb67e213..082fdfbcbf92466f03a2427df670eafa248682fc 100644 |
| --- a/chrome/browser/media/router/media_router_metrics.cc |
| +++ b/chrome/browser/media/router/media_router_metrics.cc |
| @@ -4,15 +4,20 @@ |
| #include "chrome/browser/media/router/media_router_metrics.h" |
| +#include <limits.h> |
| + |
| #include "base/macros.h" |
| #include "base/metrics/histogram_macros.h" |
| +#include "base/version.h" |
| +#include "components/version_info/version_info.h" |
| +#include "extensions/common/extension.h" |
| namespace media_router { |
| // static |
| void MediaRouterMetrics::RecordMediaRouterDialogOrigin( |
| MediaRouterDialogOpenOrigin origin) { |
| - DCHECK_NE(static_cast<int>(origin), |
| + DCHECK_LT(static_cast<int>(origin), |
| static_cast<int>(MediaRouterDialogOpenOrigin::TOTAL_COUNT)); |
| UMA_HISTOGRAM_ENUMERATION( |
| "MediaRouter.Icon.Click.Location", static_cast<int>(origin), |
| @@ -22,7 +27,7 @@ void MediaRouterMetrics::RecordMediaRouterDialogOrigin( |
| // static |
| void MediaRouterMetrics::RecordMediaRouteProviderWakeReason( |
| MediaRouteProviderWakeReason reason) { |
| - DCHECK_NE(static_cast<int>(reason), |
| + DCHECK_LT(static_cast<int>(reason), |
| static_cast<int>(MediaRouteProviderWakeReason::TOTAL_COUNT)); |
| UMA_HISTOGRAM_ENUMERATION( |
| "MediaRouter.Provider.WakeReason", static_cast<int>(reason), |
| @@ -46,7 +51,7 @@ void MediaRouterMetrics::RecordMediaRouterDialogLoaded( |
| // static |
| void MediaRouterMetrics::RecordMediaRouterInitialUserAction( |
| MediaRouterUserAction action) { |
| - DCHECK_NE(static_cast<int>(action), |
| + DCHECK_LT(static_cast<int>(action), |
| static_cast<int>(MediaRouterUserAction::TOTAL_COUNT)); |
| UMA_HISTOGRAM_ENUMERATION( |
| "MediaRouter.Ui.FirstAction", static_cast<int>(action), |
| @@ -56,12 +61,77 @@ void MediaRouterMetrics::RecordMediaRouterInitialUserAction( |
| // static |
| void MediaRouterMetrics::RecordRouteCreationOutcome( |
| MediaRouterRouteCreationOutcome outcome) { |
| - DCHECK_NE(static_cast<int>(outcome), |
| - static_cast<int>( |
| - MediaRouterRouteCreationOutcome::TOTAL_COUNT)); |
| + DCHECK_LT(static_cast<int>(outcome), |
| + static_cast<int>(MediaRouterRouteCreationOutcome::TOTAL_COUNT)); |
| UMA_HISTOGRAM_ENUMERATION( |
| "MediaRouter.Route.CreationOutcome", static_cast<int>(outcome), |
| static_cast<int>(MediaRouterRouteCreationOutcome::TOTAL_COUNT)); |
| } |
| +// static |
| +void MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + const extensions::Extension& extension) { |
| + const base::Version* extension_version = extension.version(); |
| + if (!extension_version) { |
| + MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion::UNKNOWN); |
| + return; |
| + } |
| + |
| + base::Version browser_version(version_info::GetVersionNumber()); |
| + int version_difference = |
| + GetVersionDifference(*extension_version, browser_version); |
| + if (version_difference == std::numeric_limits<int>::min()) { |
| + // Extension installed, version is invalid. |
| + MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion::UNKNOWN); |
| + } else if (version_difference >= 0) { |
| + MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion::SAME_VERSION_AS_CHROME); |
| + } else if (version_difference == -1) { |
| + MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion::ONE_VERSION_BEHIND_CHROME); |
| + } else { |
| + MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion::MULTIPLE_VERSIONS_BEHIND_CHROME); |
| + } |
| +} |
| + |
| +// static |
| +void MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion version) { |
| + DCHECK_LT(static_cast<int>(version), |
| + static_cast<int>(MediaRouteProviderVersion::TOTAL_COUNT)); |
| + UMA_HISTOGRAM_ENUMERATION( |
| + "MediaRouter.Provider.Version", static_cast<int>(version), |
| + static_cast<int>(MediaRouteProviderVersion::TOTAL_COUNT)); |
| +} |
| + |
| +// static |
| +void MediaRouterMetrics::RecordMediaRouteProviderWakeup( |
| + MediaRouteProviderWakeup wakeup) { |
| + DCHECK_LT(static_cast<int>(wakeup), |
| + static_cast<int>(MediaRouteProviderWakeup::TOTAL_COUNT)); |
| + UMA_HISTOGRAM_ENUMERATION( |
| + "MediaRouter.Provider.Wakeup", static_cast<int>(wakeup), |
| + static_cast<int>(MediaRouteProviderWakeup::TOTAL_COUNT)); |
| +} |
| + |
| +// static |
| +int MediaRouterMetrics::GetVersionDifference(const base::Version& first, |
| + const base::Version& second) { |
|
Wez
2016/03/18 18:35:43
nit: Since we don't need the actual version differ
mark a. foltz
2016/03/18 20:11:00
I'm not sure it's a good idea to have base::Versio
mark a. foltz
2016/03/18 20:11:00
I don't think base::Version should know about enum
Wez
2016/03/18 20:12:31
Sorry, s/version/function in my original comment.
|
| + if (!first.IsValid() || !first.components().size() || !second.IsValid() || |
| + !second.components().size()) { |
| + return std::numeric_limits<int>::min(); |
| + } |
| + |
| + uint32_t first_major = first.components()[0]; |
| + uint32_t second_major = second.components()[0]; |
| + // Sanity check. |
| + if (first_major < 1 || second_major < 1) |
| + return std::numeric_limits<int>::min(); |
| + |
| + return first_major - second_major; |
| +} |
| + |
| } // namespace media_router |