diff options
author | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-17 21:15:37 +0000 |
---|---|---|
committer | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-17 21:15:37 +0000 |
commit | 4038e6e270171286189b2cd54fcb45a7e9c08222 (patch) | |
tree | 6d81b87f94cc47483dd372a689d7bfa2091f2aba /chrome/browser/visitedlink_master.cc | |
parent | 992f8306de28201f9c5253ceb3f7b1fa6e400cd7 (diff) | |
download | chromium_src-4038e6e270171286189b2cd54fcb45a7e9c08222.zip chromium_src-4038e6e270171286189b2cd54fcb45a7e9c08222.tar.gz chromium_src-4038e6e270171286189b2cd54fcb45a7e9c08222.tar.bz2 |
Preload the visited link db on the file thread if the file exists.
Otherwise, just load like normal on the UI thread.
BUG=24163
Review URL: http://codereview.chromium.org/502005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34874 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/visitedlink_master.cc')
-rw-r--r-- | chrome/browser/visitedlink_master.cc | 123 |
1 files changed, 61 insertions, 62 deletions
diff --git a/chrome/browser/visitedlink_master.cc b/chrome/browser/visitedlink_master.cc index c2aa3fe..299f220 100644 --- a/chrome/browser/visitedlink_master.cc +++ b/chrome/browser/visitedlink_master.cc @@ -24,7 +24,6 @@ #include "base/rand_util.h" #include "base/stack_container.h" #include "base/string_util.h" -#include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_thread.h" #include "chrome/browser/history/history.h" #include "chrome/browser/profile.h" @@ -255,10 +254,70 @@ void VisitedLinkMaster::InitMembers(Listener* listener, Profile* profile) { bool VisitedLinkMaster::Init() { if (!InitFromFile()) - return InitFromScratch(suppress_rebuild_); + return InitFromScratch(); return true; } +bool VisitedLinkMaster::InitFromFile() { + DCHECK(file_ == NULL); + + FilePath filename; + GetDatabaseFileName(&filename); + ScopedFILE file_closer(OpenFile(filename, "rb+")); + if (!file_closer.get()) + return false; + + int32 num_entries, used_count; + if (!ReadFileHeader(file_closer.get(), &num_entries, &used_count, salt_)) + return false; // Header isn't valid. + + // Allocate and read the table. + if (!CreateURLTable(num_entries, false)) + return false; + if (!ReadFromFile(file_closer.get(), kFileHeaderSize, + hash_table_, num_entries * sizeof(Fingerprint))) { + FreeURLTable(); + return false; + } + used_items_ = used_count; + +#ifndef NDEBUG + DebugValidate(); +#endif + + file_ = file_closer.release(); + return true; +} + +bool VisitedLinkMaster::InitFromScratch() { + int32 table_size = kDefaultTableSize; + if (table_size_override_) + table_size = table_size_override_; + + // The salt must be generated before the table so that it can be copied to + // the shared memory. + GenerateSalt(salt_); + if (!CreateURLTable(table_size, true)) + return false; + +#ifndef NDEBUG + DebugValidate(); +#endif + + if (suppress_rebuild_) { + // When we disallow rebuilds (normally just unit tests), just use the + // current empty table. + return WriteFullTable(); + } + + // This will build the table from history. On the first run, history will + // be empty, so this will be correct. This will also write the new table + // to disk. We don't want to save explicitly here, since the rebuild may + // not complete, leaving us with an empty but valid visited link database. + // In the future, we won't know we need to try rebuilding again. + return RebuildTableFromHistory(); +} + VisitedLinkMaster::Hash VisitedLinkMaster::TryToAddURL(const GURL& url) { // Extra check that we are not off the record. This should not happen. if (profile_ && profile_->IsOffTheRecord()) { @@ -537,66 +596,6 @@ bool VisitedLinkMaster::WriteFullTable() { return true; } -bool VisitedLinkMaster::InitFromFile() { - DCHECK(file_ == NULL); - - FilePath filename; - GetDatabaseFileName(&filename); - ScopedFILE file_closer(OpenFile(filename, "rb+")); - if (!file_closer.get()) - return false; - - int32 num_entries, used_count; - if (!ReadFileHeader(file_closer.get(), &num_entries, &used_count, salt_)) - return false; // Header isn't valid. - - // Allocate and read the table. - if (!CreateURLTable(num_entries, false)) - return false; - if (!ReadFromFile(file_closer.get(), kFileHeaderSize, - hash_table_, num_entries * sizeof(Fingerprint))) { - FreeURLTable(); - return false; - } - used_items_ = used_count; - -#ifndef NDEBUG - DebugValidate(); -#endif - - file_ = file_closer.release(); - return true; -} - -bool VisitedLinkMaster::InitFromScratch(bool suppress_rebuild) { - int32 table_size = kDefaultTableSize; - if (table_size_override_) - table_size = table_size_override_; - - // The salt must be generated before the table so that it can be copied to - // the shared memory. - GenerateSalt(salt_); - if (!CreateURLTable(table_size, true)) - return false; - -#ifndef NDEBUG - DebugValidate(); -#endif - - if (suppress_rebuild) { - // When we disallow rebuilds (normally just unit tests), just use the - // current empty table. - return WriteFullTable(); - } - - // This will build the table from history. On the first run, history will - // be empty, so this will be correct. This will also write the new table - // to disk. We don't want to save explicitly here, since the rebuild may - // not complete, leaving us with an empty but valid visited link database. - // In the future, we won't know we need to try rebuilding again. - return RebuildTableFromHistory(); -} - bool VisitedLinkMaster::ReadFileHeader(FILE* file, int32* num_entries, int32* used_count, |