diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/app/generated_resources.grd | 6 | ||||
-rw-r--r-- | chrome/browser/component_updater/swiftshader_component_installer.cc | 3 | ||||
-rw-r--r-- | chrome/browser/gpu_blacklist.h | 2 | ||||
-rw-r--r-- | chrome/browser/gpu_feature_checker.h | 3 | ||||
-rw-r--r-- | chrome/browser/resources/task_manager/defines.js | 1 | ||||
-rw-r--r-- | chrome/browser/resources/task_manager/main.js | 4 | ||||
-rw-r--r-- | chrome/browser/task_manager/task_manager.cc | 101 | ||||
-rw-r--r-- | chrome/browser/task_manager/task_manager.h | 16 | ||||
-rw-r--r-- | chrome/browser/ui/cocoa/task_manager_mac.mm | 6 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/task_manager_gtk.cc | 19 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/task_manager_gtk.h | 7 | ||||
-rw-r--r-- | chrome/browser/ui/views/task_manager_view.cc | 7 | ||||
-rw-r--r-- | chrome/browser/ui/webui/flash_ui.cc | 3 | ||||
-rw-r--r-- | chrome/browser/ui/webui/gpu_internals_ui.cc | 3 | ||||
-rw-r--r-- | chrome/browser/ui/webui/task_manager/task_manager_handler.cc | 13 | ||||
-rw-r--r-- | chrome/browser/ui/webui/task_manager/task_manager_ui.cc | 2 | ||||
-rw-r--r-- | chrome/browser/ui/webui/tracing_ui.cc | 2 |
17 files changed, 194 insertions, 4 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index facfede..f756418 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -4140,6 +4140,9 @@ Public Exponent (<ph name="PUBLIC_EXPONENT_NUM_BITS">$3<ex>24</ex></ph> bits): <message name="IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN" desc="Task manager WebCore CSS cache size column."> CSS cache </message> + <message name="IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN" desc="The text of the video memory usage column"> + GPU Memory + </message> <message name="IDS_TASK_MANAGER_FPS_COLUMN" desc="The text of the FPS column"> FPS </message> @@ -4202,6 +4205,9 @@ Public Exponent (<ph name="PUBLIC_EXPONENT_NUM_BITS">$3<ex>24</ex></ph> bits): <message name="IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN" desc="Task manager WebCore CSS cache size column."> CSS Cache </message> + <message name="IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN" desc="The text of the video memory usage column"> + GPU Memory + </message> <message name="IDS_TASK_MANAGER_FPS_COLUMN" desc="The text of the FPS column"> FPS </message> diff --git a/chrome/browser/component_updater/swiftshader_component_installer.cc b/chrome/browser/component_updater/swiftshader_component_installer.cc index f24828f..da38e19 100644 --- a/chrome/browser/component_updater/swiftshader_component_installer.cc +++ b/chrome/browser/component_updater/swiftshader_component_installer.cc @@ -165,6 +165,9 @@ class UpdateChecker : public content::GpuDataManagerObserver { explicit UpdateChecker(ComponentUpdateService* cus); virtual void OnGpuInfoUpdate() OVERRIDE; + virtual void OnVideoMemoryUsageStatsUpdate( + const content::GPUVideoMemoryUsageStats& video_memory_usage_stats) + OVERRIDE {} private: ComponentUpdateService* cus_; diff --git a/chrome/browser/gpu_blacklist.h b/chrome/browser/gpu_blacklist.h index a1eb385..c4c72c7 100644 --- a/chrome/browser/gpu_blacklist.h +++ b/chrome/browser/gpu_blacklist.h @@ -385,6 +385,8 @@ class GpuBlacklist : public content::GpuDataManagerObserver { // GpuDataManager::Observer implementation. virtual void OnGpuInfoUpdate() OVERRIDE; + virtual void OnVideoMemoryUsageStatsUpdate( + const content::GPUVideoMemoryUsageStats& video_memory) OVERRIDE {} // Returns the number of entries. This is only for tests. size_t num_entries() const; diff --git a/chrome/browser/gpu_feature_checker.h b/chrome/browser/gpu_feature_checker.h index dd54f32c..8e1d0ac 100644 --- a/chrome/browser/gpu_feature_checker.h +++ b/chrome/browser/gpu_feature_checker.h @@ -29,6 +29,9 @@ class GPUFeatureChecker : public base::RefCountedThreadSafe<GPUFeatureChecker>, // content::GpuDataManagerObserver virtual void OnGpuInfoUpdate() OVERRIDE; + virtual void OnVideoMemoryUsageStatsUpdate( + const content::GPUVideoMemoryUsageStats& video_memory_usage_stats) + OVERRIDE {} private: friend class base::RefCountedThreadSafe<GPUFeatureChecker>; diff --git a/chrome/browser/resources/task_manager/defines.js b/chrome/browser/resources/task_manager/defines.js index e66791e..51141fb 100644 --- a/chrome/browser/resources/task_manager/defines.js +++ b/chrome/browser/resources/task_manager/defines.js @@ -30,6 +30,7 @@ var DEFAULT_COLUMNS = [ ['webCoreScriptsCacheSize', 'webcoreScriptsCacheColumn', 120, false], ['webCoreCSSCacheSize', 'webcoreCSSCacheColumn', 120, false], ['fps', 'fpsColumn', 50, true], + ['videoMemory', 'videoMemoryColumn', 80, false], ['sqliteMemoryUsed', 'sqliteMemoryUsedColumn', 80, false], ['goatsTeleported', 'goatsTeleportedColumn', 80, false], ['v8MemoryAllocatedSize', 'javascriptMemoryAllocatedColumn', 120, false], diff --git a/chrome/browser/resources/task_manager/main.js b/chrome/browser/resources/task_manager/main.js index 3c0ae98..436089d 100644 --- a/chrome/browser/resources/task_manager/main.js +++ b/chrome/browser/resources/task_manager/main.js @@ -115,8 +115,8 @@ TaskManager.prototype = { var COLUMNS_SORTED_BY_VALUE = [ 'cpuUsage', 'physicalMemory', 'sharedMemory', 'privateMemory', 'networkUsage', 'webCoreImageCacheSize', 'webCoreScriptsCacheSize', - 'webCoreCSSCacheSize', 'fps', 'sqliteMemoryUsed', 'goatsTeleported', - 'v8MemoryAllocatedSize']; + 'webCoreCSSCacheSize', 'fps', 'videoMemory', 'sqliteMemoryUsed', + 'goatsTeleported', 'v8MemoryAllocatedSize']; for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { var columnId = DEFAULT_COLUMNS[i][0]; diff --git a/chrome/browser/task_manager/task_manager.cc b/chrome/browser/task_manager/task_manager.cc index f089752..241e8ca 100644 --- a/chrome/browser/task_manager/task_manager.cc +++ b/chrome/browser/task_manager/task_manager.cc @@ -31,6 +31,8 @@ #include "chrome/common/view_type.h" #include "content/public/browser/browser_child_process_host.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/gpu_data_manager.h" +#include "content/public/browser/gpu_data_manager_observer.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/resource_request_info.h" #include "content/public/browser/web_contents.h" @@ -83,7 +85,8 @@ string16 FormatStatsSize(const WebKit::WebCache::ResourceTypeStat& stat) { //////////////////////////////////////////////////////////////////////////////// TaskManagerModel::TaskManagerModel(TaskManager* task_manager) - : update_requests_(0), + : pending_video_memory_usage_stats_update_(false), + update_requests_(0), listen_requests_(0), update_state_(IDLE), goat_salt_(base::RandUint64()), @@ -255,6 +258,25 @@ string16 TaskManagerModel::GetResourceWebCoreCSSCacheSize( return FormatStatsSize(stats.cssStyleSheets); } +string16 TaskManagerModel::GetResourceVideoMemory(int index) const { + CHECK_LT(index, ResourceCount()); + + bool result; + size_t video_memory; + bool has_duplicates; + result = GetVideoMemory(index, &video_memory, &has_duplicates); + + if (!result || !video_memory) { + return ASCIIToUTF16("N/A"); + } else if (has_duplicates) { + return ASCIIToUTF16("(") + + GetMemCellText(video_memory) + + ASCIIToUTF16(")"); + } else { + return GetMemCellText(video_memory); + } +} + string16 TaskManagerModel::GetResourceFPS( int index) const { CHECK_LT(index, ResourceCount()); @@ -448,6 +470,13 @@ int TaskManagerModel::CompareValues(int row1, int row2, int col_id) const { } else if (col_id == IDS_TASK_MANAGER_FPS_COLUMN) { return ValueCompare<float>(resources_[row1]->GetFPS(), resources_[row2]->GetFPS()); + } else if (col_id == IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN) { + size_t value1; + size_t value2; + bool has_duplicates; + if (!GetVideoMemory(row1, &value1, &has_duplicates)) value1 = 0; + if (!GetVideoMemory(row2, &value2, &has_duplicates)) value2 = 0; + return ValueCompare<size_t>(value1, value2); } else if (col_id == IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN) { return ValueCompare<int>(GetGoatsTeleported(row1), GetGoatsTeleported(row2)); @@ -567,6 +596,22 @@ bool TaskManagerModel::GetWebCoreCacheStats( return true; } +bool TaskManagerModel::GetVideoMemory( + int index, size_t* video_memory, bool* has_duplicates) const { + TaskManager::Resource* resource = resources_[index]; + base::ProcessId pid = base::GetProcId(resource->GetProcess()); + content::GPUVideoMemoryUsageStats::ProcessMap::const_iterator i = + video_memory_usage_stats_.process_map.find(pid); + if (i == video_memory_usage_stats_.process_map.end()) { + *video_memory = 0; + *has_duplicates = false; + return false; + } + *video_memory = (*i).second.video_memory; + *has_duplicates = (*i).second.has_duplicates; + return true; +} + bool TaskManagerModel::GetFPS(int index, float* result) const { *result = 0; if (!resources_[index]->ReportsFPS()) @@ -885,6 +930,13 @@ void TaskManagerModel::NotifyFPS(base::ProcessId renderer_id, } } +void TaskManagerModel::NotifyVideoMemoryUsageStats( + const content::GPUVideoMemoryUsageStats& video_memory_usage_stats) { + DCHECK(pending_video_memory_usage_stats_update_); + video_memory_usage_stats_ = video_memory_usage_stats; + pending_video_memory_usage_stats_update_ = false; +} + void TaskManagerModel::NotifyV8HeapStats(base::ProcessId renderer_id, size_t v8_memory_allocated, size_t v8_memory_used) { @@ -896,6 +948,50 @@ void TaskManagerModel::NotifyV8HeapStats(base::ProcessId renderer_id, } } +class TaskManagerModelGpuDataManagerObserver + : public content::GpuDataManagerObserver { + public: + + TaskManagerModelGpuDataManagerObserver() { + content::GpuDataManager::GetInstance()->AddObserver(this); + } + + virtual ~TaskManagerModelGpuDataManagerObserver() { + content::GpuDataManager::GetInstance()->RemoveObserver(this); + } + + static void NotifyVideoMemoryUsageStats( + content::GPUVideoMemoryUsageStats video_memory_usage_stats) { + TaskManager::GetInstance()->model()->NotifyVideoMemoryUsageStats( + video_memory_usage_stats); + } + + virtual void OnGpuInfoUpdate() OVERRIDE {} + + virtual void OnVideoMemoryUsageStatsUpdate( + const content::GPUVideoMemoryUsageStats& video_memory_usage_stats) + OVERRIDE { + if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { + NotifyVideoMemoryUsageStats(video_memory_usage_stats); + } else { + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, base::Bind( + &TaskManagerModelGpuDataManagerObserver:: + NotifyVideoMemoryUsageStats, + video_memory_usage_stats)); + } + delete this; + } +}; + +void TaskManagerModel::RefreshVideoMemoryUsageStats() +{ + if (pending_video_memory_usage_stats_update_) return; + pending_video_memory_usage_stats_update_ = true; + new TaskManagerModelGpuDataManagerObserver; + content::GpuDataManager::GetInstance()->RequestVideoMemoryUsageStatsUpdate(); +} + void TaskManagerModel::Refresh() { DCHECK_NE(IDLE, update_state_); @@ -928,6 +1024,9 @@ void TaskManagerModel::Refresh() { // Clear the memory values so they can be querried lazily. memory_usage_map_.clear(); + // Send a request to refresh GPU memory consumption values + RefreshVideoMemoryUsageStats(); + // Compute the new network usage values. displayed_network_usage_map_.clear(); base::TimeDelta update_time = diff --git a/chrome/browser/task_manager/task_manager.h b/chrome/browser/task_manager/task_manager.h index 640d7a6..fc47ddc 100644 --- a/chrome/browser/task_manager/task_manager.h +++ b/chrome/browser/task_manager/task_manager.h @@ -18,6 +18,7 @@ #include "base/string16.h" #include "base/timer.h" #include "chrome/browser/renderer_host/web_cache_manager.h" +#include "content/public/common/gpu_memory_stats.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h" class TaskManagerModel; @@ -312,6 +313,7 @@ class TaskManagerModel : public base::RefCountedThreadSafe<TaskManagerModel> { string16 GetResourceWebCoreImageCacheSize(int index) const; string16 GetResourceWebCoreScriptsCacheSize(int index) const; string16 GetResourceWebCoreCSSCacheSize(int index) const; + string16 GetResourceVideoMemory(int index) const; string16 GetResourceFPS(int index) const; string16 GetResourceSqliteMemoryUsed(int index) const; string16 GetResourceGoatsTeleported(int index) const; @@ -336,6 +338,11 @@ class TaskManagerModel : public base::RefCountedThreadSafe<TaskManagerModel> { bool GetWebCoreCacheStats(int index, WebKit::WebCache::ResourceTypeStats* result) const; + // Gets the GPU memory allocated of the given page. + bool GetVideoMemory(int index, + size_t* video_memory, + bool* has_duplicates) const; + // Gets the fps of the given page. Return false if the resource for the given // row isn't a renderer. bool GetFPS(int index, float* result) const; @@ -437,6 +444,9 @@ class TaskManagerModel : public base::RefCountedThreadSafe<TaskManagerModel> { int routing_id, float fps); + void NotifyVideoMemoryUsageStats( + const content::GPUVideoMemoryUsageStats& video_memory_usage_stats); + void NotifyV8HeapStats(base::ProcessId renderer_id, size_t v8_memory_allocated, size_t v8_memory_used); @@ -492,6 +502,8 @@ class TaskManagerModel : public base::RefCountedThreadSafe<TaskManagerModel> { // Updates the values for all rows. void Refresh(); + void RefreshVideoMemoryUsageStats(); + void AddItem(TaskManager::Resource* resource, bool notify_table); void RemoveItem(TaskManager::Resource* resource); @@ -556,6 +568,10 @@ class TaskManagerModel : public base::RefCountedThreadSafe<TaskManagerModel> { // A map that contains the CPU usage (in %) for a process since last refresh. CPUUsageMap cpu_usage_map_; + // A map that contains the video memory usage for a process + content::GPUVideoMemoryUsageStats video_memory_usage_stats_; + bool pending_video_memory_usage_stats_update_; + // A map that contains the private/shared memory usage of the process. We // cache this because the same APIs are called on linux and windows, and // because the linux call takes >10ms to complete. This cache is cleared on diff --git a/chrome/browser/ui/cocoa/task_manager_mac.mm b/chrome/browser/ui/cocoa/task_manager_mac.mm index 3f622c1..dcc571d 100644 --- a/chrome/browser/ui/cocoa/task_manager_mac.mm +++ b/chrome/browser/ui/cocoa/task_manager_mac.mm @@ -54,6 +54,8 @@ const struct ColumnWidth { arraysize("2000.0K (2000.0 live)") * kCharWidth, -1 }, { IDS_TASK_MANAGER_FPS_COLUMN, arraysize("100") * kCharWidth, -1 }, + { IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN, + arraysize("2000.0K") * kCharWidth, -1 }, { IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN, arraysize("800 kB") * kCharWidth, -1 }, { IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN, @@ -305,6 +307,7 @@ class SortHelper { visible:NO]; [self addColumnWithId:IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN visible:NO]; [self addColumnWithId:IDS_TASK_MANAGER_FPS_COLUMN visible:YES]; + [self addColumnWithId:IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN visible:NO]; [self addColumnWithId:IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN visible:NO]; [self addColumnWithId:IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN visible:NO]; @@ -488,6 +491,9 @@ class SortHelper { case IDS_TASK_MANAGER_FPS_COLUMN: return base::SysUTF16ToNSString(model_->GetResourceFPS(row)); + case IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN: + return base::SysUTF16ToNSString(model_->GetResourceVideoMemory(row)); + case IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN: if (!model_->IsResourceFirstInGroup(row)) return @""; diff --git a/chrome/browser/ui/gtk/task_manager_gtk.cc b/chrome/browser/ui/gtk/task_manager_gtk.cc index 7a93341..792308d 100644 --- a/chrome/browser/ui/gtk/task_manager_gtk.cc +++ b/chrome/browser/ui/gtk/task_manager_gtk.cc @@ -67,6 +67,7 @@ enum TaskManagerColumn { kTaskManagerWebCoreImageCache, kTaskManagerWebCoreScriptsCache, kTaskManagerWebCoreCssCache, + kTaskManagerVideoMemory, kTaskManagerFPS, kTaskManagerSqliteMemoryUsed, kTaskManagerGoatsTeleported, @@ -104,6 +105,8 @@ TaskManagerColumn TaskManagerResourceIDToColumnID(int id) { return kTaskManagerWebCoreScriptsCache; case IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN: return kTaskManagerWebCoreCssCache; + case IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN: + return kTaskManagerVideoMemory; case IDS_TASK_MANAGER_FPS_COLUMN: return kTaskManagerFPS; case IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN: @@ -140,6 +143,8 @@ int TaskManagerColumnIDToResourceID(int id) { return IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN; case kTaskManagerWebCoreCssCache: return IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN; + case kTaskManagerVideoMemory: + return IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN; case kTaskManagerFPS: return IDS_TASK_MANAGER_FPS_COLUMN; case kTaskManagerSqliteMemoryUsed: @@ -579,7 +584,7 @@ void TaskManagerGtk::CreateTaskManagerTreeview() { process_list_ = gtk_list_store_new(kTaskManagerColumnCount, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, - G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_COLOR); // Support sorting on all columns. @@ -619,6 +624,9 @@ void TaskManagerGtk::CreateTaskManagerTreeview() { kTaskManagerWebCoreCssCache, CompareWebCoreCssCache, this, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(process_list_sort_), + kTaskManagerVideoMemory, + CompareVideoMemory, this, NULL); + gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(process_list_sort_), kTaskManagerFPS, CompareFPS, this, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(process_list_sort_), @@ -643,6 +651,7 @@ void TaskManagerGtk::CreateTaskManagerTreeview() { TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN); TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN); + TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN); TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_FPS_COLUMN); TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN); TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN); @@ -655,6 +664,7 @@ void TaskManagerGtk::CreateTaskManagerTreeview() { TreeViewColumnSetVisible(treeview_, kTaskManagerWebCoreImageCache, false); TreeViewColumnSetVisible(treeview_, kTaskManagerWebCoreScriptsCache, false); TreeViewColumnSetVisible(treeview_, kTaskManagerWebCoreCssCache, false); + TreeViewColumnSetVisible(treeview_, kTaskManagerVideoMemory, false); TreeViewColumnSetVisible(treeview_, kTaskManagerSqliteMemoryUsed, false); TreeViewColumnSetVisible(treeview_, kTaskManagerGoatsTeleported, false); @@ -716,6 +726,9 @@ std::string TaskManagerGtk::GetModelText(int row, int col_id) { case IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN: return UTF16ToUTF8(model_->GetResourceWebCoreCSSCacheSize(row)); + case IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN: + return UTF16ToUTF8(model_->GetResourceVideoMemory(row)); + case IDS_TASK_MANAGER_FPS_COLUMN: return UTF16ToUTF8(model_->GetResourceFPS(row)); @@ -778,6 +791,9 @@ void TaskManagerGtk::SetRowDataFromModel(int row, GtkTreeIter* iter) { wk_css_cache = GetModelText(row, IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN); } + std::string video_memory; + if (TreeViewColumnIsVisible(treeview_, kTaskManagerVideoMemory)) + video_memory = GetModelText(row, IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN); std::string fps; if (TreeViewColumnIsVisible(treeview_, kTaskManagerFPS)) fps = GetModelText(row, IDS_TASK_MANAGER_FPS_COLUMN); @@ -805,6 +821,7 @@ void TaskManagerGtk::SetRowDataFromModel(int row, GtkTreeIter* iter) { kTaskManagerWebCoreImageCache, wk_img_cache.c_str(), kTaskManagerWebCoreScriptsCache, wk_scripts_cache.c_str(), kTaskManagerWebCoreCssCache, wk_css_cache.c_str(), + kTaskManagerVideoMemory, video_memory.c_str(), kTaskManagerFPS, fps.c_str(), kTaskManagerSqliteMemoryUsed, sqlite_memory.c_str(), kTaskManagerGoatsTeleported, goats.c_str(), diff --git a/chrome/browser/ui/gtk/task_manager_gtk.h b/chrome/browser/ui/gtk/task_manager_gtk.h index 677bc93..7df063d 100644 --- a/chrome/browser/ui/gtk/task_manager_gtk.h +++ b/chrome/browser/ui/gtk/task_manager_gtk.h @@ -185,6 +185,13 @@ class TaskManagerGtk : public TaskManagerModelObserver { CompareImpl(model, a, b, IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN); } + // Video memory sorting callback. + static gint CompareVideoMemory(GtkTreeModel* model, GtkTreeIter* a, + GtkTreeIter* b, gpointer task_manager) { + return reinterpret_cast<TaskManagerGtk*>(task_manager)-> + CompareImpl(model, a, b, IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN); + } + // FPS sorting callback. static gint CompareFPS(GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b, gpointer task_manager) { diff --git a/chrome/browser/ui/views/task_manager_view.cc b/chrome/browser/ui/views/task_manager_view.cc index 164fa85..00a50d2 100644 --- a/chrome/browser/ui/views/task_manager_view.cc +++ b/chrome/browser/ui/views/task_manager_view.cc @@ -151,6 +151,9 @@ string16 TaskManagerTableModel::GetText(int row, int col_id) { case IDS_TASK_MANAGER_FPS_COLUMN: return model_->GetResourceFPS(row); + case IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN: + return model_->GetResourceVideoMemory(row); + case IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN: if (!model_->IsResourceFirstInGroup(row)) return string16(); @@ -426,6 +429,8 @@ void TaskManagerView::Init() { columns_.back().sortable = true; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_FPS_COLUMN, ui::TableColumn::RIGHT, -1, 0)); + columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN, + ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN, ui::TableColumn::RIGHT, -1, 0)); @@ -449,6 +454,8 @@ void TaskManagerView::Init() { false); tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN, false); + tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN, + false); tab_table_->SetColumnVisibility(IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN, false); tab_table_->SetColumnVisibility( diff --git a/chrome/browser/ui/webui/flash_ui.cc b/chrome/browser/ui/webui/flash_ui.cc index 6045026..21f5d62 100644 --- a/chrome/browser/ui/webui/flash_ui.cc +++ b/chrome/browser/ui/webui/flash_ui.cc @@ -91,6 +91,9 @@ class FlashDOMHandler : public WebUIMessageHandler, // GpuDataManager::Observer implementation. virtual void OnGpuInfoUpdate() OVERRIDE; + virtual void OnVideoMemoryUsageStatsUpdate( + const content::GPUVideoMemoryUsageStats& video_memory_usage_stats) + OVERRIDE {} // Callback for the "requestFlashInfo" message. void HandleRequestFlashInfo(const ListValue* args); diff --git a/chrome/browser/ui/webui/gpu_internals_ui.cc b/chrome/browser/ui/webui/gpu_internals_ui.cc index c55d267..9340e2e 100644 --- a/chrome/browser/ui/webui/gpu_internals_ui.cc +++ b/chrome/browser/ui/webui/gpu_internals_ui.cc @@ -68,6 +68,9 @@ class GpuMessageHandler // GpuDataManagerObserver implementation. virtual void OnGpuInfoUpdate() OVERRIDE; + virtual void OnVideoMemoryUsageStatsUpdate( + const content::GPUVideoMemoryUsageStats& video_memory_usage_stats) + OVERRIDE {} // CrashUploadList::Delegate implemenation. virtual void OnCrashListAvailable() OVERRIDE; diff --git a/chrome/browser/ui/webui/task_manager/task_manager_handler.cc b/chrome/browser/ui/webui/task_manager/task_manager_handler.cc index 35e0ce5..08ea4bb 100644 --- a/chrome/browser/ui/webui/task_manager/task_manager_handler.cc +++ b/chrome/browser/ui/webui/task_manager/task_manager_handler.cc @@ -104,6 +104,18 @@ Value* CreateColumnValue(const TaskManagerModel* tm, tm->GetFPS(i, &fps); return Value::CreateDoubleValue(fps); } + if (column_name == "videoMemory") + return Value::CreateStringValue(tm->GetResourceVideoMemory(i)); + if (column_name == "videoMemoryValue") { + size_t video_memory; + bool has_duplicates; + double value; + if (tm->GetVideoMemory(i, &video_memory, &has_duplicates)) + value = static_cast<double>(video_memory); + else + value = 0; + return Value::CreateDoubleValue(value); + } if (column_name == "sqliteMemoryUsed") return Value::CreateStringValue(tm->GetResourceSqliteMemoryUsed(i)); if (column_name == "sqliteMemoryUsedValue") { @@ -170,6 +182,7 @@ const ColumnType kColumnsList[] = { {"profileName", false, true}, {"networkUsage", true, true}, {"fps", true, true}, + {"videoMemory", true, false}, {"goatsTeleported", true, true}, {"canInspect", false, true}, {"canActivate", false, true} diff --git a/chrome/browser/ui/webui/task_manager/task_manager_ui.cc b/chrome/browser/ui/webui/task_manager/task_manager_ui.cc index a696f98..69f5734 100644 --- a/chrome/browser/ui/webui/task_manager/task_manager_ui.cc +++ b/chrome/browser/ui/webui/task_manager/task_manager_ui.cc @@ -55,6 +55,8 @@ ChromeWebUIDataSource* CreateTaskManagerUIHTMLSource() { IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN); source->AddLocalizedString("webcoreCSSCacheColumn", IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN); + source->AddLocalizedString("videoMemoryColumn", + IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN); source->AddLocalizedString("fpsColumn", IDS_TASK_MANAGER_FPS_COLUMN); source->AddLocalizedString("sqliteMemoryUsedColumn", IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN); diff --git a/chrome/browser/ui/webui/tracing_ui.cc b/chrome/browser/ui/webui/tracing_ui.cc index 3808fb2..72effee 100644 --- a/chrome/browser/ui/webui/tracing_ui.cc +++ b/chrome/browser/ui/webui/tracing_ui.cc @@ -90,6 +90,8 @@ class TracingMessageHandler // GpuDataManagerObserver implementation. virtual void OnGpuInfoUpdate() OVERRIDE; + virtual void OnVideoMemoryUsageStatsUpdate( + const content::GPUVideoMemoryUsageStats& video_memory) OVERRIDE {} // Messages. void OnTracingControllerInitialized(const ListValue* list); |