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

Side by Side Diff: chrome/browser/ui/task_manager/task_manager_table_model.cc

Issue 2593233003: Add a task manager column that shows memory state of processes (Closed)
Patch Set: Use N/A string when MC is disabled Created 4 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
« no previous file with comments | « chrome/browser/ui/task_manager/task_manager_columns.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/ui/task_manager/task_manager_table_model.h" 5 #include "chrome/browser/ui/task_manager/task_manager_table_model.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/i18n/number_formatting.h" 10 #include "base/i18n/number_formatting.h"
11 #include "base/i18n/rtl.h" 11 #include "base/i18n/rtl.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/process/process_handle.h" 13 #include "base/process/process_handle.h"
14 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/stringprintf.h" 15 #include "base/strings/stringprintf.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "build/build_config.h" 17 #include "build/build_config.h"
18 #include "chrome/browser/browser_process.h" 18 #include "chrome/browser/browser_process.h"
19 #include "chrome/browser/task_manager/task_manager_interface.h" 19 #include "chrome/browser/task_manager/task_manager_interface.h"
20 #include "chrome/browser/ui/task_manager/task_manager_columns.h" 20 #include "chrome/browser/ui/task_manager/task_manager_columns.h"
21 #include "chrome/common/pref_names.h" 21 #include "chrome/common/pref_names.h"
22 #include "chrome/grit/generated_resources.h" 22 #include "chrome/grit/generated_resources.h"
23 #include "components/nacl/browser/nacl_browser.h" 23 #include "components/nacl/browser/nacl_browser.h"
24 #include "components/nacl/common/nacl_switches.h" 24 #include "components/nacl/common/nacl_switches.h"
25 #include "components/prefs/scoped_user_pref_update.h" 25 #include "components/prefs/scoped_user_pref_update.h"
26 #include "content/public/common/content_features.h"
26 #include "content/public/common/result_codes.h" 27 #include "content/public/common/result_codes.h"
27 #include "third_party/WebKit/public/web/WebCache.h" 28 #include "third_party/WebKit/public/web/WebCache.h"
28 #include "ui/base/l10n/l10n_util.h" 29 #include "ui/base/l10n/l10n_util.h"
29 #include "ui/base/models/table_model_observer.h" 30 #include "ui/base/models/table_model_observer.h"
30 #include "ui/base/text/bytes_formatting.h" 31 #include "ui/base/text/bytes_formatting.h"
31 32
32 namespace task_manager { 33 namespace task_manager {
33 34
34 namespace { 35 namespace {
35 36
(...skipping 19 matching lines...) Expand all
55 case IDS_TASK_MANAGER_PROCESS_ID_COLUMN: 56 case IDS_TASK_MANAGER_PROCESS_ID_COLUMN:
56 case IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN: 57 case IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN:
57 case IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN: 58 case IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN:
58 case IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN: 59 case IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN:
59 case IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN: 60 case IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN:
60 case IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN: 61 case IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN:
61 case IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN: 62 case IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN:
62 case IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN: 63 case IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN:
63 case IDS_TASK_MANAGER_IDLE_WAKEUPS_COLUMN: 64 case IDS_TASK_MANAGER_IDLE_WAKEUPS_COLUMN:
64 case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: 65 case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN:
65 case IDS_TASK_MANAGER_PROCESS_PRIORITY_COLUMN: 66 case IDS_TASK_MANAGER_PROCESS_PRIORITY_COLUMN:
afakhry 2017/01/03 18:53:16 Since the Memory State is a per-process value, ple
bashi 2017/01/05 00:51:49 Done.
66 return true; 67 return true;
67 default: 68 default:
68 return false; 69 return false;
69 } 70 }
70 } 71 }
71 72
72 // Used to sort various column values. 73 // Used to sort various column values.
73 template <class T> 74 template <class T>
74 int ValueCompare(T value1, T value2) { 75 int ValueCompare(T value1, T value2) {
75 if (value1 == value2) 76 if (value1 == value2)
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 memory_text = l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_MEM_CELL_TEXT, 137 memory_text = l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_MEM_CELL_TEXT,
137 memory_text); 138 memory_text);
138 #endif // defined(OS_MACOSX) 139 #endif // defined(OS_MACOSX)
139 140
140 if (has_duplicates) 141 if (has_duplicates)
141 memory_text += asterisk_string_; 142 memory_text += asterisk_string_;
142 143
143 return memory_text; 144 return memory_text;
144 } 145 }
145 146
147 base::string16 GetMemoryStateText(base::MemoryState state) {
148 if (base::FeatureList::IsEnabled(features::kMemoryCoordinator)) {
afakhry 2017/01/03 18:53:17 I noticed we do this test twice; here and in TaskG
bashi 2017/01/05 00:51:49 Done.
149 // TODO(bashi): i18n.
150 return base::UTF8ToUTF16(base::MemoryStateToString(state));
151 }
152 return n_a_string_;
153 }
154
146 base::string16 GetIdleWakeupsText(int idle_wakeups) { 155 base::string16 GetIdleWakeupsText(int idle_wakeups) {
147 if (idle_wakeups == -1) 156 if (idle_wakeups == -1)
148 return n_a_string_; 157 return n_a_string_;
149 158
150 return base::FormatNumber(idle_wakeups); 159 return base::FormatNumber(idle_wakeups);
151 } 160 }
152 161
153 base::string16 GetNaClPortText(int nacl_port) { 162 base::string16 GetNaClPortText(int nacl_port) {
154 if (nacl_port == nacl::kGdbDebugStubPortUnused || nacl_port == -2) 163 if (nacl_port == nacl::kGdbDebugStubPortUnused || nacl_port == -2)
155 return n_a_string_; 164 return n_a_string_;
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 : stringifier_->foregrounded_string(); 400 : stringifier_->foregrounded_string();
392 401
393 #if defined(OS_LINUX) 402 #if defined(OS_LINUX)
394 case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: { 403 case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
395 const int fd_count = observed_task_manager()->GetOpenFdCount(tasks_[row]); 404 const int fd_count = observed_task_manager()->GetOpenFdCount(tasks_[row]);
396 return fd_count >= 0 ? base::FormatNumber(fd_count) 405 return fd_count >= 0 ? base::FormatNumber(fd_count)
397 : stringifier_->n_a_string(); 406 : stringifier_->n_a_string();
398 } 407 }
399 #endif // defined(OS_LINUX) 408 #endif // defined(OS_LINUX)
400 409
410 case IDS_TASK_MANAGER_MEMORY_STATE_COLUMN: {
411 return stringifier_->GetMemoryStateText(
412 observed_task_manager()->GetMemoryState(tasks_[row]));
413 }
414
401 default: 415 default:
402 NOTREACHED(); 416 NOTREACHED();
403 return base::string16(); 417 return base::string16();
404 } 418 }
405 } 419 }
406 420
407 gfx::ImageSkia TaskManagerTableModel::GetIcon(int row) { 421 gfx::ImageSkia TaskManagerTableModel::GetIcon(int row) {
408 return observed_task_manager()->GetIcon(tasks_[row]); 422 return observed_task_manager()->GetIcon(tasks_[row]);
409 } 423 }
410 424
411 void TaskManagerTableModel::SetObserver( 425 void TaskManagerTableModel::SetObserver(
412 ui::TableModelObserver* observer) { 426 ui::TableModelObserver* observer) {
413 table_model_observer_ = observer; 427 table_model_observer_ = observer;
414 } 428 }
415 429
416 int TaskManagerTableModel::CompareValues(int row1, 430 int TaskManagerTableModel::CompareValues(int row1,
417 int row2, 431 int row2,
418 int column_id) { 432 int column_id) {
419 switch (column_id) { 433 switch (column_id) {
420 case IDS_TASK_MANAGER_TASK_COLUMN: 434 case IDS_TASK_MANAGER_TASK_COLUMN:
421 case IDS_TASK_MANAGER_PROFILE_NAME_COLUMN: 435 case IDS_TASK_MANAGER_PROFILE_NAME_COLUMN:
afakhry 2017/01/03 18:53:17 Please add IDS_TASK_MANAGER_MEMORY_STATE_COLUMN so
bashi 2017/01/05 00:51:49 Done.
422 return ui::TableModel::CompareValues(row1, row2, column_id); 436 return ui::TableModel::CompareValues(row1, row2, column_id);
423 437
424 case IDS_TASK_MANAGER_NET_COLUMN: 438 case IDS_TASK_MANAGER_NET_COLUMN:
425 return ValueCompare( 439 return ValueCompare(
426 observed_task_manager()->GetNetworkUsage(tasks_[row1]), 440 observed_task_manager()->GetNetworkUsage(tasks_[row1]),
427 observed_task_manager()->GetNetworkUsage(tasks_[row2])); 441 observed_task_manager()->GetNetworkUsage(tasks_[row2]));
428 442
429 case IDS_TASK_MANAGER_CPU_COLUMN: 443 case IDS_TASK_MANAGER_CPU_COLUMN:
430 return ValueCompare(observed_task_manager()->GetCpuUsage(tasks_[row1]), 444 return ValueCompare(observed_task_manager()->GetCpuUsage(tasks_[row1]),
431 observed_task_manager()->GetCpuUsage(tasks_[row2])); 445 observed_task_manager()->GetCpuUsage(tasks_[row2]));
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 break; 706 break;
693 707
694 case IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN: 708 case IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN:
695 type = REFRESH_TYPE_NACL; 709 type = REFRESH_TYPE_NACL;
696 break; 710 break;
697 711
698 case IDS_TASK_MANAGER_PROCESS_PRIORITY_COLUMN: 712 case IDS_TASK_MANAGER_PROCESS_PRIORITY_COLUMN:
699 type = REFRESH_TYPE_PRIORITY; 713 type = REFRESH_TYPE_PRIORITY;
700 break; 714 break;
701 715
716 case IDS_TASK_MANAGER_MEMORY_STATE_COLUMN:
717 type = REFRESH_TYPE_MEMORY_STATE;
718 break;
719
702 #if defined(OS_LINUX) 720 #if defined(OS_LINUX)
703 case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: 721 case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN:
704 type = REFRESH_TYPE_FD_COUNT; 722 type = REFRESH_TYPE_FD_COUNT;
705 break; 723 break;
706 #endif // defined(OS_LINUX) 724 #endif // defined(OS_LINUX)
707 725
708 default: 726 default:
709 NOTREACHED(); 727 NOTREACHED();
710 return; 728 return;
711 } 729 }
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 850
833 bool TaskManagerTableModel::IsTaskFirstInGroup(int row_index) const { 851 bool TaskManagerTableModel::IsTaskFirstInGroup(int row_index) const {
834 if (row_index == 0) 852 if (row_index == 0)
835 return true; 853 return true;
836 854
837 return observed_task_manager()->GetProcessId(tasks_[row_index - 1]) != 855 return observed_task_manager()->GetProcessId(tasks_[row_index - 1]) !=
838 observed_task_manager()->GetProcessId(tasks_[row_index]); 856 observed_task_manager()->GetProcessId(tasks_[row_index]);
839 } 857 }
840 858
841 } // namespace task_manager 859 } // namespace task_manager
OLDNEW
« no previous file with comments | « chrome/browser/ui/task_manager/task_manager_columns.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698