From 9efed7de253406c35f0d5ceee92b1eefc9a85a6c Mon Sep 17 00:00:00 2001 From: afakhry Date: Wed, 6 May 2015 16:30:47 -0700 Subject: [PATCH] New Task Manager - Phase 1.3.1.A - RendererTask R=nick@chromium.org BUG=470988,304341 Review URL: https://codereview.chromium.org/1128673002 Cr-Commit-Position: refs/heads/master@{#328654} --- .../providers/browser_process_task_unittest.cc | 1 - .../providers/child_process_task_unittest.cc | 1 - chrome/browser/task_management/providers/task.cc | 4 - chrome/browser/task_management/providers/task.h | 4 - .../providers/web_contents/renderer_task.cc | 90 ++++++++++++++++++++++ .../providers/web_contents/renderer_task.h | 70 +++++++++++++++++ chrome/chrome_browser.gypi | 2 + 7 files changed, 162 insertions(+), 10 deletions(-) create mode 100644 chrome/browser/task_management/providers/web_contents/renderer_task.cc create mode 100644 chrome/browser/task_management/providers/web_contents/renderer_task.h diff --git a/chrome/browser/task_management/providers/browser_process_task_unittest.cc b/chrome/browser/task_management/providers/browser_process_task_unittest.cc index 45613f7679fc..0a557ecefec0 100644 --- a/chrome/browser/task_management/providers/browser_process_task_unittest.cc +++ b/chrome/browser/task_management/providers/browser_process_task_unittest.cc @@ -72,7 +72,6 @@ TEST_F(BrowserProcessTaskProviderTest, TestProvidedTask) { provided_task_->title()); EXPECT_EQ(Task::BROWSER, provided_task_->GetType()); EXPECT_EQ(0, provided_task_->GetChildProcessUniqueID()); - EXPECT_EQ(0, provided_task_->GetRoutingID()); const int received_bytes = 1024; EXPECT_FALSE(provided_task_->ReportsNetworkUsage()); EXPECT_EQ(-1, provided_task_->network_usage()); diff --git a/chrome/browser/task_management/providers/child_process_task_unittest.cc b/chrome/browser/task_management/providers/child_process_task_unittest.cc index 7dcb0c6fb17c..0084a539ee0f 100644 --- a/chrome/browser/task_management/providers/child_process_task_unittest.cc +++ b/chrome/browser/task_management/providers/child_process_task_unittest.cc @@ -128,7 +128,6 @@ TEST_F(ChildProcessTaskTest, TestAll) { EXPECT_EQ(Task::PLUGIN, task->GetType()); EXPECT_EQ(unique_id, task->GetChildProcessUniqueID()); EXPECT_EQ(base::string16(), task->GetProfileName()); - EXPECT_EQ(0, task->GetRoutingID()); EXPECT_FALSE(task->ReportsSqliteMemory()); EXPECT_FALSE(task->ReportsV8Memory()); EXPECT_FALSE(task->ReportsWebCacheStats()); diff --git a/chrome/browser/task_management/providers/task.cc b/chrome/browser/task_management/providers/task.cc index 3d085f36e397..6432e390d518 100644 --- a/chrome/browser/task_management/providers/task.cc +++ b/chrome/browser/task_management/providers/task.cc @@ -54,10 +54,6 @@ base::string16 Task::GetProfileName() const { return base::string16(); } -int Task::GetRoutingID() const { - return 0; -} - bool Task::ReportsSqliteMemory() const { return GetSqliteMemoryUsed() != -1; } diff --git a/chrome/browser/task_management/providers/task.h b/chrome/browser/task_management/providers/task.h index 6627be4797d8..f94a33f83c3b 100644 --- a/chrome/browser/task_management/providers/task.h +++ b/chrome/browser/task_management/providers/task.h @@ -66,10 +66,6 @@ class Task { // view host that this task represents (if this task represents a renderer). virtual base::string16 GetProfileName() const; - // If this task represents a renderer process, this would the return the - // routing ID of the RenderViewHost, otherwise it will return 0. - virtual int GetRoutingID() const; - // Getting the Sqlite used memory (in bytes). Not all tasks reports Sqlite // memory, in this case a default invalid value of -1 will be returned. // Check for whether the task reports it or not first. diff --git a/chrome/browser/task_management/providers/web_contents/renderer_task.cc b/chrome/browser/task_management/providers/web_contents/renderer_task.cc new file mode 100644 index 000000000000..8312e5a556e4 --- /dev/null +++ b/chrome/browser/task_management/providers/web_contents/renderer_task.cc @@ -0,0 +1,90 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/task_management/providers/web_contents/renderer_task.h" + +#include "chrome/browser/browser_process.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_info_cache.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "content/public/browser/render_process_host.h" + +namespace task_management { + +namespace { + +// Gets the profile name associated with the browser context of the given +// |render_process_host| from the profile info cache. +base::string16 GetRendererProfileName( + const content::RenderProcessHost* render_process_host) { + Profile* profile = + Profile::FromBrowserContext(render_process_host->GetBrowserContext()); + DCHECK(profile); + ProfileInfoCache& cache = + g_browser_process->profile_manager()->GetProfileInfoCache(); + size_t index = + cache.GetIndexOfProfileWithPath(profile->GetOriginalProfile()->GetPath()); + if (index != std::string::npos) + return cache.GetNameOfProfileAtIndex(index); + + return base::string16(); +} + +} // namespace + +RendererTask::RendererTask(const base::string16& title, + const gfx::ImageSkia* icon, + base::ProcessHandle handle, + content::RenderProcessHost* render_process_host) + : Task(title, icon, handle), + render_process_host_(render_process_host), + render_process_id_(render_process_host->GetID()), + v8_memory_allocated_(0), + v8_memory_used_(0), + webcache_stats_(), + profile_name_(GetRendererProfileName(render_process_host)) { +} + +RendererTask::~RendererTask() { +} + +void RendererTask::Refresh(const base::TimeDelta& update_interval) { + Task::Refresh(update_interval); + + // TODO(afakhry): + // 1- Add code to disable this refresh if it was never requested by clients of + // the task manager. + // 2- Figure out a way to refresh V8 and WebCache stats cleanly either by + // working with amistry, or by implementing something myself. +} + +Task::Type RendererTask::GetType() const { + return Task::RENDERER; +} + +int RendererTask::GetChildProcessUniqueID() const { + return render_process_id_; +} + +base::string16 RendererTask::GetProfileName() const { + return profile_name_; +} + +int64 RendererTask::GetV8MemoryAllocated() const { + return v8_memory_allocated_; +} + +int64 RendererTask::GetV8MemoryUsed() const { + return v8_memory_used_; +} + +bool RendererTask::ReportsWebCacheStats() const { + return true; +} + +blink::WebCache::ResourceTypeStats RendererTask::GetWebCacheStats() const { + return webcache_stats_; +} + +} // namespace task_management diff --git a/chrome/browser/task_management/providers/web_contents/renderer_task.h b/chrome/browser/task_management/providers/web_contents/renderer_task.h new file mode 100644 index 000000000000..0d91836859ef --- /dev/null +++ b/chrome/browser/task_management/providers/web_contents/renderer_task.h @@ -0,0 +1,70 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_TASK_MANAGEMENT_PROVIDERS_WEB_CONTENTS_RENDERER_TASK_H_ +#define CHROME_BROWSER_TASK_MANAGEMENT_PROVIDERS_WEB_CONTENTS_RENDERER_TASK_H_ + +#include "chrome/browser/task_management/providers/task.h" +#include "content/public/browser/navigation_entry.h" + +namespace content { +class RenderProcessHost; +} // namespace content + +namespace task_management { + +// Defines an abstract base class for various types of renderer process tasks +// such as background contents, tab contents, ... etc. +class RendererTask : public Task { + public: + RendererTask(const base::string16& title, + const gfx::ImageSkia* icon, + base::ProcessHandle handle, + content::RenderProcessHost* render_process_host); + ~RendererTask() override; + + // An abstract method that will be called when the event + // |WebContentsObserver::TitleWasSet()| occurs. This gives the freedom to + // concrete tasks to adjust the title however they need to before they set it. + virtual void OnTitleChanged(content::NavigationEntry* entry) = 0; + + // An abstract method that will be called when the event + // |WebContentsObserver::DidUpdateFaviconURL()| occurs, so that concrete tasks + // can update their favicons. + virtual void OnFaviconChanged() = 0; + + // task_management::Task: + void Refresh(const base::TimeDelta& update_interval) override; + Type GetType() const override; + int GetChildProcessUniqueID() const override; + base::string16 GetProfileName() const override; + int64 GetV8MemoryAllocated() const override; + int64 GetV8MemoryUsed() const override; + bool ReportsWebCacheStats() const override; + blink::WebCache::ResourceTypeStats GetWebCacheStats() const override; + + private: + // The render process host of the task this object represents. + content::RenderProcessHost* render_process_host_; + + // The unique ID of the RenderProcessHost. + const int render_process_id_; + + // The allocated and used V8 memory (in bytes). + int64 v8_memory_allocated_; + int64 v8_memory_used_; + + // The WebKit resource cache statistics for this renderer. + blink::WebCache::ResourceTypeStats webcache_stats_; + + // The profile name associated with the browser context of the render view + // host. + const base::string16 profile_name_; + + DISALLOW_COPY_AND_ASSIGN(RendererTask); +}; + +} // namespace task_management + +#endif // CHROME_BROWSER_TASK_MANAGEMENT_PROVIDERS_WEB_CONTENTS_RENDERER_TASK_H_ diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 418ecb1f49d6..2911c216e880 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -2892,6 +2892,8 @@ 'browser/task_management/providers/task_provider.h', 'browser/task_management/providers/task.cc', 'browser/task_management/providers/task.h', + 'browser/task_management/providers/web_contents/renderer_task.cc', + 'browser/task_management/providers/web_contents/renderer_task.h', # Old Task Manager Sources: 'browser/task_manager/background_information.cc', -- 2.11.4.GIT