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

Side by Side Diff: chrome/browser/task_manager/task_manager_resource_providers.cc

Issue 8770027: Get rid of the ChildProcessInfo class. It was carrying unnecessary data, and the fact that some p... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/task_manager/task_manager_resource_providers.h" 5 #include "chrome/browser/task_manager/task_manager_resource_providers.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 780
781 SkBitmap TaskManagerChildProcessResource::GetIcon() const { 781 SkBitmap TaskManagerChildProcessResource::GetIcon() const {
782 return *default_icon_; 782 return *default_icon_;
783 } 783 }
784 784
785 base::ProcessHandle TaskManagerChildProcessResource::GetProcess() const { 785 base::ProcessHandle TaskManagerChildProcessResource::GetProcess() const {
786 return handle_; 786 return handle_;
787 } 787 }
788 788
789 TaskManager::Resource::Type TaskManagerChildProcessResource::GetType() const { 789 TaskManager::Resource::Type TaskManagerChildProcessResource::GetType() const {
790 // Translate types to TaskManager::ResourceType, since ChildProcessInfo's type 790 // Translate types to TaskManager::ResourceType, since ChildProcessData's type
791 // is not available for all TaskManager resources. 791 // is not available for all TaskManager resources.
792 switch (type_) { 792 switch (type_) {
793 case content::PROCESS_TYPE_PLUGIN: 793 case content::PROCESS_TYPE_PLUGIN:
794 case content::PROCESS_TYPE_PPAPI_PLUGIN: 794 case content::PROCESS_TYPE_PPAPI_PLUGIN:
795 case content::PROCESS_TYPE_PPAPI_BROKER: 795 case content::PROCESS_TYPE_PPAPI_BROKER:
796 return TaskManager::Resource::PLUGIN; 796 return TaskManager::Resource::PLUGIN;
797 case content::PROCESS_TYPE_NACL_LOADER: 797 case content::PROCESS_TYPE_NACL_LOADER:
798 case content::PROCESS_TYPE_NACL_BROKER: 798 case content::PROCESS_TYPE_NACL_BROKER:
799 return TaskManager::Resource::NACL; 799 return TaskManager::Resource::NACL;
800 case content::PROCESS_TYPE_UTILITY: 800 case content::PROCESS_TYPE_UTILITY:
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 // Register for notifications to get new child processes. 917 // Register for notifications to get new child processes.
918 registrar_.Add(this, content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED, 918 registrar_.Add(this, content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED,
919 content::NotificationService::AllBrowserContextsAndSources()); 919 content::NotificationService::AllBrowserContextsAndSources());
920 registrar_.Add(this, content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED, 920 registrar_.Add(this, content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED,
921 content::NotificationService::AllBrowserContextsAndSources()); 921 content::NotificationService::AllBrowserContextsAndSources());
922 922
923 // Get the existing child processes. 923 // Get the existing child processes.
924 BrowserThread::PostTask( 924 BrowserThread::PostTask(
925 BrowserThread::IO, FROM_HERE, 925 BrowserThread::IO, FROM_HERE,
926 base::Bind( 926 base::Bind(
927 &TaskManagerChildProcessResourceProvider::RetrieveChildProcessInfo, 927 &TaskManagerChildProcessResourceProvider::RetrieveChildProcessData,
928 this)); 928 this));
929 } 929 }
930 930
931 void TaskManagerChildProcessResourceProvider::StopUpdating() { 931 void TaskManagerChildProcessResourceProvider::StopUpdating() {
932 DCHECK(updating_); 932 DCHECK(updating_);
933 updating_ = false; 933 updating_ = false;
934 934
935 // Unregister for notifications to get new plugin processes. 935 // Unregister for notifications to get new plugin processes.
936 registrar_.Remove( 936 registrar_.Remove(
937 this, content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED, 937 this, content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED,
938 content::NotificationService::AllBrowserContextsAndSources()); 938 content::NotificationService::AllBrowserContextsAndSources());
939 registrar_.Remove( 939 registrar_.Remove(
940 this, 940 this,
941 content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED, 941 content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED,
942 content::NotificationService::AllBrowserContextsAndSources()); 942 content::NotificationService::AllBrowserContextsAndSources());
943 943
944 // Delete all the resources. 944 // Delete all the resources.
945 STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end()); 945 STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end());
946 946
947 resources_.clear(); 947 resources_.clear();
948 pid_to_resources_.clear(); 948 pid_to_resources_.clear();
949 } 949 }
950 950
951 void TaskManagerChildProcessResourceProvider::Observe( 951 void TaskManagerChildProcessResourceProvider::Observe(
952 int type, 952 int type,
953 const content::NotificationSource& source, 953 const content::NotificationSource& source,
954 const content::NotificationDetails& details) { 954 const content::NotificationDetails& details) {
955 content::Details<ChildProcessInfo> child_details(details); 955 content::ChildProcessData data =
956 ChildProcessData data; 956 *content::Details<content::ChildProcessData>(details).ptr();
957 data.type = child_details->type();
958 data.name = child_details->name();
959 data.handle = child_details->handle();
960 switch (type) { 957 switch (type) {
961 case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED: 958 case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED:
962 Add(data); 959 Add(data);
963 break; 960 break;
964 case content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED: 961 case content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED:
965 Remove(data); 962 Remove(data);
966 break; 963 break;
967 default: 964 default:
968 NOTREACHED() << "Unexpected notification."; 965 NOTREACHED() << "Unexpected notification.";
969 return; 966 return;
970 } 967 }
971 } 968 }
972 969
973 void TaskManagerChildProcessResourceProvider::Add( 970 void TaskManagerChildProcessResourceProvider::Add(
974 const ChildProcessData& child_process_data) { 971 const content::ChildProcessData& child_process_data) {
975 if (!updating_) 972 if (!updating_)
976 return; 973 return;
977 // Workers are handled by TaskManagerWorkerResourceProvider. 974 // Workers are handled by TaskManagerWorkerResourceProvider.
978 if (child_process_data.type == content::PROCESS_TYPE_WORKER) 975 if (child_process_data.type == content::PROCESS_TYPE_WORKER)
979 return; 976 return;
980 if (resources_.count(child_process_data.handle)) { 977 if (resources_.count(child_process_data.handle)) {
981 // The case may happen that we have added a child_process_info as part of 978 // The case may happen that we have added a child_process_info as part of
982 // the iteration performed during StartUpdating() call but the notification 979 // the iteration performed during StartUpdating() call but the notification
983 // that it has connected was not fired yet. So when the notification 980 // that it has connected was not fired yet. So when the notification
984 // happens, we already know about this plugin and just ignore it. 981 // happens, we already know about this plugin and just ignore it.
985 return; 982 return;
986 } 983 }
987 AddToTaskManager(child_process_data); 984 AddToTaskManager(child_process_data);
988 } 985 }
989 986
990 void TaskManagerChildProcessResourceProvider::Remove( 987 void TaskManagerChildProcessResourceProvider::Remove(
991 const ChildProcessData& child_process_data) { 988 const content::ChildProcessData& child_process_data) {
992 if (!updating_) 989 if (!updating_)
993 return; 990 return;
994 if (child_process_data.type == content::PROCESS_TYPE_WORKER) 991 if (child_process_data.type == content::PROCESS_TYPE_WORKER)
995 return; 992 return;
996 ChildProcessMap::iterator iter = resources_.find(child_process_data.handle); 993 ChildProcessMap::iterator iter = resources_.find(child_process_data.handle);
997 if (iter == resources_.end()) { 994 if (iter == resources_.end()) {
998 // ChildProcessInfo disconnection notifications are asynchronous, so we 995 // ChildProcessData disconnection notifications are asynchronous, so we
999 // might be notified for a plugin we don't know anything about (if it was 996 // might be notified for a plugin we don't know anything about (if it was
1000 // closed before the task manager was shown and destroyed after that). 997 // closed before the task manager was shown and destroyed after that).
1001 return; 998 return;
1002 } 999 }
1003 // Remove the resource from the Task Manager. 1000 // Remove the resource from the Task Manager.
1004 TaskManagerChildProcessResource* resource = iter->second; 1001 TaskManagerChildProcessResource* resource = iter->second;
1005 task_manager_->RemoveResource(resource); 1002 task_manager_->RemoveResource(resource);
1006 // Remove it from the provider. 1003 // Remove it from the provider.
1007 resources_.erase(iter); 1004 resources_.erase(iter);
1008 // Remove it from our pid map. 1005 // Remove it from our pid map.
1009 PidResourceMap::iterator pid_iter = 1006 PidResourceMap::iterator pid_iter =
1010 pid_to_resources_.find(resource->process_id()); 1007 pid_to_resources_.find(resource->process_id());
1011 DCHECK(pid_iter != pid_to_resources_.end()); 1008 DCHECK(pid_iter != pid_to_resources_.end());
1012 if (pid_iter != pid_to_resources_.end()) 1009 if (pid_iter != pid_to_resources_.end())
1013 pid_to_resources_.erase(pid_iter); 1010 pid_to_resources_.erase(pid_iter);
1014 1011
1015 // Finally, delete the resource. 1012 // Finally, delete the resource.
1016 delete resource; 1013 delete resource;
1017 } 1014 }
1018 1015
1019 void TaskManagerChildProcessResourceProvider::AddToTaskManager( 1016 void TaskManagerChildProcessResourceProvider::AddToTaskManager(
1020 const ChildProcessData& child_process_data) { 1017 const content::ChildProcessData& child_process_data) {
1021 TaskManagerChildProcessResource* resource = 1018 TaskManagerChildProcessResource* resource =
1022 new TaskManagerChildProcessResource( 1019 new TaskManagerChildProcessResource(
1023 child_process_data.type, 1020 child_process_data.type,
1024 child_process_data.name, 1021 child_process_data.name,
1025 child_process_data.handle); 1022 child_process_data.handle);
1026 resources_[child_process_data.handle] = resource; 1023 resources_[child_process_data.handle] = resource;
1027 pid_to_resources_[resource->process_id()] = resource; 1024 pid_to_resources_[resource->process_id()] = resource;
1028 task_manager_->AddResource(resource); 1025 task_manager_->AddResource(resource);
1029 } 1026 }
1030 1027
1031 // The ChildProcessInfo::Iterator has to be used from the IO thread. 1028 // The ChildProcessData::Iterator has to be used from the IO thread.
1032 void TaskManagerChildProcessResourceProvider::RetrieveChildProcessInfo() { 1029 void TaskManagerChildProcessResourceProvider::RetrieveChildProcessData() {
1033 std::vector<ChildProcessData> child_processes; 1030 std::vector<content::ChildProcessData> child_processes;
1034 for (BrowserChildProcessHost::Iterator iter; !iter.Done(); ++iter) { 1031 for (BrowserChildProcessHost::Iterator iter; !iter.Done(); ++iter) {
1035 // Only add processes which are already started, since we need their handle. 1032 // Only add processes which are already started, since we need their handle.
1036 if ((*iter)->handle() == base::kNullProcessHandle) 1033 if ((*iter)->handle() == base::kNullProcessHandle)
1037 continue; 1034 continue;
1038 ChildProcessData data; 1035 content::ChildProcessData data;
1039 data.type = (*iter)->type(); 1036 data.type = (*iter)->type();
1040 data.name = (*iter)->name(); 1037 data.name = (*iter)->name();
1041 data.handle = (*iter)->handle(); 1038 data.handle = (*iter)->handle();
1042 child_processes.push_back(data); 1039 child_processes.push_back(data);
1043 } 1040 }
1044 // Now notify the UI thread that we have retrieved information about child 1041 // Now notify the UI thread that we have retrieved information about child
1045 // processes. 1042 // processes.
1046 BrowserThread::PostTask( 1043 BrowserThread::PostTask(
1047 BrowserThread::UI, FROM_HERE, 1044 BrowserThread::UI, FROM_HERE,
1048 base::Bind( 1045 base::Bind(
1049 &TaskManagerChildProcessResourceProvider::ChildProcessInfoRetreived, 1046 &TaskManagerChildProcessResourceProvider::ChildProcessDataRetreived,
1050 this, child_processes)); 1047 this, child_processes));
1051 } 1048 }
1052 1049
1053 // This is called on the UI thread. 1050 // This is called on the UI thread.
1054 void TaskManagerChildProcessResourceProvider::ChildProcessInfoRetreived( 1051 void TaskManagerChildProcessResourceProvider::ChildProcessDataRetreived(
1055 const std::vector<ChildProcessData>& child_processes) { 1052 const std::vector<content::ChildProcessData>& child_processes) {
1056 for (size_t i = 0; i < child_processes.size(); ++i) 1053 for (size_t i = 0; i < child_processes.size(); ++i)
1057 Add(child_processes[i]); 1054 Add(child_processes[i]);
1058 } 1055 }
1059 1056
1060 //////////////////////////////////////////////////////////////////////////////// 1057 ////////////////////////////////////////////////////////////////////////////////
1061 // TaskManagerExtensionProcessResource class 1058 // TaskManagerExtensionProcessResource class
1062 //////////////////////////////////////////////////////////////////////////////// 1059 ////////////////////////////////////////////////////////////////////////////////
1063 1060
1064 SkBitmap* TaskManagerExtensionProcessResource::default_icon_ = NULL; 1061 SkBitmap* TaskManagerExtensionProcessResource::default_icon_ = NULL;
1065 1062
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 1397
1401 return &resource_; 1398 return &resource_;
1402 } 1399 }
1403 1400
1404 void TaskManagerBrowserProcessResourceProvider::StartUpdating() { 1401 void TaskManagerBrowserProcessResourceProvider::StartUpdating() {
1405 task_manager_->AddResource(&resource_); 1402 task_manager_->AddResource(&resource_);
1406 } 1403 }
1407 1404
1408 void TaskManagerBrowserProcessResourceProvider::StopUpdating() { 1405 void TaskManagerBrowserProcessResourceProvider::StopUpdating() {
1409 } 1406 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698