blob: 7134fdc48c0b42fbb276a331490c4094465a485f [file] [log] [blame]
// Copyright 2015 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/media_router_metrics.h"
#include "base/macros.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/string_util.h"
#include "base/time/default_clock.h"
#include "chrome/common/media_router/media_sink.h"
#include "chrome/common/media_router/media_source_helper.h"
#include "url/gurl.h"
#include "url/url_constants.h"
namespace media_router {
namespace {
PresentationUrlType GetPresentationUrlType(const GURL& url) {
if (url.SchemeIs(kDialPresentationUrlScheme))
return PresentationUrlType::kDial;
if (url.SchemeIs(kCastPresentationUrlScheme))
return PresentationUrlType::kCast;
if (url.SchemeIs(kCastDialPresentationUrlScheme))
return PresentationUrlType::kCastDial;
if (url.SchemeIs(kRemotePlaybackPresentationUrlScheme))
return PresentationUrlType::kRemotePlayback;
if (base::StartsWith(url.spec(), kLegacyCastPresentationUrlPrefix,
base::CompareCase::INSENSITIVE_ASCII))
return PresentationUrlType::kCastLegacy;
if (url.SchemeIs(url::kHttpsScheme))
return PresentationUrlType::kHttps;
if (url.SchemeIs(url::kHttpScheme))
return PresentationUrlType::kHttp;
return PresentationUrlType::kOther;
}
} // namespace
MediaRouterMetrics::MediaRouterMetrics() {}
MediaRouterMetrics::~MediaRouterMetrics() = default;
// static
const char MediaRouterMetrics::kHistogramDialParsingError[] =
"MediaRouter.Dial.ParsingError";
const char MediaRouterMetrics::kHistogramIconClickLocation[] =
"MediaRouter.Icon.Click.Location";
const char MediaRouterMetrics::kHistogramMediaRouterCastingSource[] =
"MediaRouter.Source.CastingSource";
const char MediaRouterMetrics::kHistogramMediaRouterFileFormat[] =
"MediaRouter.Source.LocalFileFormat";
const char MediaRouterMetrics::kHistogramMediaRouterFileSize[] =
"MediaRouter.Source.LocalFileSize";
const char MediaRouterMetrics::kHistogramMediaSinkType[] =
"MediaRouter.MediaSink.SelectedType";
const char MediaRouterMetrics::kHistogramPresentationUrlType[] =
"MediaRouter.PresentationRequest.AvailabilityUrlType";
const char MediaRouterMetrics::kHistogramRouteCreationOutcome[] =
"MediaRouter.Route.CreationOutcome";
const char MediaRouterMetrics::kHistogramUiDialogPaint[] =
"MediaRouter.Ui.Dialog.Paint";
const char MediaRouterMetrics::kHistogramUiDialogLoadedWithData[] =
"MediaRouter.Ui.Dialog.LoadedWithData";
const char MediaRouterMetrics::kHistogramUiFirstAction[] =
"MediaRouter.Ui.FirstAction";
// static
void MediaRouterMetrics::RecordMediaRouterDialogOrigin(
MediaRouterDialogOpenOrigin origin) {
DCHECK_LT(static_cast<int>(origin),
static_cast<int>(MediaRouterDialogOpenOrigin::TOTAL_COUNT));
UMA_HISTOGRAM_ENUMERATION(
kHistogramIconClickLocation, static_cast<int>(origin),
static_cast<int>(MediaRouterDialogOpenOrigin::TOTAL_COUNT));
}
// static
void MediaRouterMetrics::RecordMediaRouterDialogPaint(
const base::TimeDelta delta) {
UMA_HISTOGRAM_TIMES(kHistogramUiDialogPaint, delta);
}
// static
void MediaRouterMetrics::RecordMediaRouterDialogLoaded(
const base::TimeDelta delta) {
UMA_HISTOGRAM_TIMES(kHistogramUiDialogLoadedWithData, delta);
}
// static
void MediaRouterMetrics::RecordMediaRouterInitialUserAction(
MediaRouterUserAction action) {
DCHECK_LT(static_cast<int>(action),
static_cast<int>(MediaRouterUserAction::TOTAL_COUNT));
UMA_HISTOGRAM_ENUMERATION(
kHistogramUiFirstAction, static_cast<int>(action),
static_cast<int>(MediaRouterUserAction::TOTAL_COUNT));
}
// static
void MediaRouterMetrics::RecordRouteCreationOutcome(
MediaRouterRouteCreationOutcome outcome) {
DCHECK_LT(static_cast<int>(outcome),
static_cast<int>(MediaRouterRouteCreationOutcome::TOTAL_COUNT));
UMA_HISTOGRAM_ENUMERATION(
kHistogramRouteCreationOutcome, static_cast<int>(outcome),
static_cast<int>(MediaRouterRouteCreationOutcome::TOTAL_COUNT));
}
// static
void MediaRouterMetrics::RecordMediaRouterCastingSource(MediaCastMode source) {
base::UmaHistogramSparse(kHistogramMediaRouterCastingSource, source);
}
// static
void MediaRouterMetrics::RecordMediaRouterFileFormat(
const media::container_names::MediaContainerName format) {
UMA_HISTOGRAM_ENUMERATION(kHistogramMediaRouterFileFormat, format,
media::container_names::CONTAINER_MAX);
}
// static
void MediaRouterMetrics::RecordMediaRouterFileSize(int64_t size) {
UMA_HISTOGRAM_MEMORY_LARGE_MB(kHistogramMediaRouterFileSize, size);
}
// static
void MediaRouterMetrics::RecordDialParsingError(
SafeDialDeviceDescriptionParser::ParsingError parsing_error) {
DCHECK_LT(parsing_error,
SafeDialDeviceDescriptionParser::ParsingError::kTotalCount);
UMA_HISTOGRAM_ENUMERATION(
kHistogramDialParsingError, parsing_error,
SafeDialDeviceDescriptionParser::ParsingError::kTotalCount);
}
// static
void MediaRouterMetrics::RecordPresentationUrlType(const GURL& url) {
PresentationUrlType type = GetPresentationUrlType(url);
UMA_HISTOGRAM_ENUMERATION(kHistogramPresentationUrlType, type,
PresentationUrlType::kPresentationUrlTypeCount);
}
// static
void MediaRouterMetrics::RecordMediaSinkType(SinkIconType sink_icon_type) {
UMA_HISTOGRAM_ENUMERATION(kHistogramMediaSinkType, sink_icon_type,
SinkIconType::TOTAL_COUNT);
}
} // namespace media_router