Chromium Code Reviews| Index: net/http/http_cache.cc |
| diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc |
| index ccded67606f609db8bce433b09614b4766c130fb..d629df2bb6bd9b98be16bca1798211557664c71c 100644 |
| --- a/net/http/http_cache.cc |
| +++ b/net/http/http_cache.cc |
| @@ -28,6 +28,9 @@ |
| #include "base/threading/worker_pool.h" |
| #include "base/time/default_clock.h" |
| #include "base/time/time.h" |
| +#include "base/trace_event/memory_allocator_dump.h" |
| +#include "base/trace_event/memory_usage_estimator.h" |
| +#include "base/trace_event/process_memory_dump.h" |
| #include "net/base/cache_type.h" |
| #include "net/base/io_buffer.h" |
| #include "net/base/load_flags.h" |
| @@ -106,6 +109,12 @@ HttpCache::ActiveEntry::~ActiveEntry() { |
| } |
| } |
| +size_t HttpCache::ActiveEntry::EstimateMemoryUsage() const { |
| + // Skip tracking |disk_entry| because that is tracked in simple_backend_impl. |
| + return base::trace_event::EstimateMemoryUsage(readers) + |
| + base::trace_event::EstimateMemoryUsage(pending_queue); |
|
jkarlin
2017/02/23 15:14:57
Sorry, I was wrong, this should return 0. readers
xunjieli
2017/02/23 16:40:59
Done. Got it. I will add those there when URLReque
|
| +} |
| + |
| //----------------------------------------------------------------------------- |
| // This structure keeps track of work items that are attempting to create or |
| @@ -114,6 +123,14 @@ struct HttpCache::PendingOp { |
| PendingOp() : disk_entry(NULL) {} |
| ~PendingOp() {} |
| + // Returns the estimate of dynamically allocated memory in bytes. |
| + size_t EstimateMemoryUsage() const { |
| + // |disk_entry| is tracked in |backend|. |
| + return base::trace_event::EstimateMemoryUsage(backend) + |
| + base::trace_event::EstimateMemoryUsage(writer) + |
| + base::trace_event::EstimateMemoryUsage(pending_queue); |
| + } |
| + |
| disk_cache::Entry* disk_entry; |
| std::unique_ptr<disk_cache::Backend> backend; |
| std::unique_ptr<WorkItem> writer; |
| @@ -179,6 +196,9 @@ class HttpCache::WorkItem { |
| bool Matches(Transaction* trans) const { return trans == trans_; } |
| bool IsValid() const { return trans_ || entry_ || !callback_.is_null(); } |
| + // Returns the estimate of dynamically allocated memory in bytes. |
| + size_t EstimateMemoryUsage() const { return 0; } |
| + |
| private: |
| WorkItemOperation operation_; |
| Transaction* trans_; |
| @@ -483,6 +503,22 @@ HttpCache::SetHttpNetworkTransactionFactoryForTesting( |
| return old_network_layer; |
| } |
| +void HttpCache::DumpMemoryStats(base::trace_event::ProcessMemoryDump* pmd, |
| + const std::string& parent_absolute_name) const { |
| + // Skip tracking members like |clock_| and |backend_factory_| because they |
| + // don't allocate. |
| + base::trace_event::MemoryAllocatorDump* dump = |
| + pmd->CreateAllocatorDump(parent_absolute_name + "/http_cache"); |
| + dump->AddScalar( |
| + base::trace_event::MemoryAllocatorDump::kNameSize, |
| + base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
| + base::trace_event::EstimateMemoryUsage(disk_cache_) + |
| + base::trace_event::EstimateMemoryUsage(active_entries_) + |
| + base::trace_event::EstimateMemoryUsage(doomed_entries_) + |
| + base::trace_event::EstimateMemoryUsage(playback_cache_map_) + |
| + base::trace_event::EstimateMemoryUsage(pending_ops_)); |
| +} |
| + |
| //----------------------------------------------------------------------------- |
| int HttpCache::CreateBackend(disk_cache::Backend** backend, |