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

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

Issue 1922683003: Make old task manager tests work against new task manager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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_browsertest_util.cc
diff --git a/chrome/browser/task_manager/task_manager_browsertest_util.cc b/chrome/browser/task_manager/task_manager_browsertest_util.cc
index edeccd0f4a2dc840a22a4dd3433dfa79aa03c7b7..02df54d963059a8b081ac431f06c741db0e144e5 100644
--- a/chrome/browser/task_manager/task_manager_browsertest_util.cc
+++ b/chrome/browser/task_manager/task_manager_browsertest_util.cc
@@ -6,6 +6,7 @@
#include "base/command_line.h"
#include "base/location.h"
+#include "base/memory/ptr_util.h"
#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/strings/pattern.h"
@@ -17,40 +18,181 @@
#include "base/timer/timer.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sessions/session_tab_helper.h"
+#include "chrome/browser/task_management/task_manager_interface.h"
+#include "chrome/browser/task_management/task_manager_observer.h"
#include "chrome/browser/task_manager/resource_provider.h"
#include "chrome/browser/task_manager/task_manager.h"
+#include "chrome/browser/ui/task_manager/task_manager_table_model.h"
+#include "chrome/browser/ui/views/new_task_manager_view.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/grit/generated_resources.h"
#include "extensions/strings/grit/extensions_strings.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/l10n/l10n_util.h"
+namespace task_management {
+
+class TaskManagerTester
+ : public task_manager::browsertest_util::TaskManagerTesterInterface,
+ public TaskManagerObserver {
+ public:
+ explicit TaskManagerTester(const base::Closure& on_resource_change)
+ : TaskManagerObserver(NewTaskManagerView::GetInstanceForTests()
+ ->table_model_->desired_refresh_time(),
+ NewTaskManagerView::GetInstanceForTests()
+ ->table_model_->desired_resources_flags()),
+ on_resource_change_(on_resource_change),
+ model_(NewTaskManagerView::GetInstanceForTests()->table_model_.get()) {}
+
+ virtual int GetRowCount() { return model_->RowCount(); }
+
+ virtual base::string16 GetRowTitle(int row) {
+ return model_->GetText(row, IDS_TASK_MANAGER_TASK_COLUMN);
+ }
+
+ virtual int64_t GetColumnValue(
+ task_manager::browsertest_util::ColumnSpecifier column,
+ int row) {
+ TaskId task_id = model_->tasks_[row];
+ int64_t value = 0;
+ int64_t ignored = 0;
+ bool success = false;
+
+ switch (column) {
+ case task_manager::browsertest_util::COLUMN_NONE:
+ break;
+ case task_manager::browsertest_util::V8_MEMORY:
+ success =
+ observed_task_manager()->GetV8Memory(task_id, &value, &ignored);
+ break;
+ case task_manager::browsertest_util::V8_MEMORY_USED:
+ success =
+ observed_task_manager()->GetV8Memory(task_id, &ignored, &value);
+ break;
+ case task_manager::browsertest_util::SQLITE_MEMORY_USED:
+ value = observed_task_manager()->GetSqliteMemoryUsed(task_id);
+ success = true;
+ break;
+ }
+ if (!success)
+ return 0;
+ return value;
+ }
+
+ virtual int32_t GetTabId(int row) {
+ TaskId task_id = model_->tasks_[row];
+ return observed_task_manager()->GetTabId(task_id);
+ }
+
+ virtual void Kill(int row) { model_->KillTask(row); }
+
+ // TaskManagerObserver
+ void OnTaskAdded(TaskId id) { on_resource_change_.Run(); }
+
+ void OnTaskToBeRemoved(TaskId id) { on_resource_change_.Run(); }
+
+ void OnTasksRefreshed(const TaskIdList& task_ids) {
+ on_resource_change_.Run();
+ }
+
+ void OnTasksRefreshedWithBackgroundCalculations(const TaskIdList& task_ids) {
+ on_resource_change_.Run();
+ }
+
+ void OnTaskUnresponsive(TaskId id) { on_resource_change_.Run(); }
+
+ private:
+ base::Closure on_resource_change_;
+ TaskManagerTableModel* model_;
+};
+
+} // namespace task_management
+
namespace task_manager {
namespace browsertest_util {
namespace {
-class ResourceChangeObserver : public TaskManagerModelObserver {
+class OldTaskManagerTester : public TaskManagerTesterInterface,
+ public TaskManagerModelObserver {
public:
- ResourceChangeObserver(const TaskManagerModel* model,
- int required_count,
- const base::string16& title_pattern,
- ColumnSpecifier column_specifier,
- size_t min_column_value)
- : model_(model),
- required_count_(required_count),
- title_pattern_(title_pattern),
- column_specifier_(column_specifier),
- min_column_value_(min_column_value) {}
+ explicit OldTaskManagerTester(const base::Closure& on_resource_change)
+ : on_resource_change_(on_resource_change),
+ model_(TaskManager::GetInstance()->model()) {
+ model_->AddObserver(this);
+ }
+ ~OldTaskManagerTester() { model_->RemoveObserver(this); }
- void OnModelChanged() override { OnResourceChange(); }
+ // TaskManagerTesterInterface:
+ virtual int GetRowCount() { return model_->ResourceCount(); }
- void OnItemsChanged(int start, int length) override { OnResourceChange(); }
+ virtual base::string16 GetRowTitle(int row) {
+ return model_->GetResourceTitle(row);
+ }
- void OnItemsAdded(int start, int length) override { OnResourceChange(); }
+ virtual int64_t GetColumnValue(ColumnSpecifier column, int row) {
+ size_t value = 0;
+ bool success = false;
+ switch (column) {
+ case COLUMN_NONE:
+ break;
+ case V8_MEMORY:
+ success = model_->GetV8Memory(row, &value);
+ break;
+ case V8_MEMORY_USED:
+ success = model_->GetV8MemoryUsed(row, &value);
+ break;
+ case SQLITE_MEMORY_USED:
+ success = model_->GetSqliteMemoryUsedBytes(row, &value);
+ break;
+ }
+ if (!success)
+ return 0;
+ return static_cast<int64_t>(value);
+ }
+
+ virtual int32_t GetTabId(int row) {
+ if (model_->GetResourceWebContents(row)) {
+ return SessionTabHelper::IdForTab(model_->GetResourceWebContents(row));
+ }
+ return -1;
+ }
+
+ virtual void Kill(int row) { TaskManager::GetInstance()->KillProcess(row); }
+ // TaskManagerModelObserver:
+ void OnModelChanged() override { OnResourceChange(); }
+ void OnItemsChanged(int start, int length) override { OnResourceChange(); }
+ void OnItemsAdded(int start, int length) override { OnResourceChange(); }
void OnItemsRemoved(int start, int length) override { OnResourceChange(); }
+ private:
+ void OnResourceChange() { on_resource_change_.Run(); }
+ base::Closure on_resource_change_;
+ TaskManagerModel* model_;
+};
+
+class ResourceChangeObserver {
+ public:
+ ResourceChangeObserver(int required_count,
+ const base::string16& title_pattern,
+ ColumnSpecifier column_specifier,
+ size_t min_column_value)
+ : required_count_(required_count),
+ title_pattern_(title_pattern),
+ column_specifier_(column_specifier),
+ min_column_value_(min_column_value) {
+ base::Closure on_resource_change = base::Bind(
+ &ResourceChangeObserver::OnResourceChange, base::Unretained(this));
+
+ if (switches::NewTaskManagerEnabled()) {
+ model_.reset(new task_management::TaskManagerTester(on_resource_change));
+ } else {
+ model_.reset(new OldTaskManagerTester(on_resource_change));
+ }
+ }
+
void RunUntilSatisfied() {
// See if the condition is satisfied without having to run the loop. This
// check has to be placed after the installation of the
@@ -80,6 +222,7 @@ class ResourceChangeObserver : public TaskManagerModelObserver {
private:
void OnResourceChange() {
+ DLOG(INFO) << DumpTaskManagerModel();
if (!IsSatisfied())
return;
@@ -91,8 +234,8 @@ class ResourceChangeObserver : public TaskManagerModelObserver {
int CountMatches() {
int match_count = 0;
- for (int i = 0; i < model_->ResourceCount(); i++) {
- if (!base::MatchPattern(model_->GetResourceTitle(i), title_pattern_))
+ for (int i = 0; i < model_->GetRowCount(); i++) {
+ if (!base::MatchPattern(model_->GetRowTitle(i), title_pattern_))
continue;
if (GetColumnValue(i) < min_column_value_)
@@ -103,25 +246,8 @@ class ResourceChangeObserver : public TaskManagerModelObserver {
return match_count;
}
- size_t GetColumnValue(int index) {
- size_t value = 0;
- bool success = false;
- switch (column_specifier_) {
- case COLUMN_NONE:
- break;
- case V8_MEMORY:
- success = model_->GetV8Memory(index, &value);
- break;
- case V8_MEMORY_USED:
- success = model_->GetV8MemoryUsed(index, &value);
- break;
- case SQLITE_MEMORY_USED:
- success = model_->GetSqliteMemoryUsedBytes(index, &value);
- break;
- }
- if (!success)
- return 0;
- return value;
+ int64_t GetColumnValue(int index) {
+ return model_->GetColumnValue(column_specifier_, index);
}
const char* GetColumnName() {
@@ -156,10 +282,9 @@ class ResourceChangeObserver : public TaskManagerModelObserver {
task_manager_state_dump << "\nCurrently there are " << CountMatches()
<< " matches.";
task_manager_state_dump << "\nCurrent Task Manager Model is:";
- for (int i = 0; i < model_->ResourceCount(); i++) {
- task_manager_state_dump
- << "\n > " << std::setw(40) << std::left
- << base::UTF16ToASCII(model_->GetResourceTitle(i));
+ for (int i = 0; i < model_->GetRowCount(); i++) {
+ task_manager_state_dump << "\n > " << std::setw(40) << std::left
+ << base::UTF16ToASCII(model_->GetRowTitle(i));
if (min_column_value_ > 0) {
task_manager_state_dump << " [" << GetColumnName()
<< " == " << GetColumnValue(i) << "]";
@@ -168,45 +293,41 @@ class ResourceChangeObserver : public TaskManagerModelObserver {
return task_manager_state_dump;
}
- const TaskManagerModel* model_;
+ scoped_ptr<TaskManagerTesterInterface> model_;
const int required_count_;
const base::string16 title_pattern_;
const ColumnSpecifier column_specifier_;
- const size_t min_column_value_;
+ const int64_t min_column_value_;
base::RunLoop run_loop_;
base::OneShotTimer timer_;
};
} // namespace
-void EnableOldTaskManager() {
- base::CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kDisableNewTaskManager);
+std::unique_ptr<TaskManagerTesterInterface> GetTaskManagerTester() {
+ if (switches::NewTaskManagerEnabled()) {
+ return base::WrapUnique(
+ new task_management::TaskManagerTester(base::Closure()));
+ } else {
+ return base::WrapUnique(new OldTaskManagerTester(base::Closure()));
+ }
}
void WaitForTaskManagerRows(int required_count,
const base::string16& title_pattern) {
- TaskManagerModel* model = TaskManager::GetInstance()->model();
-
const int column_value_dont_care = 0;
- ResourceChangeObserver observer(model, required_count, title_pattern,
- COLUMN_NONE, column_value_dont_care);
- model->AddObserver(&observer);
+ ResourceChangeObserver observer(required_count, title_pattern, COLUMN_NONE,
+ column_value_dont_care);
observer.RunUntilSatisfied();
- model->RemoveObserver(&observer);
}
void WaitForTaskManagerStatToExceed(const base::string16& title_pattern,
ColumnSpecifier column_getter,
size_t min_column_value) {
- TaskManagerModel* model = TaskManager::GetInstance()->model();
-
const int wait_for_one_match = 1;
- ResourceChangeObserver observer(model, wait_for_one_match, title_pattern,
+ ResourceChangeObserver observer(wait_for_one_match, title_pattern,
column_getter, min_column_value);
- model->AddObserver(&observer);
observer.RunUntilSatisfied();
- model->RemoveObserver(&observer);
}
base::string16 MatchTab(const char* title) {

Powered by Google App Engine
This is Rietveld 408576698