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

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

Issue 8764021: Make TaskManager not use ChildProcessInfo. After this change, I will make BrowserChildProcessHost... (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 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 return; 739 return;
740 } 740 }
741 } 741 }
742 742
743 //////////////////////////////////////////////////////////////////////////////// 743 ////////////////////////////////////////////////////////////////////////////////
744 // TaskManagerChildProcessResource class 744 // TaskManagerChildProcessResource class
745 //////////////////////////////////////////////////////////////////////////////// 745 ////////////////////////////////////////////////////////////////////////////////
746 SkBitmap* TaskManagerChildProcessResource::default_icon_ = NULL; 746 SkBitmap* TaskManagerChildProcessResource::default_icon_ = NULL;
747 747
748 TaskManagerChildProcessResource::TaskManagerChildProcessResource( 748 TaskManagerChildProcessResource::TaskManagerChildProcessResource(
749 const ChildProcessInfo& child_proc) 749 content::ProcessType type,
750 : child_process_(child_proc), 750 const string16& name,
751 title_(), 751 base::ProcessHandle handle)
752 : type_(type),
753 name_(name),
754 handle_(handle),
752 network_usage_support_(false) { 755 network_usage_support_(false) {
753 // We cache the process id because it's not cheap to calculate, and it won't 756 // We cache the process id because it's not cheap to calculate, and it won't
754 // be available when we get the plugin disconnected notification. 757 // be available when we get the plugin disconnected notification.
755 pid_ = child_proc.pid(); 758 pid_ = base::GetProcId(handle);
756 if (!default_icon_) { 759 if (!default_icon_) {
757 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 760 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
758 default_icon_ = rb.GetBitmapNamed(IDR_PLUGIN); 761 default_icon_ = rb.GetBitmapNamed(IDR_PLUGIN);
759 // TODO(jabdelmalek): use different icon for web workers. 762 // TODO(jabdelmalek): use different icon for web workers.
760 } 763 }
761 } 764 }
762 765
763 TaskManagerChildProcessResource::~TaskManagerChildProcessResource() { 766 TaskManagerChildProcessResource::~TaskManagerChildProcessResource() {
764 } 767 }
765 768
766 // TaskManagerResource methods: 769 // TaskManagerResource methods:
767 string16 TaskManagerChildProcessResource::GetTitle() const { 770 string16 TaskManagerChildProcessResource::GetTitle() const {
768 if (title_.empty()) 771 if (title_.empty())
769 title_ = GetLocalizedTitle(); 772 title_ = GetLocalizedTitle();
770 773
771 return title_; 774 return title_;
772 } 775 }
773 776
774 string16 TaskManagerChildProcessResource::GetProfileName() const { 777 string16 TaskManagerChildProcessResource::GetProfileName() const {
775 return string16(); 778 return string16();
776 } 779 }
777 780
778 SkBitmap TaskManagerChildProcessResource::GetIcon() const { 781 SkBitmap TaskManagerChildProcessResource::GetIcon() const {
779 return *default_icon_; 782 return *default_icon_;
780 } 783 }
781 784
782 base::ProcessHandle TaskManagerChildProcessResource::GetProcess() const { 785 base::ProcessHandle TaskManagerChildProcessResource::GetProcess() const {
783 return child_process_.handle(); 786 return handle_;
784 } 787 }
785 788
786 TaskManager::Resource::Type TaskManagerChildProcessResource::GetType() const { 789 TaskManager::Resource::Type TaskManagerChildProcessResource::GetType() const {
787 // Translate types to TaskManager::ResourceType, since ChildProcessInfo's type 790 // Translate types to TaskManager::ResourceType, since ChildProcessInfo's type
788 // is not available for all TaskManager resources. 791 // is not available for all TaskManager resources.
789 switch (child_process_.type()) { 792 switch (type_) {
790 case content::PROCESS_TYPE_PLUGIN: 793 case content::PROCESS_TYPE_PLUGIN:
791 case content::PROCESS_TYPE_PPAPI_PLUGIN: 794 case content::PROCESS_TYPE_PPAPI_PLUGIN:
792 case content::PROCESS_TYPE_PPAPI_BROKER: 795 case content::PROCESS_TYPE_PPAPI_BROKER:
793 return TaskManager::Resource::PLUGIN; 796 return TaskManager::Resource::PLUGIN;
794 case content::PROCESS_TYPE_NACL_LOADER: 797 case content::PROCESS_TYPE_NACL_LOADER:
795 case content::PROCESS_TYPE_NACL_BROKER: 798 case content::PROCESS_TYPE_NACL_BROKER:
796 return TaskManager::Resource::NACL; 799 return TaskManager::Resource::NACL;
797 case content::PROCESS_TYPE_UTILITY: 800 case content::PROCESS_TYPE_UTILITY:
798 return TaskManager::Resource::UTILITY; 801 return TaskManager::Resource::UTILITY;
799 case content::PROCESS_TYPE_PROFILE_IMPORT: 802 case content::PROCESS_TYPE_PROFILE_IMPORT:
(...skipping 11 matching lines...) Expand all
811 814
812 bool TaskManagerChildProcessResource::SupportNetworkUsage() const { 815 bool TaskManagerChildProcessResource::SupportNetworkUsage() const {
813 return network_usage_support_; 816 return network_usage_support_;
814 } 817 }
815 818
816 void TaskManagerChildProcessResource::SetSupportNetworkUsage() { 819 void TaskManagerChildProcessResource::SetSupportNetworkUsage() {
817 network_usage_support_ = true; 820 network_usage_support_ = true;
818 } 821 }
819 822
820 string16 TaskManagerChildProcessResource::GetLocalizedTitle() const { 823 string16 TaskManagerChildProcessResource::GetLocalizedTitle() const {
821 string16 title = child_process_.name(); 824 string16 title = name_;
822 if (title.empty()) { 825 if (title.empty()) {
823 switch (child_process_.type()) { 826 switch (type_) {
824 case content::PROCESS_TYPE_PLUGIN: 827 case content::PROCESS_TYPE_PLUGIN:
825 case content::PROCESS_TYPE_PPAPI_PLUGIN: 828 case content::PROCESS_TYPE_PPAPI_PLUGIN:
826 case content::PROCESS_TYPE_PPAPI_BROKER: 829 case content::PROCESS_TYPE_PPAPI_BROKER:
827 title = l10n_util::GetStringUTF16(IDS_TASK_MANAGER_UNKNOWN_PLUGIN_NAME); 830 title = l10n_util::GetStringUTF16(IDS_TASK_MANAGER_UNKNOWN_PLUGIN_NAME);
828 break; 831 break;
829 default: 832 default:
830 // Nothing to do for non-plugin processes. 833 // Nothing to do for non-plugin processes.
831 break; 834 break;
832 } 835 }
833 } 836 }
834 837
835 // Explicitly mark name as LTR if there is no strong RTL character, 838 // Explicitly mark name as LTR if there is no strong RTL character,
836 // to avoid the wrong concatenation result similar to "!Yahoo Mail: the 839 // to avoid the wrong concatenation result similar to "!Yahoo Mail: the
837 // best web-based Email: NIGULP", in which "NIGULP" stands for the Hebrew 840 // best web-based Email: NIGULP", in which "NIGULP" stands for the Hebrew
838 // or Arabic word for "plugin". 841 // or Arabic word for "plugin".
839 base::i18n::AdjustStringForLocaleDirection(&title); 842 base::i18n::AdjustStringForLocaleDirection(&title);
840 843
841 switch (child_process_.type()) { 844 switch (type_) {
842 case content::PROCESS_TYPE_UTILITY: 845 case content::PROCESS_TYPE_UTILITY:
843 return l10n_util::GetStringUTF16(IDS_TASK_MANAGER_UTILITY_PREFIX); 846 return l10n_util::GetStringUTF16(IDS_TASK_MANAGER_UTILITY_PREFIX);
844 847
845 case content::PROCESS_TYPE_PROFILE_IMPORT: 848 case content::PROCESS_TYPE_PROFILE_IMPORT:
846 return l10n_util::GetStringUTF16(IDS_TASK_MANAGER_UTILITY_PREFIX); 849 return l10n_util::GetStringUTF16(IDS_TASK_MANAGER_UTILITY_PREFIX);
847 850
848 case content::PROCESS_TYPE_GPU: 851 case content::PROCESS_TYPE_GPU:
849 return l10n_util::GetStringUTF16(IDS_TASK_MANAGER_GPU_PREFIX); 852 return l10n_util::GetStringUTF16(IDS_TASK_MANAGER_GPU_PREFIX);
850 853
851 case content::PROCESS_TYPE_NACL_BROKER: 854 case content::PROCESS_TYPE_NACL_BROKER:
852 return l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NACL_BROKER_PREFIX); 855 return l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NACL_BROKER_PREFIX);
853 856
854 case content::PROCESS_TYPE_PLUGIN: 857 case content::PROCESS_TYPE_PLUGIN:
855 case content::PROCESS_TYPE_PPAPI_PLUGIN: 858 case content::PROCESS_TYPE_PPAPI_PLUGIN:
856 return l10n_util::GetStringFUTF16( 859 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_PLUGIN_PREFIX, title);
857 IDS_TASK_MANAGER_PLUGIN_PREFIX, title, child_process_.version());
858 860
859 case content::PROCESS_TYPE_PPAPI_BROKER: 861 case content::PROCESS_TYPE_PPAPI_BROKER:
860 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_PLUGIN_BROKER_PREFIX, 862 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_PLUGIN_BROKER_PREFIX,
861 title, child_process_.version()); 863 title);
862 864
863 case content::PROCESS_TYPE_NACL_LOADER: 865 case content::PROCESS_TYPE_NACL_LOADER:
864 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_NACL_PREFIX, title); 866 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_NACL_PREFIX, title);
865 867
866 // These types don't need display names or get them from elsewhere. 868 // These types don't need display names or get them from elsewhere.
867 case content::PROCESS_TYPE_BROWSER: 869 case content::PROCESS_TYPE_BROWSER:
868 case content::PROCESS_TYPE_RENDERER: 870 case content::PROCESS_TYPE_RENDERER:
869 case content::PROCESS_TYPE_ZYGOTE: 871 case content::PROCESS_TYPE_ZYGOTE:
870 case content::PROCESS_TYPE_SANDBOX_HELPER: 872 case content::PROCESS_TYPE_SANDBOX_HELPER:
871 case content::PROCESS_TYPE_MAX: 873 case content::PROCESS_TYPE_MAX:
(...skipping 10 matching lines...) Expand all
882 884
883 return title; 885 return title;
884 } 886 }
885 887
886 //////////////////////////////////////////////////////////////////////////////// 888 ////////////////////////////////////////////////////////////////////////////////
887 // TaskManagerChildProcessResourceProvider class 889 // TaskManagerChildProcessResourceProvider class
888 //////////////////////////////////////////////////////////////////////////////// 890 ////////////////////////////////////////////////////////////////////////////////
889 891
890 TaskManagerChildProcessResourceProvider:: 892 TaskManagerChildProcessResourceProvider::
891 TaskManagerChildProcessResourceProvider(TaskManager* task_manager) 893 TaskManagerChildProcessResourceProvider(TaskManager* task_manager)
892 : updating_(false), 894 : task_manager_(task_manager),
893 task_manager_(task_manager) { 895 updating_(false) {
894 } 896 }
895 897
896 TaskManagerChildProcessResourceProvider:: 898 TaskManagerChildProcessResourceProvider::
897 ~TaskManagerChildProcessResourceProvider() { 899 ~TaskManagerChildProcessResourceProvider() {
898 } 900 }
899 901
900 TaskManager::Resource* TaskManagerChildProcessResourceProvider::GetResource( 902 TaskManager::Resource* TaskManagerChildProcessResourceProvider::GetResource(
901 int origin_pid, 903 int origin_pid,
902 int render_process_host_id, 904 int render_process_host_id,
903 int routing_id) { 905 int routing_id) {
904 std::map<int, TaskManagerChildProcessResource*>::iterator iter = 906 PidResourceMap::iterator iter = pid_to_resources_.find(origin_pid);
905 pid_to_resources_.find(origin_pid);
906 if (iter != pid_to_resources_.end()) 907 if (iter != pid_to_resources_.end())
907 return iter->second; 908 return iter->second;
908 else 909 else
909 return NULL; 910 return NULL;
910 } 911 }
911 912
912 void TaskManagerChildProcessResourceProvider::StartUpdating() { 913 void TaskManagerChildProcessResourceProvider::StartUpdating() {
913 DCHECK(!updating_); 914 DCHECK(!updating_);
914 updating_ = true; 915 updating_ = true;
915 916
(...skipping 22 matching lines...) Expand all
938 registrar_.Remove( 939 registrar_.Remove(
939 this, 940 this,
940 content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED, 941 content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED,
941 content::NotificationService::AllBrowserContextsAndSources()); 942 content::NotificationService::AllBrowserContextsAndSources());
942 943
943 // Delete all the resources. 944 // Delete all the resources.
944 STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end()); 945 STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end());
945 946
946 resources_.clear(); 947 resources_.clear();
947 pid_to_resources_.clear(); 948 pid_to_resources_.clear();
948 existing_child_process_info_.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);
956 ChildProcessData data;
957 data.type = child_details->type();
958 data.name = child_details->name();
959 data.handle = child_details->handle();
955 switch (type) { 960 switch (type) {
956 case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED: 961 case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED:
957 Add(*content::Details<ChildProcessInfo>(details).ptr()); 962 Add(data);
958 break; 963 break;
959 case content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED: 964 case content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED:
960 Remove(*content::Details<ChildProcessInfo>(details).ptr()); 965 Remove(data);
961 break; 966 break;
962 default: 967 default:
963 NOTREACHED() << "Unexpected notification."; 968 NOTREACHED() << "Unexpected notification.";
964 return; 969 return;
965 } 970 }
966 } 971 }
967 972
968 void TaskManagerChildProcessResourceProvider::Add( 973 void TaskManagerChildProcessResourceProvider::Add(
969 const ChildProcessInfo& child_process_info) { 974 const ChildProcessData& child_process_data) {
970 if (!updating_) 975 if (!updating_)
971 return; 976 return;
972 // Workers are handled by TaskManagerWorkerResourceProvider. 977 // Workers are handled by TaskManagerWorkerResourceProvider.
973 if (child_process_info.type() == content::PROCESS_TYPE_WORKER) 978 if (child_process_data.type == content::PROCESS_TYPE_WORKER)
974 return; 979 return;
975 std::map<ChildProcessInfo, TaskManagerChildProcessResource*>:: 980 if (resources_.count(child_process_data.handle)) {
976 const_iterator iter = resources_.find(child_process_info);
977 if (iter != resources_.end()) {
978 // The case may happen that we have added a child_process_info as part of 981 // The case may happen that we have added a child_process_info as part of
979 // the iteration performed during StartUpdating() call but the notification 982 // the iteration performed during StartUpdating() call but the notification
980 // that it has connected was not fired yet. So when the notification 983 // that it has connected was not fired yet. So when the notification
981 // happens, we already know about this plugin and just ignore it. 984 // happens, we already know about this plugin and just ignore it.
982 return; 985 return;
983 } 986 }
984 AddToTaskManager(child_process_info); 987 AddToTaskManager(child_process_data);
985 } 988 }
986 989
987 void TaskManagerChildProcessResourceProvider::Remove( 990 void TaskManagerChildProcessResourceProvider::Remove(
988 const ChildProcessInfo& child_process_info) { 991 const ChildProcessData& child_process_data) {
989 if (!updating_) 992 if (!updating_)
990 return; 993 return;
991 if (child_process_info.type() == content::PROCESS_TYPE_WORKER) 994 if (child_process_data.type == content::PROCESS_TYPE_WORKER)
992 return; 995 return;
993 std::map<ChildProcessInfo, TaskManagerChildProcessResource*> 996 ChildProcessMap::iterator iter = resources_.find(child_process_data.handle);
994 ::iterator iter = resources_.find(child_process_info);
995 if (iter == resources_.end()) { 997 if (iter == resources_.end()) {
996 // ChildProcessInfo disconnection notifications are asynchronous, so we 998 // ChildProcessInfo disconnection notifications are asynchronous, so we
997 // might be notified for a plugin we don't know anything about (if it was 999 // might be notified for a plugin we don't know anything about (if it was
998 // closed before the task manager was shown and destroyed after that). 1000 // closed before the task manager was shown and destroyed after that).
999 return; 1001 return;
1000 } 1002 }
1001 // Remove the resource from the Task Manager. 1003 // Remove the resource from the Task Manager.
1002 TaskManagerChildProcessResource* resource = iter->second; 1004 TaskManagerChildProcessResource* resource = iter->second;
1003 task_manager_->RemoveResource(resource); 1005 task_manager_->RemoveResource(resource);
1004 // Remove it from the provider. 1006 // Remove it from the provider.
1005 resources_.erase(iter); 1007 resources_.erase(iter);
1006 // Remove it from our pid map. 1008 // Remove it from our pid map.
1007 std::map<int, TaskManagerChildProcessResource*>::iterator pid_iter = 1009 PidResourceMap::iterator pid_iter =
1008 pid_to_resources_.find(resource->process_id()); 1010 pid_to_resources_.find(resource->process_id());
1009 DCHECK(pid_iter != pid_to_resources_.end()); 1011 DCHECK(pid_iter != pid_to_resources_.end());
1010 if (pid_iter != pid_to_resources_.end()) 1012 if (pid_iter != pid_to_resources_.end())
1011 pid_to_resources_.erase(pid_iter); 1013 pid_to_resources_.erase(pid_iter);
1012 1014
1013 // Finally, delete the resource. 1015 // Finally, delete the resource.
1014 delete resource; 1016 delete resource;
1015 } 1017 }
1016 1018
1017 void TaskManagerChildProcessResourceProvider::AddToTaskManager( 1019 void TaskManagerChildProcessResourceProvider::AddToTaskManager(
1018 const ChildProcessInfo& child_process_info) { 1020 const ChildProcessData& child_process_data) {
1019 TaskManagerChildProcessResource* resource = 1021 TaskManagerChildProcessResource* resource =
1020 new TaskManagerChildProcessResource(child_process_info); 1022 new TaskManagerChildProcessResource(
1021 resources_[child_process_info] = resource; 1023 child_process_data.type,
1024 child_process_data.name,
1025 child_process_data.handle);
1026 resources_[child_process_data.handle] = resource;
1022 pid_to_resources_[resource->process_id()] = resource; 1027 pid_to_resources_[resource->process_id()] = resource;
1023 task_manager_->AddResource(resource); 1028 task_manager_->AddResource(resource);
1024 } 1029 }
1025 1030
1026 // The ChildProcessInfo::Iterator has to be used from the IO thread. 1031 // The ChildProcessInfo::Iterator has to be used from the IO thread.
1027 void TaskManagerChildProcessResourceProvider::RetrieveChildProcessInfo() { 1032 void TaskManagerChildProcessResourceProvider::RetrieveChildProcessInfo() {
1033 std::vector<ChildProcessData> child_processes;
1028 for (BrowserChildProcessHost::Iterator iter; !iter.Done(); ++iter) { 1034 for (BrowserChildProcessHost::Iterator iter; !iter.Done(); ++iter) {
1029 // Only add processes which are already started, since we need their handle. 1035 // Only add processes which are already started, since we need their handle.
1030 if ((*iter)->handle() != base::kNullProcessHandle) 1036 if ((*iter)->handle() == base::kNullProcessHandle)
1031 existing_child_process_info_.push_back(**iter); 1037 continue;
1038 ChildProcessData data;
1039 data.type = (*iter)->type();
1040 data.name = (*iter)->name();
1041 data.handle = (*iter)->handle();
1042 child_processes.push_back(data);
1032 } 1043 }
1033 // Now notify the UI thread that we have retrieved information about child 1044 // Now notify the UI thread that we have retrieved information about child
1034 // processes. 1045 // processes.
1035 BrowserThread::PostTask( 1046 BrowserThread::PostTask(
1036 BrowserThread::UI, FROM_HERE, 1047 BrowserThread::UI, FROM_HERE,
1037 base::Bind( 1048 base::Bind(
1038 &TaskManagerChildProcessResourceProvider::ChildProcessInfoRetreived, 1049 &TaskManagerChildProcessResourceProvider::ChildProcessInfoRetreived,
1039 this)); 1050 this, child_processes));
1040 } 1051 }
1041 1052
1042 // This is called on the UI thread. 1053 // This is called on the UI thread.
1043 void TaskManagerChildProcessResourceProvider::ChildProcessInfoRetreived() { 1054 void TaskManagerChildProcessResourceProvider::ChildProcessInfoRetreived(
1044 std::vector<ChildProcessInfo>::const_iterator iter; 1055 const std::vector<ChildProcessData>& child_processes) {
1045 for (iter = existing_child_process_info_.begin(); 1056 for (size_t i = 0; i < child_processes.size(); ++i)
1046 iter != existing_child_process_info_.end(); ++iter) { 1057 Add(child_processes[i]);
1047 Add(*iter);
1048 }
1049 existing_child_process_info_.clear();
1050 } 1058 }
1051 1059
1052 //////////////////////////////////////////////////////////////////////////////// 1060 ////////////////////////////////////////////////////////////////////////////////
1053 // TaskManagerExtensionProcessResource class 1061 // TaskManagerExtensionProcessResource class
1054 //////////////////////////////////////////////////////////////////////////////// 1062 ////////////////////////////////////////////////////////////////////////////////
1055 1063
1056 SkBitmap* TaskManagerExtensionProcessResource::default_icon_ = NULL; 1064 SkBitmap* TaskManagerExtensionProcessResource::default_icon_ = NULL;
1057 1065
1058 TaskManagerExtensionProcessResource::TaskManagerExtensionProcessResource( 1066 TaskManagerExtensionProcessResource::TaskManagerExtensionProcessResource(
1059 ExtensionHost* extension_host) 1067 ExtensionHost* extension_host)
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
1392 1400
1393 return &resource_; 1401 return &resource_;
1394 } 1402 }
1395 1403
1396 void TaskManagerBrowserProcessResourceProvider::StartUpdating() { 1404 void TaskManagerBrowserProcessResourceProvider::StartUpdating() {
1397 task_manager_->AddResource(&resource_); 1405 task_manager_->AddResource(&resource_);
1398 } 1406 }
1399 1407
1400 void TaskManagerBrowserProcessResourceProvider::StopUpdating() { 1408 void TaskManagerBrowserProcessResourceProvider::StopUpdating() {
1401 } 1409 }
OLDNEW
« no previous file with comments | « chrome/browser/task_manager/task_manager_resource_providers.h ('k') | content/common/child_process_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698