Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: components/sync/syncable/directory.cc

Issue 2452713003: [Sync] Implement MemoryDumpProvider. (Closed)
Patch Set: Fix presumit; fix Windows; git cl format Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/sync/syncable/directory.h" 5 #include "components/sync/syncable/directory.h"
6 6
7 #include <inttypes.h>
8
7 #include <algorithm> 9 #include <algorithm>
8 #include <iterator> 10 #include <iterator>
9 #include <utility> 11 #include <utility>
10 12
11 #include "base/base64.h" 13 #include "base/base64.h"
12 #include "base/guid.h" 14 #include "base/guid.h"
13 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
14 #include "base/metrics/histogram_macros.h" 16 #include "base/metrics/histogram_macros.h"
15 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
18 #include "base/strings/stringprintf.h"
19 #include "base/trace_event/memory_dump_manager.h"
20 #include "base/trace_event/memory_usage_estimator.h"
21 #include "base/trace_event/process_memory_dump.h"
16 #include "base/trace_event/trace_event.h" 22 #include "base/trace_event/trace_event.h"
17 #include "components/sync/base/attachment_id_proto.h" 23 #include "components/sync/base/attachment_id_proto.h"
18 #include "components/sync/base/unique_position.h" 24 #include "components/sync/base/unique_position.h"
19 #include "components/sync/base/unrecoverable_error_handler.h" 25 #include "components/sync/base/unrecoverable_error_handler.h"
26 #include "components/sync/protocol/proto_memory_estimations.h"
20 #include "components/sync/syncable/in_memory_directory_backing_store.h" 27 #include "components/sync/syncable/in_memory_directory_backing_store.h"
21 #include "components/sync/syncable/model_neutral_mutable_entry.h" 28 #include "components/sync/syncable/model_neutral_mutable_entry.h"
22 #include "components/sync/syncable/on_disk_directory_backing_store.h" 29 #include "components/sync/syncable/on_disk_directory_backing_store.h"
23 #include "components/sync/syncable/scoped_kernel_lock.h" 30 #include "components/sync/syncable/scoped_kernel_lock.h"
24 #include "components/sync/syncable/scoped_parent_child_index_updater.h" 31 #include "components/sync/syncable/scoped_parent_child_index_updater.h"
25 #include "components/sync/syncable/syncable_base_transaction.h" 32 #include "components/sync/syncable/syncable_base_transaction.h"
26 #include "components/sync/syncable/syncable_changes_version.h" 33 #include "components/sync/syncable/syncable_changes_version.h"
27 #include "components/sync/syncable/syncable_read_transaction.h" 34 #include "components/sync/syncable/syncable_read_transaction.h"
28 #include "components/sync/syncable/syncable_util.h" 35 #include "components/sync/syncable/syncable_util.h"
29 #include "components/sync/syncable/syncable_write_transaction.h" 36 #include "components/sync/syncable/syncable_write_transaction.h"
(...skipping 29 matching lines...) Expand all
59 download_progress[model_type].set_token(""); 66 download_progress[model_type].set_token("");
60 } 67 }
61 68
62 bool Directory::PersistedKernelInfo::HasEmptyDownloadProgress( 69 bool Directory::PersistedKernelInfo::HasEmptyDownloadProgress(
63 ModelType model_type) { 70 ModelType model_type) {
64 const sync_pb::DataTypeProgressMarker& progress_marker = 71 const sync_pb::DataTypeProgressMarker& progress_marker =
65 download_progress[model_type]; 72 download_progress[model_type];
66 return progress_marker.token().empty(); 73 return progress_marker.token().empty();
67 } 74 }
68 75
76 size_t Directory::PersistedKernelInfo::EstimateMemoryUsage() const {
77 using base::trace_event::EstimateMemoryUsage;
78 return EstimateMemoryUsage(store_birthday) +
79 EstimateMemoryUsage(bag_of_chips) +
80 EstimateMemoryUsage(datatype_context);
81 }
82
69 Directory::SaveChangesSnapshot::SaveChangesSnapshot() 83 Directory::SaveChangesSnapshot::SaveChangesSnapshot()
70 : kernel_info_status(KERNEL_SHARE_INFO_INVALID) {} 84 : kernel_info_status(KERNEL_SHARE_INFO_INVALID) {}
71 85
72 Directory::SaveChangesSnapshot::~SaveChangesSnapshot() {} 86 Directory::SaveChangesSnapshot::~SaveChangesSnapshot() {}
73 87
74 bool Directory::SaveChangesSnapshot::HasUnsavedMetahandleChanges() const { 88 bool Directory::SaveChangesSnapshot::HasUnsavedMetahandleChanges() const {
75 return !dirty_metas.empty() || !metahandles_to_purge.empty() || 89 return !dirty_metas.empty() || !metahandles_to_purge.empty() ||
76 !delete_journals.empty() || !delete_journals_to_purge.empty(); 90 !delete_journals.empty() || !delete_journals_to_purge.empty();
77 } 91 }
78 92
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after
878 ScopedKernelLock lock(this); 892 ScopedKernelLock lock(this);
879 kernel_->persisted_info.download_progress[model_type].SerializeToString( 893 kernel_->persisted_info.download_progress[model_type].SerializeToString(
880 value_out); 894 value_out);
881 } 895 }
882 896
883 size_t Directory::GetEntriesCount() const { 897 size_t Directory::GetEntriesCount() const {
884 ScopedKernelLock lock(this); 898 ScopedKernelLock lock(this);
885 return kernel_->metahandles_map.size(); 899 return kernel_->metahandles_map.size();
886 } 900 }
887 901
902 void Directory::OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd) {
903 std::string dump_name_base =
904 base::StringPrintf("sync/0x%" PRIXPTR, reinterpret_cast<uintptr_t>(this));
905
906 size_t kernel_memory_usage;
907 {
908 using base::trace_event::EstimateMemoryUsage;
909
910 ReadTransaction trans(FROM_HERE, this);
911 ScopedKernelLock lock(this);
912 kernel_memory_usage =
913 EstimateMemoryUsage(kernel_->name) +
914 EstimateMemoryUsage(kernel_->metahandles_map) +
915 EstimateMemoryUsage(kernel_->ids_map) +
916 EstimateMemoryUsage(kernel_->server_tags_map) +
917 EstimateMemoryUsage(kernel_->client_tags_map) +
918 EstimateMemoryUsage(kernel_->parent_child_index) +
919 EstimateMemoryUsage(kernel_->index_by_attachment_id) +
920 EstimateMemoryUsage(kernel_->unapplied_update_metahandles) +
921 EstimateMemoryUsage(kernel_->unsynced_metahandles) +
922 EstimateMemoryUsage(kernel_->dirty_metahandles) +
923 EstimateMemoryUsage(kernel_->metahandles_to_purge) +
924 EstimateMemoryUsage(kernel_->persisted_info) +
925 EstimateMemoryUsage(kernel_->cache_guid);
926 }
927
928 {
929 std::string dump_name =
930 base::StringPrintf("%s/kernel", dump_name_base.c_str());
931
932 auto* dump = pmd->CreateAllocatorDump(dump_name);
933 dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize,
934 base::trace_event::MemoryAllocatorDump::kUnitsBytes,
935 kernel_memory_usage);
936 const char* system_allocator_name =
937 base::trace_event::MemoryDumpManager::GetInstance()
938 ->system_allocator_pool_name();
939 if (system_allocator_name) {
940 pmd->AddSuballocation(dump->guid(), system_allocator_name);
941 }
942 }
943
944 if (store_) {
945 std::string dump_name =
946 base::StringPrintf("%s/store", dump_name_base.c_str());
947 auto* dump = pmd->CreateAllocatorDump(dump_name);
948 store_->ReportMemoryUsage(dump);
949 }
950 }
951
888 void Directory::SetDownloadProgress( 952 void Directory::SetDownloadProgress(
889 ModelType model_type, 953 ModelType model_type,
890 const sync_pb::DataTypeProgressMarker& new_progress) { 954 const sync_pb::DataTypeProgressMarker& new_progress) {
891 ScopedKernelLock lock(this); 955 ScopedKernelLock lock(this);
892 kernel_->persisted_info.download_progress[model_type].CopyFrom(new_progress); 956 kernel_->persisted_info.download_progress[model_type].CopyFrom(new_progress);
893 kernel_->info_status = KERNEL_SHARE_INFO_DIRTY; 957 kernel_->info_status = KERNEL_SHARE_INFO_DIRTY;
894 } 958 }
895 959
896 bool Directory::HasEmptyDownloadProgress(ModelType type) const { 960 bool Directory::HasEmptyDownloadProgress(ModelType type) const {
897 ScopedKernelLock lock(this); 961 ScopedKernelLock lock(this);
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after
1529 Directory::Kernel* Directory::kernel() { 1593 Directory::Kernel* Directory::kernel() {
1530 return kernel_; 1594 return kernel_;
1531 } 1595 }
1532 1596
1533 const Directory::Kernel* Directory::kernel() const { 1597 const Directory::Kernel* Directory::kernel() const {
1534 return kernel_; 1598 return kernel_;
1535 } 1599 }
1536 1600
1537 } // namespace syncable 1601 } // namespace syncable
1538 } // namespace syncer 1602 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/syncable/directory.h ('k') | components/sync/syncable/directory_backing_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698