Chromium Code Reviews| 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 fc817fdba0b410f37294f964c63be70d6e7753c4..b1bf1c73409a5c4fe1fa6fe7ff4cbcafca71d094 100644 |
| --- a/net/ssl/ssl_client_session_cache.cc |
| +++ b/net/ssl/ssl_client_session_cache.cc |
| @@ -4,11 +4,16 @@ |
| #include "net/ssl/ssl_client_session_cache.h" |
| +#include <openssl/ssl.h> |
| +#include <openssl/x509.h> |
| #include <utility> |
| #include "base/memory/memory_coordinator_client_registry.h" |
| +#include "base/strings/stringprintf.h" |
| #include "base/time/clock.h" |
| #include "base/time/default_clock.h" |
| +#include "base/trace_event/process_memory_dump.h" |
| +#include "net/cert/x509_util_openssl.h" |
| #include "third_party/boringssl/src/include/openssl/ssl.h" |
| namespace net { |
| @@ -82,6 +87,44 @@ bool SSLClientSessionCache::IsExpired(SSL_SESSION* session, time_t now) { |
| SSL_SESSION_get_time(session) + SSL_SESSION_get_timeout(session); |
| } |
| +void SSLClientSessionCache::DumpMemoryStats( |
| + base::trace_event::ProcessMemoryDump* pmd) { |
| + base::AutoLock lock(lock_); |
| + |
| + std::string absolute_name = "net/ssl_session_cache"; |
| + base::trace_event::MemoryAllocatorDump* cache_dump = |
| + pmd->GetAllocatorDump(absolute_name); |
| + // This is a singleton, so only log it once. |
| + if (cache_dump) |
|
ssid
2016/12/02 21:36:35
You'd not have to do this if this class is MDP.
|
| + return; |
| + cache_dump = pmd->CreateAllocatorDump(absolute_name); |
| + auto iter = cache_.begin(); |
| + while (iter != cache_.end()) { |
| + auto entry = iter->second.get(); |
| + auto cert_chain = entry->x509_chain; |
| + size_t cert_count = sk_X509_num(cert_chain); |
| + base::trace_event::MemoryAllocatorDump* entry_dump = |
| + pmd->CreateAllocatorDump( |
| + base::StringPrintf("%s/entry_%p", absolute_name.c_str(), entry)); |
| + int cert_size = 0; |
| + for (size_t i = 0; i < cert_count; ++i) { |
| + X509* cert = sk_X509_value(cert_chain, i); |
| + cert_size += i2d_X509(cert, nullptr); |
| + } |
| + entry_dump->AddScalar("cert_size", |
| + base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
| + cert_size); |
| + entry_dump->AddScalar("cert_count", |
| + base::trace_event::MemoryAllocatorDump::kUnitsObjects, |
| + cert_count); |
| + entry_dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, |
| + base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
| + cert_size); |
| + |
| + ++iter; |
| + } |
| +} |
| + |
| void SSLClientSessionCache::FlushExpiredSessions() { |
| time_t now = clock_->Now().ToTimeT(); |
| auto iter = cache_.begin(); |