diff options
author | huanr@chromium.org <huanr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-09 19:36:01 +0000 |
---|---|---|
committer | huanr@chromium.org <huanr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-09 19:36:01 +0000 |
commit | fc48aa2703cfc9e4dca98031671fd5e7af05d8b5 (patch) | |
tree | 6199f031875ef2c8270136d9493340b66ab62f12 | |
parent | c4b3858cc5dbae4bb28bf8c8a9bf9b7d0ca146d0 (diff) | |
download | chromium_src-fc48aa2703cfc9e4dca98031671fd5e7af05d8b5.zip chromium_src-fc48aa2703cfc9e4dca98031671fd5e7af05d8b5.tar.gz chromium_src-fc48aa2703cfc9e4dca98031671fd5e7af05d8b5.tar.bz2 |
Enable database logging on history thread.
BUG=16591
TEST=History UI test
Review URL: http://codereview.chromium.org/198011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25770 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | base/thread.cc | 6 | ||||
-rw-r--r-- | base/thread.h | 3 | ||||
-rw-r--r-- | chrome/browser/history/history.cc | 26 |
3 files changed, 31 insertions, 4 deletions
diff --git a/base/thread.cc b/base/thread.cc index f447fbb..dcda330 100644 --- a/base/thread.cc +++ b/base/thread.cc @@ -135,6 +135,10 @@ void Thread::StopSoon() { message_loop_->PostTask(FROM_HERE, new ThreadQuitTask()); } +void Thread::Run(MessageLoop* message_loop) { + message_loop->Run(); +} + void Thread::ThreadMain() { // The message loop for this thread. MessageLoop message_loop(startup_data_->options.message_loop_type); @@ -153,7 +157,7 @@ void Thread::ThreadMain() { // startup_data_ can't be touched anymore since the starting thread is now // unlocked. - message_loop.Run(); + Run(message_loop_); // Let the thread do extra cleanup. CleanUp(); diff --git a/base/thread.h b/base/thread.h index d1aae0e..36daa7f 100644 --- a/base/thread.h +++ b/base/thread.h @@ -114,6 +114,9 @@ class Thread : PlatformThread::Delegate { // Called just prior to starting the message loop virtual void Init() {} + // Called to start the message loop + virtual void Run(MessageLoop* message_loop); + // Called just after the message loop ends virtual void CleanUp() {} diff --git a/chrome/browser/history/history.cc b/chrome/browser/history/history.cc index 8310c23..965770f 100644 --- a/chrome/browser/history/history.cc +++ b/chrome/browser/history/history.cc @@ -40,6 +40,7 @@ #include "chrome/browser/history/history_types.h" #include "chrome/browser/history/in_memory_database.h" #include "chrome/browser/history/in_memory_history_backend.h" +#include "chrome/browser/history/visit_log.h" #include "chrome/browser/profile.h" #include "chrome/browser/visitedlink_master.h" #include "chrome/common/chrome_constants.h" @@ -53,7 +54,26 @@ using base::Time; using history::HistoryBackend; -static const char* kHistoryThreadName = "Chrome_HistoryThread"; +namespace { + +class ChromeHistoryThread : public ChromeThread { + public: + ChromeHistoryThread() : ChromeThread(ChromeThread::HISTORY) {} + virtual ~ChromeHistoryThread() { + // We cannot rely on our base class to call Stop() in case we want our + // CleanUp function to run. + Stop(); + } + protected: + virtual void Run(MessageLoop* message_loop) { + // Allocate VisitLog on local stack so it will be saved in crash dump. + history::VisitLog visit_log; + history::InitVisitLog(&visit_log); + message_loop->Run(); + } +}; + +} // namespace // Sends messages from the backend to us on the main thread. This must be a // separate class from the history service so that it can hold a reference to @@ -100,7 +120,7 @@ class HistoryService::BackendDelegate : public HistoryBackend::Delegate { const history::StarID HistoryService::kBookmarkBarID = 1; HistoryService::HistoryService() - : thread_(new base::Thread(kHistoryThreadName)), + : thread_(new ChromeHistoryThread()), profile_(NULL), backend_loaded_(false) { // Is NULL when running generate_profile. @@ -111,7 +131,7 @@ HistoryService::HistoryService() } HistoryService::HistoryService(Profile* profile) - : thread_(new base::Thread(kHistoryThreadName)), + : thread_(new ChromeHistoryThread()), profile_(profile), backend_loaded_(false) { registrar_.Add(this, NotificationType::HISTORY_URLS_DELETED, |