| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/gtk/task_manager_gtk.h" | 5 #include "chrome/browser/ui/gtk/task_manager_gtk.h" |
| 6 | 6 |
| 7 #include <gdk/gdkkeysyms.h> | 7 #include <gdk/gdkkeysyms.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 kTaskManagerNetwork, | 64 kTaskManagerNetwork, |
| 65 kTaskManagerProcessID, | 65 kTaskManagerProcessID, |
| 66 kTaskManagerJavaScriptMemory, | 66 kTaskManagerJavaScriptMemory, |
| 67 kTaskManagerWebCoreImageCache, | 67 kTaskManagerWebCoreImageCache, |
| 68 kTaskManagerWebCoreScriptsCache, | 68 kTaskManagerWebCoreScriptsCache, |
| 69 kTaskManagerWebCoreCssCache, | 69 kTaskManagerWebCoreCssCache, |
| 70 kTaskManagerVideoMemory, | 70 kTaskManagerVideoMemory, |
| 71 kTaskManagerFPS, | 71 kTaskManagerFPS, |
| 72 kTaskManagerSqliteMemoryUsed, | 72 kTaskManagerSqliteMemoryUsed, |
| 73 kTaskManagerGoatsTeleported, | 73 kTaskManagerGoatsTeleported, |
| 74 // Columns below this point are not visible in the task manager. | |
| 75 kTaskManagerBackgroundColor, | |
| 76 kTaskManagerColumnCount, | 74 kTaskManagerColumnCount, |
| 77 }; | 75 }; |
| 78 | 76 |
| 79 const TaskManagerColumn kTaskManagerLastVisibleColumn = | 77 const TaskManagerColumn kTaskManagerLastVisibleColumn = |
| 80 kTaskManagerGoatsTeleported; | 78 kTaskManagerGoatsTeleported; |
| 81 | 79 |
| 82 static const GdkColor kHighlightColor = GDK_COLOR_RGB(0xff, 0xfa, 0xcd); | |
| 83 | |
| 84 TaskManagerColumn TaskManagerResourceIDToColumnID(int id) { | 80 TaskManagerColumn TaskManagerResourceIDToColumnID(int id) { |
| 85 switch (id) { | 81 switch (id) { |
| 86 case IDS_TASK_MANAGER_TASK_COLUMN: | 82 case IDS_TASK_MANAGER_TASK_COLUMN: |
| 87 return kTaskManagerTask; | 83 return kTaskManagerTask; |
| 88 case IDS_TASK_MANAGER_PROFILE_NAME_COLUMN: | 84 case IDS_TASK_MANAGER_PROFILE_NAME_COLUMN: |
| 89 return kTaskManagerProfileName; | 85 return kTaskManagerProfileName; |
| 90 case IDS_TASK_MANAGER_SHARED_MEM_COLUMN: | 86 case IDS_TASK_MANAGER_SHARED_MEM_COLUMN: |
| 91 return kTaskManagerSharedMem; | 87 return kTaskManagerSharedMem; |
| 92 case IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN: | 88 case IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN: |
| 93 return kTaskManagerPrivateMem; | 89 return kTaskManagerPrivateMem; |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 void TreeViewInsertTaskColumn(GtkWidget* treeview, int resid) { | 183 void TreeViewInsertTaskColumn(GtkWidget* treeview, int resid) { |
| 188 int colid = TaskManagerResourceIDToColumnID(resid); | 184 int colid = TaskManagerResourceIDToColumnID(resid); |
| 189 GtkTreeViewColumn* column = gtk_tree_view_column_new(); | 185 GtkTreeViewColumn* column = gtk_tree_view_column_new(); |
| 190 gtk_tree_view_column_set_title(column, | 186 gtk_tree_view_column_set_title(column, |
| 191 l10n_util::GetStringUTF8(resid).c_str()); | 187 l10n_util::GetStringUTF8(resid).c_str()); |
| 192 gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(treeview), colid); | 188 gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(treeview), colid); |
| 193 GtkCellRenderer* image_renderer = gtk_cell_renderer_pixbuf_new(); | 189 GtkCellRenderer* image_renderer = gtk_cell_renderer_pixbuf_new(); |
| 194 gtk_tree_view_column_pack_start(column, image_renderer, FALSE); | 190 gtk_tree_view_column_pack_start(column, image_renderer, FALSE); |
| 195 gtk_tree_view_column_add_attribute(column, image_renderer, | 191 gtk_tree_view_column_add_attribute(column, image_renderer, |
| 196 "pixbuf", kTaskManagerIcon); | 192 "pixbuf", kTaskManagerIcon); |
| 197 gtk_tree_view_column_add_attribute(column, image_renderer, | |
| 198 "cell-background-gdk", | |
| 199 kTaskManagerBackgroundColor); | |
| 200 GtkCellRenderer* text_renderer = gtk_cell_renderer_text_new(); | 193 GtkCellRenderer* text_renderer = gtk_cell_renderer_text_new(); |
| 201 gtk_tree_view_column_pack_start(column, text_renderer, TRUE); | 194 gtk_tree_view_column_pack_start(column, text_renderer, TRUE); |
| 202 gtk_tree_view_column_add_attribute(column, text_renderer, "markup", colid); | 195 gtk_tree_view_column_add_attribute(column, text_renderer, "markup", colid); |
| 203 gtk_tree_view_column_add_attribute(column, text_renderer, | |
| 204 "cell-background-gdk", | |
| 205 kTaskManagerBackgroundColor); | |
| 206 gtk_tree_view_column_set_resizable(column, TRUE); | 196 gtk_tree_view_column_set_resizable(column, TRUE); |
| 207 // This is temporary: we'll turn expanding off after getting the size. | 197 // This is temporary: we'll turn expanding off after getting the size. |
| 208 gtk_tree_view_column_set_expand(column, TRUE); | 198 gtk_tree_view_column_set_expand(column, TRUE); |
| 209 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); | 199 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); |
| 210 gtk_tree_view_column_set_sort_column_id(column, colid); | 200 gtk_tree_view_column_set_sort_column_id(column, colid); |
| 211 } | 201 } |
| 212 | 202 |
| 213 // Inserts a column with a column id of |colid| and |name|. | 203 // Inserts a column with a column id of |colid| and |name|. |
| 214 void TreeViewInsertColumnWithName(GtkWidget* treeview, | 204 void TreeViewInsertColumnWithName(GtkWidget* treeview, |
| 215 TaskManagerColumn colid, const char* name) { | 205 TaskManagerColumn colid, const char* name) { |
| 216 GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); | 206 GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); |
| 217 gtk_tree_view_insert_column_with_attributes( | 207 gtk_tree_view_insert_column_with_attributes( |
| 218 GTK_TREE_VIEW(treeview), -1, | 208 GTK_TREE_VIEW(treeview), -1, |
| 219 name, renderer, | 209 name, renderer, |
| 220 "text", colid, | 210 "text", colid, |
| 221 "cell-background-gdk", kTaskManagerBackgroundColor, | |
| 222 NULL); | 211 NULL); |
| 223 GtkTreeViewColumn* column = gtk_tree_view_get_column( | 212 GtkTreeViewColumn* column = gtk_tree_view_get_column( |
| 224 GTK_TREE_VIEW(treeview), TreeViewColumnIndexFromID(colid)); | 213 GTK_TREE_VIEW(treeview), TreeViewColumnIndexFromID(colid)); |
| 225 gtk_tree_view_column_set_resizable(column, TRUE); | 214 gtk_tree_view_column_set_resizable(column, TRUE); |
| 226 gtk_tree_view_column_set_sort_column_id(column, colid); | 215 gtk_tree_view_column_set_sort_column_id(column, colid); |
| 227 } | 216 } |
| 228 | 217 |
| 229 // Loads the column name from |resid| and uses the corresponding | 218 // Loads the column name from |resid| and uses the corresponding |
| 230 // TaskManagerColumn value as the column id to insert into the treeview. | 219 // TaskManagerColumn value as the column id to insert into the treeview. |
| 231 void TreeViewInsertColumn(GtkWidget* treeview, int resid) { | 220 void TreeViewInsertColumn(GtkWidget* treeview, int resid) { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 scoped_ptr<ui::SimpleMenuModel> menu_model_; | 297 scoped_ptr<ui::SimpleMenuModel> menu_model_; |
| 309 scoped_ptr<MenuGtk> menu_; | 298 scoped_ptr<MenuGtk> menu_; |
| 310 | 299 |
| 311 // The TaskManager the context menu was brought up for. Set to NULL when the | 300 // The TaskManager the context menu was brought up for. Set to NULL when the |
| 312 // menu is canceled. | 301 // menu is canceled. |
| 313 TaskManagerGtk* task_manager_; | 302 TaskManagerGtk* task_manager_; |
| 314 | 303 |
| 315 DISALLOW_COPY_AND_ASSIGN(ContextMenuController); | 304 DISALLOW_COPY_AND_ASSIGN(ContextMenuController); |
| 316 }; | 305 }; |
| 317 | 306 |
| 318 TaskManagerGtk::TaskManagerGtk(bool highlight_background_resources) | 307 TaskManagerGtk::TaskManagerGtk() |
| 319 : task_manager_(TaskManager::GetInstance()), | 308 : task_manager_(TaskManager::GetInstance()), |
| 320 model_(TaskManager::GetInstance()->model()), | 309 model_(TaskManager::GetInstance()->model()), |
| 321 dialog_(NULL), | 310 dialog_(NULL), |
| 322 treeview_(NULL), | 311 treeview_(NULL), |
| 323 process_list_(NULL), | 312 process_list_(NULL), |
| 324 process_count_(0), | 313 process_count_(0), |
| 325 ignore_selection_changed_(false), | 314 ignore_selection_changed_(false) { |
| 326 highlight_background_resources_(highlight_background_resources) { | |
| 327 Init(); | 315 Init(); |
| 328 } | 316 } |
| 329 | 317 |
| 330 // static | 318 // static |
| 331 TaskManagerGtk* TaskManagerGtk::instance_ = NULL; | 319 TaskManagerGtk* TaskManagerGtk::instance_ = NULL; |
| 332 | 320 |
| 333 TaskManagerGtk::~TaskManagerGtk() { | 321 TaskManagerGtk::~TaskManagerGtk() { |
| 334 model_->RemoveObserver(this); | 322 model_->RemoveObserver(this); |
| 335 task_manager_->OnWindowClosed(); | 323 task_manager_->OnWindowClosed(); |
| 336 | 324 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 //////////////////////////////////////////////////////////////////////////////// | 408 //////////////////////////////////////////////////////////////////////////////// |
| 421 // TaskManagerGtk, public: | 409 // TaskManagerGtk, public: |
| 422 | 410 |
| 423 void TaskManagerGtk::Close() { | 411 void TaskManagerGtk::Close() { |
| 424 // Blow away our dialog - this will cause TaskManagerGtk to free itself. | 412 // Blow away our dialog - this will cause TaskManagerGtk to free itself. |
| 425 gtk_widget_destroy(dialog_); | 413 gtk_widget_destroy(dialog_); |
| 426 DCHECK(!instance_); | 414 DCHECK(!instance_); |
| 427 } | 415 } |
| 428 | 416 |
| 429 // static | 417 // static |
| 430 void TaskManagerGtk::Show(bool highlight_background_resources) { | 418 void TaskManagerGtk::Show() { |
| 431 if (instance_ && | |
| 432 instance_->highlight_background_resources_ != | |
| 433 highlight_background_resources) { | |
| 434 instance_->Close(); | |
| 435 DCHECK(!instance_); | |
| 436 } | |
| 437 | |
| 438 if (instance_) { | 419 if (instance_) { |
| 439 // If there's a Task manager window open already, just activate it. | 420 // If there's a Task manager window open already, just activate it. |
| 440 gtk_util::PresentWindow(instance_->dialog_, 0); | 421 gtk_util::PresentWindow(instance_->dialog_, 0); |
| 441 } else { | 422 } else { |
| 442 instance_ = new TaskManagerGtk(highlight_background_resources); | 423 instance_ = new TaskManagerGtk(); |
| 443 instance_->model_->StartUpdating(); | 424 instance_->model_->StartUpdating(); |
| 444 } | 425 } |
| 445 } | 426 } |
| 446 | 427 |
| 447 //////////////////////////////////////////////////////////////////////////////// | 428 //////////////////////////////////////////////////////////////////////////////// |
| 448 // TaskManagerGtk, private: | 429 // TaskManagerGtk, private: |
| 449 | 430 |
| 450 void TaskManagerGtk::Init() { | 431 void TaskManagerGtk::Init() { |
| 451 dialog_ = gtk_dialog_new_with_buttons( | 432 dialog_ = gtk_dialog_new_with_buttons( |
| 452 l10n_util::GetStringUTF8(IDS_TASK_MANAGER_TITLE).c_str(), | 433 l10n_util::GetStringUTF8(IDS_TASK_MANAGER_TITLE).c_str(), |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 GDK_w, GDK_CONTROL_MASK, GtkAccelFlags(0), | 558 GDK_w, GDK_CONTROL_MASK, GtkAccelFlags(0), |
| 578 g_cclosure_new(G_CALLBACK(OnGtkAcceleratorThunk), | 559 g_cclosure_new(G_CALLBACK(OnGtkAcceleratorThunk), |
| 579 this, NULL)); | 560 this, NULL)); |
| 580 } | 561 } |
| 581 | 562 |
| 582 void TaskManagerGtk::CreateTaskManagerTreeview() { | 563 void TaskManagerGtk::CreateTaskManagerTreeview() { |
| 583 process_list_ = gtk_list_store_new(kTaskManagerColumnCount, | 564 process_list_ = gtk_list_store_new(kTaskManagerColumnCount, |
| 584 GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, | 565 GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, |
| 585 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, | 566 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, |
| 586 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, | 567 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, |
| 587 G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_COLOR); | 568 G_TYPE_STRING, G_TYPE_STRING); |
| 588 | 569 |
| 589 // Support sorting on all columns. | 570 // Support sorting on all columns. |
| 590 process_list_sort_ = gtk_tree_model_sort_new_with_model( | 571 process_list_sort_ = gtk_tree_model_sort_new_with_model( |
| 591 GTK_TREE_MODEL(process_list_)); | 572 GTK_TREE_MODEL(process_list_)); |
| 592 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(process_list_sort_), | 573 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(process_list_sort_), |
| 593 kTaskManagerTask, | 574 kTaskManagerTask, |
| 594 ComparePage, this, NULL); | 575 ComparePage, this, NULL); |
| 595 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(process_list_sort_), | 576 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(process_list_sort_), |
| 596 kTaskManagerTask, | 577 kTaskManagerTask, |
| 597 CompareProfileName, this, NULL); | 578 CompareProfileName, this, NULL); |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 fps = GetModelText(row, IDS_TASK_MANAGER_FPS_COLUMN); | 710 fps = GetModelText(row, IDS_TASK_MANAGER_FPS_COLUMN); |
| 730 std::string sqlite_memory; | 711 std::string sqlite_memory; |
| 731 if (TreeViewColumnIsVisible(treeview_, kTaskManagerSqliteMemoryUsed)) { | 712 if (TreeViewColumnIsVisible(treeview_, kTaskManagerSqliteMemoryUsed)) { |
| 732 sqlite_memory = | 713 sqlite_memory = |
| 733 GetModelText(row, IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN); | 714 GetModelText(row, IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN); |
| 734 } | 715 } |
| 735 | 716 |
| 736 std::string goats = | 717 std::string goats = |
| 737 GetModelText(row, IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN); | 718 GetModelText(row, IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN); |
| 738 | 719 |
| 739 bool is_background = model_->IsBackgroundResource(row) && | |
| 740 highlight_background_resources_; | |
| 741 gtk_list_store_set(process_list_, iter, | 720 gtk_list_store_set(process_list_, iter, |
| 742 kTaskManagerIcon, icon, | 721 kTaskManagerIcon, icon, |
| 743 kTaskManagerTask, task_markup, | 722 kTaskManagerTask, task_markup, |
| 744 kTaskManagerProfileName, profile_name.c_str(), | 723 kTaskManagerProfileName, profile_name.c_str(), |
| 745 kTaskManagerSharedMem, shared_mem.c_str(), | 724 kTaskManagerSharedMem, shared_mem.c_str(), |
| 746 kTaskManagerPrivateMem, priv_mem.c_str(), | 725 kTaskManagerPrivateMem, priv_mem.c_str(), |
| 747 kTaskManagerCPU, cpu.c_str(), | 726 kTaskManagerCPU, cpu.c_str(), |
| 748 kTaskManagerNetwork, net.c_str(), | 727 kTaskManagerNetwork, net.c_str(), |
| 749 kTaskManagerProcessID, procid.c_str(), | 728 kTaskManagerProcessID, procid.c_str(), |
| 750 kTaskManagerJavaScriptMemory, javascript_memory.c_str(), | 729 kTaskManagerJavaScriptMemory, javascript_memory.c_str(), |
| 751 kTaskManagerWebCoreImageCache, wk_img_cache.c_str(), | 730 kTaskManagerWebCoreImageCache, wk_img_cache.c_str(), |
| 752 kTaskManagerWebCoreScriptsCache, wk_scripts_cache.c_str(), | 731 kTaskManagerWebCoreScriptsCache, wk_scripts_cache.c_str(), |
| 753 kTaskManagerWebCoreCssCache, wk_css_cache.c_str(), | 732 kTaskManagerWebCoreCssCache, wk_css_cache.c_str(), |
| 754 kTaskManagerVideoMemory, video_memory.c_str(), | 733 kTaskManagerVideoMemory, video_memory.c_str(), |
| 755 kTaskManagerFPS, fps.c_str(), | 734 kTaskManagerFPS, fps.c_str(), |
| 756 kTaskManagerSqliteMemoryUsed, sqlite_memory.c_str(), | 735 kTaskManagerSqliteMemoryUsed, sqlite_memory.c_str(), |
| 757 kTaskManagerGoatsTeleported, goats.c_str(), | 736 kTaskManagerGoatsTeleported, goats.c_str(), |
| 758 kTaskManagerBackgroundColor, | |
| 759 is_background ? &kHighlightColor : NULL, | |
| 760 -1); | 737 -1); |
| 761 g_object_unref(icon); | 738 g_object_unref(icon); |
| 762 g_free(task_markup); | 739 g_free(task_markup); |
| 763 } | 740 } |
| 764 | 741 |
| 765 void TaskManagerGtk::KillSelectedProcesses() { | 742 void TaskManagerGtk::KillSelectedProcesses() { |
| 766 GtkTreeSelection* selection = gtk_tree_view_get_selection( | 743 GtkTreeSelection* selection = gtk_tree_view_get_selection( |
| 767 GTK_TREE_VIEW(treeview_)); | 744 GTK_TREE_VIEW(treeview_)); |
| 768 | 745 |
| 769 GtkTreeModel* model; | 746 GtkTreeModel* model; |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 962 // is destroyed. The deleted object will receive gtk signals otherwise. | 939 // is destroyed. The deleted object will receive gtk signals otherwise. |
| 963 gtk_dialog_response(GTK_DIALOG(dialog_), GTK_RESPONSE_DELETE_EVENT); | 940 gtk_dialog_response(GTK_DIALOG(dialog_), GTK_RESPONSE_DELETE_EVENT); |
| 964 } | 941 } |
| 965 | 942 |
| 966 return TRUE; | 943 return TRUE; |
| 967 } | 944 } |
| 968 | 945 |
| 969 namespace chrome { | 946 namespace chrome { |
| 970 | 947 |
| 971 // Declared in browser_dialogs.h. | 948 // Declared in browser_dialogs.h. |
| 972 void ShowTaskManager(Browser* browser, bool highlight_background_resources) { | 949 void ShowTaskManager(Browser* browser) { |
| 973 TaskManagerGtk::Show(highlight_background_resources); | 950 TaskManagerGtk::Show(); |
| 974 } | 951 } |
| 975 | 952 |
| 976 } // namespace chrome | 953 } // namespace chrome |
| OLD | NEW |