Chromium Code Reviews| Index: components/sync/syncable/directory.cc |
| diff --git a/components/sync/syncable/directory.cc b/components/sync/syncable/directory.cc |
| index c0a579e52a67555f48b469802f6a1b03fec3d956..495faf629af9e73ca4a4948dc5ed4e880f8efee0 100644 |
| --- a/components/sync/syncable/directory.cc |
| +++ b/components/sync/syncable/directory.cc |
| @@ -987,6 +987,42 @@ void Directory::OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd) { |
| } |
| } |
| +// Iterates over entries of |map|, summs memory usage estimate of entries whose |
|
Patrick Noland
2017/06/19 23:34:52
[nit] sums
pavely
2017/06/19 23:53:37
Done.
|
| +// entry type is |model_type|. Passing owning container will also include memory |
| +// estimate of EntryKernel. |
| +template <typename Container> |
| +size_t EstimateFiteredMapMemoryUsage(const Container& map, |
| + ModelType model_type) { |
| + using base::trace_event::EstimateMemoryUsage; |
| + size_t memory_usage = 0; |
| + for (const auto& kv : map) { |
| + const ModelType entry_type = |
| + GetModelTypeFromSpecifics(kv.second->ref(SPECIFICS)); |
| + if (entry_type == model_type) { |
| + memory_usage += EstimateMemoryUsage(kv); |
| + } |
| + } |
| + return memory_usage; |
| +} |
| + |
| +size_t Directory::EstimateMemoryUsageByType(ModelType model_type) { |
| + using base::trace_event::EstimateMemoryUsage; |
| + ReadTransaction trans(FROM_HERE, this); |
| + ScopedKernelLock lock(this); |
| + |
| + size_t memory_usage = 0; |
| + memory_usage += |
| + EstimateFiteredMapMemoryUsage(kernel_->metahandles_map, model_type); |
| + memory_usage += EstimateFiteredMapMemoryUsage(kernel_->ids_map, model_type); |
| + memory_usage += |
| + EstimateFiteredMapMemoryUsage(kernel_->server_tags_map, model_type); |
| + memory_usage += |
| + EstimateFiteredMapMemoryUsage(kernel_->client_tags_map, model_type); |
| + memory_usage += EstimateMemoryUsage( |
| + kernel_->persisted_info.download_progress[model_type]); |
| + return memory_usage; |
| +} |
| + |
| void Directory::SetDownloadProgress( |
| ModelType model_type, |
| const sync_pb::DataTypeProgressMarker& new_progress) { |
| @@ -1174,13 +1210,12 @@ void Directory::GetMetaHandlesOfType(const ScopedKernelLock& lock, |
| ModelType type, |
| std::vector<int64_t>* result) { |
| result->clear(); |
| - for (MetahandlesMap::iterator it = kernel_->metahandles_map.begin(); |
| - it != kernel_->metahandles_map.end(); ++it) { |
| - EntryKernel* entry = it->second.get(); |
| + for (const auto& handle_and_kernel : kernel_->metahandles_map) { |
| + EntryKernel* entry = handle_and_kernel.second.get(); |
| const ModelType entry_type = |
| GetModelTypeFromSpecifics(entry->ref(SPECIFICS)); |
| if (entry_type == type) |
| - result->push_back(it->first); |
| + result->push_back(handle_and_kernel.first); |
| } |
| } |