diff options
author | nasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-05 17:18:22 +0000 |
---|---|---|
committer | nasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-05 17:18:22 +0000 |
commit | 6bfb6e70e57ee6f8865368fbd522e6bdc87da61b (patch) | |
tree | 24df76e9ffe45500e87da94e5accca0099bf8e89 /chrome/browser/task_manager | |
parent | f06f402eef58d0411889d7cbfba98c1a0135c4b9 (diff) | |
download | chromium_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')
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; } |