Chromium Code Reviews| Index: components/sync/syncable/directory.cc |
| diff --git a/components/sync/syncable/directory.cc b/components/sync/syncable/directory.cc |
| index 0671977d126b6cad86d829eecbf54b5f4b1e9505..c49c74bded92a6ba4853620e2f9cf365b48490a1 100644 |
| --- a/components/sync/syncable/directory.cc |
| +++ b/components/sync/syncable/directory.cc |
| @@ -4,6 +4,8 @@ |
| #include "components/sync/syncable/directory.h" |
| +#include <inttypes.h> |
| + |
| #include <algorithm> |
| #include <iterator> |
| #include <utility> |
| @@ -13,10 +15,15 @@ |
| #include "base/memory/ptr_util.h" |
| #include "base/metrics/histogram_macros.h" |
| #include "base/strings/string_number_conversions.h" |
| +#include "base/strings/stringprintf.h" |
| +#include "base/trace_event/estimate_memory_usage.h" |
|
pavely
2016/10/28 22:55:32
Is estimate_memory_usage.h a new file? I can't fin
|
| +#include "base/trace_event/memory_dump_manager.h" |
| +#include "base/trace_event/process_memory_dump.h" |
| #include "base/trace_event/trace_event.h" |
| #include "components/sync/base/attachment_id_proto.h" |
| #include "components/sync/base/unique_position.h" |
| #include "components/sync/base/unrecoverable_error_handler.h" |
| +#include "components/sync/protocol/proto_memory_estimations.h" |
| #include "components/sync/syncable/in_memory_directory_backing_store.h" |
| #include "components/sync/syncable/model_neutral_mutable_entry.h" |
| #include "components/sync/syncable/on_disk_directory_backing_store.h" |
| @@ -66,6 +73,14 @@ bool Directory::PersistedKernelInfo::HasEmptyDownloadProgress( |
| return progress_marker.token().empty(); |
| } |
| +size_t Directory::PersistedKernelInfo::EstimateMemoryUsage() const { |
| + using base::trace_event::EstimateMemoryUsage; |
| + return EstimateMemoryUsage(store_birthday) + |
| + EstimateMemoryUsage(bag_of_chips) + |
| + EstimateMemoryUsage(datatype_context); |
| + |
| +} |
| + |
| Directory::SaveChangesSnapshot::SaveChangesSnapshot() |
| : kernel_info_status(KERNEL_SHARE_INFO_INVALID) {} |
| @@ -885,6 +900,55 @@ size_t Directory::GetEntriesCount() const { |
| return kernel_->metahandles_map.size(); |
| } |
| +void Directory::OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd) { |
| + std::string dump_name_base = base::StringPrintf( |
| + "sync/0x%" PRIXPTR, reinterpret_cast<uintptr_t>(this)); |
| + |
| + size_t kernel_memory_usage; |
| + { |
| + using base::trace_event::EstimateMemoryUsage; |
| + |
| + ScopedKernelLock lock(this); // TODO(dskiba): is this the correct lock? |
| + kernel_memory_usage = |
| + EstimateMemoryUsage(kernel_->name) + |
| + EstimateMemoryUsage(kernel_->metahandles_map) + |
|
pavely
2016/10/28 22:55:32
I can't see implementation of EstimateMemoryUsage,
|
| + EstimateMemoryUsage(kernel_->ids_map) + |
| + EstimateMemoryUsage(kernel_->server_tags_map) + |
| + EstimateMemoryUsage(kernel_->client_tags_map) + |
| + // TODO(dskiba): EstimateMemoryUsage(kernel_->parent_child_index) + |
| + EstimateMemoryUsage(kernel_->index_by_attachment_id) + |
| + EstimateMemoryUsage(kernel_->unapplied_update_metahandles) + |
| + EstimateMemoryUsage(kernel_->unsynced_metahandles) + |
| + EstimateMemoryUsage(kernel_->dirty_metahandles) + |
| + EstimateMemoryUsage(kernel_->metahandles_to_purge) + |
| + EstimateMemoryUsage(kernel_->persisted_info) + |
| + EstimateMemoryUsage(kernel_->cache_guid); |
| + } |
| + |
| + { |
| + std::string dump_name = base::StringPrintf( |
| + "%s/kernel", dump_name_base.c_str()); |
| + |
| + auto* dump = pmd->CreateAllocatorDump(dump_name); |
| + dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, |
| + base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
| + kernel_memory_usage); |
| + const char* system_allocator_name = |
| + base::trace_event::MemoryDumpManager::GetInstance() |
| + ->system_allocator_pool_name(); |
| + if (system_allocator_name) { |
| + pmd->AddSuballocation(dump->guid(), system_allocator_name); |
| + } |
| + } |
| + |
| + if (store_) { |
| + std::string dump_name = base::StringPrintf( |
| + "%s/store", dump_name_base.c_str()); |
| + auto* dump = pmd->CreateAllocatorDump(dump_name); |
| + store_->ReportMemoryUsage(dump); |
| + } |
| +} |
| + |
| void Directory::SetDownloadProgress( |
| ModelType model_type, |
| const sync_pb::DataTypeProgressMarker& new_progress) { |