Commit 5cf437b0 authored by Maks Orlovich's avatar Maks Orlovich Committed by Commit Bot

CookieMonster: add a rudimentary memory dump provider

This only really reports object counts (including for
the wait-till-load queues), but proper thing is kinda
expensive to compute, and this might be enough for diagnosing
the potential leak case.

Bug: 809199

Change-Id: I8afd6902693784da3ecdb9d4066d7d23ed94de82
Reviewed-on: https://chromium-review.googlesource.com/978034
Commit-Queue: Maks Orlovich <morlovich@chromium.org>
Reviewed-by: default avatarSiddhartha S <ssid@chromium.org>
Reviewed-by: default avatarHelen Li <xunjieli@chromium.org>
Reviewed-by: default avatarErik Chen <erikchen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#546013}
parent 44cb6549
......@@ -127,54 +127,100 @@ const char* const kAllocatorDumpNameWhitelist[] = {
"net/url_request_context",
"net/url_request_context/app_request",
"net/url_request_context/app_request/0x?",
"net/url_request_context/app_request/0x?/cookie_monster",
"net/url_request_context/app_request/0x?/cookie_monster/cookies",
"net/url_request_context/app_request/0x?/cookie_monster/"
"tasks_pending_global",
"net/url_request_context/app_request/0x?/cookie_monster/"
"tasks_pending_for_key",
"net/url_request_context/app_request/0x?/http_cache",
"net/url_request_context/app_request/0x?/http_cache/memory_backend",
"net/url_request_context/app_request/0x?/http_cache/simple_backend",
"net/url_request_context/app_request/0x?/http_network_session",
"net/url_request_context/extensions",
"net/url_request_context/extensions/0x?",
"net/url_request_context/extensions/0x?/cookie_monster",
"net/url_request_context/extensions/0x?/cookie_monster/cookies",
"net/url_request_context/extensions/0x?/cookie_monster/"
"tasks_pending_global",
"net/url_request_context/extensions/0x?/cookie_monster/"
"tasks_pending_for_key",
"net/url_request_context/extensions/0x?/http_cache",
"net/url_request_context/extensions/0x?/http_cache/memory_backend",
"net/url_request_context/extensions/0x?/http_cache/simple_backend",
"net/url_request_context/extensions/0x?/http_network_session",
"net/url_request_context/isolated_media",
"net/url_request_context/isolated_media/0x?",
"net/url_request_context/isolated_media/0x?/cookie_monster",
"net/url_request_context/isolated_media/0x?/cookie_monster/cookies",
"net/url_request_context/isolated_media/0x?/cookie_monster/"
"tasks_pending_global",
"net/url_request_context/isolated_media/0x?/cookie_monster/"
"tasks_pending_for_key",
"net/url_request_context/isolated_media/0x?/http_cache",
"net/url_request_context/isolated_media/0x?/http_cache/memory_backend",
"net/url_request_context/isolated_media/0x?/http_cache/simple_backend",
"net/url_request_context/isolated_media/0x?/http_network_session",
"net/url_request_context/main",
"net/url_request_context/main/0x?",
"net/url_request_context/main/0x?/cookie_monster",
"net/url_request_context/main/0x?/cookie_monster/cookies",
"net/url_request_context/main/0x?/cookie_monster/tasks_pending_global",
"net/url_request_context/main/0x?/cookie_monster/tasks_pending_for_key",
"net/url_request_context/main/0x?/http_cache",
"net/url_request_context/main/0x?/http_cache/memory_backend",
"net/url_request_context/main/0x?/http_cache/simple_backend",
"net/url_request_context/main/0x?/http_network_session",
"net/url_request_context/main_media",
"net/url_request_context/main_media/0x?",
"net/url_request_context/main_media/0x?/cookie_monster",
"net/url_request_context/main_media/0x?/cookie_monster/cookies",
"net/url_request_context/main_media/0x?/cookie_monster/"
"tasks_pending_global",
"net/url_request_context/main_media/0x?/cookie_monster/"
"tasks_pending_for_key",
"net/url_request_context/main_media/0x?/http_cache",
"net/url_request_context/main_media/0x?/http_cache/memory_backend",
"net/url_request_context/main_media/0x?/http_cache/simple_backend",
"net/url_request_context/main_media/0x?/http_network_session",
"net/url_request_context/proxy",
"net/url_request_context/proxy/0x?",
"net/url_request_context/proxy/0x?/cookie_monster",
"net/url_request_context/proxy/0x?/cookie_monster/cookies",
"net/url_request_context/proxy/0x?/cookie_monster/tasks_pending_global",
"net/url_request_context/proxy/0x?/cookie_monster/tasks_pending_for_key",
"net/url_request_context/proxy/0x?/http_cache",
"net/url_request_context/proxy/0x?/http_cache/memory_backend",
"net/url_request_context/proxy/0x?/http_cache/simple_backend",
"net/url_request_context/proxy/0x?/http_network_session",
"net/url_request_context/safe_browsing",
"net/url_request_context/safe_browsing/0x?",
"net/url_request_context/safe_browsing/0x?/cookie_monster",
"net/url_request_context/safe_browsing/0x?/cookie_monster/cookies",
"net/url_request_context/safe_browsing/0x?/cookie_monster/"
"tasks_pending_global",
"net/url_request_context/safe_browsing/0x?/cookie_monster/"
"tasks_pending_for_key",
"net/url_request_context/safe_browsing/0x?/http_cache",
"net/url_request_context/safe_browsing/0x?/http_cache/memory_backend",
"net/url_request_context/safe_browsing/0x?/http_cache/simple_backend",
"net/url_request_context/safe_browsing/0x?/http_network_session",
"net/url_request_context/system",
"net/url_request_context/system/0x?",
"net/url_request_context/system/0x?/cookie_monster",
"net/url_request_context/system/0x?/cookie_monster/cookies",
"net/url_request_context/system/0x?/cookie_monster/tasks_pending_global",
"net/url_request_context/system/0x?/cookie_monster/tasks_pending_for_key",
"net/url_request_context/system/0x?/http_cache",
"net/url_request_context/system/0x?/http_cache/memory_backend",
"net/url_request_context/system/0x?/http_cache/simple_backend",
"net/url_request_context/system/0x?/http_network_session",
"net/url_request_context/unknown",
"net/url_request_context/unknown/0x?",
"net/url_request_context/unknown/0x?/cookie_monster",
"net/url_request_context/unknown/0x?/cookie_monster/cookies",
"net/url_request_context/unknown/0x?/cookie_monster/tasks_pending_global",
"net/url_request_context/unknown/0x?/cookie_monster/tasks_pending_for_key",
"net/url_request_context/unknown/0x?/http_cache",
"net/url_request_context/unknown/0x?/http_cache/memory_backend",
"net/url_request_context/unknown/0x?/http_cache/simple_backend",
......
......@@ -60,6 +60,7 @@
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/trace_event/process_memory_dump.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_monster_change_dispatcher.h"
......@@ -565,6 +566,32 @@ bool CookieMonster::IsEphemeral() {
return store_.get() == nullptr;
}
void CookieMonster::DumpMemoryStats(
base::trace_event::ProcessMemoryDump* pmd,
const std::string& parent_absolute_name) const {
const char kRelPath[] = "/cookie_monster";
pmd->CreateAllocatorDump(parent_absolute_name + kRelPath + "/cookies")
->AddScalar(base::trace_event::MemoryAllocatorDump::kNameObjectCount,
base::trace_event::MemoryAllocatorDump::kUnitsObjects,
cookies_.size());
pmd->CreateAllocatorDump(parent_absolute_name + kRelPath +
"/tasks_pending_global")
->AddScalar(base::trace_event::MemoryAllocatorDump::kNameObjectCount,
base::trace_event::MemoryAllocatorDump::kUnitsObjects,
tasks_pending_.size());
size_t total_pending_for_key = 0;
for (const auto& kv : tasks_pending_for_key_)
total_pending_for_key += kv.second.size();
pmd->CreateAllocatorDump(parent_absolute_name + kRelPath +
"/tasks_pending_for_key")
->AddScalar(base::trace_event::MemoryAllocatorDump::kNameObjectCount,
base::trace_event::MemoryAllocatorDump::kUnitsObjects,
total_pending_for_key);
}
CookieMonster::~CookieMonster() {
DCHECK(thread_checker_.CalledOnValidThread());
......
......@@ -207,6 +207,9 @@ class NET_EXPORT CookieMonster : public CookieStore {
bool IsEphemeral() override;
void DumpMemoryStats(base::trace_event::ProcessMemoryDump* pmd,
const std::string& parent_absolute_name) const override;
// Find a key based on the given domain, which will be used to find all
// cookies potentially relevant to it. This is used for lookup in cookies_ as
// well as for PersistentCookieStore::LoadCookiesForKey. See comment on keys
......
......@@ -40,6 +40,10 @@ int CookieStore::GetChannelIDServiceID() {
return channel_id_service_id_;
}
void CookieStore::DumpMemoryStats(
base::trace_event::ProcessMemoryDump* pmd,
const std::string& parent_absolute_name) const {}
CookieStore::CookieStore() : channel_id_service_id_(-1) {}
} // namespace net
......@@ -21,6 +21,12 @@
class GURL;
namespace base {
namespace trace_event {
class ProcessMemoryDump;
}
} // namespace base
namespace net {
class CookieChangeDispatcher;
......@@ -146,6 +152,10 @@ class NET_EXPORT CookieStore {
void SetChannelIDServiceID(int id);
int GetChannelIDServiceID();
// Reports the estimate of dynamically allocated memory in bytes.
virtual void DumpMemoryStats(base::trace_event::ProcessMemoryDump* pmd,
const std::string& parent_absolute_name) const;
protected:
CookieStore();
int channel_id_service_id_;
......
......@@ -172,6 +172,9 @@ bool URLRequestContext::OnMemoryDump(
if (http_cache)
http_cache->DumpMemoryStats(pmd, dump->absolute_name());
}
if (cookie_store_) {
cookie_store_->DumpMemoryStats(pmd, dump->absolute_name());
}
return true;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment