summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorreveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-11 13:27:01 +0000
committerreveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-11 13:27:01 +0000
commit2b4207733799c9a1922dc786d2583a69cae91ac4 (patch)
tree3f734fe038f2462316e595b8c0e6b51bb0bcf2e1 /base
parent04783d250baca80685ff1ec6673b2d1b83f51861 (diff)
downloadchromium_src-2b4207733799c9a1922dc786d2583a69cae91ac4.zip
chromium_src-2b4207733799c9a1922dc786d2583a69cae91ac4.tar.gz
chromium_src-2b4207733799c9a1922dc786d2583a69cae91ac4.tar.bz2
base: Add a trace counter for amount of discardable memory allocated.
This adds a trace counter to the discardable memory manager for the amount of memory allocated. Useful when debugging performance issues related to discardable memory usage. BUG=310231 Review URL: https://codereview.chromium.org/234363002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263221 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r--base/memory/discardable_memory_manager.cc13
-rw-r--r--base/memory/discardable_memory_manager.h3
2 files changed, 16 insertions, 0 deletions
diff --git a/base/memory/discardable_memory_manager.cc b/base/memory/discardable_memory_manager.cc
index c1b9f36..e31f932 100644
--- a/base/memory/discardable_memory_manager.cc
+++ b/base/memory/discardable_memory_manager.cc
@@ -30,6 +30,7 @@ DiscardableMemoryManager::DiscardableMemoryManager()
discardable_memory_limit_(kDefaultDiscardableMemoryLimit),
bytes_to_keep_under_moderate_pressure_(
kDefaultBytesToKeepUnderModeratePressure) {
+ BytesAllocatedChanged();
}
DiscardableMemoryManager::~DiscardableMemoryManager() {
@@ -88,6 +89,7 @@ void DiscardableMemoryManager::Unregister(
size_t bytes = it->second.bytes;
DCHECK_LE(bytes, bytes_allocated_);
bytes_allocated_ -= bytes;
+ BytesAllocatedChanged();
free(it->second.memory);
}
allocations_.Erase(it);
@@ -130,6 +132,8 @@ scoped_ptr<uint8, FreeDeleter> DiscardableMemoryManager::Acquire(
return scoped_ptr<uint8, FreeDeleter>();
bytes_allocated_ += bytes;
+ BytesAllocatedChanged();
+
*purged = true;
return memory.Pass();
}
@@ -217,11 +221,20 @@ void DiscardableMemoryManager::PurgeLRUWithLockAcquiredUntilUsageIsWithin(
free(it->second.memory);
it->second.memory = NULL;
}
+
+ BytesAllocatedChanged();
}
void DiscardableMemoryManager::EnforcePolicyWithLockAcquired() {
PurgeLRUWithLockAcquiredUntilUsageIsWithin(discardable_memory_limit_);
}
+void DiscardableMemoryManager::BytesAllocatedChanged() const {
+ TRACE_COUNTER_ID1("base",
+ "DiscardableMemoryUsage",
+ this,
+ bytes_allocated_);
+}
+
} // namespace internal
} // namespace base
diff --git a/base/memory/discardable_memory_manager.h b/base/memory/discardable_memory_manager.h
index 2b72c51..7c0bd5c 100644
--- a/base/memory/discardable_memory_manager.h
+++ b/base/memory/discardable_memory_manager.h
@@ -121,6 +121,9 @@ class BASE_EXPORT_PRIVATE DiscardableMemoryManager {
// Caller must acquire |lock_| prior to calling this function.
void EnforcePolicyWithLockAcquired();
+ // Called when a change to |bytes_allocated_| has been made.
+ void BytesAllocatedChanged() const;
+
// Needs to be held when accessing members.
mutable Lock lock_;