Commit 1c7ebaeb authored by btolsch's avatar btolsch Committed by Chromium LUCI CQ

Remove MediaRouter.NetworkMonitor.* histograms

These histograms have been unused for a while and are expiring so this
change removes them instead of extending their expiration.

Bug: 1160737
Change-Id: I757a067e33d7172be10a80b011123fa17d4658a0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2613510Reviewed-by: default avatarIlya Sherman <isherman@chromium.org>
Reviewed-by: default avatarTakumi Fujimoto <takumif@chromium.org>
Commit-Queue: Brandon Tolsch <btolsch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#841091}
parent 756930db
......@@ -214,7 +214,6 @@ source_set("unittests") {
"discovery/dial/safe_dial_app_info_parser_unittest.cc",
"discovery/dial/safe_dial_device_description_parser_unittest.cc",
"discovery/discovery_network_list_unittest.cc",
"discovery/discovery_network_monitor_metric_observer_unittest.cc",
"discovery/discovery_network_monitor_unittest.cc",
"discovery/mdns/cast_media_sink_service_impl_unittest.cc",
"discovery/mdns/cast_media_sink_service_unittest.cc",
......
......@@ -52,10 +52,6 @@ static_library("discovery") {
"discovery_network_list_wifi.h",
"discovery_network_monitor.cc",
"discovery_network_monitor.h",
"discovery_network_monitor_metric_observer.cc",
"discovery_network_monitor_metric_observer.h",
"discovery_network_monitor_metrics.cc",
"discovery_network_monitor_metrics.h",
"mdns/cast_media_sink_service.cc",
"mdns/cast_media_sink_service.h",
"mdns/cast_media_sink_service_impl.cc",
......
......@@ -18,7 +18,6 @@
#include "base/task_runner_util.h"
#include "base/time/default_tick_clock.h"
#include "chrome/browser/media/router/discovery/discovery_network_list.h"
#include "chrome/browser/media/router/discovery/discovery_network_monitor_metric_observer.h"
#include "content/public/browser/network_service_instance.h"
#include "net/base/network_interfaces.h"
......@@ -100,12 +99,8 @@ DiscoveryNetworkMonitor::DiscoveryNetworkMonitor(NetworkInfoFunction strategy)
task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
{base::MayBlock(),
base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})),
network_info_function_(strategy),
metric_observer_(std::make_unique<DiscoveryNetworkMonitorMetricObserver>(
base::DefaultTickClock::GetInstance(),
std::make_unique<DiscoveryNetworkMonitorMetrics>())) {
network_info_function_(strategy) {
DETACH_FROM_SEQUENCE(sequence_checker_);
AddObserver(metric_observer_.get());
content::GetNetworkConnectionTracker()
->AddLeakyNetworkConnectionObserver(this);
......
......@@ -20,8 +20,6 @@
namespace media_router {
class DiscoveryNetworkMonitorMetricObserver;
// Tracks the set of active network interfaces that can be used for local
// discovery. If the list of interfaces changes, then
// DiscoveryNetworkMonitor::Observer is called with the instance of the monitor.
......@@ -106,10 +104,6 @@ class DiscoveryNetworkMonitor
// connected.
NetworkInfoFunction network_info_function_;
// Observer which records metrics about the network changes broadcast by the
// monitor.
std::unique_ptr<DiscoveryNetworkMonitorMetricObserver> metric_observer_;
// SequenceChecker for |task_runner_|.
SEQUENCE_CHECKER(sequence_checker_);
......
// Copyright (c) 2017 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/discovery/discovery_network_monitor_metric_observer.h"
#include "net/base/network_change_notifier.h"
#include "base/bind.h"
#include "base/callback_helpers.h"
#include "content/public/browser/network_service_instance.h"
#include "services/network/public/cpp/network_connection_tracker.h"
namespace media_router {
namespace {
// This TimeDelta indicates the amount of time to wait between receiving a
// network ID of kNetworkIdDisconnected in a change event and checking that we
// are actually disconnected and reporting it.
//
// network::NetworkConnectionTracker, and therefore DiscoveryNetworkMonitor,
// reports a disconnected state between any other network change. In order to
// avoid reporting these spurious kNetworkIdDisconnected events as real
// disconnections, we wait for this timeout and then check the network status
// again. If any other network change notification comes while we are waiting,
// this state check is cancelled.
constexpr base::TimeDelta kConfirmDisconnectTimeout =
base::TimeDelta::FromSeconds(1);
DiscoveryNetworkMonitorConnectionType ConnectionTypeFromIdAndType(
const std::string& network_id,
network::mojom::ConnectionType connection_type) {
if (network_id == DiscoveryNetworkMonitor::kNetworkIdDisconnected) {
return DiscoveryNetworkMonitorConnectionType::kDisconnected;
} else if (network_id == DiscoveryNetworkMonitor::kNetworkIdUnknown) {
switch (connection_type) {
case network::mojom::ConnectionType::CONNECTION_WIFI:
return DiscoveryNetworkMonitorConnectionType::kUnknownReportedAsWifi;
case network::mojom::ConnectionType::CONNECTION_ETHERNET:
return DiscoveryNetworkMonitorConnectionType::
kUnknownReportedAsEthernet;
case network::mojom::ConnectionType::CONNECTION_UNKNOWN:
return DiscoveryNetworkMonitorConnectionType::kUnknown;
default:
return DiscoveryNetworkMonitorConnectionType::kUnknownReportedAsOther;
}
} else {
switch (connection_type) {
case network::mojom::ConnectionType::CONNECTION_WIFI:
return DiscoveryNetworkMonitorConnectionType::kWifi;
case network::mojom::ConnectionType::CONNECTION_ETHERNET:
return DiscoveryNetworkMonitorConnectionType::kEthernet;
default:
return DiscoveryNetworkMonitorConnectionType::kUnknown;
}
}
}
network::mojom::ConnectionType GetConnectionType() {
auto connection_type = network::mojom::ConnectionType::CONNECTION_UNKNOWN;
content::GetNetworkConnectionTracker()->GetConnectionType(&connection_type,
base::DoNothing());
return connection_type;
}
} // namespace
DiscoveryNetworkMonitorMetricObserver::DiscoveryNetworkMonitorMetricObserver(
const base::TickClock* tick_clock,
std::unique_ptr<DiscoveryNetworkMonitorMetrics> metrics)
: tick_clock_(tick_clock),
metrics_(std::move(metrics)),
disconnect_timer_(tick_clock_) {
DCHECK(tick_clock_);
DCHECK(metrics_);
}
DiscoveryNetworkMonitorMetricObserver::
~DiscoveryNetworkMonitorMetricObserver() {}
void DiscoveryNetworkMonitorMetricObserver::OnNetworksChanged(
const std::string& network_id) {
auto now = tick_clock_->NowTicks();
if (network_id == DiscoveryNetworkMonitor::kNetworkIdDisconnected) {
disconnect_timer_.Start(
FROM_HERE, kConfirmDisconnectTimeout,
base::BindOnce(&DiscoveryNetworkMonitorMetricObserver::
ConfirmDisconnectedToReportMetrics,
base::Unretained(this), now));
return;
} else if (last_event_time_) {
metrics_->RecordTimeBetweenNetworkChangeEvents(now - *last_event_time_);
}
last_event_time_ = now;
disconnect_timer_.Stop();
DiscoveryNetworkMonitorConnectionType connection_type =
ConnectionTypeFromIdAndType(network_id, GetConnectionType());
metrics_->RecordConnectionType(connection_type);
}
void DiscoveryNetworkMonitorMetricObserver::ConfirmDisconnectedToReportMetrics(
base::TimeTicks disconnect_time) {
if (last_event_time_) {
metrics_->RecordTimeBetweenNetworkChangeEvents(disconnect_time -
*last_event_time_);
}
last_event_time_ = disconnect_time;
metrics_->RecordConnectionType(
DiscoveryNetworkMonitorConnectionType::kDisconnected);
}
} // namespace media_router
// Copyright (c) 2017 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_DISCOVERY_DISCOVERY_NETWORK_MONITOR_METRIC_OBSERVER_H_
#define CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DISCOVERY_NETWORK_MONITOR_METRIC_OBSERVER_H_
#include "chrome/browser/media/router/discovery/discovery_network_monitor.h"
#include "base/optional.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "chrome/browser/media/router/discovery/discovery_network_monitor_metrics.h"
namespace media_router {
class DiscoveryNetworkMonitorMetricObserver final
: public DiscoveryNetworkMonitor::Observer {
public:
DiscoveryNetworkMonitorMetricObserver(
const base::TickClock* tick_clock,
std::unique_ptr<DiscoveryNetworkMonitorMetrics> metrics);
~DiscoveryNetworkMonitorMetricObserver();
// DiscoveryNetworkMonitor::Observer implementation.
void OnNetworksChanged(const std::string& network_id) override;
private:
// This method will be scheduled to execute after a constant timeout when we
// see a kNetworkIdDisconnected network ID. If the execution is not
// cancelled, we report that we are in a disconnected state. The timeout is
// to avoid spurious reports due to the way DiscoveryNetworkMonitor reports
// disconnections between every network change. |disconnect_time| is the time
// that kNetworkIdDisconnected was seen so we can report the original time
// value instead of the time that this later check runs.
void ConfirmDisconnectedToReportMetrics(base::TimeTicks disconnect_time);
const base::TickClock* tick_clock_;
std::unique_ptr<DiscoveryNetworkMonitorMetrics> metrics_;
base::Optional<base::TimeTicks> last_event_time_;
base::OneShotTimer disconnect_timer_;
};
} // namespace media_router
#endif // CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DISCOVERY_NETWORK_MONITOR_METRIC_OBSERVER_H_
// Copyright (c) 2017 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/discovery/discovery_network_monitor_metric_observer.h"
#include <memory>
#include "base/test/task_environment.h"
#include "content/public/browser/network_service_instance.h"
#include "content/public/test/browser_task_environment.h"
#include "services/network/test/test_network_connection_tracker.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media_router {
std::ostream& operator<<(
std::ostream& os,
DiscoveryNetworkMonitorConnectionType connection_type) {
switch (connection_type) {
case DiscoveryNetworkMonitorConnectionType::kWifi:
os << "kWifi";
break;
case DiscoveryNetworkMonitorConnectionType::kEthernet:
os << "kEthernet";
break;
case DiscoveryNetworkMonitorConnectionType::kUnknownReportedAsWifi:
os << "kUnknownReportedAsWifi";
break;
case DiscoveryNetworkMonitorConnectionType::kUnknownReportedAsEthernet:
os << "kUnknownReportedAsEthernet";
break;
case DiscoveryNetworkMonitorConnectionType::kUnknownReportedAsOther:
os << "kUnknownReportedAsOther";
break;
case DiscoveryNetworkMonitorConnectionType::kUnknown:
os << "kUnknown";
break;
case DiscoveryNetworkMonitorConnectionType::kDisconnected:
os << "kDisconnected";
break;
default:
os << "Bad DiscoveryNetworkMonitorConnectionType value";
break;
}
return os;
}
namespace {
using ::testing::_;
class MockMetrics : public DiscoveryNetworkMonitorMetrics {
public:
MOCK_METHOD1(RecordTimeBetweenNetworkChangeEvents, void(base::TimeDelta));
MOCK_METHOD1(RecordConnectionType,
void(DiscoveryNetworkMonitorConnectionType));
};
class DiscoveryNetworkMonitorMetricObserverTest : public ::testing::Test {
public:
DiscoveryNetworkMonitorMetricObserverTest()
: task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME),
start_ticks_(task_environment_.NowTicks()),
metrics_(std::make_unique<MockMetrics>()),
mock_metrics_(metrics_.get()),
metric_observer_(task_environment_.GetMockTickClock(),
std::move(metrics_)) {
SetConnectionType(network::mojom::ConnectionType::CONNECTION_NONE);
}
protected:
void SetConnectionType(network::mojom::ConnectionType connection_type) {
network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
connection_type);
}
content::BrowserTaskEnvironment task_environment_;
base::TimeDelta time_advance_ = base::TimeDelta::FromMilliseconds(10);
const base::TimeTicks start_ticks_;
std::unique_ptr<MockMetrics> metrics_;
MockMetrics* mock_metrics_;
DiscoveryNetworkMonitorMetricObserver metric_observer_;
};
} // namespace
TEST_F(DiscoveryNetworkMonitorMetricObserverTest, RecordsFirstGoodNetworkWifi) {
SetConnectionType(network::mojom::ConnectionType::CONNECTION_WIFI);
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kWifi));
metric_observer_.OnNetworksChanged("network1");
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
RecordsFirstGoodNetworkEthernet) {
SetConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kEthernet));
metric_observer_.OnNetworksChanged("network1");
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
RecordsFirstGoodNetworkUnknownWifi) {
SetConnectionType(network::mojom::ConnectionType::CONNECTION_WIFI);
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(
DiscoveryNetworkMonitorConnectionType::kUnknownReportedAsWifi));
metric_observer_.OnNetworksChanged(
DiscoveryNetworkMonitor::kNetworkIdUnknown);
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
RecordsFirstGoodNetworkUnknownEthernet) {
SetConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(
DiscoveryNetworkMonitorConnectionType::kUnknownReportedAsEthernet));
metric_observer_.OnNetworksChanged(
DiscoveryNetworkMonitor::kNetworkIdUnknown);
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
RecordsFirstGoodNetworkUnknownOther) {
SetConnectionType(network::mojom::ConnectionType::CONNECTION_4G);
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(
DiscoveryNetworkMonitorConnectionType::kUnknownReportedAsOther));
metric_observer_.OnNetworksChanged(
DiscoveryNetworkMonitor::kNetworkIdUnknown);
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
RecordsFirstGoodNetworkUnknown) {
SetConnectionType(network::mojom::ConnectionType::CONNECTION_UNKNOWN);
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kUnknown));
metric_observer_.OnNetworksChanged(
DiscoveryNetworkMonitor::kNetworkIdUnknown);
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
RecordsFirstGoodNetworkDisconnected) {
SetConnectionType(network::mojom::ConnectionType::CONNECTION_NONE);
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(*mock_metrics_,
RecordConnectionType(
DiscoveryNetworkMonitorConnectionType::kDisconnected));
metric_observer_.OnNetworksChanged(
DiscoveryNetworkMonitor::kNetworkIdDisconnected);
task_environment_.FastForwardUntilNoTasksRemain();
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
DoesntRecordEphemeralDisconnectedState) {
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kEthernet));
SetConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
metric_observer_.OnNetworksChanged("network1");
EXPECT_CALL(*mock_metrics_, RecordConnectionType(_)).Times(0);
SetConnectionType(network::mojom::ConnectionType::CONNECTION_NONE);
metric_observer_.OnNetworksChanged(
DiscoveryNetworkMonitor::kNetworkIdDisconnected);
SetConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_));
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kEthernet));
metric_observer_.OnNetworksChanged("network2");
task_environment_.FastForwardUntilNoTasksRemain();
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
DoesntRecordEphemeralDisconnectedStateWhenFirst) {
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(*mock_metrics_, RecordConnectionType(_)).Times(0);
SetConnectionType(network::mojom::ConnectionType::CONNECTION_NONE);
metric_observer_.OnNetworksChanged(
DiscoveryNetworkMonitor::kNetworkIdDisconnected);
SetConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kEthernet));
metric_observer_.OnNetworksChanged("network2");
task_environment_.FastForwardUntilNoTasksRemain();
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
RecordsTimeChangeBetweenConnectionTypeEvents) {
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kEthernet));
SetConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
metric_observer_.OnNetworksChanged("network1");
task_environment_.FastForwardBy(time_advance_);
SetConnectionType(network::mojom::ConnectionType::CONNECTION_NONE);
metric_observer_.OnNetworksChanged(
DiscoveryNetworkMonitor::kNetworkIdDisconnected);
task_environment_.FastForwardBy(time_advance_);
SetConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
EXPECT_CALL(*mock_metrics_,
RecordTimeBetweenNetworkChangeEvents(
(start_ticks_ + time_advance_ * 2) - start_ticks_));
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kEthernet));
metric_observer_.OnNetworksChanged("network2");
task_environment_.FastForwardUntilNoTasksRemain();
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
RecordChangeToDisconnectedState) {
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kEthernet));
SetConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
metric_observer_.OnNetworksChanged("network1");
task_environment_.FastForwardBy(time_advance_);
SetConnectionType(network::mojom::ConnectionType::CONNECTION_NONE);
metric_observer_.OnNetworksChanged(
DiscoveryNetworkMonitor::kNetworkIdDisconnected);
task_environment_.FastForwardBy(time_advance_);
EXPECT_CALL(*mock_metrics_,
RecordTimeBetweenNetworkChangeEvents(
(start_ticks_ + time_advance_) - start_ticks_));
EXPECT_CALL(*mock_metrics_,
RecordConnectionType(
DiscoveryNetworkMonitorConnectionType::kDisconnected));
task_environment_.FastForwardUntilNoTasksRemain();
}
TEST_F(DiscoveryNetworkMonitorMetricObserverTest,
RecordChangeFromDisconnectedState) {
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(_)).Times(0);
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kEthernet));
SetConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
metric_observer_.OnNetworksChanged("network1");
task_environment_.FastForwardBy(time_advance_);
const auto disconnect_ticks = task_environment_.NowTicks();
SetConnectionType(network::mojom::ConnectionType::CONNECTION_NONE);
metric_observer_.OnNetworksChanged(
DiscoveryNetworkMonitor::kNetworkIdDisconnected);
task_environment_.FastForwardBy(time_advance_);
EXPECT_CALL(*mock_metrics_,
RecordTimeBetweenNetworkChangeEvents(
(start_ticks_ + time_advance_) - start_ticks_));
EXPECT_CALL(*mock_metrics_,
RecordConnectionType(
DiscoveryNetworkMonitorConnectionType::kDisconnected));
task_environment_.FastForwardUntilNoTasksRemain();
task_environment_.FastForwardBy(time_advance_);
const auto second_ethernet_ticks = task_environment_.NowTicks();
EXPECT_CALL(*mock_metrics_, RecordTimeBetweenNetworkChangeEvents(
second_ethernet_ticks - disconnect_ticks));
EXPECT_CALL(
*mock_metrics_,
RecordConnectionType(DiscoveryNetworkMonitorConnectionType::kEthernet));
SetConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
metric_observer_.OnNetworksChanged("network1");
}
} // namespace media_router
// Copyright 2017 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/discovery/discovery_network_monitor_metrics.h"
#include "base/metrics/histogram_macros.h"
namespace media_router {
DiscoveryNetworkMonitorMetrics::~DiscoveryNetworkMonitorMetrics() {}
void DiscoveryNetworkMonitorMetrics::RecordTimeBetweenNetworkChangeEvents(
base::TimeDelta delta) {
UMA_HISTOGRAM_MEDIUM_TIMES(
"MediaRouter.NetworkMonitor.NetworkChangeEventDelta", delta);
}
void DiscoveryNetworkMonitorMetrics::RecordConnectionType(
DiscoveryNetworkMonitorConnectionType connection_type) {
DCHECK_LT(connection_type,
DiscoveryNetworkMonitorConnectionType::kTotalCount);
UMA_HISTOGRAM_ENUMERATION("MediaRouter.NetworkMonitor.ConnectionType",
connection_type,
DiscoveryNetworkMonitorConnectionType::kTotalCount);
}
} // namespace media_router
// Copyright 2017 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_DISCOVERY_DISCOVERY_NETWORK_MONITOR_METRICS_H_
#define CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DISCOVERY_NETWORK_MONITOR_METRICS_H_
#include "base/time/time.h"
namespace media_router {
// This enum indicates the state of the host's network connectivity according to
// both network::NetworkConnectionTracker and DiscoveryNetworkMonitor. If
// DiscoveryNetworkMonitor reports the network identifier is unknown, we would
// also like to record what network::NetworkConnectionTracker says about the
// connection type.
//
// It is tied to the UMA histogram MediaRouter.NetworkMonitor.ConnectionType so
// new values should only be added at the end, but before kTotalCount.
enum class DiscoveryNetworkMonitorConnectionType {
// network::NetworkConnectionTracker reports the connection type is Wifi and
// we have a valid network identifier from DiscoveryNetworkMonitor.
kWifi = 0,
// network::NetworkConnectionTracker reports the connection type is ethernet
// and we have a valid network identifier from DiscoveryNetworkMonitor.
kEthernet = 1,
// network::NetworkConnectionTracker reports the connection type is Wifi but
// we don't have a valid network identifier from DiscoveryNetworkMonitor.
kUnknownReportedAsWifi = 2,
// network::NetworkConnectionTracker reports the connection type is ethernet
// but we don't have a valid network identifier from DiscoveryNetworkMonitor.
kUnknownReportedAsEthernet = 3,
// network::NetworkConnectionTracker reports the connection type is something
// other than Wifi and ethernet and we don't have a valid network identifier
// from DiscoveryNetworkMonitor.
kUnknownReportedAsOther = 4,
// network::NetworkConnectionTracker reports the connection type is unknown
// and we don't have a valid network identifier from DiscoveryNetworkMonitor.
kUnknown = 5,
// DiscoveryNetworkMonitor reports that the host is disconnected from all
// networks. This comes directly from network::NetworkConnectionTracker so
// there is no potential inconsistency to record.
kDisconnected = 6,
// NOTE: Add entries only immediately above this line.
kTotalCount = 7,
};
class DiscoveryNetworkMonitorMetrics {
public:
virtual ~DiscoveryNetworkMonitorMetrics();
// This records the time since the last network change event when
// DiscoveryNetworkMonitor emits a new network change event to its observers.
virtual void RecordTimeBetweenNetworkChangeEvents(base::TimeDelta delta);
// This records the connection type as reported by both
// DiscoveryNetworkMonitor and network::NetworkConnectionTracker.
virtual void RecordConnectionType(
DiscoveryNetworkMonitorConnectionType connection_type);
};
} // namespace media_router
#endif // CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DISCOVERY_NETWORK_MONITOR_METRICS_H_
......@@ -4762,6 +4762,9 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
<histogram name="MediaRouter.NetworkMonitor.ConnectionType"
enum="DiscoveryNetworkMonitorConnectionType" expires_after="2021-06-06">
<obsolete>
Unused after 2021-01-06.
</obsolete>
<owner>btolsch@chromium.org</owner>
<owner>openscreen-eng@google.com</owner>
<summary>
......@@ -4773,6 +4776,9 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
<histogram name="MediaRouter.NetworkMonitor.NetworkChangeEventDelta" units="ms"
expires_after="2021-02-01">
<obsolete>
Unused after 2021-01-06.
</obsolete>
<owner>btolsch@chromium.org</owner>
<owner>openscreen-eng@google.com</owner>
<summary>
......
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