diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-21 01:16:14 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-21 01:16:14 +0000 |
commit | 96373d08aa941358daef07d6a5c6ddf161ddb51a (patch) | |
tree | 1590cd0b69f14faf6fc687eaa8911f9631b53ddf /chrome/browser/task_manager.cc | |
parent | d345da8e3a16aa212e415eb58a259f45ca81ae77 (diff) | |
download | chromium_src-96373d08aa941358daef07d6a5c6ddf161ddb51a.zip chromium_src-96373d08aa941358daef07d6a5c6ddf161ddb51a.tar.gz chromium_src-96373d08aa941358daef07d6a5c6ddf161ddb51a.tar.bz2 |
Task Manager sorting:
- remove dead code that papered over the fact certain columns don't sort, replace with NOTREACHED pothole
- allow sorting by the javascript memory column.
- allow sorting by goats teleported (useful for debugging)
- stabilize \# of goats teleported (remove observer effect)
BUG=42037
TEST=sort by these columns in the task manager
Review URL: http://codereview.chromium.org/1706002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45139 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/task_manager.cc')
-rw-r--r-- | chrome/browser/task_manager.cc | 68 |
1 files changed, 39 insertions, 29 deletions
diff --git a/chrome/browser/task_manager.cc b/chrome/browser/task_manager.cc index 4418cae..fa46c81 100644 --- a/chrome/browser/task_manager.cc +++ b/chrome/browser/task_manager.cc @@ -10,7 +10,6 @@ #include "base/i18n/number_formatting.h" #include "base/i18n/rtl.h" #include "base/process_util.h" -#include "base/stats_table.h" #include "base/string_util.h" #include "base/thread.h" #include "chrome/browser/browser_list.h" @@ -69,7 +68,8 @@ std::wstring FormatStatsSize(const WebKit::WebCache::ResourceTypeStat& stat) { //////////////////////////////////////////////////////////////////////////////// TaskManagerModel::TaskManagerModel(TaskManager* task_manager) - : update_state_(IDLE) { + : update_state_(IDLE), + goat_salt_(rand()) { TaskManagerBrowserProcessResourceProvider* browser_provider = new TaskManagerBrowserProcessResourceProvider(task_manager); @@ -155,7 +155,7 @@ std::wstring TaskManagerModel::GetResourcePrivateMemory(int index) const { std::wstring TaskManagerModel::GetResourceSharedMemory(int index) const { size_t shared_mem; if (!GetSharedMemory(index, &shared_mem)) - return L"N/A"; + return L"N/A"; return GetMemCellText(shared_mem); } @@ -170,17 +170,9 @@ std::wstring TaskManagerModel::GetResourceProcessId(int index) const { return IntToWString(base::GetProcId(resources_[index]->GetProcess())); } -std::wstring TaskManagerModel::GetResourceStatsValue(int index, int col_id) - const { - DCHECK(index < ResourceCount()); - return IntToWString(GetStatsValue(resources_[index], col_id)); -} - std::wstring TaskManagerModel::GetResourceGoatsTeleported(int index) const { - // See design doc at http://go/at-teleporter for more information. DCHECK(index < ResourceCount()); - int goats_teleported = rand() & 15; - return UTF16ToWide(base::FormatNumber(goats_teleported)); + return UTF16ToWide(base::FormatNumber(GetGoatsTeleported(index))); } std::wstring TaskManagerModel::GetResourceWebCoreImageCacheSize( @@ -349,17 +341,34 @@ int TaskManagerModel::CompareValues(int row1, int row2, int col_id) const { stats1 = resources_[row1]->GetWebCoreCacheStats(); if (resources_[row2]->ReportsCacheStats()) stats2 = resources_[row2]->GetWebCoreCacheStats(); - if (col_id == IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN) + if (IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN == col_id) return ValueCompare<size_t>(stats1.images.size, stats2.images.size); - if (col_id == IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN) + if (IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN == col_id) return ValueCompare<size_t>(stats1.scripts.size, stats2.scripts.size); + DCHECK_EQ(IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN, col_id); return ValueCompare<size_t>(stats1.cssStyleSheets.size, stats2.cssStyleSheets.size); } + case IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN: { + return ValueCompare<int>(GetGoatsTeleported(row1), + GetGoatsTeleported(row2)); + } + + case IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN: { + size_t value1; + size_t value2; + bool reports_v8_memory1 = GetV8Memory(row1, &value1); + bool reports_v8_memory2 = GetV8Memory(row2, &value2); + if (reports_v8_memory1 == reports_v8_memory2) + return ValueCompare<size_t>(value1, value2); + else + return reports_v8_memory1 ? 1 : -1; + } + default: - return ValueCompare<int>(GetStatsValue(resources_[row1], col_id), - GetStatsValue(resources_[row2], col_id)); + NOTREACHED(); + return 0; } } @@ -435,19 +444,18 @@ bool TaskManagerModel::GetPhysicalMemory(int index, size_t* result) const { return true; } -int TaskManagerModel::GetStatsValue(const TaskManager::Resource* resource, - int col_id) const { - StatsTable* table = StatsTable::current(); - if (table != NULL) { - const char* counter = table->GetRowName(col_id); - if (counter != NULL && counter[0] != '\0') { - return table->GetCounterValue(counter, - base::GetProcId(resource->GetProcess())); - } else { - NOTREACHED() << "Invalid column."; - } - } - return 0; +bool TaskManagerModel::GetV8Memory(int index, size_t* result) const { + *result = 0; + if (!resources_[index]->ReportsV8MemoryStats()) + return false; + + *result = resources_[index]->GetV8MemoryAllocated(); + return true; +} + +int TaskManagerModel::GetGoatsTeleported(int index) const { + int seed = goat_salt_ * (index + 1); + return (seed >> 16) & 255; } std::wstring TaskManagerModel::GetMemCellText(int64 number) const { @@ -691,6 +699,8 @@ void TaskManagerModel::Refresh() { return; } + goat_salt_ = rand(); + // Compute the CPU usage values. // Note that we compute the CPU usage for all resources (instead of doing it // lazily) as process_util::GetCPUUsage() returns the CPU usage since the last |