Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(438)

Unified Diff: chrome/browser/task_manager/task_manager.cc

Issue 10854076: Add GPU memory tab to the task manager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporate taskman feedback Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/task_manager/task_manager.cc
diff --git a/chrome/browser/task_manager/task_manager.cc b/chrome/browser/task_manager/task_manager.cc
index f089752cdcbc72e4bfa89ecc52713773ae4bc98e..eb7c87ee38f3dac21a40cc8a3c5d6cf649079a47 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_vidmem_usage_stats_update_(false),
+ update_requests_(0),
listen_requests_(0),
update_state_(IDLE),
goat_salt_(base::RandUint64()),
@@ -255,6 +258,26 @@ string16 TaskManagerModel::GetResourceWebCoreCSSCacheSize(
return FormatStatsSize(stats.cssStyleSheets);
}
+string16 TaskManagerModel::GetResourceVidmem(
+ int index) const {
brettw 2012/08/17 19:07:24 Doesn't this fit on the previous line?
ccameron 2012/08/17 20:52:55 Done.
+ CHECK_LT(index, ResourceCount());
+
+ bool result;
+ size_t vidmem;
+ bool has_duplicates;
+ result = GetVidmem(index, &vidmem, &has_duplicates);
+
+ if (!result || !vidmem) {
+ return ASCIIToUTF16("N/A");
brettw 2012/08/17 19:07:24 It's not clear why you're using ASCII in this plac
ccameron 2012/08/17 20:52:55 The other instances of N/A use ASCII -- I changed
+ } else if (has_duplicates) {
+ return UTF8ToUTF16("(") +
+ GetMemCellText(vidmem) +
+ UTF8ToUTF16(")");
+ } else {
+ return GetMemCellText(vidmem);
+ }
+}
+
string16 TaskManagerModel::GetResourceFPS(
int index) const {
CHECK_LT(index, ResourceCount());
@@ -448,6 +471,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_VIDMEM_COLUMN) {
+ size_t value1;
+ size_t value2;
+ bool has_duplicates;
+ if (!GetVidmem(row1, &value1, &has_duplicates)) value1 = 0;
+ if (!GetVidmem(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 +597,22 @@ bool TaskManagerModel::GetWebCoreCacheStats(
return true;
}
+bool TaskManagerModel::GetVidmem(
+ int index, size_t* vidmem, bool* has_duplicates) const {
+ TaskManager::Resource* resource = resources_[index];
+ base::ProcessId pid = base::GetProcId(resource->GetProcess());
+ content::GPUVidmemUsageStats::ProcessMap::const_iterator i =
+ vidmem_usage_stats_.process_map.find(pid);
+ if (i == vidmem_usage_stats_.process_map.end()) {
+ *vidmem = 0;
+ *has_duplicates = false;
+ return false;
+ }
+ *vidmem = (*i).second.vidmem;
+ *has_duplicates = (*i).second.has_duplicates;
+ return true;
+}
+
bool TaskManagerModel::GetFPS(int index, float* result) const {
*result = 0;
if (!resources_[index]->ReportsFPS())
@@ -885,6 +931,13 @@ void TaskManagerModel::NotifyFPS(base::ProcessId renderer_id,
}
}
+void TaskManagerModel::NotifyVidmemUsageStats(
+ const content::GPUVidmemUsageStats& vidmem_usage_stats) {
+ DCHECK(pending_vidmem_usage_stats_update_);
+ vidmem_usage_stats_ = vidmem_usage_stats;
+ pending_vidmem_usage_stats_update_ = false;
+}
+
void TaskManagerModel::NotifyV8HeapStats(base::ProcessId renderer_id,
size_t v8_memory_allocated,
size_t v8_memory_used) {
@@ -896,6 +949,48 @@ 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 NotifyVidmemUsageStats(
+ content::GPUVidmemUsageStats vidmem_usage_stats) {
+ TaskManager::GetInstance()->model()->NotifyVidmemUsageStats(
+ vidmem_usage_stats);
+ }
+
+ virtual void OnGpuInfoUpdate() OVERRIDE {}
+
+ virtual void OnVidmemUsageStatsUpdate(
+ const content::GPUVidmemUsageStats& vidmem_usage_stats) OVERRIDE {
+ if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ NotifyVidmemUsageStats(vidmem_usage_stats);
+ } else {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE, base::Bind(
+ &TaskManagerModelGpuDataManagerObserver::NotifyVidmemUsageStats,
+ vidmem_usage_stats));
+ }
+ delete this;
+ }
+};
+
+void TaskManagerModel::RefreshVidmemUsageStats()
+{
+ if (pending_vidmem_usage_stats_update_) return;
+ pending_vidmem_usage_stats_update_ = true;
+ new TaskManagerModelGpuDataManagerObserver;
+ content::GpuDataManager::GetInstance()->RequestVidmemUsageStatsUpdate();
+}
+
void TaskManagerModel::Refresh() {
DCHECK_NE(IDLE, update_state_);
@@ -928,6 +1023,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
+ RefreshVidmemUsageStats();
+
// Compute the new network usage values.
displayed_network_usage_map_.clear();
base::TimeDelta update_time =

Powered by Google App Engine
This is Rietveld 408576698