Chromium Code Reviews| Index: chrome/browser/ui/webui/performance_monitor/web_ui_handler.cc |
| diff --git a/chrome/browser/ui/webui/performance_monitor/web_ui_handler.cc b/chrome/browser/ui/webui/performance_monitor/web_ui_handler.cc |
| index 815f23d8cd34d1728eaf1e9dd0d1ed5f77c0fc2a..472ce9bbfdbd3082240f635d4ab49a70fc65713a 100644 |
| --- a/chrome/browser/ui/webui/performance_monitor/web_ui_handler.cc |
| +++ b/chrome/browser/ui/webui/performance_monitor/web_ui_handler.cc |
| @@ -6,10 +6,11 @@ |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| -#include "base/threading/sequenced_worker_pool.h" |
| #include "base/time.h" |
| #include "base/values.h" |
| #include "chrome/browser/performance_monitor/database.h" |
| +#include "chrome/browser/performance_monitor/event.h" |
| +#include "chrome/browser/performance_monitor/metric_details.h" |
| #include "chrome/browser/performance_monitor/performance_monitor.h" |
| #include "chrome/browser/performance_monitor/performance_monitor_util.h" |
| #include "content/public/browser/browser_thread.h" |
| @@ -20,9 +21,8 @@ namespace { |
| void DoGetActiveIntervals(ListValue* results, |
| const base::Time& start, const base::Time& end) { |
| - std::vector<TimeRange> intervals = |
| - PerformanceMonitor::GetInstance()->database()->GetActiveIntervals( |
| - start, end); |
| + Database* db = PerformanceMonitor::GetInstance()->database(); |
| + std::vector<TimeRange> intervals = db->GetActiveIntervals(start, end); |
| for (std::vector<TimeRange>::iterator it = intervals.begin(); |
| it != intervals.end(); ++it) { |
| DictionaryValue* interval_value = new DictionaryValue(); |
| @@ -35,21 +35,36 @@ void DoGetActiveIntervals(ListValue* results, |
| // TODO(mtytel): Add an internationalized longDescription field to each event. |
| void DoGetEvents(ListValue* results, EventType event, |
| const base::Time& start, const base::Time& end) { |
| - std::vector<linked_ptr<Event> > events = |
| - PerformanceMonitor::GetInstance()->database()->GetEvents( |
| - event, start, end); |
| + Database* db = PerformanceMonitor::GetInstance()->database(); |
| + std::vector<linked_ptr<Event> > events = db->GetEvents(event, start, end); |
| for (std::vector<linked_ptr<Event> >::iterator it = events.begin(); |
| it != events.end(); ++it) { |
| - results->Append((*it)->data()); |
| + results->Append((*it)->data()->DeepCopy()); |
| } |
| } |
| -bool PostTaskToDatabaseAndReply(const base::Closure& request, |
| - const base::Closure& reply) { |
| - base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool(); |
| - base::SequencedWorkerPool::SequenceToken token = pool->GetSequenceToken(); |
| - return pool->GetSequencedTaskRunner(token)->PostTaskAndReply( |
| - FROM_HERE, request, reply); |
| +void DoGetMetric(ListValue* results, |
|
Evan Stade
2012/07/10 07:59:39
docs
Matt Tytel
2012/07/10 19:08:19
Done.
|
| + MetricType metric_type, |
| + const base::Time& start, const base::Time& end, |
| + const base::TimeDelta& resolution) { |
| + Database* db = PerformanceMonitor::GetInstance()->database(); |
| + Database::MetricVectorMap metric_vector_map = db->GetStatsForMetricByActivity( |
| + MetricTypeToString(metric_type), start, end); |
| + |
| + linked_ptr<Database::MetricInfoVector> metric_vector = |
| + metric_vector_map[kProcessChromeAggregate]; |
| + if (!metric_vector.get()) |
| + metric_vector.reset(new Database::MetricInfoVector()); |
| + |
| + Database::MetricInfoVector aggregated_metrics = |
| + util::AggregateMetric(*(metric_vector.get()), start, resolution); |
| + for (Database::MetricInfoVector::iterator it = aggregated_metrics.begin(); |
| + it != aggregated_metrics.end(); ++it) { |
| + DictionaryValue* metric_value = new DictionaryValue(); |
| + metric_value->SetDouble("time", it->time.ToDoubleT()); |
| + metric_value->SetDouble("value", it->value); |
| + results->Append(metric_value); |
| + } |
| } |
| } // namespace |
| @@ -70,6 +85,14 @@ void WebUIHandler::RegisterMessages() { |
| "getEvents", |
| base::Bind(&WebUIHandler::HandleGetEvents, |
| base::Unretained(this))); |
| + web_ui()->RegisterMessageCallback( |
| + "getAllMetricTypes", |
| + base::Bind(&WebUIHandler::HandleGetAllMetricTypes, |
| + base::Unretained(this))); |
| + web_ui()->RegisterMessageCallback( |
| + "getMetric", |
| + base::Bind(&WebUIHandler::HandleGetMetric, |
| + base::Unretained(this))); |
| } |
| void WebUIHandler::ReturnResults(const std::string& function, |
| @@ -88,7 +111,7 @@ void WebUIHandler::HandleGetActiveIntervals(const ListValue* args) { |
| base::Time end = base::Time::FromJsTime(double_time); |
| ListValue* results = new ListValue(); |
| - PostTaskToDatabaseAndReply( |
| + util::PostTaskToDatabaseAndReply( |
| base::Bind(&DoGetActiveIntervals, results, start, end), |
| base::Bind(&WebUIHandler::ReturnResults, AsWeakPtr(), |
| "performance_monitor.getActiveIntervalsCallback", |
| @@ -113,8 +136,8 @@ void WebUIHandler::HandleGetAllEventTypes(const ListValue* args) { |
| void WebUIHandler::HandleGetEvents(const ListValue* args) { |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| CHECK_EQ(3u, args->GetSize()); |
| - int event = 0; |
| - CHECK(args->GetInteger(0, &event)); |
| + double event = 0; |
| + CHECK(args->GetDouble(0, &event)); |
| double double_time = 0.0; |
| CHECK(args->GetDouble(1, &double_time)); |
| base::Time start = base::Time::FromJsTime(double_time); |
| @@ -122,7 +145,7 @@ void WebUIHandler::HandleGetEvents(const ListValue* args) { |
| base::Time end = base::Time::FromJsTime(double_time); |
| ListValue* results = new ListValue(); |
| - PostTaskToDatabaseAndReply( |
| + util::PostTaskToDatabaseAndReply( |
| base::Bind(&DoGetEvents, results, static_cast<EventType>(event), |
| start, end), |
| base::Bind(&WebUIHandler::ReturnResults, AsWeakPtr(), |
| @@ -130,4 +153,45 @@ void WebUIHandler::HandleGetEvents(const ListValue* args) { |
| base::Owned(results))); |
| } |
| +void WebUIHandler::HandleGetAllMetricTypes(const ListValue* args) { |
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| + CHECK_EQ(0u, args->GetSize()); |
| + ListValue results; |
| + for (int i = 0; i < METRIC_NUMBER_OF_METRICS; ++i) { |
| + MetricType metric_type = static_cast<MetricType>(i); |
| + DictionaryValue* metric_type_info = new DictionaryValue(); |
| + metric_type_info->SetInteger("metricType", metric_type); |
| + metric_type_info->SetString("shortDescription", |
| + MetricTypeToString(metric_type)); |
|
Evan Stade
2012/07/10 07:59:39
indent off by one
Matt Tytel
2012/07/10 19:08:19
Done.
|
| + results.Append(metric_type_info); |
| + } |
|
Evan Stade
2012/07/10 07:59:39
\n
Matt Tytel
2012/07/10 19:08:19
Done.
|
| + ReturnResults("performance_monitor.getAllMetricTypesCallback", &results); |
| +} |
| + |
| +void WebUIHandler::HandleGetMetric(const ListValue* args) { |
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| + CHECK_EQ(4u, args->GetSize()); |
| + double metric = 0; |
| + CHECK(args->GetDouble(0, &metric)); |
| + |
| + double double_time = 0.0; |
| + CHECK(args->GetDouble(1, &double_time)); |
| + base::Time start = base::Time::FromJsTime(double_time); |
| + CHECK(args->GetDouble(2, &double_time)); |
| + base::Time end = base::Time::FromJsTime(double_time); |
| + |
| + double resolution_in_milliseconds = 0; |
| + CHECK(args->GetDouble(3, &resolution_in_milliseconds)); |
| + base::TimeDelta resolution = |
| + base::TimeDelta::FromMilliseconds(resolution_in_milliseconds); |
| + |
| + ListValue* results = new ListValue(); |
| + util::PostTaskToDatabaseAndReply( |
| + base::Bind(&DoGetMetric, results, static_cast<MetricType>(metric), |
| + start, end, resolution), |
| + base::Bind(&WebUIHandler::ReturnResults, AsWeakPtr(), |
| + "performance_monitor.getMetricCallback", |
| + base::Owned(results))); |
| +} |
| + |
| } // namespace performance_monitor |