Index: net/http/http_network_session.cc |
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc |
index f81f4882f6a54cf425ab6c96aba5ad21cae54c85..5d2a78681c4ed644a8b536be7f850a02ba7b0fef 100644 |
--- a/net/http/http_network_session.cc |
+++ b/net/http/http_network_session.cc |
@@ -15,6 +15,9 @@ |
#include "base/profiler/scoped_tracker.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
+#include "base/strings/stringprintf.h" |
+#include "base/trace_event/memory_allocator_dump.h" |
+#include "base/trace_event/process_memory_dump.h" |
#include "base/values.h" |
#include "net/base/network_throttle_manager_impl.h" |
#include "net/http/http_auth_handler_factory.h" |
@@ -377,6 +380,29 @@ void HttpNetworkSession::GetSSLConfig(const HttpRequestInfo& request, |
} |
} |
+void HttpNetworkSession::DumpMemoryStats( |
+ base::trace_event::ProcessMemoryDump* pmd, |
+ const std::string& parent_absolute_name) const { |
+ std::string name = base::StringPrintf("net/http_network_session_%p", this); |
+ base::trace_event::MemoryAllocatorDump* http_network_session_dump = |
+ pmd->GetAllocatorDump(name); |
+ // If memory dump already exists, it means that this is not the first |
+ // DumpMemoryStats() invocation on this object and it is reached by another |
+ // "parent." If that's the case, add an ownership edge and return early. |
+ // This is needed because URLRequestContexts can share an HttpNetworkSession. |
+ if (http_network_session_dump != nullptr) { |
+ pmd->AddOwnershipEdge(pmd->GetAllocatorDump(parent_absolute_name)->guid(), |
+ http_network_session_dump->guid()); |
+ |
+ return; |
+ } |
+ http_network_session_dump = pmd->CreateAllocatorDump(name); |
+ normal_socket_pool_manager_->DumpMemoryStats( |
+ pmd, http_network_session_dump->absolute_name()); |
+ pmd->AddOwnershipEdge(pmd->GetAllocatorDump(parent_absolute_name)->guid(), |
+ http_network_session_dump->guid()); |
+} |
+ |
ClientSocketPoolManager* HttpNetworkSession::GetSocketPoolManager( |
SocketPoolType pool_type) { |
switch (pool_type) { |