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

Unified Diff: net/ssl/ssl_client_session_cache.cc

Issue 2696403007: Add a multiplier in tracking certificate memory allocation size (Closed)
Patch Set: Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: net/ssl/ssl_client_session_cache.cc
diff --git a/net/ssl/ssl_client_session_cache.cc b/net/ssl/ssl_client_session_cache.cc
index b007469b9a9eba3c0c59e9651c622f854ae2ce8c..0eac4c9f9bff7d82a8350080ced576f8954d3edd 100644
--- a/net/ssl/ssl_client_session_cache.cc
+++ b/net/ssl/ssl_client_session_cache.cc
@@ -4,6 +4,7 @@
#include "net/ssl/ssl_client_session_cache.h"
+#include <unordered_set>
#include <utility>
#include "base/memory/memory_coordinator_client_registry.h"
@@ -122,29 +123,42 @@ void SSLClientSessionCache::DumpMemoryStats(
return;
cache_dump = pmd->CreateAllocatorDump(absolute_name);
base::AutoLock lock(lock_);
- size_t total_serialized_cert_size = 0;
+ size_t total_cert_size = 0;
+ size_t undeduped_cert_size = 0;
size_t total_cert_count = 0;
+ std::unordered_set<const CRYPTO_BUFFER*> crypto_buffer_set;
DmitrySkiba 2017/02/17 22:02:58 I'm worried that this will slow things down. We've
davidben 2017/02/17 22:09:46 In the session cache, I would expect it to not do
xunjieli 2017/02/17 22:22:01 I don't think we can know the factor of total numb
for (const auto& pair : cache_) {
const SSL_SESSION* session = pair.second.session.get();
size_t cert_count = sk_CRYPTO_BUFFER_num(session->certs);
total_cert_count += cert_count;
for (size_t i = 0; i < cert_count; ++i) {
const CRYPTO_BUFFER* cert = sk_CRYPTO_BUFFER_value(session->certs, i);
- total_serialized_cert_size += CRYPTO_BUFFER_len(cert);
+ // TODO(xunjieli): The multipler is added to account for the difference
+ // between the serialized form and real cert allocation. Remove after
+ // crbug.com/671420 is done.
+ size_t cert_size = 4 * CRYPTO_BUFFER_len(cert);
+ undeduped_cert_size += cert_size;
+ if (crypto_buffer_set.find(cert) != crypto_buffer_set.end())
+ continue;
+ total_cert_size += cert_size;
+ crypto_buffer_set.insert(cert);
}
}
// This measures the lower bound of the serialized certificate. It doesn't
// measure the actual memory used, which is 4x this amount (see
// crbug.com/671420 for more details).
- cache_dump->AddScalar("serialized_cert_size",
+ cache_dump->AddScalar("cert_size",
base::trace_event::MemoryAllocatorDump::kUnitsBytes,
- total_serialized_cert_size);
+ total_cert_size);
+ cache_dump->AddScalar("undeduped_cert_size",
+ base::trace_event::MemoryAllocatorDump::kUnitsBytes,
+ undeduped_cert_size);
cache_dump->AddScalar("cert_count",
base::trace_event::MemoryAllocatorDump::kUnitsObjects,
total_cert_count);
cache_dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize,
base::trace_event::MemoryAllocatorDump::kUnitsBytes,
- total_serialized_cert_size);
+ total_cert_size);
}
SSLClientSessionCache::Entry::Entry() : lookups(0) {}

Powered by Google App Engine
This is Rietveld 408576698