diff options
-rw-r--r-- | chrome/browser/browser_main.cc | 14 | ||||
-rw-r--r-- | chrome/browser/browser_process.h | 4 | ||||
-rw-r--r-- | chrome/browser/browser_process_impl.cc | 23 | ||||
-rw-r--r-- | chrome/browser/browser_process_impl.h | 5 | ||||
-rw-r--r-- | chrome/browser/metrics/thread_watcher.cc | 86 | ||||
-rw-r--r-- | chrome/browser/metrics/thread_watcher.h | 17 | ||||
-rw-r--r-- | chrome/browser/metrics/thread_watcher_unittest.cc | 13 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 2 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 1 | ||||
-rw-r--r-- | chrome/test/testing_browser_process.cc | 4 | ||||
-rw-r--r-- | chrome/test/testing_browser_process.h | 3 | ||||
-rw-r--r-- | content/browser/browser_thread.cc | 1 | ||||
-rw-r--r-- | content/browser/browser_thread.h | 3 |
13 files changed, 43 insertions, 133 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc index a7d474c..3a701e0 100644 --- a/chrome/browser/browser_main.cc +++ b/chrome/browser/browser_main.cc @@ -45,7 +45,6 @@ #include "chrome/browser/metrics/histogram_synchronizer.h" #include "chrome/browser/metrics/metrics_log.h" #include "chrome/browser/metrics/metrics_service.h" -#include "chrome/browser/metrics/thread_watcher.h" #include "chrome/browser/net/blob_url_request_job_factory.h" #include "chrome/browser/net/chrome_dns_cert_provenance_checker.h" #include "chrome/browser/net/chrome_dns_cert_provenance_checker_factory.h" @@ -703,11 +702,6 @@ void CreateChildThreads(BrowserProcessImpl* process) { process->process_launcher_thread(); process->cache_thread(); process->io_thread(); - // Create watchdog thread after creating all other threads because it will - // watch the other threads and they must be running. -#if defined(OS_WIN) - process->watchdog_thread(); -#endif } // Returns the new local state object, guaranteed non-NULL. @@ -1359,11 +1353,6 @@ int BrowserMain(const MainFunctionParams& parameters) { scoped_refptr<HistogramSynchronizer> histogram_synchronizer( new HistogramSynchronizer()); - // Initialize thread watcher system. This is a singleton and is used by - // WATCHDOG thread to keep track of information about threads that are being - // watched. - scoped_ptr<ThreadWatcherList> thread_watcher_list(new ThreadWatcherList()); - // Initialize the prefs of the local state. browser::RegisterLocalState(local_state); @@ -1914,9 +1903,6 @@ int BrowserMain(const MainFunctionParams& parameters) { process_singleton.Cleanup(); - // Stop all tasks that might run on WATCHDOG thread. - ThreadWatcherList::StopWatchingAll(); - metrics->Stop(); // browser_shutdown takes care of deleting browser_process, so we need to diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h index 8a1ab65a..c1275db 100644 --- a/chrome/browser/browser_process.h +++ b/chrome/browser/browser_process.h @@ -39,7 +39,6 @@ class ResourceDispatcherHost; class SidebarManager; class TabCloseableStateWatcher; class ThumbnailGenerator; -class WatchDogThread; namespace base { class Thread; @@ -116,9 +115,6 @@ class BrowserProcess { virtual base::Thread* background_x11_thread() = 0; #endif - // Returns the thread that is used for health check of all browser threads. - virtual WatchDogThread* watchdog_thread() = 0; - virtual policy::BrowserPolicyConnector* browser_policy_connector() = 0; virtual IconManager* icon_manager() = 0; diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index 9f0fcee..f65c65b 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc @@ -32,7 +32,6 @@ #include "chrome/browser/intranet_redirect_detector.h" #include "chrome/browser/io_thread.h" #include "chrome/browser/metrics/metrics_service.h" -#include "chrome/browser/metrics/thread_watcher.h" #include "chrome/browser/net/chrome_net_log.h" #include "chrome/browser/net/predictor_api.h" #include "chrome/browser/net/sdch_dictionary_fetcher.h" @@ -98,7 +97,6 @@ BrowserProcessImpl::BrowserProcessImpl(const CommandLine& command_line) created_db_thread_(false), created_process_launcher_thread_(false), created_cache_thread_(false), - created_watchdog_thread_(false), created_profile_manager_(false), created_local_state_(false), created_icon_manager_(false), @@ -247,9 +245,6 @@ BrowserProcessImpl::~BrowserProcessImpl() { // on the db thread too. db_thread_.reset(); - // Stop the watchdog thread after stopping other threads. - watchdog_thread_.reset(); - // At this point, no render process exist and the file, io, db, and // webkit threads in this process have all terminated, so it's safe // to access local state data such as cookies, database, or local storage. @@ -395,14 +390,6 @@ base::Thread* BrowserProcessImpl::background_x11_thread() { } #endif -WatchDogThread* BrowserProcessImpl::watchdog_thread() { - DCHECK(CalledOnValidThread()); - if (!created_watchdog_thread_) - CreateWatchdogThread(); - DCHECK(watchdog_thread_.get() != NULL); - return watchdog_thread_.get(); -} - ProfileManager* BrowserProcessImpl::profile_manager() { DCHECK(CalledOnValidThread()); if (!created_profile_manager_) @@ -738,16 +725,6 @@ void BrowserProcessImpl::CreateCacheThread() { cache_thread_.swap(thread); } -void BrowserProcessImpl::CreateWatchdogThread() { - DCHECK(!created_watchdog_thread_ && watchdog_thread_.get() == NULL); - created_watchdog_thread_ = true; - - scoped_ptr<WatchDogThread> thread(new WatchDogThread()); - if (!thread->Start()) - return; - watchdog_thread_.swap(thread); -} - void BrowserProcessImpl::CreateProfileManager() { DCHECK(!created_profile_manager_ && profile_manager_.get() == NULL); created_profile_manager_ = true; diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h index 162b82a..4926812 100644 --- a/chrome/browser/browser_process_impl.h +++ b/chrome/browser/browser_process_impl.h @@ -57,7 +57,6 @@ class BrowserProcessImpl : public BrowserProcess, #if defined(USE_X11) virtual base::Thread* background_x11_thread(); #endif - virtual WatchDogThread* watchdog_thread(); virtual ProfileManager* profile_manager(); virtual PrefService* local_state(); virtual DevToolsManager* devtools_manager(); @@ -124,7 +123,6 @@ class BrowserProcessImpl : public BrowserProcess, void CreateDBThread(); void CreateProcessLauncherThread(); void CreateCacheThread(); - void CreateWatchdogThread(); void CreateTemplateURLModel(); void CreateProfileManager(); void CreateWebDataService(); @@ -172,9 +170,6 @@ class BrowserProcessImpl : public BrowserProcess, bool created_cache_thread_; scoped_ptr<base::Thread> cache_thread_; - bool created_watchdog_thread_; - scoped_ptr<WatchDogThread> watchdog_thread_; - bool created_profile_manager_; scoped_ptr<ProfileManager> profile_manager_; diff --git a/chrome/browser/metrics/thread_watcher.cc b/chrome/browser/metrics/thread_watcher.cc index 9a07dde..ececcac 100644 --- a/chrome/browser/metrics/thread_watcher.cc +++ b/chrome/browser/metrics/thread_watcher.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#if 0 + #include "base/threading/thread_restrictions.h" #include "build/build_config.h" #include "chrome/browser/metrics/metrics_service.h" @@ -190,7 +192,7 @@ ThreadWatcherList::ThreadWatcherList() // Assert we are not running on WATCHDOG thread. Would be ideal to assert we // are on UI thread, but Unit tests are not running on UI thread. DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::WATCHDOG)); - CHECK(!global_); + DCHECK(!global_); global_ = this; // Register Notifications observer. #if defined(OS_WIN) @@ -200,6 +202,11 @@ ThreadWatcherList::ThreadWatcherList() ThreadWatcherList::~ThreadWatcherList() { base::AutoLock auto_lock(lock_); + while (!registered_.empty()) { + RegistrationList::iterator it = registered_.begin(); + delete it->second; + registered_.erase(it->first); + } DCHECK(this == global_); global_ = NULL; } @@ -217,15 +224,15 @@ void ThreadWatcherList::StopWatchingAll() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (!global_) return; - - // Remove all notifications for all watched threads. - RemoveNotifications(); - - // Delete all thread watcher objects on WATCHDOG thread. - BrowserThread::PostTask( - BrowserThread::WATCHDOG, - FROM_HERE, - NewRunnableMethod(global_, &ThreadWatcherList::DeleteAll)); + base::AutoLock auto_lock(global_->lock_); + for (RegistrationList::iterator it = global_->registered_.begin(); + global_->registered_.end() != it; + ++it) + BrowserThread::PostTask( + BrowserThread::WATCHDOG, + FROM_HERE, + NewRunnableMethod( + it->second, &ThreadWatcher::DeActivateThreadWatching)); } // static @@ -239,16 +246,6 @@ void ThreadWatcherList::RemoveNotifications() { #endif } -void ThreadWatcherList::DeleteAll() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WATCHDOG)); - base::AutoLock auto_lock(lock_); - while (!registered_.empty()) { - RegistrationList::iterator it = registered_.begin(); - delete it->second; - registered_.erase(it->first); - } -} - void ThreadWatcherList::Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) { @@ -306,6 +303,8 @@ WatchDogThread::WatchDogThread() } WatchDogThread::~WatchDogThread() { + // Remove all notifications for all watched threads. + ThreadWatcherList::RemoveNotifications(); // We cannot rely on our base class to stop the thread since we want our // CleanUp function to run. Stop(); @@ -318,42 +317,19 @@ void WatchDogThread::Init() { BrowserProcessSubThread::Init(); #if defined(OS_WIN) - BrowserThread::PostDelayedTask( - BrowserThread::WATCHDOG, - FROM_HERE, - NewRunnableFunction(&WatchDogThread::StartWatchingAll), - base::TimeDelta::FromSeconds(10).InMilliseconds()); -#endif -} - -void WatchDogThread::CleanUp() { - BrowserProcessSubThread::CleanUp(); -} - -void WatchDogThread::CleanUpAfterMessageLoopDestruction() { - // This will delete the |notification_service_|. Make sure it's done after - // anything else can reference it. - BrowserProcessSubThread::CleanUpAfterMessageLoopDestruction(); -} - -void WatchDogThread::StartWatchingAll() { const base::TimeDelta kSleepTime = base::TimeDelta::FromSeconds(5); const base::TimeDelta kUnresponsiveTime = base::TimeDelta::FromSeconds(10); - if (BrowserThread::IsMessageLoopValid(BrowserThread::UI)) - ThreadWatcher::StartWatching(BrowserThread::UI, "UI", kSleepTime, - kUnresponsiveTime); - if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) - ThreadWatcher::StartWatching(BrowserThread::IO, "IO", kSleepTime, - kUnresponsiveTime); - if (BrowserThread::IsMessageLoopValid(BrowserThread::DB)) - ThreadWatcher::StartWatching(BrowserThread::DB, "DB", kSleepTime, - kUnresponsiveTime); - if (BrowserThread::IsMessageLoopValid(BrowserThread::FILE)) - ThreadWatcher::StartWatching(BrowserThread::FILE, "FILE", kSleepTime, - kUnresponsiveTime); - if (BrowserThread::IsMessageLoopValid(BrowserThread::CACHE)) - ThreadWatcher::StartWatching(BrowserThread::CACHE, "CACHE", kSleepTime, - kUnresponsiveTime); + ThreadWatcher::StartWatching(BrowserThread::UI, "UI", kSleepTime, + kUnresponsiveTime); + ThreadWatcher::StartWatching(BrowserThread::IO, "IO", kSleepTime, + kUnresponsiveTime); + ThreadWatcher::StartWatching(BrowserThread::DB, "DB", kSleepTime, + kUnresponsiveTime); + ThreadWatcher::StartWatching(BrowserThread::FILE, "FILE", kSleepTime, + kUnresponsiveTime); + ThreadWatcher::StartWatching(BrowserThread::CACHE, "CACHE", kSleepTime, + kUnresponsiveTime); +#endif } - +#endif // 0 diff --git a/chrome/browser/metrics/thread_watcher.h b/chrome/browser/metrics/thread_watcher.h index 7d93561..f7765c8 100644 --- a/chrome/browser/metrics/thread_watcher.h +++ b/chrome/browser/metrics/thread_watcher.h @@ -8,6 +8,8 @@ #define CHROME_BROWSER_METRICS_THREAD_WATCHER_H_ #pragma once +#if 0 + #include <map> #include <string> #include <vector> @@ -204,33 +206,25 @@ class ThreadWatcherList : public NotificationObserver { // This method posts a task on WATCHDOG thread to RevokeAll tasks and to // deactive thread watching of other threads and tell NotificationService to // stop calling Observe. - // This method is accessible on UI thread. static void StopWatchingAll(); // RemoveAll NotificationTypes that are being observed. - // This method is accessible on UI thread. static void RemoveNotifications(); private: // Allow tests to access our innards for testing purposes. FRIEND_TEST(ThreadWatcherTest, Registration); - // Delete all thread watcher objects and remove them from global map. - // This method is accessible on WATCHDOG thread. - void DeleteAll(); - // This will ensure that the watching is actively taking place. It will wakeup // all thread watchers every 2 seconds. This is the implementation of // NotificationObserver. When a matching notification is posted to the // notification service, this method is called. - // This method is accessible on UI thread. virtual void Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details); // This will ensure that the watching is actively taking place, and awaken // all thread watchers that are registered. - // This method is accessible on WATCHDOG thread. virtual void WakeUpAll(); // The Find() method can be used to test to see if a given ThreadWatcher was @@ -265,11 +259,6 @@ class WatchDogThread : public BrowserProcessSubThread { protected: virtual void Init(); - virtual void CleanUp(); - virtual void CleanUpAfterMessageLoopDestruction(); - - // Start watching all browser threads. - static void StartWatchingAll(); DISALLOW_COPY_AND_ASSIGN(WatchDogThread); }; @@ -278,4 +267,6 @@ class WatchDogThread : public BrowserProcessSubThread { DISABLE_RUNNABLE_METHOD_REFCOUNT(ThreadWatcher); DISABLE_RUNNABLE_METHOD_REFCOUNT(ThreadWatcherList); +#endif // 0 + #endif // CHROME_BROWSER_METRICS_THREAD_WATCHER_H_ diff --git a/chrome/browser/metrics/thread_watcher_unittest.cc b/chrome/browser/metrics/thread_watcher_unittest.cc index b077492..52a4288 100644 --- a/chrome/browser/metrics/thread_watcher_unittest.cc +++ b/chrome/browser/metrics/thread_watcher_unittest.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#if 0 + #include "base/basictypes.h" #include "base/logging.h" #include "base/message_loop.h" @@ -11,13 +13,10 @@ #include "base/synchronization/lock.h" #include "base/threading/platform_thread.h" #include "base/time.h" -#include "build/build_config.h" #include "chrome/browser/metrics/thread_watcher.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" -#if defined(OS_WIN) - using base::TimeDelta; using base::TimeTicks; @@ -246,6 +245,10 @@ class ThreadWatcherTest : public ::testing::Test { CustomThreadWatcher* webkit_watcher_; ThreadWatcherTest() { + } + + protected: + virtual void SetUp() { webkit_thread_.reset(new BrowserThread(BrowserThread::WEBKIT)); io_thread_.reset(new BrowserThread(BrowserThread::IO)); watchdog_thread_.reset(new BrowserThread(BrowserThread::WATCHDOG)); @@ -265,7 +268,7 @@ class ThreadWatcherTest : public ::testing::Test { webkit_thread_id, webkit_thread_name, kSleepTime, kUnresponsiveTime); } - ~ThreadWatcherTest() { + virtual void TearDown() { // io_thread_->Stop(); // webkit_thread_->Stop(); // watchdog_thread_->Stop(); @@ -479,4 +482,4 @@ TEST_F(ThreadWatcherTest, MultipleThreadsNotResponding) { webkit_watcher_, &ThreadWatcher::DeActivateThreadWatching)); } -#endif // OS_WIN +#endif // 0 diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index c65546e..6204ce8 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -1358,8 +1358,6 @@ 'browser/metrics/metrics_response.h', 'browser/metrics/metrics_service.cc', 'browser/metrics/metrics_service.h', - 'browser/metrics/thread_watcher.cc', - 'browser/metrics/thread_watcher.h', 'browser/metrics/user_metrics.cc', 'browser/metrics/user_metrics.h', 'browser/nacl_host/nacl_broker_host_win.cc', diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 16b70d8..4dda5f4 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1367,7 +1367,6 @@ 'browser/metrics/metrics_log_unittest.cc', 'browser/metrics/metrics_response_unittest.cc', 'browser/metrics/metrics_service_unittest.cc', - 'browser/metrics/thread_watcher_unittest.cc', 'browser/mock_plugin_exceptions_table_model.cc', 'browser/mock_plugin_exceptions_table_model.h', 'browser/net/connection_tester_unittest.cc', diff --git a/chrome/test/testing_browser_process.cc b/chrome/test/testing_browser_process.cc index 71561c3..f6af58f 100644 --- a/chrome/test/testing_browser_process.cc +++ b/chrome/test/testing_browser_process.cc @@ -58,10 +58,6 @@ base::Thread* TestingBrowserProcess::cache_thread() { return NULL; } -WatchDogThread* TestingBrowserProcess::watchdog_thread() { - return NULL; -} - ProfileManager* TestingBrowserProcess::profile_manager() { return profile_manager_.get(); } diff --git a/chrome/test/testing_browser_process.h b/chrome/test/testing_browser_process.h index 41e5b2c..d544f82 100644 --- a/chrome/test/testing_browser_process.h +++ b/chrome/test/testing_browser_process.h @@ -22,7 +22,6 @@ class IOThread; class GoogleURLTracker; class PrefService; -class WatchDogThread; namespace base { class WaitableEvent; @@ -59,8 +58,6 @@ class TestingBrowserProcess : public BrowserProcess { virtual base::Thread* cache_thread(); - virtual WatchDogThread* watchdog_thread(); - virtual ProfileManager* profile_manager(); virtual PrefService* local_state(); diff --git a/content/browser/browser_thread.cc b/content/browser/browser_thread.cc index 4c6627b..c0e4355 100644 --- a/content/browser/browser_thread.cc +++ b/content/browser/browser_thread.cc @@ -11,7 +11,6 @@ // Friendly names for the well-known threads. static const char* browser_thread_names[BrowserThread::ID_COUNT] = { "", // UI (name assembled in browser_main.cc). - "Chrome_WatchdogThread", // WATCHDOG "Chrome_DBThread", // DB "Chrome_WebKitThread", // WEBKIT "Chrome_FileThread", // FILE diff --git a/content/browser/browser_thread.h b/content/browser/browser_thread.h index b0ed765..d5e4473 100644 --- a/content/browser/browser_thread.h +++ b/content/browser/browser_thread.h @@ -43,9 +43,6 @@ class BrowserThread : public base::Thread { // The main thread in the browser. UI, - // This is the thread that watches all browser threads. - WATCHDOG, - // This is the thread that interacts with the database. DB, |