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

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

Issue 1439213004: Fix various TaskManager bugs and add new enhancements (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: auto*& --> auto* Created 5 years, 1 month 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_table_model.h ('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 "base/command_line.h"
7 #include "base/i18n/number_formatting.h" 8 #include "base/i18n/number_formatting.h"
8 #include "base/i18n/rtl.h" 9 #include "base/i18n/rtl.h"
9 #include "base/prefs/scoped_user_pref_update.h" 10 #include "base/prefs/scoped_user_pref_update.h"
10 #include "base/process/process_handle.h" 11 #include "base/process/process_handle.h"
11 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
13 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
14 #include "chrome/browser/browser_process.h" 15 #include "chrome/browser/browser_process.h"
15 #include "chrome/browser/task_management/task_manager_interface.h" 16 #include "chrome/browser/task_management/task_manager_interface.h"
16 #include "chrome/browser/ui/task_manager/task_manager_columns.h" 17 #include "chrome/browser/ui/task_manager/task_manager_columns.h"
17 #include "chrome/common/pref_names.h" 18 #include "chrome/common/pref_names.h"
18 #include "chrome/grit/generated_resources.h" 19 #include "chrome/grit/generated_resources.h"
19 #include "components/nacl/browser/nacl_browser.h" 20 #include "components/nacl/browser/nacl_browser.h"
21 #include "components/nacl/common/nacl_switches.h"
20 #include "content/public/common/result_codes.h" 22 #include "content/public/common/result_codes.h"
21 #include "third_party/WebKit/public/web/WebCache.h" 23 #include "third_party/WebKit/public/web/WebCache.h"
22 #include "ui/base/l10n/l10n_util.h" 24 #include "ui/base/l10n/l10n_util.h"
23 #include "ui/base/models/table_model_observer.h" 25 #include "ui/base/models/table_model_observer.h"
24 #include "ui/base/text/bytes_formatting.h" 26 #include "ui/base/text/bytes_formatting.h"
25 27
26 namespace task_management { 28 namespace task_management {
27 29
28 namespace { 30 namespace {
29 31
(...skipping 10 matching lines...) Expand all
40 #endif // defined(OS_MACOSX) 42 #endif // defined(OS_MACOSX)
41 43
42 // The columns that are shared by a group will show the value of the column 44 // The columns that are shared by a group will show the value of the column
43 // only once per group. 45 // only once per group.
44 bool IsSharedByGroup(int column_id) { 46 bool IsSharedByGroup(int column_id) {
45 switch (column_id) { 47 switch (column_id) {
46 case IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN: 48 case IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN:
47 case IDS_TASK_MANAGER_SHARED_MEM_COLUMN: 49 case IDS_TASK_MANAGER_SHARED_MEM_COLUMN:
48 case IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN: 50 case IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN:
49 case IDS_TASK_MANAGER_CPU_COLUMN: 51 case IDS_TASK_MANAGER_CPU_COLUMN:
52 case IDS_TASK_MANAGER_NET_COLUMN:
50 case IDS_TASK_MANAGER_PROCESS_ID_COLUMN: 53 case IDS_TASK_MANAGER_PROCESS_ID_COLUMN:
51 case IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN: 54 case IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN:
52 case IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN: 55 case IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN:
53 case IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN: 56 case IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN:
54 case IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN: 57 case IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN:
55 case IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN: 58 case IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN:
56 case IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN: 59 case IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN:
57 case IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN: 60 case IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN:
61 case IDS_TASK_MANAGER_IDLE_WAKEUPS_COLUMN:
58 return true; 62 return true;
59 default: 63 default:
60 return false; 64 return false;
61 } 65 }
62 } 66 }
63 67
64 // Used to sort various column values. 68 // Used to sort various column values.
65 template <class T> 69 template <class T>
66 int ValueCompare(T value1, T value2) { 70 int ValueCompare(T value1, T value2) {
67 if (value1 == value2) 71 if (value1 == value2)
(...skipping 12 matching lines...) Expand all
80 84
81 // A class to stringify the task manager's values into string16s and to 85 // A class to stringify the task manager's values into string16s and to
82 // cache the common strings that will be reused many times like "N/A" and so on. 86 // cache the common strings that will be reused many times like "N/A" and so on.
83 class TaskManagerValuesStringifier { 87 class TaskManagerValuesStringifier {
84 public: 88 public:
85 TaskManagerValuesStringifier() 89 TaskManagerValuesStringifier()
86 : n_a_string_(l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)), 90 : n_a_string_(l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)),
87 zero_string_(base::ASCIIToUTF16("0")), 91 zero_string_(base::ASCIIToUTF16("0")),
88 asterisk_string_(base::ASCIIToUTF16("*")), 92 asterisk_string_(base::ASCIIToUTF16("*")),
89 unknown_string_(l10n_util::GetStringUTF16( 93 unknown_string_(l10n_util::GetStringUTF16(
90 IDS_TASK_MANAGER_UNKNOWN_VALUE_TEXT)) { 94 IDS_TASK_MANAGER_UNKNOWN_VALUE_TEXT)),
95 disabled_nacl_debugging_string_(l10n_util::GetStringUTF16(
96 IDS_TASK_MANAGER_DISABLED_NACL_DBG_TEXT)) {
91 } 97 }
92 98
93 ~TaskManagerValuesStringifier() {} 99 ~TaskManagerValuesStringifier() {}
94 100
95 base::string16 GetCpuUsageText(double cpu_usage) { 101 base::string16 GetCpuUsageText(double cpu_usage) {
96 return base::UTF8ToUTF16(base::StringPrintf(kCpuTextFormatString, 102 return base::UTF8ToUTF16(base::StringPrintf(kCpuTextFormatString,
97 cpu_usage)); 103 cpu_usage));
98 } 104 }
99 105
100 base::string16 GetMemoryUsageText(int64 memory_usage, bool has_duplicates) { 106 base::string16 GetMemoryUsageText(int64 memory_usage, bool has_duplicates) {
(...skipping 20 matching lines...) Expand all
121 } 127 }
122 128
123 base::string16 GetIdleWakeupsText(int idle_wakeups) { 129 base::string16 GetIdleWakeupsText(int idle_wakeups) {
124 if (idle_wakeups == -1) 130 if (idle_wakeups == -1)
125 return n_a_string_; 131 return n_a_string_;
126 132
127 return base::FormatNumber(idle_wakeups); 133 return base::FormatNumber(idle_wakeups);
128 } 134 }
129 135
130 base::string16 GetNaClPortText(int nacl_port) { 136 base::string16 GetNaClPortText(int nacl_port) {
131 if (nacl_port == nacl::kGdbDebugStubPortUnused) 137 if (nacl_port == nacl::kGdbDebugStubPortUnused || nacl_port == -2)
132 return n_a_string_; 138 return n_a_string_;
133 139
134 if (nacl_port == nacl::kGdbDebugStubPortUnknown) 140 if (nacl_port == nacl::kGdbDebugStubPortUnknown)
135 return unknown_string_; 141 return unknown_string_;
136 142
137 return base::IntToString16(nacl_port); 143 return base::IntToString16(nacl_port);
138 } 144 }
139 145
140 base::string16 GetWindowsHandlesText(int64 current, int64 peak) { 146 base::string16 GetWindowsHandlesText(int64 current, int64 peak) {
141 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_HANDLES_CELL_TEXT, 147 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_HANDLES_CELL_TEXT,
(...skipping 26 matching lines...) Expand all
168 174
169 base::string16 GetWebCacheStatText( 175 base::string16 GetWebCacheStatText(
170 const blink::WebCache::ResourceTypeStat& stat) { 176 const blink::WebCache::ResourceTypeStat& stat) {
171 return FormatAllocatedAndUsedMemory(stat.size, stat.liveSize); 177 return FormatAllocatedAndUsedMemory(stat.size, stat.liveSize);
172 } 178 }
173 179
174 const base::string16& n_a_string() const { return n_a_string_; } 180 const base::string16& n_a_string() const { return n_a_string_; }
175 const base::string16& zero_string() const { return zero_string_; } 181 const base::string16& zero_string() const { return zero_string_; }
176 const base::string16& asterisk_string() const { return asterisk_string_; } 182 const base::string16& asterisk_string() const { return asterisk_string_; }
177 const base::string16& unknown_string() const { return unknown_string_; } 183 const base::string16& unknown_string() const { return unknown_string_; }
184 const base::string16& disabled_nacl_debugging_string() const {
185 return disabled_nacl_debugging_string_;
186 }
178 187
179 private: 188 private:
180 // The localized string "N/A". 189 // The localized string "N/A".
181 const base::string16 n_a_string_; 190 const base::string16 n_a_string_;
182 191
183 // The value 0 as a string "0". 192 // The value 0 as a string "0".
184 const base::string16 zero_string_; 193 const base::string16 zero_string_;
185 194
186 // The string "*" that is used to show that there exists duplicates in the 195 // The string "*" that is used to show that there exists duplicates in the
187 // GPU memory. 196 // GPU memory.
188 const base::string16 asterisk_string_; 197 const base::string16 asterisk_string_;
189 198
190 // The string "Unknown". 199 // The string "Unknown".
191 const base::string16 unknown_string_; 200 const base::string16 unknown_string_;
192 201
202 // The string to show on the NaCl debug port column cells when the flag
203 // #enable-nacl-debug is disabled.
204 const base::string16 disabled_nacl_debugging_string_;
205
193 DISALLOW_COPY_AND_ASSIGN(TaskManagerValuesStringifier); 206 DISALLOW_COPY_AND_ASSIGN(TaskManagerValuesStringifier);
194 }; 207 };
195 208
196 //////////////////////////////////////////////////////////////////////////////// 209 ////////////////////////////////////////////////////////////////////////////////
197 // TableSortDescriptor: 210 // TableSortDescriptor:
198 //////////////////////////////////////////////////////////////////////////////// 211 ////////////////////////////////////////////////////////////////////////////////
199 212
200 TableSortDescriptor::TableSortDescriptor() 213 TableSortDescriptor::TableSortDescriptor()
201 : sorted_column_id(-1), 214 : sorted_column_id(-1),
202 is_ascending(false) { 215 is_ascending(false) {
203 } 216 }
204 217
205 TableSortDescriptor::TableSortDescriptor(int col_id, bool ascending) 218 TableSortDescriptor::TableSortDescriptor(int col_id, bool ascending)
206 : sorted_column_id(col_id), 219 : sorted_column_id(col_id),
207 is_ascending(ascending) { 220 is_ascending(ascending) {
208 } 221 }
209 222
210 //////////////////////////////////////////////////////////////////////////////// 223 ////////////////////////////////////////////////////////////////////////////////
211 // TaskManagerTableModel: 224 // TaskManagerTableModel:
212 //////////////////////////////////////////////////////////////////////////////// 225 ////////////////////////////////////////////////////////////////////////////////
213 226
214 TaskManagerTableModel::TaskManagerTableModel(int64_t refresh_flags, 227 TaskManagerTableModel::TaskManagerTableModel(int64_t refresh_flags,
215 TableViewDelegate* delegate) 228 TableViewDelegate* delegate)
216 : TaskManagerObserver(base::TimeDelta::FromMilliseconds(kRefreshTimeMS), 229 : TaskManagerObserver(base::TimeDelta::FromMilliseconds(kRefreshTimeMS),
217 refresh_flags), 230 refresh_flags),
218 table_view_delegate_(delegate), 231 table_view_delegate_(delegate),
219 columns_settings_(new base::DictionaryValue), 232 columns_settings_(new base::DictionaryValue),
220 table_model_observer_(nullptr), 233 table_model_observer_(nullptr),
221 stringifier_(new TaskManagerValuesStringifier) { 234 stringifier_(new TaskManagerValuesStringifier),
235 #if !defined(DISABLE_NACL)
236 is_nacl_debugging_flag_enabled_(base::CommandLine::ForCurrentProcess()->
237 HasSwitch(switches::kEnableNaClDebug)) {
238 #else
239 is_nacl_debugging_flag_enabled_(false) {
240 #endif // !defined(DISABLE_NACL)
222 DCHECK(delegate); 241 DCHECK(delegate);
223 } 242 }
224 243
225 TaskManagerTableModel::~TaskManagerTableModel() { 244 TaskManagerTableModel::~TaskManagerTableModel() {
226 } 245 }
227 246
228 int TaskManagerTableModel::RowCount() { 247 int TaskManagerTableModel::RowCount() {
229 return static_cast<int>(tasks_.size()); 248 return static_cast<int>(tasks_.size());
230 } 249 }
231 250
232 base::string16 TaskManagerTableModel::GetText(int row, int column) { 251 base::string16 TaskManagerTableModel::GetText(int row, int column) {
233 if (IsSharedByGroup(column) && !IsTaskFirstInGroup(row)) 252 if (IsSharedByGroup(column) && !IsTaskFirstInGroup(row))
234 return base::string16(); 253 return base::string16();
235 254
236 switch (column) { 255 switch (column) {
237 case IDS_TASK_MANAGER_TASK_COLUMN: 256 case IDS_TASK_MANAGER_TASK_COLUMN:
238 return observed_task_manager()->GetTitle(tasks_[row]); 257 return observed_task_manager()->GetTitle(tasks_[row]);
239 258
240 case IDS_TASK_MANAGER_PROFILE_NAME_COLUMN: 259 case IDS_TASK_MANAGER_PROFILE_NAME_COLUMN:
241 return observed_task_manager()->GetProfileName(tasks_[row]); 260 return observed_task_manager()->GetProfileName(tasks_[row]);
242 261
243 case IDS_TASK_MANAGER_NET_COLUMN: 262 case IDS_TASK_MANAGER_NET_COLUMN:
244 return stringifier_->GetNetworkUsageText( 263 return stringifier_->GetNetworkUsageText(
245 observed_task_manager()->GetNetworkUsage(tasks_[row])); 264 observed_task_manager()->GetProcessTotalNetworkUsage(tasks_[row]));
246 265
247 case IDS_TASK_MANAGER_CPU_COLUMN: 266 case IDS_TASK_MANAGER_CPU_COLUMN:
248 return stringifier_->GetCpuUsageText( 267 return stringifier_->GetCpuUsageText(
249 observed_task_manager()->GetCpuUsage(tasks_[row])); 268 observed_task_manager()->GetCpuUsage(tasks_[row]));
250 269
251 case IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN: 270 case IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN:
252 return stringifier_->GetMemoryUsageText( 271 return stringifier_->GetMemoryUsageText(
253 observed_task_manager()->GetPrivateMemoryUsage(tasks_[row]), false); 272 observed_task_manager()->GetPrivateMemoryUsage(tasks_[row]), false);
254 273
255 case IDS_TASK_MANAGER_SHARED_MEM_COLUMN: 274 case IDS_TASK_MANAGER_SHARED_MEM_COLUMN:
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 if (observed_task_manager()->GetV8Memory(tasks_[row], 337 if (observed_task_manager()->GetV8Memory(tasks_[row],
319 &v8_allocated, 338 &v8_allocated,
320 &v8_used)) { 339 &v8_used)) {
321 return stringifier_->FormatAllocatedAndUsedMemory(v8_allocated, 340 return stringifier_->FormatAllocatedAndUsedMemory(v8_allocated,
322 v8_used); 341 v8_used);
323 } 342 }
324 return stringifier_->n_a_string(); 343 return stringifier_->n_a_string();
325 } 344 }
326 345
327 case IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN: 346 case IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN:
347 if (!is_nacl_debugging_flag_enabled_)
348 return stringifier_->disabled_nacl_debugging_string();
349
328 return stringifier_->GetNaClPortText( 350 return stringifier_->GetNaClPortText(
329 observed_task_manager()->GetNaClDebugStubPort(tasks_[row])); 351 observed_task_manager()->GetNaClDebugStubPort(tasks_[row]));
330 352
331 default: 353 default:
332 NOTREACHED(); 354 NOTREACHED();
333 return base::string16(); 355 return base::string16();
334 } 356 }
335 } 357 }
336 358
337 gfx::ImageSkia TaskManagerTableModel::GetIcon(int row) { 359 gfx::ImageSkia TaskManagerTableModel::GetIcon(int row) {
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 bool TaskManagerTableModel::IsTaskFirstInGroup(int row_index) const { 734 bool TaskManagerTableModel::IsTaskFirstInGroup(int row_index) const {
713 if (row_index == 0) 735 if (row_index == 0)
714 return true; 736 return true;
715 737
716 return observed_task_manager()->GetProcessId(tasks_[row_index - 1]) != 738 return observed_task_manager()->GetProcessId(tasks_[row_index - 1]) !=
717 observed_task_manager()->GetProcessId(tasks_[row_index]); 739 observed_task_manager()->GetProcessId(tasks_[row_index]);
718 } 740 }
719 741
720 742
721 } // namespace task_management 743 } // namespace task_management
OLDNEW
« no previous file with comments | « chrome/browser/ui/task_manager/task_manager_table_model.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698