summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/app/generated_resources.grd6
-rw-r--r--chrome/browser/component_updater/swiftshader_component_installer.cc3
-rw-r--r--chrome/browser/gpu_blacklist.h2
-rw-r--r--chrome/browser/gpu_feature_checker.h3
-rw-r--r--chrome/browser/resources/task_manager/defines.js1
-rw-r--r--chrome/browser/resources/task_manager/main.js4
-rw-r--r--chrome/browser/task_manager/task_manager.cc101
-rw-r--r--chrome/browser/task_manager/task_manager.h16
-rw-r--r--chrome/browser/ui/cocoa/task_manager_mac.mm6
-rw-r--r--chrome/browser/ui/gtk/task_manager_gtk.cc19
-rw-r--r--chrome/browser/ui/gtk/task_manager_gtk.h7
-rw-r--r--chrome/browser/ui/views/task_manager_view.cc7
-rw-r--r--chrome/browser/ui/webui/flash_ui.cc3
-rw-r--r--chrome/browser/ui/webui/gpu_internals_ui.cc3
-rw-r--r--chrome/browser/ui/webui/task_manager/task_manager_handler.cc13
-rw-r--r--chrome/browser/ui/webui/task_manager/task_manager_ui.cc2
-rw-r--r--chrome/browser/ui/webui/tracing_ui.cc2
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);