diff options
author | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-24 08:16:21 +0000 |
---|---|---|
committer | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-24 08:16:21 +0000 |
commit | 92bb14266f58bc16187b3cb1baba20ac0b3e4501 (patch) | |
tree | f48467669a0a14609349bce1621040a2cbbddf44 /chrome/browser/task_manager | |
parent | 51130b57a242bf009fee03c55728f76b8f845f13 (diff) | |
download | chromium_src-92bb14266f58bc16187b3cb1baba20ac0b3e4501.zip chromium_src-92bb14266f58bc16187b3cb1baba20ac0b3e4501.tar.gz chromium_src-92bb14266f58bc16187b3cb1baba20ac0b3e4501.tar.bz2 |
Add debug code to figure out where we forget to delete TaskManagerRendererResources
BUG=165138
Review URL: https://codereview.chromium.org/11953049
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@178551 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/task_manager')
-rw-r--r-- | chrome/browser/task_manager/task_manager_resource_providers.cc | 21 | ||||
-rw-r--r-- | chrome/browser/task_manager/task_manager_resource_providers.h | 13 |
2 files changed, 32 insertions, 2 deletions
diff --git a/chrome/browser/task_manager/task_manager_resource_providers.cc b/chrome/browser/task_manager/task_manager_resource_providers.cc index 966e9ad..b78e5e9 100644 --- a/chrome/browser/task_manager/task_manager_resource_providers.cc +++ b/chrome/browser/task_manager/task_manager_resource_providers.cc @@ -9,6 +9,7 @@ #include "base/basictypes.h" #include "base/bind.h" #include "base/command_line.h" +#include "base/debug/alias.h" #include "base/file_version_info.h" #include "base/i18n/rtl.h" #include "base/memory/scoped_ptr.h" @@ -183,7 +184,8 @@ bool IsContentsBackgroundPrinted(WebContents* web_contents) { //////////////////////////////////////////////////////////////////////////////// TaskManagerRendererResource::TaskManagerRendererResource( base::ProcessHandle process, content::RenderViewHost* render_view_host) - : process_(process), + : content::RenderViewHostObserver(render_view_host), + process_(process), render_view_host_(render_view_host), pending_stats_update_(false), fps_(0.0f), @@ -202,6 +204,18 @@ TaskManagerRendererResource::~TaskManagerRendererResource() { } void TaskManagerRendererResource::Refresh() { + if (!render_view_host()) { + // Store information about where this TaskManagerRendererResource was + // created and where the RenderViewHost was destroyed on the stack to help + // debugging where we forgot to delete this resource. + base::debug::StackTrace creation_stack = creation_stack_; + base::debug::Alias(&creation_stack); + CHECK(destruction_stack_); + base::debug::StackTrace destruction_stack = *destruction_stack_; + base::debug::Alias(&destruction_stack); + CHECK(false); + } + if (!pending_stats_update_) { render_view_host_->Send(new ChromeViewMsg_GetCacheResourceStats); pending_stats_update_ = true; @@ -292,6 +306,11 @@ bool TaskManagerRendererResource::SupportNetworkUsage() const { return true; } +void TaskManagerRendererResource::RenderViewHostDestroyed( + content::RenderViewHost* render_view_host) { + destruction_stack_.reset(new base::debug::StackTrace()); +} + //////////////////////////////////////////////////////////////////////////////// // TaskManagerTabContentsResource class //////////////////////////////////////////////////////////////////////////////// diff --git a/chrome/browser/task_manager/task_manager_resource_providers.h b/chrome/browser/task_manager/task_manager_resource_providers.h index 81d9cdd..e3bb5ba 100644 --- a/chrome/browser/task_manager/task_manager_resource_providers.h +++ b/chrome/browser/task_manager/task_manager_resource_providers.h @@ -10,11 +10,13 @@ #include "base/basictypes.h" #include "base/compiler_specific.h" +#include "base/debug/stack_trace.h" #include "base/process_util.h" #include "chrome/browser/task_manager/task_manager.h" #include "content/public/browser/child_process_data.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" +#include "content/public/browser/render_view_host_observer.h" #include "content/public/common/process_type.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h" @@ -36,7 +38,8 @@ class Extension; // Base class for various types of render process resources that provides common // functionality like stats tracking. -class TaskManagerRendererResource : public TaskManager::Resource { +class TaskManagerRendererResource : public TaskManager::Resource, + public content::RenderViewHostObserver { public: TaskManagerRendererResource(base::ProcessHandle process, content::RenderViewHost* render_view_host); @@ -75,6 +78,10 @@ class TaskManagerRendererResource : public TaskManager::Resource { virtual void NotifyV8HeapStats(size_t v8_memory_allocated, size_t v8_memory_used) OVERRIDE; + // content::RenderViewHostObserver implementation. + virtual void RenderViewHostDestroyed( + content::RenderViewHost* render_view_host) OVERRIDE; + content::RenderViewHost* render_view_host() const { return render_view_host_; } @@ -102,6 +109,10 @@ class TaskManagerRendererResource : public TaskManager::Resource { size_t v8_memory_used_; bool pending_v8_memory_allocated_update_; + // TODO(jochen): Remove asap after debugging http://crbug.com/165138. + base::debug::StackTrace creation_stack_; + scoped_ptr<base::debug::StackTrace> destruction_stack_; + DISALLOW_COPY_AND_ASSIGN(TaskManagerRendererResource); }; |