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

Unified Diff: net/android/network_change_notifier_android.cc

Issue 1011683002: Lazily initialize MessageLoop for faster thread startup (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: weak ptr Created 5 years, 8 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
« no previous file with comments | « content/public/test/test_browser_thread.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/android/network_change_notifier_android.cc
diff --git a/net/android/network_change_notifier_android.cc b/net/android/network_change_notifier_android.cc
index 36ebda679660abfeb2a4a0f8cf79a0f1a559eab3..889fe050ef0af17aa6a552b56010b3838f8db774 100644
--- a/net/android/network_change_notifier_android.cc
+++ b/net/android/network_change_notifier_android.cc
@@ -59,6 +59,9 @@
#include "net/android/network_change_notifier_android.h"
+#include "base/memory/weak_ptr.h"
+#include "base/single_thread_task_runner.h"
+#include "base/thread_task_runner_handle.h"
#include "base/threading/thread.h"
#include "net/base/address_tracker_linux.h"
#include "net/dns/dns_config_service_posix.h"
@@ -73,12 +76,16 @@ class NetworkChangeNotifierAndroid::DnsConfigServiceThread
public:
DnsConfigServiceThread(const DnsConfig* dns_config_for_testing)
: base::Thread("DnsConfigService"),
+ calling_task_runner_(base::ThreadTaskRunnerHandle::Get()),
dns_config_for_testing_(dns_config_for_testing),
creation_time_(base::Time::Now()),
address_tracker_(base::Bind(base::DoNothing),
base::Bind(base::DoNothing),
// We're only interested in tunnel interface changes.
- base::Bind(NotifyNetworkChangeNotifierObservers)) {}
+ base::Bind(NotifyNetworkChangeNotifierObservers)),
+ weak_ptr_factory_(this) {
+ weak_ptr_ = weak_ptr_factory_.GetWeakPtr();
+ }
~DnsConfigServiceThread() override {
NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
@@ -98,6 +105,9 @@ class NetworkChangeNotifierAndroid::DnsConfigServiceThread
dns_config_service_->WatchConfig(
base::Bind(&DnsConfigServiceThread::DnsConfigChangeCallback,
base::Unretained(this)));
+ calling_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&DnsConfigServiceThread::InitAfterStart, weak_ptr_));
pauljensen 2015/05/01 11:54:44 This is not good. This will allow changes to esca
kinuko 2015/05/01 13:58:05 Ok thanks, I suspected it might be the case. I can
}
void CleanUp() override { dns_config_service_.reset(); }
@@ -125,12 +135,17 @@ class NetworkChangeNotifierAndroid::DnsConfigServiceThread
base::Unretained(dns_config_service_.get()), type));
}
+ scoped_refptr<base::SingleThreadTaskRunner> calling_task_runner_;
const DnsConfig* dns_config_for_testing_;
const base::Time creation_time_;
scoped_ptr<internal::DnsConfigServicePosix> dns_config_service_;
// Used to detect tunnel state changes.
internal::AddressTrackerLinux address_tracker_;
+ // Used only on the calling thread that created this thread.
+ base::WeakPtr<DnsConfigServiceThread> weak_ptr_;
+ base::WeakPtrFactory<DnsConfigServiceThread> weak_ptr_factory_;
+
DISALLOW_COPY_AND_ASSIGN(DnsConfigServiceThread);
};
@@ -172,7 +187,6 @@ NetworkChangeNotifierAndroid::NetworkChangeNotifierAndroid(
delegate_->AddObserver(this);
dns_config_service_thread_->StartWithOptions(
base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
- dns_config_service_thread_->InitAfterStart();
}
// static
« no previous file with comments | « content/public/test/test_browser_thread.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698