| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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.h" | 5 #include "chrome/browser/task_manager/task_manager.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "app/table_model_observer.h" | 8 #include "app/table_model_observer.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/metrics/stats_table.h" | 10 #include "base/metrics/stats_table.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 #include "views/controls/table/table_view_observer.h" | 30 #include "views/controls/table/table_view_observer.h" |
| 31 #include "views/standard_layout.h" | 31 #include "views/standard_layout.h" |
| 32 #include "views/widget/widget.h" | 32 #include "views/widget/widget.h" |
| 33 #include "views/window/dialog_delegate.h" | 33 #include "views/window/dialog_delegate.h" |
| 34 #include "views/window/window.h" | 34 #include "views/window/window.h" |
| 35 | 35 |
| 36 // The task manager window default size. | 36 // The task manager window default size. |
| 37 static const int kDefaultWidth = 460; | 37 static const int kDefaultWidth = 460; |
| 38 static const int kDefaultHeight = 270; | 38 static const int kDefaultHeight = 270; |
| 39 | 39 |
| 40 // The group IDs used to separate background pages from foreground tabs. |
| 41 static const int kBackgroundGroupId = 0; |
| 42 static const int kForegroundGroupId = 1; |
| 43 |
| 40 namespace { | 44 namespace { |
| 41 | 45 |
| 42 //////////////////////////////////////////////////////////////////////////////// | 46 //////////////////////////////////////////////////////////////////////////////// |
| 43 // TaskManagerTableModel class | 47 // TaskManagerTableModel class |
| 44 //////////////////////////////////////////////////////////////////////////////// | 48 //////////////////////////////////////////////////////////////////////////////// |
| 45 | 49 |
| 46 class TaskManagerTableModel : public views::GroupTableModel, | 50 class TaskManagerTableModel : public views::GroupTableModel, |
| 47 public TaskManagerModelObserver { | 51 public TaskManagerModelObserver { |
| 48 public: | 52 public: |
| 49 explicit TaskManagerTableModel(TaskManagerModel* model) | 53 explicit TaskManagerTableModel(TaskManagerModel* model) |
| 50 : model_(model), | 54 : model_(model), |
| 51 observer_(NULL) { | 55 observer_(NULL) { |
| 52 model_->AddObserver(this); | 56 model_->AddObserver(this); |
| 53 } | 57 } |
| 54 | 58 |
| 55 ~TaskManagerTableModel() { | 59 ~TaskManagerTableModel() { |
| 56 model_->RemoveObserver(this); | 60 model_->RemoveObserver(this); |
| 57 } | 61 } |
| 58 | 62 |
| 59 // GroupTableModel. | 63 // GroupTableModel. |
| 60 int RowCount(); | 64 int RowCount(); |
| 61 std::wstring GetText(int row, int column); | 65 std::wstring GetText(int row, int column); |
| 62 SkBitmap GetIcon(int row); | 66 SkBitmap GetIcon(int row); |
| 67 bool ShouldIndent(int row); |
| 63 void GetGroupRangeForItem(int item, views::GroupRange* range); | 68 void GetGroupRangeForItem(int item, views::GroupRange* range); |
| 64 void SetObserver(TableModelObserver* observer); | 69 void SetObserver(TableModelObserver* observer); |
| 65 virtual int CompareValues(int row1, int row2, int column_id); | 70 virtual int CompareValues(int row1, int row2, int column_id); |
| 71 virtual Groups GetGroups(); |
| 72 virtual bool HasGroups(); |
| 73 virtual int GetGroupID(int row); |
| 66 | 74 |
| 67 // TaskManagerModelObserver. | 75 // TaskManagerModelObserver. |
| 68 virtual void OnModelChanged(); | 76 virtual void OnModelChanged(); |
| 69 virtual void OnItemsChanged(int start, int length); | 77 virtual void OnItemsChanged(int start, int length); |
| 70 virtual void OnItemsAdded(int start, int length); | 78 virtual void OnItemsAdded(int start, int length); |
| 71 virtual void OnItemsRemoved(int start, int length); | 79 virtual void OnItemsRemoved(int start, int length); |
| 72 | 80 |
| 73 private: | 81 private: |
| 74 TaskManagerModel* model_; | 82 TaskManagerModel* model_; |
| 75 TableModelObserver* observer_; | 83 TableModelObserver* observer_; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 default: | 151 default: |
| 144 NOTREACHED(); | 152 NOTREACHED(); |
| 145 return std::wstring(); | 153 return std::wstring(); |
| 146 } | 154 } |
| 147 } | 155 } |
| 148 | 156 |
| 149 SkBitmap TaskManagerTableModel::GetIcon(int row) { | 157 SkBitmap TaskManagerTableModel::GetIcon(int row) { |
| 150 return model_->GetResourceIcon(row); | 158 return model_->GetResourceIcon(row); |
| 151 } | 159 } |
| 152 | 160 |
| 161 bool TaskManagerTableModel::ShouldIndent(int row) { |
| 162 return !model_->IsResourceFirstInGroup(row); |
| 163 } |
| 164 |
| 153 void TaskManagerTableModel::GetGroupRangeForItem(int item, | 165 void TaskManagerTableModel::GetGroupRangeForItem(int item, |
| 154 views::GroupRange* range) { | 166 views::GroupRange* range) { |
| 155 std::pair<int, int> range_pair = model_->GetGroupRangeForResource(item); | 167 std::pair<int, int> range_pair = model_->GetGroupRangeForResource(item); |
| 156 range->start = range_pair.first; | 168 range->start = range_pair.first; |
| 157 range->length = range_pair.second; | 169 range->length = range_pair.second; |
| 158 } | 170 } |
| 159 | 171 |
| 160 void TaskManagerTableModel::SetObserver(TableModelObserver* observer) { | 172 void TaskManagerTableModel::SetObserver(TableModelObserver* observer) { |
| 161 observer_ = observer; | 173 observer_ = observer; |
| 162 } | 174 } |
| 163 | 175 |
| 164 int TaskManagerTableModel::CompareValues(int row1, int row2, int column_id) { | 176 int TaskManagerTableModel::CompareValues(int row1, int row2, int column_id) { |
| 165 return model_->CompareValues(row1, row2, column_id); | 177 return model_->CompareValues(row1, row2, column_id); |
| 166 } | 178 } |
| 167 | 179 |
| 180 bool TaskManagerTableModel::HasGroups() { |
| 181 return true; |
| 182 } |
| 183 |
| 184 int TaskManagerTableModel::GetGroupID(int row) { |
| 185 // If there are any background resources in the group range, put the whole |
| 186 // range in the background group. |
| 187 std::pair<int, int> range_pair = model_->GetGroupRangeForResource(row); |
| 188 for (int i = range_pair.first; |
| 189 i < range_pair.first + range_pair.second; |
| 190 ++i) { |
| 191 if (model_->IsBackgroundResource(i)) |
| 192 return kBackgroundGroupId; |
| 193 } |
| 194 return kForegroundGroupId; |
| 195 } |
| 196 |
| 197 TableModel::Groups TaskManagerTableModel::GetGroups() { |
| 198 Groups groups; |
| 199 |
| 200 Group background_group; |
| 201 background_group.title = |
| 202 l10n_util::GetString(IDS_TASK_MANAGER_BACKGROUND_SEPARATOR); |
| 203 background_group.id = kBackgroundGroupId; |
| 204 groups.push_back(background_group); |
| 205 |
| 206 Group foreground_group; |
| 207 foreground_group.title = |
| 208 l10n_util::GetString(IDS_TASK_MANAGER_FOREGROUND_SEPARATOR); |
| 209 foreground_group.id = kForegroundGroupId; |
| 210 groups.push_back(foreground_group); |
| 211 |
| 212 return groups; |
| 213 } |
| 214 |
| 168 void TaskManagerTableModel::OnModelChanged() { | 215 void TaskManagerTableModel::OnModelChanged() { |
| 169 if (observer_) | 216 if (observer_) |
| 170 observer_->OnModelChanged(); | 217 observer_->OnModelChanged(); |
| 171 } | 218 } |
| 172 | 219 |
| 173 void TaskManagerTableModel::OnItemsChanged(int start, int length) { | 220 void TaskManagerTableModel::OnItemsChanged(int start, int length) { |
| 174 if (observer_) | 221 if (observer_) |
| 175 observer_->OnItemsChanged(start, length); | 222 observer_->OnItemsChanged(start, length); |
| 176 } | 223 } |
| 177 | 224 |
| 178 void TaskManagerTableModel::OnItemsAdded(int start, int length) { | 225 void TaskManagerTableModel::OnItemsAdded(int start, int length) { |
| 179 if (observer_) | 226 if (observer_) |
| 180 observer_->OnItemsAdded(start, length); | 227 observer_->OnItemsAdded(start, length); |
| 228 // There's a bug in the Windows ListView where inserting items with groups |
| 229 // enabled puts them in the wrong position, so we just rebuild the list view |
| 230 // in this case. |
| 231 // (see: http://connect.microsoft.com/VisualStudio/feedback/details/115345/) |
| 232 OnModelChanged(); |
| 181 } | 233 } |
| 182 | 234 |
| 183 void TaskManagerTableModel::OnItemsRemoved(int start, int length) { | 235 void TaskManagerTableModel::OnItemsRemoved(int start, int length) { |
| 184 if (observer_) | 236 if (observer_) |
| 185 observer_->OnItemsRemoved(start, length); | 237 observer_->OnItemsRemoved(start, length); |
| 186 } | 238 } |
| 187 | 239 |
| 188 // The Task manager UI container. | 240 // The Task manager UI container. |
| 189 class TaskManagerView : public views::View, | 241 class TaskManagerView : public views::View, |
| 190 public views::ButtonListener, | 242 public views::ButtonListener, |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 } | 346 } |
| 295 | 347 |
| 296 TaskManagerView::~TaskManagerView() { | 348 TaskManagerView::~TaskManagerView() { |
| 297 // Delete child views now, while our table model still exists. | 349 // Delete child views now, while our table model still exists. |
| 298 RemoveAllChildViews(true); | 350 RemoveAllChildViews(true); |
| 299 } | 351 } |
| 300 | 352 |
| 301 void TaskManagerView::Init() { | 353 void TaskManagerView::Init() { |
| 302 table_model_.reset(new TaskManagerTableModel(model_)); | 354 table_model_.reset(new TaskManagerTableModel(model_)); |
| 303 | 355 |
| 304 columns_.push_back(TableColumn(IDS_TASK_MANAGER_PAGE_COLUMN, | 356 // Page column has no header label. |
| 357 columns_.push_back(TableColumn(IDS_TASK_MANAGER_PAGE_COLUMN, L"", |
| 305 TableColumn::LEFT, -1, 1)); | 358 TableColumn::LEFT, -1, 1)); |
| 306 columns_.back().sortable = true; | 359 columns_.back().sortable = true; |
| 307 columns_.push_back(TableColumn(IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN, | 360 columns_.push_back(TableColumn(IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN, |
| 308 TableColumn::RIGHT, -1, 0)); | 361 TableColumn::RIGHT, -1, 0)); |
| 309 columns_.back().sortable = true; | 362 columns_.back().sortable = true; |
| 310 columns_.push_back(TableColumn(IDS_TASK_MANAGER_SHARED_MEM_COLUMN, | 363 columns_.push_back(TableColumn(IDS_TASK_MANAGER_SHARED_MEM_COLUMN, |
| 311 TableColumn::RIGHT, -1, 0)); | 364 TableColumn::RIGHT, -1, 0)); |
| 312 columns_.back().sortable = true; | 365 columns_.back().sortable = true; |
| 313 columns_.push_back(TableColumn(IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN, | 366 columns_.push_back(TableColumn(IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN, |
| 314 TableColumn::RIGHT, -1, 0)); | 367 TableColumn::RIGHT, -1, 0)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 334 columns_.push_back(TableColumn(IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN, | 387 columns_.push_back(TableColumn(IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN, |
| 335 TableColumn::RIGHT, -1, 0)); | 388 TableColumn::RIGHT, -1, 0)); |
| 336 columns_.back().sortable = true; | 389 columns_.back().sortable = true; |
| 337 columns_.push_back( | 390 columns_.push_back( |
| 338 TableColumn(IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN, | 391 TableColumn(IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN, |
| 339 TableColumn::RIGHT, -1, 0)); | 392 TableColumn::RIGHT, -1, 0)); |
| 340 columns_.back().sortable = true; | 393 columns_.back().sortable = true; |
| 341 | 394 |
| 342 tab_table_ = new views::GroupTableView(table_model_.get(), columns_, | 395 tab_table_ = new views::GroupTableView(table_model_.get(), columns_, |
| 343 views::ICON_AND_TEXT, false, true, | 396 views::ICON_AND_TEXT, false, true, |
| 344 true); | 397 true, false); |
| 345 | 398 |
| 346 // Hide some columns by default | 399 // Hide some columns by default |
| 347 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_PROCESS_ID_COLUMN, false); | 400 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_PROCESS_ID_COLUMN, false); |
| 348 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_SHARED_MEM_COLUMN, false); | 401 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_SHARED_MEM_COLUMN, false); |
| 349 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN, false); | 402 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN, false); |
| 350 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN, | 403 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN, |
| 351 false); | 404 false); |
| 352 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN, | 405 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN, |
| 353 false); | 406 false); |
| 354 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN, | 407 tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN, |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 } // namespace | 735 } // namespace |
| 683 | 736 |
| 684 namespace browser { | 737 namespace browser { |
| 685 | 738 |
| 686 // Declared in browser_dialogs.h so others don't need to depend on our header. | 739 // Declared in browser_dialogs.h so others don't need to depend on our header. |
| 687 void ShowTaskManager() { | 740 void ShowTaskManager() { |
| 688 TaskManagerView::Show(); | 741 TaskManagerView::Show(); |
| 689 } | 742 } |
| 690 | 743 |
| 691 } // namespace browser | 744 } // namespace browser |
| OLD | NEW |