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

Side by Side Diff: components/sync/protocol/proto_size_estimations.cc

Issue 2382443006: Sync MDP: implement MemoryDumpProvider
Patch Set: Created 4 years, 2 months 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
(Empty)
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Keep this file in sync with the .proto files in this directory.
6
7 #include "components/sync/protocol/proto_size_estimations.h"
8
9 #include "base/trace_event/memory_usage_estimators.h"
10 #include "components/sync/protocol/proto_visitors.h"
11
12 namespace {
13
14 using base::trace_event::EstimateMemoryUsage;
15
16 class MemoryUsageVisitor {
17 public:
18 MemoryUsageVisitor(): memory_usage_(0) {}
19
20 size_t memory_usage() const { return memory_usage_; }
21
22 template <class P>
23 void VisitBytes(P& proto, const char* field_name,
24 const std::string& field_value) {
25 // Delegate to Visit(const std::string&) below.
26 Visit(proto, field_name, field_value);
27 }
28
29 template <class P, class E>
30 void VisitEnum(P& proto, const char* field_name, E field_value) {}
31
32 template <class P, class F>
33 typename std::enable_if<
34 std::is_base_of<google::protobuf::MessageLite, F>::value
35 >::type
36 Visit(P& proto, const char* field_name, const F& field_value) {
37 memory_usage_ += sizeof(F) + EstimateMemoryUsage(field_value);
38 }
39
40 template <class P, class F>
41 typename std::enable_if<
42 !std::is_base_of<google::protobuf::MessageLite, F>::value
43 >::type
44 Visit(P& proto, const char* field_name, const F& field_value) {
45 memory_usage_ += EstimateMemoryUsage(field_value);
46 }
47
48 template <class P>
49 void Visit(P& proto, const char* field_name,
50 const std::string& field_value) {
51 // All strings are of type ArenaStringPtr, which essentially
52 // is std::string*.
53 memory_usage_ += sizeof(std::string) + EstimateMemoryUsage(field_value);
54 }
55
56 template <class P, class F>
57 void Visit(P& proto, const char* field_name,
58 const google::protobuf::RepeatedPtrField<F>& field_values) {
59 // Can't use SpaceUsedExcludingSelf() because it will end up calling
60 // undefined TypeHandler::SpaceUsed() method.
61 memory_usage_ += field_values.Capacity() ? sizeof(void*) : 0; // header
62 memory_usage_ += field_values.Capacity() * sizeof(void*);
63 for (const auto& field_value: field_values) {
64 memory_usage_ += sizeof(F) + EstimateMemoryUsage(field_value);
65 }
66 }
67
68 template <class P, class F>
69 void Visit(P& proto, const char* field_name,
70 const google::protobuf::RepeatedField<F>& field_values) {
71 memory_usage_ += field_values.SpaceUsedExcludingSelf();
72 for (const auto& field_value: field_values) {
73 memory_usage_ += EstimateMemoryUsage(field_value);
74 }
75 }
76
77 private:
78 size_t memory_usage_;
79 };
80
81 } // namespace
82
83 namespace sync_pb {
84
85 template <class P>
86 size_t EstimateMemoryUsage(const P& proto) {
87 MemoryUsageVisitor visitor;
88 syncer::VisitProtoFields(visitor, proto);
89 return visitor.memory_usage();
90 }
91
92 // Explicit instantiations
93
94 #define INSTANTIATE(Proto) \
95 template size_t EstimateMemoryUsage<Proto>(const Proto&);
96
97 INSTANTIATE(EntitySpecifics)
98 INSTANTIATE(AttachmentMetadata)
99 INSTANTIATE(DataTypeContext)
100
101 // TODO(dskiba): needed only for testing, remove
102
103 INSTANTIATE(EncryptedData)
104 INSTANTIATE(AppListSpecifics)
105 INSTANTIATE(AppNotificationSettings)
106 INSTANTIATE(LinkedAppIconInfo)
107 INSTANTIATE(ArcPackageSpecifics)
108 INSTANTIATE(SessionHeader)
109 INSTANTIATE(SessionTab)
110 INSTANTIATE(SessionWindow)
111 INSTANTIATE(TabNavigation)
112 INSTANTIATE(NavigationRedirect)
113 INSTANTIATE(PasswordSpecificsData)
114 INSTANTIATE(GlobalIdDirective)
115 INSTANTIATE(TimeRangeDirective)
116 INSTANTIATE(SessionSpecifics)
117 INSTANTIATE(PrinterPPDData)
118 INSTANTIATE(AppNotification)
119 INSTANTIATE(AppSettingSpecifics)
120 INSTANTIATE(AppSpecifics)
121 INSTANTIATE(ArticleSpecifics)
122 INSTANTIATE(AutofillSpecifics)
123 INSTANTIATE(AutofillProfileSpecifics)
124 INSTANTIATE(WalletMetadataSpecifics)
125 INSTANTIATE(AutofillWalletSpecifics)
126 INSTANTIATE(BookmarkSpecifics)
127 INSTANTIATE(DeviceInfoSpecifics)
128 INSTANTIATE(DictionarySpecifics)
129 INSTANTIATE(ExperimentsSpecifics)
130 INSTANTIATE(PriorityPreferenceSpecifics)
131 INSTANTIATE(ExtensionSettingSpecifics)
132 INSTANTIATE(ExtensionSpecifics)
133 INSTANTIATE(FaviconImageSpecifics)
134 INSTANTIATE(FaviconTrackingSpecifics)
135 INSTANTIATE(HistoryDeleteDirectiveSpecifics)
136 INSTANTIATE(ManagedUserSettingSpecifics)
137 INSTANTIATE(ManagedUserSpecifics)
138 INSTANTIATE(ManagedUserSharedSettingSpecifics)
139 INSTANTIATE(ManagedUserWhitelistSpecifics)
140 INSTANTIATE(NigoriSpecifics)
141 INSTANTIATE(PasswordSpecifics)
142 INSTANTIATE(PreferenceSpecifics)
143 INSTANTIATE(PrinterSpecifics)
144 INSTANTIATE(ReadingListSpecifics)
145 INSTANTIATE(SyncedNotificationAppInfoSpecifics)
146 INSTANTIATE(SyncedNotificationSpecifics)
147 INSTANTIATE(SearchEngineSpecifics)
148 INSTANTIATE(ThemeSpecifics)
149 INSTANTIATE(TypedUrlSpecifics)
150 INSTANTIATE(WalletMaskedCreditCard)
151 INSTANTIATE(WalletPostalAddress)
152 INSTANTIATE(WifiCredentialSpecifics)
153 INSTANTIATE(SyncEntity)
154 INSTANTIATE(ClientToServerMessage)
155 INSTANTIATE(ClientToServerResponse)
156 INSTANTIATE(DatatypeAssociationStats)
157 INSTANTIATE(DebugEventInfo)
158 INSTANTIATE(DebugInfo)
159 INSTANTIATE(SyncCycleCompletedEventInfo)
160 INSTANTIATE(ClientConfigParams)
161 INSTANTIATE(AttachmentIdProto)
162 INSTANTIATE(EntityMetadata)
163
164 #undef INSTANTIATE
165
166 } // namespace sync_pb
OLDNEW
« no previous file with comments | « components/sync/protocol/proto_size_estimations.h ('k') | components/sync/protocol/proto_size_estimations_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698