OLD | NEW |
---|---|
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/estimate_memory_usage.h" | |
pavely
2016/10/28 22:55:32
Is estimate_memory_usage.h a new file? I can't fin
| |
20 #include "base/trace_event/memory_dump_manager.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 Loading... | |
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 } | |
83 | |
69 Directory::SaveChangesSnapshot::SaveChangesSnapshot() | 84 Directory::SaveChangesSnapshot::SaveChangesSnapshot() |
70 : kernel_info_status(KERNEL_SHARE_INFO_INVALID) {} | 85 : kernel_info_status(KERNEL_SHARE_INFO_INVALID) {} |
71 | 86 |
72 Directory::SaveChangesSnapshot::~SaveChangesSnapshot() {} | 87 Directory::SaveChangesSnapshot::~SaveChangesSnapshot() {} |
73 | 88 |
74 bool Directory::SaveChangesSnapshot::HasUnsavedMetahandleChanges() const { | 89 bool Directory::SaveChangesSnapshot::HasUnsavedMetahandleChanges() const { |
75 return !dirty_metas.empty() || !metahandles_to_purge.empty() || | 90 return !dirty_metas.empty() || !metahandles_to_purge.empty() || |
76 !delete_journals.empty() || !delete_journals_to_purge.empty(); | 91 !delete_journals.empty() || !delete_journals_to_purge.empty(); |
77 } | 92 } |
78 | 93 |
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
878 ScopedKernelLock lock(this); | 893 ScopedKernelLock lock(this); |
879 kernel_->persisted_info.download_progress[model_type].SerializeToString( | 894 kernel_->persisted_info.download_progress[model_type].SerializeToString( |
880 value_out); | 895 value_out); |
881 } | 896 } |
882 | 897 |
883 size_t Directory::GetEntriesCount() const { | 898 size_t Directory::GetEntriesCount() const { |
884 ScopedKernelLock lock(this); | 899 ScopedKernelLock lock(this); |
885 return kernel_->metahandles_map.size(); | 900 return kernel_->metahandles_map.size(); |
886 } | 901 } |
887 | 902 |
903 void Directory::OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd) { | |
904 std::string dump_name_base = base::StringPrintf( | |
905 "sync/0x%" PRIXPTR, reinterpret_cast<uintptr_t>(this)); | |
906 | |
907 size_t kernel_memory_usage; | |
908 { | |
909 using base::trace_event::EstimateMemoryUsage; | |
910 | |
911 ScopedKernelLock lock(this); // TODO(dskiba): is this the correct lock? | |
912 kernel_memory_usage = | |
913 EstimateMemoryUsage(kernel_->name) + | |
914 EstimateMemoryUsage(kernel_->metahandles_map) + | |
pavely
2016/10/28 22:55:32
I can't see implementation of EstimateMemoryUsage,
| |
915 EstimateMemoryUsage(kernel_->ids_map) + | |
916 EstimateMemoryUsage(kernel_->server_tags_map) + | |
917 EstimateMemoryUsage(kernel_->client_tags_map) + | |
918 // TODO(dskiba): 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 = base::StringPrintf( | |
930 "%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 = base::StringPrintf( | |
946 "%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 Loading... | |
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 |
OLD | NEW |