/Users/deen/code/yugabyte-db/src/yb/util/memory/memory_usage.h
Line | Count | Source (jump to first uncovered line) |
1 | | // |
2 | | // Copyright (c) YugaByte, Inc. |
3 | | // |
4 | | // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except |
5 | | // in compliance with the License. You may obtain a copy of the License at |
6 | | // |
7 | | // http://www.apache.org/licenses/LICENSE-2.0 |
8 | | // |
9 | | // Unless required by applicable law or agreed to in writing, software distributed under the License |
10 | | // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
11 | | // or implied. See the License for the specific language governing permissions and limitations |
12 | | // under the License. |
13 | | // |
14 | | // |
15 | | |
16 | | #ifndef YB_UTIL_MEMORY_MEMORY_USAGE_H |
17 | | #define YB_UTIL_MEMORY_MEMORY_USAGE_H |
18 | | |
19 | | #include <string> |
20 | | #include <type_traits> |
21 | | |
22 | | #include <boost/container/small_vector.hpp> |
23 | | #include <boost/core/enable_if.hpp> |
24 | | #include <boost/type_traits.hpp> |
25 | | |
26 | | #include <google/protobuf/message.h> |
27 | | |
28 | | #include "yb/util/type_traits.h" |
29 | | |
30 | | namespace yb { |
31 | | |
32 | | // If there is DynamicMemoryUsage member or DynamicMemoryUsageOf free function for the |
33 | | // class - use it. |
34 | | HAS_MEMBER_FUNCTION(DynamicMemoryUsage); |
35 | | HAS_FREE_FUNCTION(DynamicMemoryUsageOf); |
36 | | |
37 | | template <class T> |
38 | | typename std::enable_if<HasMemberFunction_DynamicMemoryUsage<T>::value, std::size_t>::type |
39 | 168M | DynamicMemoryUsageOf(const T& value) { |
40 | 168M | return value.DynamicMemoryUsage(); |
41 | 168M | } _ZN2yb20DynamicMemoryUsageOfINS_2ql14CQLServerEventEEENSt3__19enable_ifIXsr36HasMemberFunction_DynamicMemoryUsageIT_EE5valueEmE4typeERKS5_ Line | Count | Source | 39 | 91.6k | DynamicMemoryUsageOf(const T& value) { | 40 | 91.6k | return value.DynamicMemoryUsage(); | 41 | 91.6k | } |
_ZN2yb20DynamicMemoryUsageOfINS_2ql13EventResponseEEENSt3__19enable_ifIXsr36HasMemberFunction_DynamicMemoryUsageIT_EE5valueEmE4typeERKS5_ Line | Count | Source | 39 | 91.9k | DynamicMemoryUsageOf(const T& value) { | 40 | 91.9k | return value.DynamicMemoryUsage(); | 41 | 91.9k | } |
_ZN2yb20DynamicMemoryUsageOfINS_12RefCntBufferEEENSt3__19enable_ifIXsr36HasMemberFunction_DynamicMemoryUsageIT_EE5valueEmE4typeERKS4_ Line | Count | Source | 39 | 44.7M | DynamicMemoryUsageOf(const T& value) { | 40 | 44.7M | return value.DynamicMemoryUsage(); | 41 | 44.7M | } |
_ZN2yb20DynamicMemoryUsageOfINS_5SliceEEENSt3__19enable_ifIXsr36HasMemberFunction_DynamicMemoryUsageIT_EE5valueEmE4typeERKS4_ Line | Count | Source | 39 | 377k | DynamicMemoryUsageOf(const T& value) { | 40 | 377k | return value.DynamicMemoryUsage(); | 41 | 377k | } |
_ZN2yb20DynamicMemoryUsageOfINS_3rpc12OutboundDataEEENSt3__19enable_ifIXsr36HasMemberFunction_DynamicMemoryUsageIT_EE5valueEmE4typeERKS5_ Line | Count | Source | 39 | 44.7M | DynamicMemoryUsageOf(const T& value) { | 40 | 44.7M | return value.DynamicMemoryUsage(); | 41 | 44.7M | } |
_ZN2yb20DynamicMemoryUsageOfINS_3rpc8CallDataEEENSt3__19enable_ifIXsr36HasMemberFunction_DynamicMemoryUsageIT_EE5valueEmE4typeERKS5_ Line | Count | Source | 39 | 19.5M | DynamicMemoryUsageOf(const T& value) { | 40 | 19.5M | return value.DynamicMemoryUsage(); | 41 | 19.5M | } |
_ZN2yb20DynamicMemoryUsageOfINS_3rpc12CallResponseEEENSt3__19enable_ifIXsr36HasMemberFunction_DynamicMemoryUsageIT_EE5valueEmE4typeERKS5_ Line | Count | Source | 39 | 19.5M | DynamicMemoryUsageOf(const T& value) { | 40 | 19.5M | return value.DynamicMemoryUsage(); | 41 | 19.5M | } |
_ZN2yb20DynamicMemoryUsageOfINS_5TraceEEENSt3__19enable_ifIXsr36HasMemberFunction_DynamicMemoryUsageIT_EE5valueEmE4typeERKS4_ Line | Count | Source | 39 | 39.2M | DynamicMemoryUsageOf(const T& value) { | 40 | 39.2M | return value.DynamicMemoryUsage(); | 41 | 39.2M | } |
|
42 | | |
43 | | template <class Collection> |
44 | | std::size_t DynamicMemoryUsageOfCollection(const Collection& collection); |
45 | | |
46 | | template <class Int> |
47 | | typename std::enable_if<std::is_integral<typename std::remove_reference<Int>::type>::value, |
48 | | std::size_t>::type DynamicMemoryUsageOf(const Int& value) { |
49 | | return 0; |
50 | | } |
51 | | |
52 | | template <class Int> |
53 | | typename std::enable_if<std::is_integral<typename std::remove_reference<Int>::type>::value, |
54 | 104k | std::size_t>::type DynamicMemoryUsageOf(const std::atomic<Int>& value) { |
55 | 104k | return 0; |
56 | 104k | } |
57 | | |
58 | | // std::string uses internal capacity for up to kStdStringInternalSize bytes and only allocates |
59 | | // memory from heap for bigger strings. Exact memory allocation behaviour depends on C++ std |
60 | | // library implementation. |
61 | | |
62 | | #if defined(__clang__) |
63 | | |
64 | | constexpr const auto kStdStringInternalCapacity = 22; |
65 | | |
66 | 878k | inline std::size_t DynamicMemoryUsageOf(const std::string& value) { |
67 | 878k | const auto capacity = value.capacity(); |
68 | 878k | if (capacity <= kStdStringInternalCapacity) { |
69 | 874k | return 0; |
70 | 3.37k | } else { |
71 | | // std::string allocates 16*n bytes for capacity from [16*(n - 1); 16*n - 1]. |
72 | | // 48 bytes for capacity in [32; 47], 64 bytes for capacity in [48; 63] and so on... |
73 | 3.37k | return (capacity + 16) & ~(size_t(0xf)); |
74 | 3.37k | } |
75 | 878k | } |
76 | | |
77 | | #elif (__GNUC__ >= 9) |
78 | | |
79 | | inline std::size_t DynamicMemoryUsageOf(const std::string& value) { |
80 | | const auto capacity = value.capacity(); |
81 | | if (capacity == 0) { |
82 | | return 0; |
83 | | } else { |
84 | | return capacity + 25; |
85 | | } |
86 | | } |
87 | | |
88 | | #else |
89 | | |
90 | | constexpr const auto kStdStringInternalCapacity = 15; |
91 | | |
92 | | inline std::size_t DynamicMemoryUsageOf(const std::string& value) { |
93 | | const auto capacity = value.capacity(); |
94 | | if (capacity <= kStdStringInternalCapacity) { |
95 | | return 0; |
96 | | } else { |
97 | | return capacity + 1; |
98 | | } |
99 | | } |
100 | | |
101 | | #endif // defined(__clang__) |
102 | | |
103 | | template <class T> |
104 | | typename boost::enable_if<boost::is_base_of<google::protobuf::Message, T>, std::size_t>::type |
105 | 19.6M | DynamicMemoryUsageOf(const T& value) { |
106 | | // SpaceUsedLong() includes both dynamic memory and sizeof(Type), so we need to subtract. |
107 | 19.6M | return value.SpaceUsedLong() - sizeof(T); |
108 | 19.6M | } Unexecuted instantiation: _ZN2yb20DynamicMemoryUsageOfINS_3rpc13ErrorStatusPBEEEN5boost9enable_ifINS3_10is_base_ofIN6google8protobuf7MessageET_EEmE4typeERKS9_ _ZN2yb20DynamicMemoryUsageOfINS_15RedisResponsePBEEEN5boost9enable_ifINS2_10is_base_ofIN6google8protobuf7MessageET_EEmE4typeERKS8_ Line | Count | Source | 105 | 104k | DynamicMemoryUsageOf(const T& value) { | 106 | | // SpaceUsedLong() includes both dynamic memory and sizeof(Type), so we need to subtract. | 107 | 104k | return value.SpaceUsedLong() - sizeof(T); | 108 | 104k | } |
_ZN2yb20DynamicMemoryUsageOfINS_3rpc14ResponseHeaderEEEN5boost9enable_ifINS3_10is_base_ofIN6google8protobuf7MessageET_EEmE4typeERKS9_ Line | Count | Source | 105 | 19.5M | DynamicMemoryUsageOf(const T& value) { | 106 | | // SpaceUsedLong() includes both dynamic memory and sizeof(Type), so we need to subtract. | 107 | 19.5M | return value.SpaceUsedLong() - sizeof(T); | 108 | 19.5M | } |
|
109 | | |
110 | | template <class Pointer> |
111 | | typename std::enable_if<IsPointerLike<Pointer>::value, std::size_t>::type |
112 | 84.2M | DynamicMemoryUsageOf(const Pointer& value) { |
113 | 84.0M | return value ? (value->ObjectSize() + DynamicMemoryUsageOf(*value)) : 0; |
114 | 84.2M | } _ZN2yb20DynamicMemoryUsageOfINSt3__110unique_ptrINS_2ql14CQLServerEventENS1_14default_deleteIS4_EEEEEENS1_9enable_ifIXsr13IsPointerLikeIT_EE5valueEmE4typeERKS9_ Line | Count | Source | 112 | 91.7k | DynamicMemoryUsageOf(const Pointer& value) { | 113 | 91.6k | return value ? (value->ObjectSize() + DynamicMemoryUsageOf(*value)) : 0; | 114 | 91.7k | } |
_ZN2yb20DynamicMemoryUsageOfINSt3__110unique_ptrINS_2ql13EventResponseENS1_14default_deleteIS4_EEEEEENS1_9enable_ifIXsr13IsPointerLikeIT_EE5valueEmE4typeERKS9_ Line | Count | Source | 112 | 91.9k | DynamicMemoryUsageOf(const Pointer& value) { | 113 | 18.4E | return value ? (value->ObjectSize() + DynamicMemoryUsageOf(*value)) : 0; | 114 | 91.9k | } |
_ZN2yb20DynamicMemoryUsageOfINSt3__110shared_ptrINS_3rpc12OutboundDataEEEEENS1_9enable_ifIXsr13IsPointerLikeIT_EE5valueEmE4typeERKS7_ Line | Count | Source | 112 | 44.7M | DynamicMemoryUsageOf(const Pointer& value) { | 113 | 44.7M | return value ? (value->ObjectSize() + DynamicMemoryUsageOf(*value)) : 0; | 114 | 44.7M | } |
_ZN2yb20DynamicMemoryUsageOfI13scoped_refptrINS_5TraceEEEENSt3__19enable_ifIXsr13IsPointerLikeIT_EE5valueEmE4typeERKS6_ Line | Count | Source | 112 | 39.2M | DynamicMemoryUsageOf(const Pointer& value) { | 113 | 39.1M | return value ? (value->ObjectSize() + DynamicMemoryUsageOf(*value)) : 0; | 114 | 39.2M | } |
|
115 | | |
116 | | // Could be used instead of DynamicMemoryUsage on pointer-like objects when there is no |
117 | | // ObjectSize() implementation in inner objects, but we already know that inner objects are of |
118 | | // type which is used in pointer-like object definition, but not some subclasses. So we can |
119 | | // compute size using sizeof(). |
120 | | template <class Pointer> |
121 | | typename std::enable_if<IsPointerLike<Pointer>::value, std::size_t>::type |
122 | 19.5M | DynamicMemoryUsageAllowSizeOf(const Pointer& value) { |
123 | 19.5M | return value ? (sizeof(value) + DynamicMemoryUsageOf(*value)) : 0; |
124 | 19.5M | } |
125 | | |
126 | | // Get dynamic memory usage by entries of small_vector, but don't take into account entries inner |
127 | | // dynamic memory usage. |
128 | | // This is used to calculate memory usage by small_vector of pointers pointing to data which we |
129 | | // don't own, so this data memory usage should be tracked by owner. |
130 | | template <class T, size_t InternalCapacity> |
131 | | size_t GetFlatDynamicMemoryUsageOf( |
132 | 16.8M | const boost::container::small_vector<T, InternalCapacity>& value) { |
133 | 16.8M | return value.capacity() > value.internal_capacity() ? value.capacity() * sizeof(T) : 0; |
134 | 16.8M | } _ZN2yb27GetFlatDynamicMemoryUsageOfINS_15RedisResponsePBELm16EEEmRKN5boost9container12small_vectorIT_XT0_EvvEE Line | Count | Source | 132 | 104k | const boost::container::small_vector<T, InternalCapacity>& value) { | 133 | 104k | return value.capacity() > value.internal_capacity() ? value.capacity() * sizeof(T) : 0; | 134 | 104k | } |
_ZN2yb27GetFlatDynamicMemoryUsageOfINSt3__16atomicImEELm16EEEmRKN5boost9container12small_vectorIT_XT0_EvvEE Line | Count | Source | 132 | 104k | const boost::container::small_vector<T, InternalCapacity>& value) { | 133 | 104k | return value.capacity() > value.internal_capacity() ? value.capacity() * sizeof(T) : 0; | 134 | 104k | } |
_ZN2yb27GetFlatDynamicMemoryUsageOfIN5boost9container12small_vectorINS_5SliceELm8EvvEELm16EEEmRKNS3_IT_XT0_EvvEE Line | Count | Source | 132 | 104k | const boost::container::small_vector<T, InternalCapacity>& value) { | 133 | 104k | return value.capacity() > value.internal_capacity() ? value.capacity() * sizeof(T) : 0; | 134 | 104k | } |
_ZN2yb27GetFlatDynamicMemoryUsageOfINS_5SliceELm8EEEmRKN5boost9container12small_vectorIT_XT0_EvvEE Line | Count | Source | 132 | 104k | const boost::container::small_vector<T, InternalCapacity>& value) { | 133 | 104k | return value.capacity() > value.internal_capacity() ? value.capacity() * sizeof(T) : 0; | 134 | 104k | } |
_ZN2yb27GetFlatDynamicMemoryUsageOfIPKhLm16EEEmRKN5boost9container12small_vectorIT_XT0_EvvEE Line | Count | Source | 132 | 16.4M | const boost::container::small_vector<T, InternalCapacity>& value) { | 133 | 16.4M | return value.capacity() > value.internal_capacity() ? value.capacity() * sizeof(T) : 0; | 134 | 16.4M | } |
|
135 | | |
136 | | template <class T, size_t InternalCapacity> |
137 | 418k | size_t DynamicMemoryUsageOf(const boost::container::small_vector<T, InternalCapacity>& value) { |
138 | 418k | size_t result = GetFlatDynamicMemoryUsageOf(value); |
139 | 691k | for (const auto& entry : value) { |
140 | 691k | result += DynamicMemoryUsageOf(entry); |
141 | 691k | } |
142 | 418k | return result; |
143 | 418k | } _ZN2yb20DynamicMemoryUsageOfINS_15RedisResponsePBELm16EEEmRKN5boost9container12small_vectorIT_XT0_EvvEE Line | Count | Source | 137 | 104k | size_t DynamicMemoryUsageOf(const boost::container::small_vector<T, InternalCapacity>& value) { | 138 | 104k | size_t result = GetFlatDynamicMemoryUsageOf(value); | 139 | 104k | for (const auto& entry : value) { | 140 | 104k | result += DynamicMemoryUsageOf(entry); | 141 | 104k | } | 142 | 104k | return result; | 143 | 104k | } |
_ZN2yb20DynamicMemoryUsageOfINSt3__16atomicImEELm16EEEmRKN5boost9container12small_vectorIT_XT0_EvvEE Line | Count | Source | 137 | 104k | size_t DynamicMemoryUsageOf(const boost::container::small_vector<T, InternalCapacity>& value) { | 138 | 104k | size_t result = GetFlatDynamicMemoryUsageOf(value); | 139 | 104k | for (const auto& entry : value) { | 140 | 104k | result += DynamicMemoryUsageOf(entry); | 141 | 104k | } | 142 | 104k | return result; | 143 | 104k | } |
_ZN2yb20DynamicMemoryUsageOfIN5boost9container12small_vectorINS_5SliceELm8EvvEELm16EEEmRKNS3_IT_XT0_EvvEE Line | Count | Source | 137 | 104k | size_t DynamicMemoryUsageOf(const boost::container::small_vector<T, InternalCapacity>& value) { | 138 | 104k | size_t result = GetFlatDynamicMemoryUsageOf(value); | 139 | 104k | for (const auto& entry : value) { | 140 | 104k | result += DynamicMemoryUsageOf(entry); | 141 | 104k | } | 142 | 104k | return result; | 143 | 104k | } |
_ZN2yb20DynamicMemoryUsageOfINS_5SliceELm8EEEmRKN5boost9container12small_vectorIT_XT0_EvvEE Line | Count | Source | 137 | 104k | size_t DynamicMemoryUsageOf(const boost::container::small_vector<T, InternalCapacity>& value) { | 138 | 104k | size_t result = GetFlatDynamicMemoryUsageOf(value); | 139 | 377k | for (const auto& entry : value) { | 140 | 377k | result += DynamicMemoryUsageOf(entry); | 141 | 377k | } | 142 | 104k | return result; | 143 | 104k | } |
|
144 | | |
145 | | template <class T> |
146 | | typename std::enable_if<IsCollection<T>::value, std::size_t>::type |
147 | 19.1k | DynamicMemoryUsageOf(const T& value) { |
148 | 19.1k | return DynamicMemoryUsageOfCollection(value); |
149 | 19.1k | } Unexecuted instantiation: _ZN2yb20DynamicMemoryUsageOfINSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEEEENS1_9enable_ifIXsr12IsCollectionIT_EE5valueEmE4typeERKSC_ _ZN2yb20DynamicMemoryUsageOfINSt3__16vectorINS1_10unique_ptrINS_2ql14CQLServerEventENS1_14default_deleteIS5_EEEENS1_9allocatorIS8_EEEEEENS1_9enable_ifIXsr12IsCollectionIT_EE5valueEmE4typeERKSD_ Line | Count | Source | 147 | 19.1k | DynamicMemoryUsageOf(const T& value) { | 148 | 19.1k | return DynamicMemoryUsageOfCollection(value); | 149 | 19.1k | } |
|
150 | | |
151 | | template <class Collection> |
152 | 19.0k | std::size_t DynamicMemoryUsageOfCollection(const Collection& collection) { |
153 | 19.0k | std::size_t result = collection.capacity() * sizeof(typename Collection::value_type); |
154 | 91.8k | for (const auto& item : collection) { |
155 | 91.8k | result += DynamicMemoryUsageOf(item); |
156 | 91.8k | } |
157 | 19.0k | return result; |
158 | 19.0k | } Unexecuted instantiation: _ZN2yb30DynamicMemoryUsageOfCollectionINSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEEEEmRKT_ _ZN2yb30DynamicMemoryUsageOfCollectionINSt3__16vectorINS1_10unique_ptrINS_2ql14CQLServerEventENS1_14default_deleteIS5_EEEENS1_9allocatorIS8_EEEEEEmRKT_ Line | Count | Source | 152 | 19.0k | std::size_t DynamicMemoryUsageOfCollection(const Collection& collection) { | 153 | 19.0k | std::size_t result = collection.capacity() * sizeof(typename Collection::value_type); | 154 | 91.8k | for (const auto& item : collection) { | 155 | 91.8k | result += DynamicMemoryUsageOf(item); | 156 | 91.8k | } | 157 | 19.0k | return result; | 158 | 19.0k | } |
|
159 | | |
160 | | template <typename T, typename... Types> |
161 | 59.7M | std::size_t DynamicMemoryUsageOf(const T& entity, const Types&... rest_entities) { |
162 | 59.7M | return DynamicMemoryUsageOf(entity) + DynamicMemoryUsageOf(rest_entities...); |
163 | 59.7M | } Unexecuted instantiation: _ZN2yb20DynamicMemoryUsageOfINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEJS7_S7_S7_NS1_6vectorIS7_NS5_IS7_EEEEEEEmRKT_DpRKT0_ Unexecuted instantiation: _ZN2yb20DynamicMemoryUsageOfINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEJS7_S7_NS1_6vectorIS7_NS5_IS7_EEEEEEEmRKT_DpRKT0_ Unexecuted instantiation: _ZN2yb20DynamicMemoryUsageOfINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEJS7_NS1_6vectorIS7_NS5_IS7_EEEEEEEmRKT_DpRKT0_ Unexecuted instantiation: _ZN2yb20DynamicMemoryUsageOfINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEJNS1_6vectorIS7_NS5_IS7_EEEEEEEmRKT_DpRKT0_ _ZN2yb20DynamicMemoryUsageOfINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEJNS_12RefCntBufferEEEEmRKT_DpRKT0_ Line | Count | Source | 161 | 786k | std::size_t DynamicMemoryUsageOf(const T& entity, const Types&... rest_entities) { | 162 | 786k | return DynamicMemoryUsageOf(entity) + DynamicMemoryUsageOf(rest_entities...); | 163 | 786k | } |
_ZN2yb20DynamicMemoryUsageOfIN5boost9container12small_vectorINS_15RedisResponsePBELm16EvvEEJNS3_INSt3__16atomicImEELm16EvvEENS3_INS3_INS_5SliceELm8EvvEELm16EvvEEEEEmRKT_DpRKT0_ Line | Count | Source | 161 | 104k | std::size_t DynamicMemoryUsageOf(const T& entity, const Types&... rest_entities) { | 162 | 104k | return DynamicMemoryUsageOf(entity) + DynamicMemoryUsageOf(rest_entities...); | 163 | 104k | } |
_ZN2yb20DynamicMemoryUsageOfIN5boost9container12small_vectorINSt3__16atomicImEELm16EvvEEJNS3_INS3_INS_5SliceELm8EvvEELm16EvvEEEEEmRKT_DpRKT0_ Line | Count | Source | 161 | 104k | std::size_t DynamicMemoryUsageOf(const T& entity, const Types&... rest_entities) { | 162 | 104k | return DynamicMemoryUsageOf(entity) + DynamicMemoryUsageOf(rest_entities...); | 163 | 104k | } |
_ZN2yb20DynamicMemoryUsageOfINS_12RefCntBufferEJNSt3__110shared_ptrINS_3rpc12OutboundDataEEEEEEmRKT_DpRKT0_ Line | Count | Source | 161 | 112k | std::size_t DynamicMemoryUsageOf(const T& entity, const Types&... rest_entities) { | 162 | 112k | return DynamicMemoryUsageOf(entity) + DynamicMemoryUsageOf(rest_entities...); | 163 | 112k | } |
_ZN2yb20DynamicMemoryUsageOfINS_3rpc14ResponseHeaderEJNS1_8CallDataEEEEmRKT_DpRKT0_ Line | Count | Source | 161 | 19.5M | std::size_t DynamicMemoryUsageOf(const T& entity, const Types&... rest_entities) { | 162 | 19.5M | return DynamicMemoryUsageOf(entity) + DynamicMemoryUsageOf(rest_entities...); | 163 | 19.5M | } |
_ZN2yb20DynamicMemoryUsageOfINS_12RefCntBufferEJNS_3rpc12CallResponseE13scoped_refptrINS_5TraceEEEEEmRKT_DpRKT0_ Line | Count | Source | 161 | 19.5M | std::size_t DynamicMemoryUsageOf(const T& entity, const Types&... rest_entities) { | 162 | 19.5M | return DynamicMemoryUsageOf(entity) + DynamicMemoryUsageOf(rest_entities...); | 163 | 19.5M | } |
_ZN2yb20DynamicMemoryUsageOfINS_3rpc12CallResponseEJ13scoped_refptrINS_5TraceEEEEEmRKT_DpRKT0_ Line | Count | Source | 161 | 19.5M | std::size_t DynamicMemoryUsageOf(const T& entity, const Types&... rest_entities) { | 162 | 19.5M | return DynamicMemoryUsageOf(entity) + DynamicMemoryUsageOf(rest_entities...); | 163 | 19.5M | } |
|
164 | | |
165 | | } // namespace yb |
166 | | |
167 | | #endif // YB_UTIL_MEMORY_MEMORY_USAGE_H |