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

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

Issue 9522010: Add ASYNC_STEP support to trace_event and change START to ASYNC_BEGIN. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: just a merge Created 8 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « base/debug/trace_event_unittest.cc ('k') | 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) 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 // 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 11 matching lines...) Expand all
22 // a related trace event. The related trace event is typically the matching end 22 // a related trace event. The related trace event is typically the matching end
23 // of a begin event or the matching begin of an end event. 23 // of a begin event or the matching begin of an end event.
24 // 24 //
25 // The following examples use this basic setup code to construct TraceAnalyzer 25 // The following examples use this basic setup code to construct TraceAnalyzer
26 // with the json trace string retrieved from TraceLog and construct an event 26 // with the json trace string retrieved from TraceLog and construct an event
27 // vector for retrieving events: 27 // vector for retrieving events:
28 // 28 //
29 // TraceAnalyzer analyzer(json_events); 29 // TraceAnalyzer analyzer(json_events);
30 // TraceEventVector events; 30 // TraceEventVector events;
31 // 31 //
32 // During construction, TraceAnalyzer::SetDefaultAssociations is called to
33 // associate all matching begin/end pairs similar to how they are shown in
34 // about:tracing.
35 //
36 // EXAMPLE 1: Find events named "my_event". 32 // EXAMPLE 1: Find events named "my_event".
37 // 33 //
38 // analyzer.FindEvents(Query(EVENT_NAME) == "my_event", &events); 34 // analyzer.FindEvents(Query(EVENT_NAME) == "my_event", &events);
39 // 35 //
40 // EXAMPLE 2: Find begin events named "my_event" with duration > 1 second. 36 // EXAMPLE 2: Find begin events named "my_event" with duration > 1 second.
41 // 37 //
42 // Query q = (Query(EVENT_NAME) == Query::String("my_event") && 38 // Query q = (Query(EVENT_NAME) == Query::String("my_event") &&
43 // Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_BEGIN) && 39 // Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_BEGIN) &&
44 // Query(EVENT_DURATION) > Query::Double(1000000.0)); 40 // Query(EVENT_DURATION) > Query::Double(1000000.0));
45 // analyzer.FindEvents(q, &events); 41 // analyzer.FindEvents(q, &events);
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 266
271 //////////////////////////////////////////////////////////////// 267 ////////////////////////////////////////////////////////////////
272 // Common queries: 268 // Common queries:
273 269
274 // Find BEGIN events that have a corresponding END event. 270 // Find BEGIN events that have a corresponding END event.
275 static Query MatchBeginWithEnd() { 271 static Query MatchBeginWithEnd() {
276 return (Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_BEGIN)) && 272 return (Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_BEGIN)) &&
277 Query(EVENT_HAS_OTHER); 273 Query(EVENT_HAS_OTHER);
278 } 274 }
279 275
280 // Find START events that have a corresponding FINISH event. 276 // Find ASYNC_BEGIN events that have a corresponding ASYNC_END event.
281 static Query MatchStartWithFinish() { 277 static Query MatchAsyncBeginWithNext() {
282 return (Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_START)) && 278 return (Query(EVENT_PHASE) ==
279 Query::Phase(TRACE_EVENT_PHASE_ASYNC_BEGIN)) &&
283 Query(EVENT_HAS_OTHER); 280 Query(EVENT_HAS_OTHER);
284 } 281 }
285 282
286 // Find BEGIN events of given |name| which also have associated END events. 283 // Find BEGIN events of given |name| which also have associated END events.
287 static Query MatchBeginName(const std::string& name) { 284 static Query MatchBeginName(const std::string& name) {
288 return (Query(EVENT_NAME) == name) && MatchBeginWithEnd(); 285 return (Query(EVENT_NAME) == name) && MatchBeginWithEnd();
289 } 286 }
290 287
291 // Match given Process ID and Thread ID. 288 // Match given Process ID and Thread ID.
292 static Query MatchThread(const TraceEvent::ProcessThreadID& thread) { 289 static Query MatchThread(const TraceEvent::ProcessThreadID& thread) {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 472
476 // Use trace events from JSON string generated by tracing API. 473 // Use trace events from JSON string generated by tracing API.
477 // Returns non-NULL if the JSON is successfully parsed. 474 // Returns non-NULL if the JSON is successfully parsed.
478 static TraceAnalyzer* Create(const std::string& json_events) 475 static TraceAnalyzer* Create(const std::string& json_events)
479 WARN_UNUSED_RESULT; 476 WARN_UNUSED_RESULT;
480 477
481 // Associate BEGIN and END events with each other. This allows Query(OTHER_*) 478 // Associate BEGIN and END events with each other. This allows Query(OTHER_*)
482 // to access the associated event and enables Query(EVENT_DURATION). 479 // to access the associated event and enables Query(EVENT_DURATION).
483 // An end event will match the most recent begin event with the same name, 480 // An end event will match the most recent begin event with the same name,
484 // category, process ID and thread ID. This matches what is shown in 481 // category, process ID and thread ID. This matches what is shown in
485 // about:tracing. 482 // about:tracing. After association, the BEGIN event will point to the
483 // matching END event, but the END event will not point to the BEGIN event.
486 void AssociateBeginEndEvents(); 484 void AssociateBeginEndEvents();
487 485
488 // Associate START and FINISH events with each other. 486 // Associate ASYNC_BEGIN, ASYNC_STEP and ASYNC_END events with each other.
489 // A FINISH event will match the most recent START event with the same name, 487 // An ASYNC_END event will match the most recent ASYNC_BEGIN or ASYNC_STEP
490 // category, and ID. 488 // event with the same name, category, and ID. This creates a singly linked
491 void AssociateStartFinishEvents(); 489 // list of ASYNC_BEGIN->ASYNC_STEP...->ASYNC_END.
490 void AssociateAsyncBeginEndEvents();
492 491
493 // AssociateEvents can be used to customize event associations by setting the 492 // AssociateEvents can be used to customize event associations by setting the
494 // other_event member of TraceEvent. This should be used to associate two 493 // other_event member of TraceEvent. This should be used to associate two
495 // INSTANT events. 494 // INSTANT events.
496 // 495 //
497 // The assumptions are: 496 // The assumptions are:
498 // - |first| events occur before |second| events. 497 // - |first| events occur before |second| events.
499 // - the closest matching |second| event is the correct match. 498 // - the closest matching |second| event is the correct match.
500 // 499 //
501 // |first| - Eligible |first| events match this query. 500 // |first| - Eligible |first| events match this query.
502 // |second| - Eligible |second| events match this query. 501 // |second| - Eligible |second| events match this query.
503 // |match| - This query is run on the |first| event. The OTHER_* EventMember 502 // |match| - This query is run on the |first| event. The OTHER_* EventMember
504 // queries will point to an eligible |second| event. The query 503 // queries will point to an eligible |second| event. The query
505 // should evaluate to true if the |first|/|second| pair is a match. 504 // should evaluate to true if the |first|/|second| pair is a match.
506 // 505 //
507 // When a match is found, the pair will be associated by having their 506 // When a match is found, the pair will be associated by having the first
508 // other_event member point to each other. AssociateEvents does not clear 507 // event's other_event member point to the other. AssociateEvents does not
509 // previous associations, so it is possible to associate multiple pairs of 508 // clear previous associations, so it is possible to associate multiple pairs
510 // events by calling AssociateEvents more than once with different queries. 509 // of events by calling AssociateEvents more than once with different queries.
511 // 510 //
512 // NOTE: AssociateEvents will overwrite existing other_event associations if 511 // NOTE: AssociateEvents will overwrite existing other_event associations if
513 // the queries pass for events that already had a previous association. 512 // the queries pass for events that already had a previous association.
514 // 513 //
515 // After calling FindEvents or FindOneEvent, it is not allowed to call 514 // After calling FindEvents or FindOneEvent, it is not allowed to call
516 // AssociateEvents again. 515 // AssociateEvents again.
517 void AssociateEvents(const Query& first, 516 void AssociateEvents(const Query& first,
518 const Query& second, 517 const Query& second,
519 const Query& match); 518 const Query& match);
520 519
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 590
592 // Count all matches. 591 // Count all matches.
593 static inline size_t CountMatches(const TraceEventVector& events, 592 static inline size_t CountMatches(const TraceEventVector& events,
594 const Query& query) { 593 const Query& query) {
595 return CountMatches(events, query, 0u, events.size()); 594 return CountMatches(events, query, 0u, events.size());
596 } 595 }
597 596
598 } // namespace trace_analyzer 597 } // namespace trace_analyzer
599 598
600 #endif // BASE_TEST_TRACE_EVENT_ANALYZER_H_ 599 #endif // BASE_TEST_TRACE_EVENT_ANALYZER_H_
OLDNEW
« no previous file with comments | « base/debug/trace_event_unittest.cc ('k') | base/test/trace_event_analyzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698