OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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.h" | 5 #include "chrome/browser/task_manager.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/i18n/number_formatting.h" | 10 #include "base/i18n/number_formatting.h" |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 l10n_util::WrapStringWithLTRFormatting(&net_byte); | 117 l10n_util::WrapStringWithLTRFormatting(&net_byte); |
118 return net_byte; | 118 return net_byte; |
119 } | 119 } |
120 | 120 |
121 std::wstring TaskManagerModel::GetResourceCPUUsage(int index) const { | 121 std::wstring TaskManagerModel::GetResourceCPUUsage(int index) const { |
122 DCHECK(index < ResourceCount()); | 122 DCHECK(index < ResourceCount()); |
123 return IntToWString(GetCPUUsage(resources_[index])); | 123 return IntToWString(GetCPUUsage(resources_[index])); |
124 } | 124 } |
125 | 125 |
126 std::wstring TaskManagerModel::GetResourcePrivateMemory(int index) const { | 126 std::wstring TaskManagerModel::GetResourcePrivateMemory(int index) const { |
127 DCHECK(index < ResourceCount()); | 127 size_t private_mem; |
128 // We report committed (working set + paged) private usage. This is NOT | 128 if (!GetPrivateMemory(index, &private_mem)) |
129 // going to match what Windows Task Manager shows (which is working set). | 129 return L"N/A"; |
130 MetricsMap::const_iterator iter = | 130 return GetMemCellText(private_mem); |
131 metrics_map_.find(resources_[index]->GetProcess()); | |
132 DCHECK(iter != metrics_map_.end()); | |
133 base::ProcessMetrics* process_metrics = iter->second; | |
134 return GetMemCellText(GetPrivateMemory(process_metrics)); | |
135 } | 131 } |
136 | 132 |
137 std::wstring TaskManagerModel::GetResourceSharedMemory(int index) const { | 133 std::wstring TaskManagerModel::GetResourceSharedMemory(int index) const { |
138 DCHECK(index < ResourceCount()); | 134 size_t shared_mem; |
139 MetricsMap::const_iterator iter = | 135 if (!GetSharedMemory(index, &shared_mem)) |
140 metrics_map_.find(resources_[index]->GetProcess()); | 136 return L"N/A"; |
141 DCHECK(iter != metrics_map_.end()); | 137 return GetMemCellText(shared_mem); |
142 base::ProcessMetrics* process_metrics = iter->second; | |
143 return GetMemCellText(GetSharedMemory(process_metrics)); | |
144 } | 138 } |
145 | 139 |
146 std::wstring TaskManagerModel::GetResourcePhysicalMemory(int index) const { | 140 std::wstring TaskManagerModel::GetResourcePhysicalMemory(int index) const { |
147 DCHECK(index < ResourceCount()); | 141 size_t phys_mem; |
148 MetricsMap::const_iterator iter = | 142 GetPhysicalMemory(index, &phys_mem); |
149 metrics_map_.find(resources_[index]->GetProcess()); | 143 return GetMemCellText(phys_mem); |
150 DCHECK(iter != metrics_map_.end()); | |
151 base::ProcessMetrics* process_metrics = iter->second; | |
152 return GetMemCellText(GetPhysicalMemory(process_metrics)); | |
153 } | 144 } |
154 | 145 |
155 std::wstring TaskManagerModel::GetResourceProcessId(int index) const { | 146 std::wstring TaskManagerModel::GetResourceProcessId(int index) const { |
156 DCHECK(index < ResourceCount()); | 147 DCHECK(index < ResourceCount()); |
157 return IntToWString(base::GetProcId(resources_[index]->GetProcess())); | 148 return IntToWString(base::GetProcId(resources_[index]->GetProcess())); |
158 } | 149 } |
159 | 150 |
160 std::wstring TaskManagerModel::GetResourceStatsValue(int index, int col_id) | 151 std::wstring TaskManagerModel::GetResourceStatsValue(int index, int col_id) |
161 const { | 152 const { |
162 DCHECK(index < ResourceCount()); | 153 DCHECK(index < ResourceCount()); |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 } | 264 } |
274 | 265 |
275 case IDS_TASK_MANAGER_NET_COLUMN: | 266 case IDS_TASK_MANAGER_NET_COLUMN: |
276 return ValueCompare<int64>(GetNetworkUsage(resources_[row1]), | 267 return ValueCompare<int64>(GetNetworkUsage(resources_[row1]), |
277 GetNetworkUsage(resources_[row2])); | 268 GetNetworkUsage(resources_[row2])); |
278 | 269 |
279 case IDS_TASK_MANAGER_CPU_COLUMN: | 270 case IDS_TASK_MANAGER_CPU_COLUMN: |
280 return ValueCompare<int>(GetCPUUsage(resources_[row1]), | 271 return ValueCompare<int>(GetCPUUsage(resources_[row1]), |
281 GetCPUUsage(resources_[row2])); | 272 GetCPUUsage(resources_[row2])); |
282 | 273 |
283 case IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN: | 274 case IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN: { |
284 case IDS_TASK_MANAGER_SHARED_MEM_COLUMN: | 275 size_t value1; |
| 276 size_t value2; |
| 277 if (!GetPrivateMemory(row1, &value1) || !GetPrivateMemory(row2, &value2)) |
| 278 return 0; |
| 279 return ValueCompare<size_t>(value1, value2); |
| 280 } |
| 281 |
| 282 case IDS_TASK_MANAGER_SHARED_MEM_COLUMN: { |
| 283 size_t value1; |
| 284 size_t value2; |
| 285 if (!GetSharedMemory(row1, &value1) || !GetSharedMemory(row2, &value2)) |
| 286 return 0; |
| 287 return ValueCompare<size_t>(value1, value2); |
| 288 } |
| 289 |
285 case IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN: { | 290 case IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN: { |
286 base::ProcessMetrics* pm1; | 291 size_t value1; |
287 base::ProcessMetrics* pm2; | 292 size_t value2; |
288 if (!GetProcessMetricsForRows(row1, row2, &pm1, &pm2)) | 293 if (!GetPhysicalMemory(row1, &value1) || |
| 294 !GetPhysicalMemory(row2, &value2)) |
289 return 0; | 295 return 0; |
290 if (col_id == IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN) { | 296 return ValueCompare<size_t>(value1, value2); |
291 return ValueCompare<size_t>(GetPrivateMemory(pm1), | |
292 GetPrivateMemory(pm2)); | |
293 } | |
294 if (col_id == IDS_TASK_MANAGER_SHARED_MEM_COLUMN) | |
295 return ValueCompare<size_t>(GetSharedMemory(pm1), GetSharedMemory(pm2)); | |
296 return ValueCompare<size_t>(GetPhysicalMemory(pm1), | |
297 GetPhysicalMemory(pm2)); | |
298 } | 297 } |
299 | 298 |
300 case IDS_TASK_MANAGER_PROCESS_ID_COLUMN: { | 299 case IDS_TASK_MANAGER_PROCESS_ID_COLUMN: { |
301 int proc1_id = base::GetProcId(resources_[row1]->GetProcess()); | 300 int proc1_id = base::GetProcId(resources_[row1]->GetProcess()); |
302 int proc2_id = base::GetProcId(resources_[row2]->GetProcess()); | 301 int proc2_id = base::GetProcId(resources_[row2]->GetProcess()); |
303 return ValueCompare<int>(proc1_id, proc2_id); | 302 return ValueCompare<int>(proc1_id, proc2_id); |
304 } | 303 } |
305 | 304 |
306 case IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN: | 305 case IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN: |
307 case IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN: | 306 case IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN: |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 } | 350 } |
352 | 351 |
353 int TaskManagerModel::GetCPUUsage(TaskManager::Resource* resource) const { | 352 int TaskManagerModel::GetCPUUsage(TaskManager::Resource* resource) const { |
354 CPUUsageMap::const_iterator iter = | 353 CPUUsageMap::const_iterator iter = |
355 cpu_usage_map_.find(resource->GetProcess()); | 354 cpu_usage_map_.find(resource->GetProcess()); |
356 if (iter == cpu_usage_map_.end()) | 355 if (iter == cpu_usage_map_.end()) |
357 return 0; | 356 return 0; |
358 return iter->second; | 357 return iter->second; |
359 } | 358 } |
360 | 359 |
361 size_t TaskManagerModel::GetPrivateMemory( | 360 bool TaskManagerModel::GetPrivateMemory(int index, size_t* result) const { |
362 const base::ProcessMetrics* process_metrics) const { | 361 *result = 0; |
363 return process_metrics->GetPrivateBytes() / 1024; | 362 base::ProcessMetrics* process_metrics; |
| 363 if (!GetProcessMetricsForRow(index, &process_metrics)) |
| 364 return false; |
| 365 *result = process_metrics->GetPrivateBytes() / 1024; |
| 366 // On Linux (so far) and win XP, this is not supported and returns 0. |
| 367 // Remove with crbug.com/23258 |
| 368 if (*result == 0) |
| 369 return false; |
| 370 return true; |
364 } | 371 } |
365 | 372 |
366 size_t TaskManagerModel::GetSharedMemory( | 373 bool TaskManagerModel::GetSharedMemory(int index, size_t* result) const { |
367 const base::ProcessMetrics* process_metrics) const { | 374 *result = 0; |
| 375 base::ProcessMetrics* process_metrics; |
| 376 if (!GetProcessMetricsForRow(index, &process_metrics)) |
| 377 return false; |
368 base::WorkingSetKBytes ws_usage; | 378 base::WorkingSetKBytes ws_usage; |
369 process_metrics->GetWorkingSetKBytes(&ws_usage); | 379 if (!process_metrics->GetWorkingSetKBytes(&ws_usage)) |
370 return ws_usage.shared; | 380 return false; |
| 381 *result = ws_usage.shared; |
| 382 return true; |
371 } | 383 } |
372 | 384 |
373 size_t TaskManagerModel::GetPhysicalMemory( | 385 bool TaskManagerModel::GetPhysicalMemory(int index, size_t* result) const { |
374 const base::ProcessMetrics* process_metrics) const { | 386 *result = 0; |
| 387 base::ProcessMetrics* process_metrics; |
| 388 if (!GetProcessMetricsForRow(index, &process_metrics)) |
| 389 return false; |
| 390 base::WorkingSetKBytes ws_usage; |
| 391 if (!process_metrics->GetWorkingSetKBytes(&ws_usage)) |
| 392 return false; |
| 393 |
375 // Memory = working_set.private + working_set.shareable. | 394 // Memory = working_set.private + working_set.shareable. |
376 // We exclude the shared memory. | 395 // We exclude the shared memory. |
377 size_t total_kbytes = process_metrics->GetWorkingSetSize() / 1024; | 396 size_t total_kbytes = process_metrics->GetWorkingSetSize() / 1024; |
378 base::WorkingSetKBytes ws_usage; | |
379 process_metrics->GetWorkingSetKBytes(&ws_usage); | |
380 total_kbytes -= ws_usage.shared; | 397 total_kbytes -= ws_usage.shared; |
381 return total_kbytes; | 398 *result = total_kbytes; |
| 399 return true; |
382 } | 400 } |
383 | 401 |
384 int TaskManagerModel::GetStatsValue(const TaskManager::Resource* resource, | 402 int TaskManagerModel::GetStatsValue(const TaskManager::Resource* resource, |
385 int col_id) const { | 403 int col_id) const { |
386 StatsTable* table = StatsTable::current(); | 404 StatsTable* table = StatsTable::current(); |
387 if (table != NULL) { | 405 if (table != NULL) { |
388 const char* counter = table->GetRowName(col_id); | 406 const char* counter = table->GetRowName(col_id); |
389 if (counter != NULL && counter[0] != '\0') { | 407 if (counter != NULL && counter[0] != '\0') { |
390 return table->GetCounterValue(counter, | 408 return table->GetCounterValue(counter, |
391 base::GetProcId(resource->GetProcess())); | 409 base::GetProcId(resource->GetProcess())); |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 chrome_browser_net::GetOriginProcessUniqueIDForRequest(job->request()); | 764 chrome_browser_net::GetOriginProcessUniqueIDForRequest(job->request()); |
747 ui_loop_->PostTask(FROM_HERE, | 765 ui_loop_->PostTask(FROM_HERE, |
748 NewRunnableMethod( | 766 NewRunnableMethod( |
749 this, | 767 this, |
750 &TaskManagerModel::BytesRead, | 768 &TaskManagerModel::BytesRead, |
751 BytesReadParam(origin_child_id, | 769 BytesReadParam(origin_child_id, |
752 render_process_host_child_id, | 770 render_process_host_child_id, |
753 routing_id, byte_count))); | 771 routing_id, byte_count))); |
754 } | 772 } |
755 | 773 |
756 bool TaskManagerModel::GetProcessMetricsForRows( | 774 bool TaskManagerModel::GetProcessMetricsForRow( |
757 int row1, int row2, | 775 int row, base::ProcessMetrics** proc_metrics) const { |
758 base::ProcessMetrics** proc_metrics1, | 776 DCHECK(row < ResourceCount()); |
759 base::ProcessMetrics** proc_metrics2) const { | 777 *proc_metrics = NULL; |
760 DCHECK(row1 < ResourceCount() && row2 < ResourceCount()); | |
761 *proc_metrics1 = NULL; | |
762 *proc_metrics2 = NULL; | |
763 | 778 |
764 MetricsMap::const_iterator iter = | 779 MetricsMap::const_iterator iter = |
765 metrics_map_.find(resources_[row1]->GetProcess()); | 780 metrics_map_.find(resources_[row]->GetProcess()); |
766 if (iter == metrics_map_.end()) | 781 if (iter == metrics_map_.end()) |
767 return false; | 782 return false; |
768 *proc_metrics1 = iter->second; | 783 *proc_metrics = iter->second; |
769 | |
770 iter = metrics_map_.find(resources_[row2]->GetProcess()); | |
771 if (iter == metrics_map_.end()) | |
772 return false; | |
773 *proc_metrics2 = iter->second; | |
774 | |
775 return true; | 784 return true; |
776 } | 785 } |
777 | 786 |
778 //////////////////////////////////////////////////////////////////////////////// | 787 //////////////////////////////////////////////////////////////////////////////// |
779 // TaskManager class | 788 // TaskManager class |
780 //////////////////////////////////////////////////////////////////////////////// | 789 //////////////////////////////////////////////////////////////////////////////// |
781 | 790 |
782 // static | 791 // static |
783 void TaskManager::RegisterPrefs(PrefService* prefs) { | 792 void TaskManager::RegisterPrefs(PrefService* prefs) { |
784 prefs->RegisterDictionaryPref(prefs::kTaskManagerWindowPlacement); | 793 prefs->RegisterDictionaryPref(prefs::kTaskManagerWindowPlacement); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
850 // or popup, we can only have one tab, hence we need to process this in a | 859 // or popup, we can only have one tab, hence we need to process this in a |
851 // tabbed browser window. Currently, |browser| is pointing to the application, | 860 // tabbed browser window. Currently, |browser| is pointing to the application, |
852 // popup window. Therefore, we have to retrieve the last active tab again, | 861 // popup window. Therefore, we have to retrieve the last active tab again, |
853 // since a new window has been used. | 862 // since a new window has been used. |
854 if (browser->type() & Browser::TYPE_APP_POPUP) { | 863 if (browser->type() & Browser::TYPE_APP_POPUP) { |
855 browser = BrowserList::GetLastActive(); | 864 browser = BrowserList::GetLastActive(); |
856 DCHECK(browser); | 865 DCHECK(browser); |
857 } | 866 } |
858 browser->window()->Show(); | 867 browser->window()->Show(); |
859 } | 868 } |
OLD | NEW |