summaryrefslogtreecommitdiffstats
path: root/chrome/browser/task_manager
diff options
context:
space:
mode:
authornasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-05 17:18:22 +0000
committernasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-05 17:18:22 +0000
commit6bfb6e70e57ee6f8865368fbd522e6bdc87da61b (patch)
tree24df76e9ffe45500e87da94e5accca0099bf8e89 /chrome/browser/task_manager
parentf06f402eef58d0411889d7cbfba98c1a0135c4b9 (diff)
downloadchromium_src-6bfb6e70e57ee6f8865368fbd522e6bdc87da61b.zip
chromium_src-6bfb6e70e57ee6f8865368fbd522e6bdc87da61b.tar.gz
chromium_src-6bfb6e70e57ee6f8865368fbd522e6bdc87da61b.tar.bz2
Exposing the child process unique ID through the task manager. This is an initial step required for implementing the processes extension API.
BUG=32302 TEST=none Review URL: http://codereview.chromium.org/9959101 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@130952 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/task_manager')
-rw-r--r--chrome/browser/task_manager/task_manager.cc5
-rw-r--r--chrome/browser/task_manager/task_manager.h6
-rw-r--r--chrome/browser/task_manager/task_manager_notification_resource_provider.cc6
-rw-r--r--chrome/browser/task_manager/task_manager_resource_providers.cc25
-rw-r--r--chrome/browser/task_manager/task_manager_resource_providers.h12
-rw-r--r--chrome/browser/task_manager/task_manager_unittest.cc7
-rw-r--r--chrome/browser/task_manager/task_manager_worker_resource_provider.cc7
7 files changed, 63 insertions, 5 deletions
diff --git a/chrome/browser/task_manager/task_manager.cc b/chrome/browser/task_manager/task_manager.cc
index ad46354..e44a549 100644
--- a/chrome/browser/task_manager/task_manager.cc
+++ b/chrome/browser/task_manager/task_manager.cc
@@ -464,6 +464,11 @@ base::ProcessHandle TaskManagerModel::GetResourceProcessHandle(int index)
return resources_[index]->GetProcess();
}
+int TaskManagerModel::GetUniqueChildProcessId(int index) const {
+ CHECK_LT(index, ResourceCount());
+ return resources_[index]->GetUniqueChildProcessId();
+}
+
TaskManager::Resource::Type TaskManagerModel::GetResourceType(int index) const {
CHECK_LT(index, ResourceCount());
return resources_[index]->GetType();
diff --git a/chrome/browser/task_manager/task_manager.h b/chrome/browser/task_manager/task_manager.h
index 2f99396..c37afdc 100644
--- a/chrome/browser/task_manager/task_manager.h
+++ b/chrome/browser/task_manager/task_manager.h
@@ -68,6 +68,7 @@ class TaskManager {
virtual string16 GetProfileName() const = 0;
virtual SkBitmap GetIcon() const = 0;
virtual base::ProcessHandle GetProcess() const = 0;
+ virtual int GetUniqueChildProcessId() const = 0;
virtual Type GetType() const = 0;
virtual int GetRoutingID() const { return 0; }
@@ -376,6 +377,11 @@ class TaskManagerModel : public base::RefCountedThreadSafe<TaskManagerModel> {
// Returns process handle for given resource.
base::ProcessHandle GetResourceProcessHandle(int index) const;
+ // Returns the unique child process ID generated by Chromium, not the OS
+ // process id. This is used to identify processes internally and for
+ // extensions. It is not meant to be displayed to the user.
+ int GetUniqueChildProcessId(int index) const;
+
// Returns the type of the given resource.
TaskManager::Resource::Type GetResourceType(int index) const;
diff --git a/chrome/browser/task_manager/task_manager_notification_resource_provider.cc b/chrome/browser/task_manager/task_manager_notification_resource_provider.cc
index c8b2614..8b0f11f 100644
--- a/chrome/browser/task_manager/task_manager_notification_resource_provider.cc
+++ b/chrome/browser/task_manager/task_manager_notification_resource_provider.cc
@@ -39,6 +39,8 @@ TaskManagerNotificationResource::TaskManagerNotificationResource(
}
process_handle_ =
balloon_host_->web_contents()->GetRenderProcessHost()->GetHandle();
+ unique_process_id_ =
+ balloon_host_->web_contents()->GetRenderProcessHost()->GetID();
pid_ = base::GetProcId(process_handle_);
title_ = l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_NOTIFICATION_PREFIX,
balloon_host_->GetSource());
@@ -63,6 +65,10 @@ base::ProcessHandle TaskManagerNotificationResource::GetProcess() const {
return process_handle_;
}
+int TaskManagerNotificationResource::GetUniqueChildProcessId() const {
+ return unique_process_id_;
+}
+
TaskManager::Resource::Type TaskManagerNotificationResource::GetType() const {
return NOTIFICATION;
}
diff --git a/chrome/browser/task_manager/task_manager_resource_providers.cc b/chrome/browser/task_manager/task_manager_resource_providers.cc
index 6c974c8..2ca8157 100644
--- a/chrome/browser/task_manager/task_manager_resource_providers.cc
+++ b/chrome/browser/task_manager/task_manager_resource_providers.cc
@@ -115,6 +115,7 @@ TaskManagerRendererResource::TaskManagerRendererResource(
// 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_);
+ unique_process_id_ = render_view_host_->GetProcess()->GetID();
memset(&stats_, 0, sizeof(stats_));
}
@@ -176,6 +177,10 @@ base::ProcessHandle TaskManagerRendererResource::GetProcess() const {
return process_;
}
+int TaskManagerRendererResource::GetUniqueChildProcessId() const {
+ return unique_process_id_;
+}
+
TaskManager::Resource::Type TaskManagerRendererResource::GetType() const {
return RENDERER;
}
@@ -796,10 +801,12 @@ SkBitmap* TaskManagerChildProcessResource::default_icon_ = NULL;
TaskManagerChildProcessResource::TaskManagerChildProcessResource(
content::ProcessType type,
const string16& name,
- base::ProcessHandle handle)
+ base::ProcessHandle handle,
+ int unique_process_id)
: type_(type),
name_(name),
handle_(handle),
+ unique_process_id_(unique_process_id),
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.
@@ -834,6 +841,10 @@ base::ProcessHandle TaskManagerChildProcessResource::GetProcess() const {
return handle_;
}
+int TaskManagerChildProcessResource::GetUniqueChildProcessId() const {
+ return unique_process_id_;
+}
+
TaskManager::Resource::Type TaskManagerChildProcessResource::GetType() const {
// Translate types to TaskManager::ResourceType, since ChildProcessData's type
// is not available for all TaskManager resources.
@@ -1067,7 +1078,8 @@ void TaskManagerChildProcessResourceProvider::AddToTaskManager(
new TaskManagerChildProcessResource(
child_process_data.type,
child_process_data.name,
- child_process_data.handle);
+ child_process_data.handle,
+ child_process_data.id);
resources_[child_process_data.handle] = resource;
pid_to_resources_[resource->process_id()] = resource;
task_manager_->AddResource(resource);
@@ -1112,6 +1124,7 @@ TaskManagerExtensionProcessResource::TaskManagerExtensionProcessResource(
default_icon_ = rb.GetBitmapNamed(IDR_PLUGIN);
}
process_handle_ = extension_host_->render_process_host()->GetHandle();
+ unique_process_id_ = extension_host_->render_process_host()->GetID();
pid_ = base::GetProcId(process_handle_);
string16 extension_name = UTF8ToUTF16(GetExtension()->name());
DCHECK(!extension_name.empty());
@@ -1147,6 +1160,10 @@ base::ProcessHandle TaskManagerExtensionProcessResource::GetProcess() const {
return process_handle_;
}
+int TaskManagerExtensionProcessResource::GetUniqueChildProcessId() const {
+ return unique_process_id_;
+}
+
TaskManager::Resource::Type
TaskManagerExtensionProcessResource::GetType() const {
return EXTENSION;
@@ -1379,6 +1396,10 @@ base::ProcessHandle TaskManagerBrowserProcessResource::GetProcess() const {
return base::GetCurrentProcessHandle(); // process_;
}
+int TaskManagerBrowserProcessResource::GetUniqueChildProcessId() const {
+ return 0;
+}
+
TaskManager::Resource::Type TaskManagerBrowserProcessResource::GetType() const {
return BROWSER;
}
diff --git a/chrome/browser/task_manager/task_manager_resource_providers.h b/chrome/browser/task_manager/task_manager_resource_providers.h
index 7f82dcd..6249757 100644
--- a/chrome/browser/task_manager/task_manager_resource_providers.h
+++ b/chrome/browser/task_manager/task_manager_resource_providers.h
@@ -41,6 +41,7 @@ class TaskManagerRendererResource : public TaskManager::Resource {
// TaskManager::Resource methods:
virtual base::ProcessHandle GetProcess() const OVERRIDE;
+ virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual int GetRoutingID() const OVERRIDE;
@@ -74,6 +75,7 @@ class TaskManagerRendererResource : public TaskManager::Resource {
private:
base::ProcessHandle process_;
int pid_;
+ int unique_process_id_;
// RenderViewHost we use to fetch stats.
content::RenderViewHost* render_view_host_;
@@ -245,7 +247,8 @@ class TaskManagerChildProcessResource : public TaskManager::Resource {
public:
TaskManagerChildProcessResource(content::ProcessType type,
const string16& name,
- base::ProcessHandle handle);
+ base::ProcessHandle handle,
+ int unique_process_id);
virtual ~TaskManagerChildProcessResource();
// TaskManager::Resource methods:
@@ -253,6 +256,7 @@ class TaskManagerChildProcessResource : public TaskManager::Resource {
virtual string16 GetProfileName() const OVERRIDE;
virtual SkBitmap GetIcon() const OVERRIDE;
virtual base::ProcessHandle GetProcess() const OVERRIDE;
+ virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual bool SupportNetworkUsage() const OVERRIDE;
virtual void SetSupportNetworkUsage() OVERRIDE;
@@ -269,6 +273,7 @@ class TaskManagerChildProcessResource : public TaskManager::Resource {
string16 name_;
base::ProcessHandle handle_;
int pid_;
+ int unique_process_id_;
mutable string16 title_;
bool network_usage_support_;
@@ -347,6 +352,7 @@ class TaskManagerExtensionProcessResource : public TaskManager::Resource {
virtual string16 GetProfileName() const OVERRIDE;
virtual SkBitmap GetIcon() const OVERRIDE;
virtual base::ProcessHandle GetProcess() const OVERRIDE;
+ virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual bool CanInspect() const OVERRIDE;
virtual void Inspect() const OVERRIDE;
@@ -369,6 +375,7 @@ class TaskManagerExtensionProcessResource : public TaskManager::Resource {
// Cached data about the extension.
base::ProcessHandle process_handle_;
int pid_;
+ int unique_process_id_;
string16 title_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerExtensionProcessResource);
@@ -425,6 +432,7 @@ class TaskManagerNotificationResource : public TaskManager::Resource {
virtual string16 GetProfileName() const OVERRIDE;
virtual SkBitmap GetIcon() const OVERRIDE;
virtual base::ProcessHandle GetProcess() const OVERRIDE;
+ virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual bool CanInspect() const OVERRIDE;
virtual void Inspect() const OVERRIDE;
@@ -441,6 +449,7 @@ class TaskManagerNotificationResource : public TaskManager::Resource {
// Cached data about the balloon host.
base::ProcessHandle process_handle_;
int pid_;
+ int unique_process_id_;
string16 title_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerNotificationResource);
@@ -495,6 +504,7 @@ class TaskManagerBrowserProcessResource : public TaskManager::Resource {
virtual string16 GetProfileName() const OVERRIDE;
virtual SkBitmap GetIcon() const OVERRIDE;
virtual base::ProcessHandle GetProcess() const OVERRIDE;
+ virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual bool SupportNetworkUsage() const OVERRIDE;
diff --git a/chrome/browser/task_manager/task_manager_unittest.cc b/chrome/browser/task_manager/task_manager_unittest.cc
index 43a8ec6..c5e286d 100644
--- a/chrome/browser/task_manager/task_manager_unittest.cc
+++ b/chrome/browser/task_manager/task_manager_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -40,6 +40,11 @@ class TestResource : public TaskManager::Resource {
virtual base::ProcessHandle GetProcess() const {
return base::GetCurrentProcessHandle();
}
+ virtual int GetUniqueChildProcessId() const OVERRIDE {
+ // In reality the unique child process ID is not the actual process ID,
+ // but for testing purposes it shouldn't make difference.
+ return static_cast<int>(base::GetCurrentProcId());
+ }
virtual Type GetType() const { return RENDERER; }
virtual bool SupportNetworkUsage() const { return false; }
virtual void SetSupportNetworkUsage() { NOTREACHED(); }
diff --git a/chrome/browser/task_manager/task_manager_worker_resource_provider.cc b/chrome/browser/task_manager/task_manager_worker_resource_provider.cc
index 2d7eab4..1102174 100644
--- a/chrome/browser/task_manager/task_manager_worker_resource_provider.cc
+++ b/chrome/browser/task_manager/task_manager_worker_resource_provider.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -52,6 +52,7 @@ class TaskManagerSharedWorkerResource : public TaskManager::Resource {
virtual string16 GetProfileName() const OVERRIDE;
virtual SkBitmap GetIcon() const OVERRIDE;
virtual base::ProcessHandle GetProcess() const OVERRIDE;
+ virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual bool CanInspect() const OVERRIDE;
virtual void Inspect() const OVERRIDE;
@@ -119,6 +120,10 @@ base::ProcessHandle TaskManagerSharedWorkerResource::GetProcess() const {
return handle_;
}
+int TaskManagerSharedWorkerResource::GetUniqueChildProcessId() const {
+ return process_id_;
+}
+
TaskManager::Resource::Type TaskManagerSharedWorkerResource::GetType() const {
return WORKER;
}