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

Side by Side Diff: chrome/browser/ui/webui/performance_monitor/web_ui_handler.cc

Issue 10797056: CPM: API changes for API/UI integration. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Commented and renamed UTCToLocalJsTime and LocalJsTimeToUTC. Created 8 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/performance_monitor/web_ui_handler.h" 5 #include "chrome/browser/ui/webui/performance_monitor/web_ui_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "chrome/browser/performance_monitor/database.h" 11 #include "chrome/browser/performance_monitor/database.h"
12 #include "chrome/browser/performance_monitor/event.h" 12 #include "chrome/browser/performance_monitor/event.h"
13 #include "chrome/browser/performance_monitor/metric_details.h" 13 #include "chrome/browser/performance_monitor/metric_details.h"
14 #include "chrome/browser/performance_monitor/performance_monitor.h" 14 #include "chrome/browser/performance_monitor/performance_monitor.h"
15 #include "chrome/browser/performance_monitor/performance_monitor_util.h" 15 #include "chrome/browser/performance_monitor/performance_monitor_util.h"
16 #include "chrome/common/extensions/value_builder.h" 16 #include "chrome/common/extensions/value_builder.h"
17 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/web_ui.h" 18 #include "content/public/browser/web_ui.h"
19 19
20 namespace performance_monitor { 20 namespace performance_monitor {
21 namespace { 21 namespace {
22 22
23 // Converts a base::Time object in UTC to a double representing local time from
24 // javascript epoch.
25 double UTCToLocalJsTime(const base::Time& utc_time) {
26 base::Time::Exploded exploded;
27 utc_time.LocalExplode(&exploded);
28 return base::Time::FromUTCExploded(exploded).ToJsTime();
Evan Stade 2012/07/23 23:09:50 piping LocalExplode to FromUTCExploded strikes me
Matt Tytel 2012/07/24 20:44:16 Yea, I talked to Brettw about this. We decided jus
29 }
30
31 // Converts a double representing local time from javascript epoch to a
32 // base::Time object in UTC.
33 base::Time LocalJsTimeToUTC(double local_time) {
34 base::Time::Exploded exploded;
35 base::Time::FromJsTime(local_time).UTCExplode(&exploded);
36 return base::Time::FromLocalExploded(exploded);
37 }
38
23 // Queries the performance monitor database for active intervals between 39 // Queries the performance monitor database for active intervals between
24 // |start| and |end| times and appends the results to |results|. 40 // |start| and |end| times and appends the results to |results|.
25 void DoGetActiveIntervals(ListValue* results, 41 void DoGetActiveIntervals(ListValue* results,
26 const base::Time& start, const base::Time& end) { 42 const base::Time& start, const base::Time& end) {
27 Database* db = PerformanceMonitor::GetInstance()->database(); 43 Database* db = PerformanceMonitor::GetInstance()->database();
28 std::vector<TimeRange> intervals = db->GetActiveIntervals(start, end); 44 std::vector<TimeRange> intervals = db->GetActiveIntervals(start, end);
29 45
30 for (std::vector<TimeRange>::iterator it = intervals.begin(); 46 for (std::vector<TimeRange>::iterator it = intervals.begin();
31 it != intervals.end(); ++it) { 47 it != intervals.end(); ++it) {
32 DictionaryValue* interval_value = new DictionaryValue(); 48 DictionaryValue* interval_value = new DictionaryValue();
33 interval_value->SetDouble("start", it->start.ToJsTime()); 49 interval_value->SetDouble("start", UTCToLocalJsTime(it->start));
34 interval_value->SetDouble("end", it->end.ToJsTime()); 50 interval_value->SetDouble("end", UTCToLocalJsTime(it->end));
35 results->Append(interval_value); 51 results->Append(interval_value);
36 } 52 }
37 } 53 }
38 54
39 // Queries the performance monitor database for events of type |event_type| 55 // Queries the performance monitor database for events of type |event_type|
40 // between |start| and |end| times and appends the results to |results|. 56 // between |start| and |end| times and appends the results to |results|.
41 // TODO(mtytel): Add an internationalized longDescription field to each event. 57 // TODO(mtytel): Add an internationalized longDescription field to each event.
42 void DoGetEvents(ListValue* results, EventType event_type, 58 void DoGetEvents(ListValue* results, EventType event_type,
43 const base::Time& start, const base::Time& end) { 59 const base::Time& start, const base::Time& end) {
44 Database* db = PerformanceMonitor::GetInstance()->database(); 60 Database* db = PerformanceMonitor::GetInstance()->database();
(...skipping 19 matching lines...) Expand all
64 linked_ptr<Database::MetricInfoVector> metric_vector = 80 linked_ptr<Database::MetricInfoVector> metric_vector =
65 metric_vector_map[kProcessChromeAggregate]; 81 metric_vector_map[kProcessChromeAggregate];
66 if (!metric_vector.get()) 82 if (!metric_vector.get())
67 metric_vector.reset(new Database::MetricInfoVector()); 83 metric_vector.reset(new Database::MetricInfoVector());
68 84
69 Database::MetricInfoVector aggregated_metrics = 85 Database::MetricInfoVector aggregated_metrics =
70 util::AggregateMetric(*metric_vector, start, resolution); 86 util::AggregateMetric(*metric_vector, start, resolution);
71 for (Database::MetricInfoVector::iterator it = aggregated_metrics.begin(); 87 for (Database::MetricInfoVector::iterator it = aggregated_metrics.begin();
72 it != aggregated_metrics.end(); ++it) { 88 it != aggregated_metrics.end(); ++it) {
73 DictionaryValue* metric_value = new DictionaryValue(); 89 DictionaryValue* metric_value = new DictionaryValue();
74 metric_value->SetDouble("time", it->time.ToJsTime()); 90 metric_value->SetDouble("time", UTCToLocalJsTime(it->time));
75 metric_value->SetDouble("value", it->value); 91 metric_value->SetDouble("value", it->value);
76 results->Append(metric_value); 92 results->Append(metric_value);
77 } 93 }
78 } 94 }
79 95
80 } // namespace 96 } // namespace
81 97
82 WebUIHandler::WebUIHandler() {} 98 WebUIHandler::WebUIHandler() {
99 // TODO(mtytel): Remove this check when the PerformanceMonitor starts up
100 // before the WebUI.
101 if (!PerformanceMonitor::GetInstance()->database())
102 PerformanceMonitor::GetInstance()->Start();
103 }
Evan Stade 2012/07/23 23:09:50 \n
Matt Tytel 2012/07/24 20:44:16 Done.
83 WebUIHandler::~WebUIHandler() {} 104 WebUIHandler::~WebUIHandler() {}
84 105
85 void WebUIHandler::RegisterMessages() { 106 void WebUIHandler::RegisterMessages() {
86 web_ui()->RegisterMessageCallback( 107 web_ui()->RegisterMessageCallback(
87 "getActiveIntervals", 108 "getActiveIntervals",
88 base::Bind(&WebUIHandler::HandleGetActiveIntervals, 109 base::Bind(&WebUIHandler::HandleGetActiveIntervals,
89 base::Unretained(this))); 110 base::Unretained(this)));
90 web_ui()->RegisterMessageCallback( 111 web_ui()->RegisterMessageCallback(
91 "getAllEventTypes", 112 "getAllEventTypes",
92 base::Bind(&WebUIHandler::HandleGetAllEventTypes, 113 base::Bind(&WebUIHandler::HandleGetAllEventTypes,
(...skipping 16 matching lines...) Expand all
109 const Value* results) { 130 const Value* results) {
110 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 131 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
111 web_ui()->CallJavascriptFunction(function, *results); 132 web_ui()->CallJavascriptFunction(function, *results);
112 } 133 }
113 134
114 void WebUIHandler::HandleGetActiveIntervals(const ListValue* args) { 135 void WebUIHandler::HandleGetActiveIntervals(const ListValue* args) {
115 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 136 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
116 CHECK_EQ(2u, args->GetSize()); 137 CHECK_EQ(2u, args->GetSize());
117 double double_time = 0.0; 138 double double_time = 0.0;
118 CHECK(args->GetDouble(0, &double_time)); 139 CHECK(args->GetDouble(0, &double_time));
119 base::Time start = base::Time::FromJsTime(double_time); 140 base::Time start = LocalJsTimeToUTC(double_time);
120 CHECK(args->GetDouble(1, &double_time)); 141 CHECK(args->GetDouble(1, &double_time));
121 base::Time end = base::Time::FromJsTime(double_time); 142 base::Time end = LocalJsTimeToUTC(double_time);
122 143
123 ListValue* results = new ListValue(); 144 ListValue* results = new ListValue();
124 util::PostTaskToDatabaseThreadAndReply( 145 util::PostTaskToDatabaseThreadAndReply(
125 base::Bind(&DoGetActiveIntervals, results, start, end), 146 base::Bind(&DoGetActiveIntervals, results, start, end),
126 base::Bind(&WebUIHandler::ReturnResults, AsWeakPtr(), 147 base::Bind(&WebUIHandler::ReturnResults, AsWeakPtr(),
127 "performance_monitor.getActiveIntervalsCallback", 148 "PerformanceMonitor.getActiveIntervalsCallback",
128 base::Owned(results))); 149 base::Owned(results)));
129 } 150 }
130 151
131 void WebUIHandler::HandleGetAllEventTypes(const ListValue* args) { 152 void WebUIHandler::HandleGetAllEventTypes(const ListValue* args) {
132 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 153 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
133 CHECK_EQ(0u, args->GetSize()); 154 CHECK_EQ(0u, args->GetSize());
134 ListValue results; 155 ListValue results;
135 for (int i = 0; i < EVENT_NUMBER_OF_EVENTS; ++i) { 156 for (int i = 0; i < EVENT_NUMBER_OF_EVENTS; ++i) {
136 EventType event_type = static_cast<EventType>(i); 157 EventType event_type = static_cast<EventType>(i);
137 DictionaryValue* event_type_info = new DictionaryValue(); 158 DictionaryValue* event_type_info = new DictionaryValue();
138 event_type_info->SetInteger("eventType", event_type); 159 event_type_info->SetInteger("eventType", event_type);
139 event_type_info->SetString("shortDescription", 160 event_type_info->SetString("shortDescription",
140 EventTypeToString(event_type)); 161 EventTypeToString(event_type));
141 results.Append(event_type_info); 162 results.Append(event_type_info);
142 } 163 }
143 164 ReturnResults("PerformanceMonitor.getAllEventTypesCallback", &results);
144 ReturnResults("performance_monitor.getAllEventTypesCallback", &results);
145 } 165 }
146 166
147 void WebUIHandler::HandleGetEvents(const ListValue* args) { 167 void WebUIHandler::HandleGetEvents(const ListValue* args) {
148 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 168 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
149 CHECK_EQ(3u, args->GetSize()); 169 CHECK_EQ(3u, args->GetSize());
150 double event = 0; 170 double event = 0;
151 CHECK(args->GetDouble(0, &event)); 171 CHECK(args->GetDouble(0, &event));
152 EventType event_type = static_cast<EventType>(static_cast<int>(event)); 172 EventType event_type = static_cast<EventType>(static_cast<int>(event));
153 173
154 double double_time = 0.0; 174 double double_time = 0.0;
155 CHECK(args->GetDouble(1, &double_time)); 175 CHECK(args->GetDouble(1, &double_time));
156 base::Time start = base::Time::FromJsTime(double_time); 176 base::Time start = LocalJsTimeToUTC(double_time);
157 CHECK(args->GetDouble(2, &double_time)); 177 CHECK(args->GetDouble(2, &double_time));
158 base::Time end = base::Time::FromJsTime(double_time); 178 base::Time end = LocalJsTimeToUTC(double_time);
159 179
160 DictionaryValue* results = new DictionaryValue(); 180 DictionaryValue* results = new DictionaryValue();
161 ListValue* points_results = new ListValue(); 181 ListValue* points_results = new ListValue();
162 results->Set("points", points_results); 182 results->Set("points", points_results);
163 results->SetInteger("type", event_type); 183 results->SetInteger("eventType", event_type);
164 util::PostTaskToDatabaseThreadAndReply( 184 util::PostTaskToDatabaseThreadAndReply(
165 base::Bind(&DoGetEvents, points_results, event_type, start, end), 185 base::Bind(&DoGetEvents, points_results, event_type, start, end),
166 base::Bind(&WebUIHandler::ReturnResults, AsWeakPtr(), 186 base::Bind(&WebUIHandler::ReturnResults, AsWeakPtr(),
167 "performance_monitor.getEventsCallback", 187 "PerformanceMonitor.getEventsCallback",
168 base::Owned(results))); 188 base::Owned(results)));
169 } 189 }
170 190
171 void WebUIHandler::HandleGetAllMetricTypes(const ListValue* args) { 191 void WebUIHandler::HandleGetAllMetricTypes(const ListValue* args) {
172 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 192 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
173 CHECK_EQ(0u, args->GetSize()); 193 CHECK_EQ(0u, args->GetSize());
174 ListValue results; 194 ListValue results;
175 for (int i = 0; i < METRIC_NUMBER_OF_METRICS; ++i) { 195 for (int i = 0; i < METRIC_NUMBER_OF_METRICS; ++i) {
176 MetricType metric_type = static_cast<MetricType>(i); 196 MetricType metric_type = static_cast<MetricType>(i);
177 DictionaryValue* metric_type_info = new DictionaryValue(); 197 DictionaryValue* metric_type_info = new DictionaryValue();
178 metric_type_info->SetInteger("metricType", metric_type); 198 metric_type_info->SetInteger("metricType", metric_type);
179 metric_type_info->SetString("shortDescription", 199 metric_type_info->SetString("shortDescription",
180 MetricTypeToString(metric_type)); 200 MetricTypeToString(metric_type));
181 results.Append(metric_type_info); 201 results.Append(metric_type_info);
182 } 202 }
183 203
184 ReturnResults("performance_monitor.getAllMetricTypesCallback", &results); 204 ReturnResults("PerformanceMonitor.getAllMetricTypesCallback", &results);
185 } 205 }
186 206
187 void WebUIHandler::HandleGetMetric(const ListValue* args) { 207 void WebUIHandler::HandleGetMetric(const ListValue* args) {
188 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 208 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
189 CHECK_EQ(4u, args->GetSize()); 209 CHECK_EQ(4u, args->GetSize());
190 double metric = 0; 210 double metric = 0;
191 CHECK(args->GetDouble(0, &metric)); 211 CHECK(args->GetDouble(0, &metric));
192 MetricType metric_type = static_cast<MetricType>(static_cast<int>(metric)); 212 MetricType metric_type = static_cast<MetricType>(static_cast<int>(metric));
193 213
194 double double_time = 0.0; 214 double double_time = 0.0;
195 CHECK(args->GetDouble(1, &double_time)); 215 CHECK(args->GetDouble(1, &double_time));
196 base::Time start = base::Time::FromJsTime(double_time); 216 base::Time start = LocalJsTimeToUTC(double_time);
197 CHECK(args->GetDouble(2, &double_time)); 217 CHECK(args->GetDouble(2, &double_time));
198 base::Time end = base::Time::FromJsTime(double_time); 218 base::Time end = LocalJsTimeToUTC(double_time);
199 219
200 double resolution_in_milliseconds = 0; 220 double resolution_in_milliseconds = 0;
201 CHECK(args->GetDouble(3, &resolution_in_milliseconds)); 221 CHECK(args->GetDouble(3, &resolution_in_milliseconds));
202 base::TimeDelta resolution = 222 base::TimeDelta resolution =
203 base::TimeDelta::FromMilliseconds(resolution_in_milliseconds); 223 base::TimeDelta::FromMilliseconds(resolution_in_milliseconds);
204 224
205 DictionaryValue* results = new DictionaryValue(); 225 DictionaryValue* results = new DictionaryValue();
206 results->SetInteger("type", metric_type); 226 results->SetInteger("metricType", metric_type);
207 ListValue* points_results = new ListValue(); 227 ListValue* points_results = new ListValue();
208 results->Set("points", points_results); 228 results->Set("points", points_results);
209 util::PostTaskToDatabaseThreadAndReply( 229 util::PostTaskToDatabaseThreadAndReply(
210 base::Bind(&DoGetMetric, points_results, metric_type, 230 base::Bind(&DoGetMetric, points_results, metric_type,
211 start, end, resolution), 231 start, end, resolution),
212 base::Bind(&WebUIHandler::ReturnResults, AsWeakPtr(), 232 base::Bind(&WebUIHandler::ReturnResults, AsWeakPtr(),
213 "performance_monitor.getMetricCallback", 233 "PerformanceMonitor.getMetricCallback",
214 base::Owned(results))); 234 base::Owned(results)));
215 } 235 }
216 236
217 } // namespace performance_monitor 237 } // namespace performance_monitor
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698