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

Side by Side Diff: base/test/trace_event_analyzer.h

Issue 8900001: Add searching features to new TraceEventVector class for tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: const ref params Created 9 years 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | base/test/trace_event_analyzer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // Use trace_analyzer::Query and trace_analyzer::TraceAnalyzer to search for 5 // Use trace_analyzer::Query and trace_analyzer::TraceAnalyzer to search for
6 // specific trace events that were generated by the trace_event.h API. 6 // specific trace events that were generated by the trace_event.h API.
7 // 7 //
8 // Basic procedure: 8 // Basic procedure:
9 // - Get trace events JSON string from base::debug::TraceLog. 9 // - Get trace events JSON string from base::debug::TraceLog.
10 // - Create TraceAnalyzer with JSON string. 10 // - Create TraceAnalyzer with JSON string.
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 // All numbers and bool values from TraceEvent args are cast to double. 163 // All numbers and bool values from TraceEvent args are cast to double.
164 // bool becomes 1.0 (true) or 0.0 (false). 164 // bool becomes 1.0 (true) or 0.0 (false).
165 std::map<std::string, double> arg_numbers; 165 std::map<std::string, double> arg_numbers;
166 166
167 std::map<std::string, std::string> arg_strings; 167 std::map<std::string, std::string> arg_strings;
168 168
169 // The other event associated with this event (or NULL). 169 // The other event associated with this event (or NULL).
170 const TraceEvent* other_event; 170 const TraceEvent* other_event;
171 }; 171 };
172 172
173 typedef std::vector<const TraceEvent*> TraceEventVector;
174
173 // Pass these values to Query to compare with the corresponding member of a 175 // Pass these values to Query to compare with the corresponding member of a
174 // TraceEvent. Unless otherwise specfied, the usage is Query(ENUM_MEMBER). 176 // TraceEvent. Unless otherwise specfied, the usage is Query(ENUM_MEMBER).
175 enum TraceEventMember { 177 enum TraceEventMember {
176 EVENT_INVALID, 178 EVENT_INVALID,
177 // Use these to access the event members: 179 // Use these to access the event members:
178 EVENT_PID, 180 EVENT_PID,
179 EVENT_TID, 181 EVENT_TID,
180 // Return the timestamp of the event in microseconds since epoch. 182 // Return the timestamp of the event in microseconds since epoch.
181 EVENT_TIME, 183 EVENT_TIME,
182 // Return the absolute time between event and other event in microseconds. 184 // Return the absolute time between event and other event in microseconds.
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 private: 413 private:
412 friend class base::RefCounted<QueryNode>; 414 friend class base::RefCounted<QueryNode>;
413 ~QueryNode(); 415 ~QueryNode();
414 416
415 Query query_; 417 Query query_;
416 }; 418 };
417 419
418 // TraceAnalyzer helps tests search for trace events. 420 // TraceAnalyzer helps tests search for trace events.
419 class TraceAnalyzer { 421 class TraceAnalyzer {
420 public: 422 public:
421 typedef std::vector<const TraceEvent*> TraceEventVector;
422
423 struct Stats {
424 double min_us;
425 double max_us;
426 double mean_us;
427 double standard_deviation_us;
428 };
429
430 ~TraceAnalyzer(); 423 ~TraceAnalyzer();
431 424
432 // Use trace events from JSON string generated by tracing API. 425 // Use trace events from JSON string generated by tracing API.
433 // Returns non-NULL if the JSON is successfully parsed. 426 // Returns non-NULL if the JSON is successfully parsed.
434 static TraceAnalyzer* Create(const std::string& json_events) 427 static TraceAnalyzer* Create(const std::string& json_events)
435 WARN_UNUSED_RESULT; 428 WARN_UNUSED_RESULT;
436 429
437 // Associate BEGIN and END events with each other. This allows Query(OTHER_*) 430 // Associate BEGIN and END events with each other. This allows Query(OTHER_*)
438 // to access the associated event and enables Query(EVENT_DURATION). 431 // to access the associated event and enables Query(EVENT_DURATION).
439 // An end event will match the most recent begin event with the same name, 432 // An end event will match the most recent begin event with the same name,
(...skipping 27 matching lines...) Expand all
467 // 460 //
468 // NOTE: AssociateEvents will overwrite existing other_event associations if 461 // NOTE: AssociateEvents will overwrite existing other_event associations if
469 // the queries pass for events that already had a previous association. 462 // the queries pass for events that already had a previous association.
470 // 463 //
471 // After calling FindEvents or FindOneEvent, it is not allowed to call 464 // After calling FindEvents or FindOneEvent, it is not allowed to call
472 // AssociateEvents again. 465 // AssociateEvents again.
473 void AssociateEvents(const Query& first, 466 void AssociateEvents(const Query& first,
474 const Query& second, 467 const Query& second,
475 const Query& match); 468 const Query& match);
476 469
470 // For each event, copy its arguments to the other_event argument map. If
471 // argument name already exists, it will not be overwritten.
472 void MergeAssociatedEventArgs();
473
477 // Find all events that match query and replace output vector. 474 // Find all events that match query and replace output vector.
478 size_t FindEvents(const Query& query, TraceEventVector* output); 475 size_t FindEvents(const Query& query, TraceEventVector* output);
479 476
480 // Helper method: find first event that matches query 477 // Helper method: find first event that matches query
481 const TraceEvent* FindOneEvent(const Query& query); 478 const TraceEvent* FindOneEvent(const Query& query);
482 479
483 const std::string& GetThreadName(const TraceEvent::ProcessThreadID& thread); 480 const std::string& GetThreadName(const TraceEvent::ProcessThreadID& thread);
484 481
485 // Calculate min/max/mean and standard deviation from the times between
486 // adjacent events.
487 static bool GetRateStats(const TraceEventVector& events, Stats* stats);
488
489 private: 482 private:
490 TraceAnalyzer(); 483 TraceAnalyzer();
491 484
492 bool SetEvents(const std::string& json_events) WARN_UNUSED_RESULT; 485 bool SetEvents(const std::string& json_events) WARN_UNUSED_RESULT;
493 486
494 // Read metadata (thread names, etc) from events. 487 // Read metadata (thread names, etc) from events.
495 void ParseMetadata(); 488 void ParseMetadata();
496 489
497 std::map<TraceEvent::ProcessThreadID, std::string> thread_names_; 490 std::map<TraceEvent::ProcessThreadID, std::string> thread_names_;
498 std::vector<TraceEvent> raw_events_; 491 std::vector<TraceEvent> raw_events_;
499 bool allow_assocation_changes_; 492 bool allow_assocation_changes_;
500 493
501 DISALLOW_COPY_AND_ASSIGN(TraceAnalyzer); 494 DISALLOW_COPY_AND_ASSIGN(TraceAnalyzer);
502 }; 495 };
503 496
497 // Utility functions for TraceEventVector.
498
499 struct RateStats {
500 double min_us;
501 double max_us;
502 double mean_us;
503 double standard_deviation_us;
504 };
505
506 // Calculate min/max/mean and standard deviation from the times between
507 // adjacent events.
508 bool GetRateStats(const TraceEventVector& events, RateStats* stats);
509
510 // Starting from |position|, find the first event that matches |query|.
511 // Returns true if found, false otherwise.
512 bool FindFirstOf(const TraceEventVector& events,
513 const Query& query,
514 size_t position,
515 size_t* return_index);
516
517 // Starting from |position|, find the last event that matches |query|.
518 // Returns true if found, false otherwise.
519 bool FindLastOf(const TraceEventVector& events,
520 const Query& query,
521 size_t position,
522 size_t* return_index);
523
524 // Find the closest events to |position| in time that match |query|.
525 // return_second_closest may be NULL. Closeness is determined by comparing
526 // with the event timestamp.
527 // Returns true if found, false otherwise. If both return parameters are
528 // requested, both must be found for a successful result.
529 bool FindClosest(const TraceEventVector& events,
530 const Query& query,
531 size_t position,
532 size_t* return_closest,
533 size_t* return_second_closest);
534
535 // Count matches, inclusive of |begin_position|, exclusive of |end_position|.
536 size_t CountMatches(const TraceEventVector& events,
537 const Query& query,
538 size_t begin_position,
539 size_t end_position);
540
541 // Count all matches.
542 static inline size_t CountMatches(const TraceEventVector& events,
543 const Query& query) {
544 return CountMatches(events, query, 0u, events.size());
545 }
546
504 } // namespace trace_analyzer 547 } // namespace trace_analyzer
505 548
506 #endif // BASE_TEST_TRACE_EVENT_ANALYZER_H_ 549 #endif // BASE_TEST_TRACE_EVENT_ANALYZER_H_
OLDNEW
« no previous file with comments | « no previous file | base/test/trace_event_analyzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698