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(); | |
217 gtk_tree_view_insert_column_with_attributes( | |
218 GTK_TREE_VIEW(treeview), -1, | |
219 name, renderer, | |
220 "text", colid, | |
221 "cell-background-gdk", kTaskManagerBackgroundColor, | |
222 NULL); | |
223 GtkTreeViewColumn* column = gtk_tree_view_get_column( | 206 GtkTreeViewColumn* column = gtk_tree_view_get_column( |
224 GTK_TREE_VIEW(treeview), TreeViewColumnIndexFromID(colid)); | 207 GTK_TREE_VIEW(treeview), TreeViewColumnIndexFromID(colid)); |
225 gtk_tree_view_column_set_resizable(column, TRUE); | 208 gtk_tree_view_column_set_resizable(column, TRUE); |
226 gtk_tree_view_column_set_sort_column_id(column, colid); | 209 gtk_tree_view_column_set_sort_column_id(column, colid); |
227 } | 210 } |
228 | 211 |
229 // Loads the column name from |resid| and uses the corresponding | 212 // Loads the column name from |resid| and uses the corresponding |
230 // TaskManagerColumn value as the column id to insert into the treeview. | 213 // TaskManagerColumn value as the column id to insert into the treeview. |
231 void TreeViewInsertColumn(GtkWidget* treeview, int resid) { | 214 void TreeViewInsertColumn(GtkWidget* treeview, int resid) { |
232 TreeViewInsertColumnWithName(treeview, TaskManagerResourceIDToColumnID(resid), | 215 TreeViewInsertColumnWithName(treeview, TaskManagerResourceIDToColumnID(resid), |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 scoped_ptr<ui::SimpleMenuModel> menu_model_; | 291 scoped_ptr<ui::SimpleMenuModel> menu_model_; |
309 scoped_ptr<MenuGtk> menu_; | 292 scoped_ptr<MenuGtk> menu_; |
310 | 293 |
311 // The TaskManager the context menu was brought up for. Set to NULL when the | 294 // The TaskManager the context menu was brought up for. Set to NULL when the |
312 // menu is canceled. | 295 // menu is canceled. |
313 TaskManagerGtk* task_manager_; | 296 TaskManagerGtk* task_manager_; |
314 | 297 |
315 DISALLOW_COPY_AND_ASSIGN(ContextMenuController); | 298 DISALLOW_COPY_AND_ASSIGN(ContextMenuController); |
316 }; | 299 }; |
317 | 300 |
318 TaskManagerGtk::TaskManagerGtk(bool highlight_background_resources) | 301 TaskManagerGtk::TaskManagerGtk() |
319 : task_manager_(TaskManager::GetInstance()), | 302 : task_manager_(TaskManager::GetInstance()), |
320 model_(TaskManager::GetInstance()->model()), | 303 model_(TaskManager::GetInstance()->model()), |
321 dialog_(NULL), | 304 dialog_(NULL), |
322 treeview_(NULL), | 305 treeview_(NULL), |
323 process_list_(NULL), | 306 process_list_(NULL), |
324 process_count_(0), | 307 process_count_(0), |
325 ignore_selection_changed_(false), | 308 ignore_selection_changed_(false) { |
326 highlight_background_resources_(highlight_background_resources) { | |
327 Init(); | 309 Init(); |
328 } | 310 } |
329 | 311 |
330 // static | 312 // static |
331 TaskManagerGtk* TaskManagerGtk::instance_ = NULL; | 313 TaskManagerGtk* TaskManagerGtk::instance_ = NULL; |
332 | 314 |
333 TaskManagerGtk::~TaskManagerGtk() { | 315 TaskManagerGtk::~TaskManagerGtk() { |
334 model_->RemoveObserver(this); | 316 model_->RemoveObserver(this); |
335 task_manager_->OnWindowClosed(); | 317 task_manager_->OnWindowClosed(); |
336 | 318 |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 //////////////////////////////////////////////////////////////////////////////// | 402 //////////////////////////////////////////////////////////////////////////////// |
421 // TaskManagerGtk, public: | 403 // TaskManagerGtk, public: |
422 | 404 |
423 void TaskManagerGtk::Close() { | 405 void TaskManagerGtk::Close() { |
424 // Blow away our dialog - this will cause TaskManagerGtk to free itself. | 406 // Blow away our dialog - this will cause TaskManagerGtk to free itself. |
425 gtk_widget_destroy(dialog_); | 407 gtk_widget_destroy(dialog_); |
426 DCHECK(!instance_); | 408 DCHECK(!instance_); |
427 } | 409 } |
428 | 410 |
429 // static | 411 // static |
430 void TaskManagerGtk::Show(bool highlight_background_resources) { | 412 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_) { | 413 if (instance_) { |
439 // If there's a Task manager window open already, just activate it. | 414 // If there's a Task manager window open already, just activate it. |
440 gtk_util::PresentWindow(instance_->dialog_, 0); | 415 gtk_util::PresentWindow(instance_->dialog_, 0); |
441 } else { | 416 } else { |
442 instance_ = new TaskManagerGtk(highlight_background_resources); | 417 instance_ = new TaskManagerGtk(); |
443 instance_->model_->StartUpdating(); | 418 instance_->model_->StartUpdating(); |
444 } | 419 } |
445 } | 420 } |
446 | 421 |
447 //////////////////////////////////////////////////////////////////////////////// | 422 //////////////////////////////////////////////////////////////////////////////// |
448 // TaskManagerGtk, private: | 423 // TaskManagerGtk, private: |
449 | 424 |
450 void TaskManagerGtk::Init() { | 425 void TaskManagerGtk::Init() { |
451 dialog_ = gtk_dialog_new_with_buttons( | 426 dialog_ = gtk_dialog_new_with_buttons( |
452 l10n_util::GetStringUTF8(IDS_TASK_MANAGER_TITLE).c_str(), | 427 l10n_util::GetStringUTF8(IDS_TASK_MANAGER_TITLE).c_str(), |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
729 fps = GetModelText(row, IDS_TASK_MANAGER_FPS_COLUMN); | 704 fps = GetModelText(row, IDS_TASK_MANAGER_FPS_COLUMN); |
730 std::string sqlite_memory; | 705 std::string sqlite_memory; |
731 if (TreeViewColumnIsVisible(treeview_, kTaskManagerSqliteMemoryUsed)) { | 706 if (TreeViewColumnIsVisible(treeview_, kTaskManagerSqliteMemoryUsed)) { |
732 sqlite_memory = | 707 sqlite_memory = |
733 GetModelText(row, IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN); | 708 GetModelText(row, IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN); |
734 } | 709 } |
735 | 710 |
736 std::string goats = | 711 std::string goats = |
737 GetModelText(row, IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN); | 712 GetModelText(row, IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN); |
738 | 713 |
739 bool is_background = model_->IsBackgroundResource(row) && | |
740 highlight_background_resources_; | |
741 gtk_list_store_set(process_list_, iter, | 714 gtk_list_store_set(process_list_, iter, |
742 kTaskManagerIcon, icon, | 715 kTaskManagerIcon, icon, |
743 kTaskManagerTask, task_markup, | 716 kTaskManagerTask, task_markup, |
744 kTaskManagerProfileName, profile_name.c_str(), | 717 kTaskManagerProfileName, profile_name.c_str(), |
745 kTaskManagerSharedMem, shared_mem.c_str(), | 718 kTaskManagerSharedMem, shared_mem.c_str(), |
746 kTaskManagerPrivateMem, priv_mem.c_str(), | 719 kTaskManagerPrivateMem, priv_mem.c_str(), |
747 kTaskManagerCPU, cpu.c_str(), | 720 kTaskManagerCPU, cpu.c_str(), |
748 kTaskManagerNetwork, net.c_str(), | 721 kTaskManagerNetwork, net.c_str(), |
749 kTaskManagerProcessID, procid.c_str(), | 722 kTaskManagerProcessID, procid.c_str(), |
750 kTaskManagerJavaScriptMemory, javascript_memory.c_str(), | 723 kTaskManagerJavaScriptMemory, javascript_memory.c_str(), |
751 kTaskManagerWebCoreImageCache, wk_img_cache.c_str(), | 724 kTaskManagerWebCoreImageCache, wk_img_cache.c_str(), |
752 kTaskManagerWebCoreScriptsCache, wk_scripts_cache.c_str(), | 725 kTaskManagerWebCoreScriptsCache, wk_scripts_cache.c_str(), |
753 kTaskManagerWebCoreCssCache, wk_css_cache.c_str(), | 726 kTaskManagerWebCoreCssCache, wk_css_cache.c_str(), |
754 kTaskManagerVideoMemory, video_memory.c_str(), | 727 kTaskManagerVideoMemory, video_memory.c_str(), |
755 kTaskManagerFPS, fps.c_str(), | 728 kTaskManagerFPS, fps.c_str(), |
756 kTaskManagerSqliteMemoryUsed, sqlite_memory.c_str(), | 729 kTaskManagerSqliteMemoryUsed, sqlite_memory.c_str(), |
757 kTaskManagerGoatsTeleported, goats.c_str(), | 730 kTaskManagerGoatsTeleported, goats.c_str(), |
758 kTaskManagerBackgroundColor, | |
759 is_background ? &kHighlightColor : NULL, | |
760 -1); | 731 -1); |
761 g_object_unref(icon); | 732 g_object_unref(icon); |
762 g_free(task_markup); | 733 g_free(task_markup); |
763 } | 734 } |
764 | 735 |
765 void TaskManagerGtk::KillSelectedProcesses() { | 736 void TaskManagerGtk::KillSelectedProcesses() { |
766 GtkTreeSelection* selection = gtk_tree_view_get_selection( | 737 GtkTreeSelection* selection = gtk_tree_view_get_selection( |
767 GTK_TREE_VIEW(treeview_)); | 738 GTK_TREE_VIEW(treeview_)); |
768 | 739 |
769 GtkTreeModel* model; | 740 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. | 933 // is destroyed. The deleted object will receive gtk signals otherwise. |
963 gtk_dialog_response(GTK_DIALOG(dialog_), GTK_RESPONSE_DELETE_EVENT); | 934 gtk_dialog_response(GTK_DIALOG(dialog_), GTK_RESPONSE_DELETE_EVENT); |
964 } | 935 } |
965 | 936 |
966 return TRUE; | 937 return TRUE; |
967 } | 938 } |
968 | 939 |
969 namespace chrome { | 940 namespace chrome { |
970 | 941 |
971 // Declared in browser_dialogs.h. | 942 // Declared in browser_dialogs.h. |
972 void ShowTaskManager(Browser* browser, bool highlight_background_resources) { | 943 void ShowTaskManager(Browser* browser) { |
973 TaskManagerGtk::Show(highlight_background_resources); | 944 TaskManagerGtk::Show(); |
974 } | 945 } |
975 | 946 |
976 } // namespace chrome | 947 } // namespace chrome |
OLD | NEW |