blob: cd1aeaf3f2229e8fd8cfeff7d06baf4d0b981f56 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/media/router/mojo/media_router_mojo_metrics.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
constexpr char MediaRouterMojoMetrics::kHistogramProviderCreateRouteResult[] =
"MediaRouter.Provider.CreateRoute.Result";
constexpr char
MediaRouterMojoMetrics::kHistogramProviderCreateRouteResultWiredDisplay[] =
"MediaRouter.Provider.CreateRoute.Result.WiredDisplay";
constexpr char MediaRouterMojoMetrics::kHistogramProviderJoinRouteResult[] =
"MediaRouter.Provider.JoinRoute.Result";
constexpr char
MediaRouterMojoMetrics::kHistogramProviderJoinRouteResultWiredDisplay[] =
"MediaRouter.Provider.JoinRoute.Result.WiredDisplay";
constexpr char
MediaRouterMojoMetrics::kHistogramProviderRouteControllerCreationOutcome[] =
"MediaRouter.Provider.RouteControllerCreationOutcome";
constexpr char
MediaRouterMojoMetrics::kHistogramProviderTerminateRouteResult[] =
"MediaRouter.Provider.TerminateRoute.Result";
constexpr char MediaRouterMojoMetrics::
kHistogramProviderTerminateRouteResultWiredDisplay[] =
"MediaRouter.Provider.TerminateRoute.Result.WiredDisplay";
constexpr char MediaRouterMojoMetrics::kHistogramProviderVersion[] =
"MediaRouter.Provider.Version";
constexpr char MediaRouterMojoMetrics::kHistogramProviderWakeReason[] =
"MediaRouter.Provider.WakeReason";
constexpr char MediaRouterMojoMetrics::kHistogramProviderWakeup[] =
"MediaRouter.Provider.Wakeup";
// static
void MediaRouterMojoMetrics::RecordMediaRouteProviderWakeReason(
MediaRouteProviderWakeReason reason) {
DCHECK_LT(static_cast<int>(reason),
static_cast<int>(MediaRouteProviderWakeReason::TOTAL_COUNT));
UMA_HISTOGRAM_ENUMERATION(
kHistogramProviderWakeReason, static_cast<int>(reason),
static_cast<int>(MediaRouteProviderWakeReason::TOTAL_COUNT));
}
// static
void MediaRouterMojoMetrics::RecordMediaRouteProviderVersion(
const extensions::Extension& extension) {
MediaRouteProviderVersion version = MediaRouteProviderVersion::UNKNOWN;
version = GetMediaRouteProviderVersion(extension.version(),
version_info::GetVersion());
DCHECK_LT(static_cast<int>(version),
static_cast<int>(MediaRouteProviderVersion::TOTAL_COUNT));
UMA_HISTOGRAM_ENUMERATION(
kHistogramProviderVersion, static_cast<int>(version),
static_cast<int>(MediaRouteProviderVersion::TOTAL_COUNT));
}
// static
void MediaRouterMojoMetrics::RecordMediaRouteProviderWakeup(
MediaRouteProviderWakeup wakeup) {
DCHECK_LT(static_cast<int>(wakeup),
static_cast<int>(MediaRouteProviderWakeup::TOTAL_COUNT));
UMA_HISTOGRAM_ENUMERATION(
kHistogramProviderWakeup, static_cast<int>(wakeup),
static_cast<int>(MediaRouteProviderWakeup::TOTAL_COUNT));
}
// static
void MediaRouterMojoMetrics::RecordCreateRouteResultCode(
MediaRouteProviderId provider_id,
RouteRequestResult::ResultCode result_code) {
DCHECK_LT(result_code, RouteRequestResult::TOTAL_COUNT);
switch (provider_id) {
case MediaRouteProviderId::WIRED_DISPLAY:
UMA_HISTOGRAM_ENUMERATION(kHistogramProviderCreateRouteResultWiredDisplay,
result_code, RouteRequestResult::TOTAL_COUNT);
break;
case MediaRouteProviderId::EXTENSION:
// TODO(crbug.com/809249): Implement Cast-specific metric.
case MediaRouteProviderId::CAST:
// TODO(crbug.com/808720): Implement DIAL-specific metric.
case MediaRouteProviderId::DIAL:
case MediaRouteProviderId::UNKNOWN:
UMA_HISTOGRAM_ENUMERATION(kHistogramProviderCreateRouteResult,
result_code, RouteRequestResult::TOTAL_COUNT);
break;
}
}
// static
void MediaRouterMojoMetrics::RecordJoinRouteResultCode(
MediaRouteProviderId provider_id,
RouteRequestResult::ResultCode result_code) {
DCHECK_LT(result_code, RouteRequestResult::ResultCode::TOTAL_COUNT);
switch (provider_id) {
case MediaRouteProviderId::WIRED_DISPLAY:
UMA_HISTOGRAM_ENUMERATION(kHistogramProviderJoinRouteResultWiredDisplay,
result_code, RouteRequestResult::TOTAL_COUNT);
break;
case MediaRouteProviderId::EXTENSION:
// TODO(crbug.com/809249): Implement Cast-specific metric.
case MediaRouteProviderId::CAST:
// TODO(crbug.com/808720): Implement DIAL-specific metric.
case MediaRouteProviderId::DIAL:
case MediaRouteProviderId::UNKNOWN:
UMA_HISTOGRAM_ENUMERATION(kHistogramProviderJoinRouteResult, result_code,
RouteRequestResult::TOTAL_COUNT);
break;
}
}
// static
void MediaRouterMojoMetrics::RecordMediaRouteProviderTerminateRoute(
MediaRouteProviderId provider_id,
RouteRequestResult::ResultCode result_code) {
DCHECK_LT(result_code, RouteRequestResult::ResultCode::TOTAL_COUNT);
switch (provider_id) {
case MediaRouteProviderId::WIRED_DISPLAY:
UMA_HISTOGRAM_ENUMERATION(
kHistogramProviderTerminateRouteResultWiredDisplay, result_code,
RouteRequestResult::TOTAL_COUNT);
break;
case MediaRouteProviderId::EXTENSION:
// TODO(crbug.com/809249): Implement Cast-specific metric.
case MediaRouteProviderId::CAST:
// TODO(crbug.com/808720): Implement DIAL-specific metric.
case MediaRouteProviderId::DIAL:
case MediaRouteProviderId::UNKNOWN:
UMA_HISTOGRAM_ENUMERATION(kHistogramProviderTerminateRouteResult,
result_code, RouteRequestResult::TOTAL_COUNT);
break;
}
}
// static
void MediaRouterMojoMetrics::RecordMediaRouteControllerCreationResult(
bool success) {
UMA_HISTOGRAM_BOOLEAN(kHistogramProviderRouteControllerCreationOutcome,
success);
}
// static
MediaRouteProviderVersion MediaRouterMojoMetrics::GetMediaRouteProviderVersion(
const base::Version& extension_version,
const base::Version& browser_version) {
if (!extension_version.IsValid() || extension_version.components().empty() ||
!browser_version.IsValid() || browser_version.components().empty()) {
return MediaRouteProviderVersion::UNKNOWN;
}
uint32_t extension_major = extension_version.components()[0];
uint32_t browser_major = browser_version.components()[0];
// Sanity check.
if (extension_major == 0 || browser_major == 0) {
return MediaRouteProviderVersion::UNKNOWN;
} else if (extension_major >= browser_major) {
return MediaRouteProviderVersion::SAME_VERSION_AS_CHROME;
} else if (browser_major - extension_major == 1) {
return MediaRouteProviderVersion::ONE_VERSION_BEHIND_CHROME;
} else {
return MediaRouteProviderVersion::MULTIPLE_VERSIONS_BEHIND_CHROME;
}
}
} // namespace media_router