Commit 17a5fde2 authored by Derek Cheng's avatar Derek Cheng Committed by Commit Bot

[Cast MRP] Add metrics for app availability success/failure.

This should match the metric that is currently recorded in the
extension.

Bug: 698940
Change-Id: I2c1310a9b0911f4d610dfd5d8c74714ff8132913
Reviewed-on: https://chromium-review.googlesource.com/944719Reviewed-by: default avatarmark a. foltz <mfoltz@chromium.org>
Reviewed-by: default avatarIlya Sherman <isherman@chromium.org>
Commit-Queue: Derek Cheng <imcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#541994}
parent 3f67719f
......@@ -93,6 +93,8 @@ static_library("router") {
"providers/cast/cast_app_discovery_service.h",
"providers/cast/cast_media_route_provider.cc",
"providers/cast/cast_media_route_provider.h",
"providers/cast/cast_media_route_provider_metrics.cc",
"providers/cast/cast_media_route_provider_metrics.h",
"providers/cast/chrome_cast_message_handler.cc",
"providers/cast/chrome_cast_message_handler.h",
"providers/cast/dual_media_sink_service.cc",
......
......@@ -4,6 +4,7 @@
#include "chrome/browser/media/router/providers/cast/cast_app_discovery_service.h"
#include "chrome/browser/media/router/providers/cast/cast_media_route_provider_metrics.h"
#include "components/cast_channel/cast_message_handler.h"
#include "components/cast_channel/cast_socket.h"
#include "components/cast_channel/cast_socket_service.h"
......@@ -109,14 +110,17 @@ void CastAppDiscoveryService::RequestAppAvailability(
message_handler_->RequestAppAvailability(
socket, app_id,
base::BindOnce(&CastAppDiscoveryService::UpdateAppAvailability,
weak_ptr_factory_.GetWeakPtr(), sink_id));
weak_ptr_factory_.GetWeakPtr(), base::TimeTicks::Now(),
sink_id));
}
void CastAppDiscoveryService::UpdateAppAvailability(
base::TimeTicks start_time,
const MediaSink::Id& sink_id,
const std::string& app_id,
cast_channel::GetAppAvailabilityResult result) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
RecordAppAvailabilityResult(result, base::TimeTicks::Now() - start_time);
if (!base::ContainsKey(sinks_, sink_id))
return;
......
......@@ -15,6 +15,7 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/sequenced_task_runner.h"
#include "base/time/time.h"
#include "chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl.h"
#include "chrome/browser/media/router/providers/cast/cast_app_availability_tracker.h"
#include "chrome/common/media_router/media_sink.h"
......@@ -68,7 +69,10 @@ class CastAppDiscoveryService : public CastMediaSinkServiceImpl::Observer {
// Updates the availability result for |sink_id| and |app_id| with |result|,
// and notifies callbacks with updated sink query results.
void UpdateAppAvailability(const MediaSink::Id& sink_id,
// |start_time| is the time when the app availability request was made, and
// is used for metrics.
void UpdateAppAvailability(base::TimeTicks start_time,
const MediaSink::Id& sink_id,
const std::string& app_id,
cast_channel::GetAppAvailabilityResult result);
......
// Copyright 2018 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/providers/cast/cast_media_route_provider_metrics.h"
#include "base/metrics/histogram_macros.h"
#include "base/time/time.h"
namespace media_router {
void RecordAppAvailabilityResult(cast_channel::GetAppAvailabilityResult result,
base::TimeDelta duration) {
if (result == cast_channel::GetAppAvailabilityResult::kUnknown)
UMA_HISTOGRAM_TIMES(kHistogramAppAvailabilityFailure, duration);
else
UMA_HISTOGRAM_TIMES(kHistogramAppAvailabilitySuccess, duration);
}
} // namespace media_router
// Copyright 2018 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.
#ifndef CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_MEDIA_ROUTE_PROVIDER_METRICS_H_
#define CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_MEDIA_ROUTE_PROVIDER_METRICS_H_
#include "base/time/time.h"
#include "components/cast_channel/cast_message_util.h"
namespace media_router {
// Histogram names for app availability.
static constexpr char kHistogramAppAvailabilitySuccess[] =
"MediaRouter.Cast.App.Availability.Success";
static constexpr char kHistogramAppAvailabilityFailure[] =
"MediaRouter.Cast.App.Availability.Failure";
// Records the result of an app availability request and how long it took.
// If |result| is kUnknown, then a failure is recorded. Otherwise, a success
// is recorded.
void RecordAppAvailabilityResult(cast_channel::GetAppAvailabilityResult result,
base::TimeDelta duration);
} // namespace media_router
#endif // CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_MEDIA_ROUTE_PROVIDER_METRICS_H_
// Copyright 2018 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/providers/cast/cast_media_route_provider_metrics.h"
#include "base/test/histogram_tester.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::Bucket;
using testing::ElementsAre;
namespace media_router {
TEST(CastMediaRouteProviderMetricsTest, RecordAppAvailabilityResult) {
base::HistogramTester tester;
RecordAppAvailabilityResult(
cast_channel::GetAppAvailabilityResult::kAvailable,
base::TimeDelta::FromMilliseconds(111));
RecordAppAvailabilityResult(
cast_channel::GetAppAvailabilityResult::kUnavailable,
base::TimeDelta::FromMilliseconds(222));
tester.ExpectTimeBucketCount(kHistogramAppAvailabilitySuccess,
base::TimeDelta::FromMilliseconds(111), 1);
tester.ExpectTimeBucketCount(kHistogramAppAvailabilitySuccess,
base::TimeDelta::FromMilliseconds(222), 1);
RecordAppAvailabilityResult(cast_channel::GetAppAvailabilityResult::kUnknown,
base::TimeDelta::FromMilliseconds(333));
tester.ExpectTimeBucketCount(kHistogramAppAvailabilityFailure,
base::TimeDelta::FromMilliseconds(333), 1);
}
} // namespace media_router
......@@ -3065,6 +3065,7 @@ test("unit_tests") {
"../browser/media/router/mojo/media_sink_service_status_unittest.cc",
"../browser/media/router/providers/cast/cast_app_availability_tracker_unittest.cc",
"../browser/media/router/providers/cast/cast_app_discovery_service_unittest.cc",
"../browser/media/router/providers/cast/cast_media_route_provider_metrics_unittest.cc",
"../browser/media/router/providers/cast/dual_media_sink_service_unittest.cc",
"../browser/media/router/providers/extension/extension_media_route_provider_proxy_unittest.cc",
"../browser/media/router/providers/wired_display/wired_display_media_route_provider_unittest.cc",
......
......@@ -37654,6 +37654,16 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
<summary>Various usage counts for media galleries.</summary>
</histogram>
<histogram base="true" name="MediaRouter.Cast.App.Availability" units="ms">
<!-- Name completed by histogram_suffixes name="MediaRouterSuccess" -->
<owner>imcheng@chromium.org</owner>
<summary>
Round trip time for a Cast app availability request. Can be suffixed with
Success or Failure.
</summary>
</histogram>
<histogram name="MediaRouter.Cast.Channel.ConnectResult" enum="BooleanSuccess">
<owner>zhaobin@chromium.org</owner>
<summary>
......@@ -107819,6 +107829,12 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
<affected-histogram name="Media.RebuffersCount"/>
</histogram_suffixes>
<histogram_suffixes name="MediaRouterSuccess" separator=".">
<suffix name="Failure" label="Failure"/>
<suffix name="Success" label="Success"/>
<affected-histogram name="MediaRouter.Cast.App.Availability"/>
</histogram_suffixes>
<histogram_suffixes name="MediaTimelineWidths" separator=".">
<suffix name="32_47"/>
<suffix name="48_79"/>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment