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 |