OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "apps/benchmark/event.h" | 5 #include "apps/benchmark/event.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <stack> | 8 #include <stack> |
9 | 9 |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 return true; | 186 return true; |
187 } | 187 } |
188 | 188 |
189 bool ParseEvents(base::ListValue* event_list, std::vector<Event>* result) { | 189 bool ParseEvents(base::ListValue* event_list, std::vector<Event>* result) { |
190 result->clear(); | 190 result->clear(); |
191 | 191 |
192 for (base::Value* val : *event_list) { | 192 for (base::Value* val : *event_list) { |
193 base::DictionaryValue* event_dict; | 193 base::DictionaryValue* event_dict; |
194 if (!val->GetAsDictionary(&event_dict)) { | 194 if (!val->GetAsDictionary(&event_dict)) { |
195 LOG(WARNING) << "Ignoring incorrect trace event (not a dictionary)"; | 195 LOG(WARNING) << "Ignoring incorrect trace event (not a dictionary)"; |
| 196 LOG(WARNING) << *event_dict; |
196 continue; | 197 continue; |
197 } | 198 } |
198 | 199 |
199 Event event; | 200 Event event; |
200 | 201 |
201 std::string phase; | 202 std::string phase; |
202 if (!event_dict->GetString("ph", &phase)) { | 203 if (!event_dict->GetString("ph", &phase)) { |
203 LOG(WARNING) << "Ignoring incorrect trace event (missing phase)"; | 204 LOG(WARNING) << "Ignoring incorrect trace event (missing phase)"; |
| 205 LOG(WARNING) << *event_dict; |
204 continue; | 206 continue; |
205 } | 207 } |
206 if (phase == "X") { | 208 if (phase == "X") { |
207 event.type = EventType::COMPLETE; | 209 event.type = EventType::COMPLETE; |
208 } else if (phase == "I" || phase == "n") { | 210 } else if (phase == "I" || phase == "n") { |
209 event.type = EventType::INSTANT; | 211 event.type = EventType::INSTANT; |
210 } else { | 212 } else { |
211 // Skip all event types we do not handle. | 213 // Skip all event types we do not handle. |
212 continue; | 214 continue; |
213 } | 215 } |
214 | 216 |
215 if (!event_dict->GetString("name", &event.name)) { | 217 if (!event_dict->GetString("name", &event.name)) { |
216 LOG(ERROR) << "Incorrect trace event (no name)"; | 218 LOG(ERROR) << "Incorrect trace event (no name)"; |
| 219 LOG(ERROR) << *event_dict; |
217 return false; | 220 return false; |
218 } | 221 } |
219 | 222 |
220 // Some clients do not add categories to events, but we don't want to fail | 223 // Some clients do not add categories to events, but we don't want to fail |
221 // nor skip the event. | 224 // nor skip the event. |
222 event_dict->GetString("cat", &event.categories); | 225 event_dict->GetString("cat", &event.categories); |
223 | 226 |
224 double timestamp; | 227 double timestamp; |
225 if (!event_dict->GetDouble("ts", ×tamp)) { | 228 if (!event_dict->GetDouble("ts", ×tamp)) { |
226 LOG(WARNING) << "Ingoring incorrect trace event (no timestamp)"; | 229 LOG(WARNING) << "Ingoring incorrect trace event (no timestamp)"; |
| 230 LOG(WARNING) << *event_dict; |
227 continue; | 231 continue; |
228 } | 232 } |
229 event.timestamp = base::TimeTicks::FromInternalValue(timestamp); | 233 event.timestamp = base::TimeTicks::FromInternalValue(timestamp); |
230 | 234 |
231 if (event.type == EventType::COMPLETE) { | 235 if (event.type == EventType::COMPLETE) { |
232 double duration; | 236 double duration; |
233 if (!event_dict->GetDouble("dur", &duration)) { | 237 if (!event_dict->GetDouble("dur", &duration)) { |
234 LOG(WARNING) << "Ignoring incorrect complete event (no duration)"; | 238 LOG(WARNING) << "Ignoring incorrect complete event (no duration)"; |
| 239 LOG(WARNING) << *event_dict; |
235 continue; | 240 continue; |
236 } | 241 } |
237 | 242 |
238 event.duration = base::TimeDelta::FromInternalValue(duration); | 243 event.duration = base::TimeDelta::FromInternalValue(duration); |
239 } else { | 244 } else { |
240 event.duration = base::TimeDelta(); | 245 event.duration = base::TimeDelta(); |
241 } | 246 } |
242 | 247 |
243 result->push_back(event); | 248 result->push_back(event); |
244 } | 249 } |
(...skipping 19 matching lines...) Expand all Loading... |
264 } | 269 } |
265 | 270 |
266 if (!JoinEvents(event_list)) | 271 if (!JoinEvents(event_list)) |
267 return false; | 272 return false; |
268 | 273 |
269 if (!ParseEvents(event_list, result)) | 274 if (!ParseEvents(event_list, result)) |
270 return false; | 275 return false; |
271 return true; | 276 return true; |
272 } | 277 } |
273 } // namespace benchmark | 278 } // namespace benchmark |
OLD | NEW |