Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2108)

Unified Diff: chrome/browser/media/router/discovery/dial/dial_registry.cc

Issue 2754703005: [Device Discovery] Make DialRegistry a Singleton (Closed)
Patch Set: fix mac and windows compile errors Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media/router/discovery/dial/dial_registry.cc
diff --git a/chrome/browser/media/router/discovery/dial/dial_registry.cc b/chrome/browser/media/router/discovery/dial/dial_registry.cc
index bb6459a9e7917cff31a696872f43eef60550a663..f394945b5a37ca659178c64addb7078e9ce2c2cb 100644
--- a/chrome/browser/media/router/discovery/dial/dial_registry.cc
+++ b/chrome/browser/media/router/discovery/dial/dial_registry.cc
@@ -23,26 +23,45 @@ using base::TimeDelta;
using content::BrowserThread;
using net::NetworkChangeNotifier;
+namespace {
+
+// How often to poll for devices.
+const int kDialRefreshIntervalSecs = 120;
+
+// We prune a device if it does not respond after this time.
+const int kDialExpirationSecs = 240;
+
+// The maximum number of devices retained at once in the registry.
+const size_t kDialMaxDevices = 256;
+
+} // namespace
+
namespace media_router {
-DialRegistry::DialRegistry(base::TimeDelta refresh_interval,
- base::TimeDelta expiration,
- const size_t max_devices)
+DialRegistry::DialRegistry()
: num_listeners_(0),
registry_generation_(0),
last_event_registry_generation_(0),
label_count_(0),
- refresh_interval_delta_(refresh_interval),
- expiration_delta_(expiration),
- max_devices_(max_devices) {
+ refresh_interval_delta_(
+ base::TimeDelta::FromSeconds(kDialRefreshIntervalSecs)),
+ expiration_delta_(base::TimeDelta::FromSeconds(kDialExpirationSecs)),
+ max_devices_(kDialMaxDevices) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK_GT(max_devices_, 0U);
+ // This is a leaky singleton, so there's no code to remove |this| as an
+ // observer.
NetworkChangeNotifier::AddNetworkChangeObserver(this);
}
-DialRegistry::~DialRegistry() {
+// This is a leaky singleton and the dtor won't be called.
+DialRegistry::~DialRegistry() = default;
+
+// static
+DialRegistry* DialRegistry::GetInstance() {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
+ return base::Singleton<DialRegistry,
+ base::LeakySingletonTraits<DialRegistry>>::get();
}
std::unique_ptr<DialService> DialRegistry::CreateDialService() {
@@ -153,8 +172,9 @@ void DialRegistry::StartPeriodicDiscovery() {
dial_ = CreateDialService();
dial_->AddObserver(this);
DoDiscovery();
- repeating_timer_.Start(FROM_HERE, refresh_interval_delta_, this,
- &DialRegistry::DoDiscovery);
+ repeating_timer_.reset(new base::RepeatingTimer());
+ repeating_timer_->Start(FROM_HERE, refresh_interval_delta_, this,
+ &DialRegistry::DoDiscovery);
}
void DialRegistry::DoDiscovery() {
@@ -169,7 +189,8 @@ void DialRegistry::StopPeriodicDiscovery() {
if (!dial_)
return;
- repeating_timer_.Stop();
+ repeating_timer_->Stop();
+ repeating_timer_.reset();
dial_->RemoveObserver(this);
ClearDialService();
}

Powered by Google App Engine
This is Rietveld 408576698