Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6645)

Unified Diff: chrome/browser/task_manager/task_manager_resource_providers.cc

Issue 6328010: Fix Task Manager to correctly display network usage of plug-in processes. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Fix the way Task Manager accounts for network usage by plug-ins. Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/task_manager/task_manager_resource_providers.cc
diff --git a/chrome/browser/task_manager/task_manager_resource_providers.cc b/chrome/browser/task_manager/task_manager_resource_providers.cc
index 0a822365fa22eda109d00942ab8f030659854091..d208defd730b1bd1bcdeb30e168dd9c7abc1b9cd 100644
--- a/chrome/browser/task_manager/task_manager_resource_providers.cc
+++ b/chrome/browser/task_manager/task_manager_resource_providers.cc
@@ -80,9 +80,6 @@ TaskManagerRendererResource::TaskManagerRendererResource(
v8_memory_allocated_(0),
v8_memory_used_(0),
pending_v8_memory_allocated_update_(false) {
- // We cache the process and pid as when a Tab/BackgroundContents is closed the
- // process reference becomes NULL and the TaskManager still needs it.
- pid_ = base::GetProcId(process_);
stats_.images.size = 0;
stats_.cssStyleSheets.size = 0;
stats_.scripts.size = 0;
@@ -231,28 +228,17 @@ TaskManagerTabContentsResourceProvider::
}
TaskManager::Resource* TaskManagerTabContentsResourceProvider::GetResource(
- int origin_pid,
+ int origin_child_id,
int render_process_host_id,
int routing_id) {
+ if (origin_child_id != render_process_host_id)
+ return NULL;
TabContents* tab_contents =
tab_util::GetTabContentsByID(render_process_host_id, routing_id);
if (!tab_contents) // Not one of our resource.
return NULL;
- base::ProcessHandle process_handle =
- tab_contents->GetRenderProcessHost()->GetHandle();
- if (!process_handle) {
- // We should not be holding on to a dead tab (it should have been removed
- // through the NOTIFY_TAB_CONTENTS_DISCONNECTED notification.
- NOTREACHED();
- return NULL;
- }
-
- int pid = base::GetProcId(process_handle);
- if (pid != origin_pid)
- return NULL;
-
std::map<TabContents*, TaskManagerTabContentsResource*>::iterator
res_iter = resources_.find(tab_contents);
if (res_iter == resources_.end()) {
@@ -451,24 +437,17 @@ TaskManagerBackgroundContentsResourceProvider::
TaskManager::Resource*
TaskManagerBackgroundContentsResourceProvider::GetResource(
- int origin_pid,
+ int origin_child_id,
int render_process_host_id,
int routing_id) {
+ if (origin_child_id != render_process_host_id)
+ return NULL;
BackgroundContents* contents = BackgroundContents::GetBackgroundContentsByID(
render_process_host_id, routing_id);
if (!contents) // This resource no longer exists.
return NULL;
- base::ProcessHandle process_handle =
- contents->render_view_host()->process()->GetHandle();
- if (!process_handle) // Process crashed.
- return NULL;
-
- int pid = base::GetProcId(process_handle);
- if (pid != origin_pid)
- return NULL;
-
std::map<BackgroundContents*,
TaskManagerBackgroundContentsResource*>::iterator res_iter =
resources_.find(contents);
@@ -641,9 +620,6 @@ TaskManagerChildProcessResource::TaskManagerChildProcessResource(
: child_process_(child_proc),
title_(),
network_usage_support_(false) {
- // We cache the process id because it's not cheap to calculate, and it won't
- // be available when we get the plugin disconnected notification.
- pid_ = child_proc.id();
if (!default_icon_) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
default_icon_ = rb.GetBitmapNamed(IDR_PLUGIN);
@@ -723,12 +699,12 @@ TaskManagerChildProcessResourceProvider::
}
TaskManager::Resource* TaskManagerChildProcessResourceProvider::GetResource(
- int origin_pid,
+ int origin_child_id,
int render_process_host_id,
int routing_id) {
std::map<int, TaskManagerChildProcessResource*>::iterator iter =
- pid_to_resources_.find(origin_pid);
- if (iter != pid_to_resources_.end())
+ child_id_to_resources_.find(origin_child_id);
+ if (iter != child_id_to_resources_.end())
return iter->second;
else
return NULL;
@@ -767,7 +743,7 @@ void TaskManagerChildProcessResourceProvider::StopUpdating() {
STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end());
resources_.clear();
- pid_to_resources_.clear();
+ child_id_to_resources_.clear();
existing_child_process_info_.clear();
}
@@ -821,12 +797,12 @@ void TaskManagerChildProcessResourceProvider::Remove(
task_manager_->RemoveResource(resource);
// Remove it from the provider.
resources_.erase(iter);
- // Remove it from our pid map.
- std::map<int, TaskManagerChildProcessResource*>::iterator pid_iter =
- pid_to_resources_.find(resource->process_id());
- DCHECK(pid_iter != pid_to_resources_.end());
- if (pid_iter != pid_to_resources_.end())
- pid_to_resources_.erase(pid_iter);
+ // Remove it from our child ID map.
+ std::map<int, TaskManagerChildProcessResource*>::iterator id_iter =
+ child_id_to_resources_.find(resource->id());
+ DCHECK(id_iter != child_id_to_resources_.end());
+ if (id_iter != child_id_to_resources_.end())
+ child_id_to_resources_.erase(id_iter);
// Finally, delete the resource.
delete resource;
@@ -837,7 +813,7 @@ void TaskManagerChildProcessResourceProvider::AddToTaskManager(
TaskManagerChildProcessResource* resource =
new TaskManagerChildProcessResource(child_process_info);
resources_[child_process_info] = resource;
- pid_to_resources_[resource->process_id()] = resource;
+ child_id_to_resources_[resource->id()] = resource;
task_manager_->AddResource(resource);
}
@@ -880,7 +856,6 @@ TaskManagerExtensionProcessResource::TaskManagerExtensionProcessResource(
default_icon_ = rb.GetBitmapNamed(IDR_PLUGIN);
}
process_handle_ = extension_host_->render_process_host()->GetHandle();
- pid_ = base::GetProcId(process_handle_);
string16 extension_name = UTF8ToUTF16(GetExtension()->name());
DCHECK(!extension_name.empty());
@@ -888,6 +863,7 @@ TaskManagerExtensionProcessResource::TaskManagerExtensionProcessResource(
extension_host_->profile()->IsOffTheRecord());
title_ = UTF16ToWideHack(l10n_util::GetStringFUTF16(message_id,
extension_name));
+ id_ = extension_host->render_process_host()->id();
}
TaskManagerExtensionProcessResource::~TaskManagerExtensionProcessResource() {
@@ -942,12 +918,12 @@ TaskManagerExtensionProcessResourceProvider::
}
TaskManager::Resource* TaskManagerExtensionProcessResourceProvider::GetResource(
- int origin_pid,
+ int origin_child_id,
int render_process_host_id,
int routing_id) {
std::map<int, TaskManagerExtensionProcessResource*>::iterator iter =
- pid_to_resources_.find(origin_pid);
- if (iter != pid_to_resources_.end())
+ child_id_to_resources_.find(origin_child_id);
+ if (iter != child_id_to_resources_.end())
return iter->second;
else
return NULL;
@@ -1007,7 +983,7 @@ void TaskManagerExtensionProcessResourceProvider::StopUpdating() {
STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end());
resources_.clear();
- pid_to_resources_.clear();
+ child_id_to_resources_.clear();
}
void TaskManagerExtensionProcessResourceProvider::Observe(
@@ -1038,7 +1014,7 @@ void TaskManagerExtensionProcessResourceProvider::AddToTaskManager(
new TaskManagerExtensionProcessResource(extension_host);
DCHECK(resources_.find(extension_host) == resources_.end());
resources_[extension_host] = resource;
- pid_to_resources_[resource->process_id()] = resource;
+ child_id_to_resources_[resource->id()] = resource;
task_manager_->AddResource(resource);
}
@@ -1058,12 +1034,12 @@ void TaskManagerExtensionProcessResourceProvider::RemoveFromTaskManager(
// Remove it from the provider.
resources_.erase(iter);
- // Remove it from our pid map.
- std::map<int, TaskManagerExtensionProcessResource*>::iterator pid_iter =
- pid_to_resources_.find(resource->process_id());
- DCHECK(pid_iter != pid_to_resources_.end());
- if (pid_iter != pid_to_resources_.end())
- pid_to_resources_.erase(pid_iter);
+ // Remove it from our child ID map.
+ std::map<int, TaskManagerExtensionProcessResource*>::iterator id_iter =
+ child_id_to_resources_.find(resource->id());
+ DCHECK(id_iter != child_id_to_resources_.end());
+ if (id_iter != child_id_to_resources_.end())
+ child_id_to_resources_.erase(id_iter);
// Finally, delete the resource.
delete resource;
@@ -1083,7 +1059,6 @@ TaskManagerNotificationResource::TaskManagerNotificationResource(
default_icon_ = rb.GetBitmapNamed(IDR_PLUGIN);
}
process_handle_ = balloon_host_->render_view_host()->process()->GetHandle();
- pid_ = base::GetProcId(process_handle_);
title_ = UTF16ToWide(l10n_util::GetStringFUTF16(
IDS_TASK_MANAGER_NOTIFICATION_PREFIX,
balloon_host_->GetSource()));
@@ -1127,10 +1102,10 @@ TaskManagerNotificationResourceProvider::
}
TaskManager::Resource* TaskManagerNotificationResourceProvider::GetResource(
- int origin_pid,
+ int origin_child_id,
int render_process_host_id,
int routing_id) {
- // TODO(johnnyg): provide resources by pid if necessary.
+ // TODO(johnnyg): provide resources by child ID if necessary.
return NULL;
}
@@ -1223,8 +1198,8 @@ SkBitmap* TaskManagerBrowserProcessResource::default_icon_ = NULL;
TaskManagerBrowserProcessResource::TaskManagerBrowserProcessResource()
: title_() {
- pid_ = base::GetCurrentProcId();
- bool success = base::OpenPrivilegedProcessHandle(pid_, &process_);
+ int pid = base::GetCurrentProcId();
+ bool success = base::OpenPrivilegedProcessHandle(pid, &process_);
DCHECK(success);
#if defined(OS_WIN)
if (!default_icon_) {
@@ -1313,12 +1288,11 @@ TaskManagerBrowserProcessResourceProvider::
}
TaskManager::Resource* TaskManagerBrowserProcessResourceProvider::GetResource(
- int origin_pid,
+ int origin_child_id,
int render_process_host_id,
int routing_id) {
- if (origin_pid != resource_.process_id()) {
+ if (origin_child_id != (-1)) // Match "unknown" child ID for now!
return NULL;
- }
return &resource_;
}

Powered by Google App Engine
This is Rietveld 408576698