| Index: components/sync/syncable/directory.cc
|
| diff --git a/components/sync/syncable/directory.cc b/components/sync/syncable/directory.cc
|
| index 46ee1fcf043a1abe7aa9e0fe340cf24097a0305d..6bba0dc8a0cd5f4f3e2404a4149072ef6fd7cb6f 100644
|
| --- a/components/sync/syncable/directory.cc
|
| +++ b/components/sync/syncable/directory.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "components/sync/syncable/directory.h"
|
|
|
| +#include <inttypes.h>
|
| #include <stddef.h>
|
| #include <stdint.h>
|
|
|
| @@ -16,10 +17,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/memory_dump_manager.h"
|
| +#include "base/trace_event/memory_usage_estimators.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_size_estimations.h"
|
| #include "components/sync/syncable/entry.h"
|
| #include "components/sync/syncable/entry_kernel.h"
|
| #include "components/sync/syncable/in_memory_directory_backing_store.h"
|
| @@ -71,6 +77,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) {}
|
|
|
| @@ -889,6 +903,56 @@ 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) +
|
| + 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_->info_status) +
|
| + 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) {
|
|
|