Index: chrome/browser/performance_monitor/performance_monitor_browsertest.cc |
diff --git a/chrome/browser/performance_monitor/performance_monitor_browsertest.cc b/chrome/browser/performance_monitor/performance_monitor_browsertest.cc |
index 5dd2791f6004700e87689b32712ae4329acfaa40..5999c89b1fa78c4a683ffcc5b16f037897380cb6 100644 |
--- a/chrome/browser/performance_monitor/performance_monitor_browsertest.cc |
+++ b/chrome/browser/performance_monitor/performance_monitor_browsertest.cc |
@@ -16,6 +16,7 @@ |
#include "chrome/browser/extensions/unpacked_installer.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/common/chrome_notification_types.h" |
#include "chrome/common/chrome_paths.h" |
#include "chrome/common/chrome_version_info.h" |
@@ -140,6 +141,32 @@ class PerformanceMonitorBrowserTest : public ExtensionBrowserTest { |
return events; |
} |
+ void GetStatsForActivityAndMetricOnBackgroundThread( |
+ const std::string& activity, |
+ const std::string& metric, |
+ Database::MetricInfoVector* stats) { |
+ *stats = performance_monitor_->database()-> |
+ GetStatsForActivityAndMetric(activity, metric); |
+ } |
+ |
+ Database::MetricInfoVector GetStatsForActivityAndMetric( |
+ const std::string& activity, |
+ const std::string& metric) { |
+ Database::MetricInfoVector stats; |
+ content::BrowserThread::PostBlockingPoolSequencedTask( |
+ Database::kDatabaseSequenceToken, |
+ FROM_HERE, |
+ base::Bind(&PerformanceMonitorBrowserTest:: |
+ GetStatsForActivityAndMetricOnBackgroundThread, |
+ base::Unretained(this), |
+ activity, |
+ metric, |
+ &stats)); |
+ |
+ content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
+ return stats; |
+ } |
+ |
PerformanceMonitor* performance_monitor() const { |
return performance_monitor_; |
} |
@@ -322,4 +349,68 @@ IN_PROC_BROWSER_TEST_F(PerformanceMonitorBrowserTest, NewVersionEvent) { |
ASSERT_EQ(version_string, current_version); |
} |
+IN_PROC_BROWSER_TEST_F(PerformanceMonitorBrowserTest, GatherStatistics) { |
+ content::BrowserThread::PostBlockingPoolSequencedTask( |
+ Database::kDatabaseSequenceToken, |
+ FROM_HERE, |
+ base::Bind(&PerformanceMonitor::GatherStatistics, |
+ base::Unretained(performance_monitor()))); |
+ |
+ content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
+ |
+ // CPU Usage -- no stats recorded the first time |
+ Database::MetricInfoVector stats = GetStatsForActivityAndMetric( |
+ performance_monitor::kProcessChromeAggregate, |
+ performance_monitor::kMetricCPUUsage); |
+ ASSERT_EQ(0u, stats.size()); |
+ |
+ // Private memory usage |
+ stats = GetStatsForActivityAndMetric( |
+ performance_monitor::kProcessChromeAggregate, |
+ performance_monitor::kMetricPrivateMemoryUsage); |
+ ASSERT_EQ(1u, stats.size()); |
+ LOG(INFO) << "Private memory usage median: " << stats[0].value; |
+ |
+ // Shared memory usage |
+ stats = GetStatsForActivityAndMetric( |
+ performance_monitor::kProcessChromeAggregate, |
+ performance_monitor::kMetricSharedMemoryUsage); |
+ ASSERT_EQ(1u, stats.size()); |
+ LOG(INFO) << "Shared memory usage median: " << stats[0].value; |
+ |
+ // TODO(mwrosen) something less barbaric? |
+ // Spin for a while, so CPU usage isn't 0 |
Yoyo Zhou
2012/07/09 21:33:36
Why is this necessary? Could CPU usage be 0 in the
mitchellwrosen
2012/07/09 22:45:23
Yeah, the CPU usage could be zero in the real worl
Yoyo Zhou
2012/07/10 21:58:00
Well, the LOG(INFO) also suggests that these are t
|
+ for (int i = 0; i < 1000000000; ++i) { |
Yoyo Zhou
2012/07/09 21:33:36
I'd be careful with something like this... a compi
mitchellwrosen
2012/07/09 22:45:23
Done.
|
+ } |
+ |
+ content::BrowserThread::PostBlockingPoolSequencedTask( |
+ Database::kDatabaseSequenceToken, |
+ FROM_HERE, |
+ base::Bind(&PerformanceMonitor::GatherStatistics, |
+ base::Unretained(performance_monitor()))); |
+ |
+ content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
+ |
+ stats = GetStatsForActivityAndMetric( |
+ performance_monitor::kProcessChromeAggregate, |
+ performance_monitor::kMetricCPUUsage); |
+ ASSERT_EQ(1u, stats.size()); |
+ EXPECT_GT(stats[0].value, 0); |
+ LOG(INFO) << "CPU usage median: " << stats[0].value; |
+ |
+ // Private memory usage #2 |
+ stats = GetStatsForActivityAndMetric( |
+ performance_monitor::kProcessChromeAggregate, |
+ performance_monitor::kMetricPrivateMemoryUsage); |
+ ASSERT_EQ(2u, stats.size()); |
+ LOG(INFO) << "Private memory usage median #2: " << stats[1].value; |
+ |
+ // Shared memory usage #2 |
+ stats = GetStatsForActivityAndMetric( |
+ performance_monitor::kProcessChromeAggregate, |
+ performance_monitor::kMetricSharedMemoryUsage); |
+ ASSERT_EQ(2u, stats.size()); |
+ LOG(INFO) << "Shared memory usage median #2: " << stats[1].value; |
+} |
+ |
} // namespace performance_monitor |