Index: chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc |
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc |
index 51899b8d7d2f0bb04915a57c7278a015054c1f3d..ab82ca252b3e0d69c78773d99accc9e32f94fbcb 100644 |
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc |
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc |
@@ -555,24 +555,7 @@ bool MetadataDatabaseIndexOnDisk::PromoteDemotedDirtyTrackers() { |
} |
size_t MetadataDatabaseIndexOnDisk::CountDirtyTracker() const { |
- size_t num_dirty_trackers = 0; |
- |
- // TODO(peria): Store the number of dirty trackers, and do not iterate |
- // everytime. |
- scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); |
- for (itr->Seek(kDirtyIDKeyPrefix); itr->Valid(); itr->Next()) { |
- if (!StartsWithASCII(itr->key().ToString(), kDirtyIDKeyPrefix, true)) |
- break; |
- ++num_dirty_trackers; |
- } |
- |
- for (itr->Seek(kDemotedDirtyIDKeyPrefix); itr->Valid(); itr->Next()) { |
- if (!StartsWithASCII(itr->key().ToString(), kDemotedDirtyIDKeyPrefix, true)) |
- break; |
- ++num_dirty_trackers; |
- } |
- |
- return num_dirty_trackers; |
+ return num_dirty_trackers_; |
} |
size_t MetadataDatabaseIndexOnDisk::CountFileMetadata() const { |
@@ -745,6 +728,8 @@ MetadataDatabaseIndexOnDisk::MetadataDatabaseIndexOnDisk(LevelDBWrapper* db) |
db_->Put(kLastValidationTimeKey, |
base::Int64ToString(base::Time::Now().ToInternalValue())); |
} |
+ |
+ num_dirty_trackers_ = CountDirtyTrackerInternal(); |
} |
void MetadataDatabaseIndexOnDisk::AddToAppIDIndex(const FileTracker& tracker) { |
@@ -998,6 +983,7 @@ void MetadataDatabaseIndexOnDisk::AddToDirtyTrackerIndexes( |
if (new_tracker.dirty()) { |
DVLOG(1) << " Add to dirty tracker IDs: " << new_tracker.tracker_id(); |
db_->Put(dirty_key, std::string()); |
+ ++num_dirty_trackers_; |
} |
} |
@@ -1016,6 +1002,7 @@ void MetadataDatabaseIndexOnDisk::UpdateInDirtyTrackerIndexes( |
db_->Delete(dirty_key); |
db_->Delete(demoted_key); |
+ --num_dirty_trackers_; |
} else if (!old_tracker.dirty() && new_tracker.dirty()) { |
DCHECK(!DBHasKey(dirty_key)); |
DCHECK(!DBHasKey(demoted_key)); |
@@ -1023,6 +1010,7 @@ void MetadataDatabaseIndexOnDisk::UpdateInDirtyTrackerIndexes( |
DVLOG(1) << " Add to dirty tracker IDs: " << tracker_id; |
db_->Put(dirty_key, std::string()); |
+ ++num_dirty_trackers_; |
} |
} |
@@ -1037,6 +1025,7 @@ void MetadataDatabaseIndexOnDisk::RemoveFromDirtyTrackerIndexes( |
DVLOG(1) << " Remove from dirty tracker IDs: " << tracker_id; |
db_->Delete(dirty_key); |
db_->Delete(demoted_key); |
+ --num_dirty_trackers_; |
} |
} |
@@ -1138,6 +1127,25 @@ bool MetadataDatabaseIndexOnDisk::DBHasKey(const std::string& key) { |
return itr->Valid() && (itr->key() == key); |
} |
+size_t MetadataDatabaseIndexOnDisk::CountDirtyTrackerInternal() const { |
+ size_t num_dirty_trackers = 0; |
+ |
+ scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); |
+ for (itr->Seek(kDirtyIDKeyPrefix); itr->Valid(); itr->Next()) { |
+ if (!StartsWithASCII(itr->key().ToString(), kDirtyIDKeyPrefix, true)) |
+ break; |
+ ++num_dirty_trackers; |
+ } |
+ |
+ for (itr->Seek(kDemotedDirtyIDKeyPrefix); itr->Valid(); itr->Next()) { |
+ if (!StartsWithASCII(itr->key().ToString(), kDemotedDirtyIDKeyPrefix, true)) |
+ break; |
+ ++num_dirty_trackers; |
+ } |
+ |
+ return num_dirty_trackers; |
+} |
+ |
MetadataDatabaseIndexOnDisk::NumEntries |
MetadataDatabaseIndexOnDisk::CountWithPrefix( |
const std::string& prefix, int64 ignored_id) { |