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

Unified Diff: base/test/trace_event_analyzer.cc

Issue 2716023002: Add some changes to TraceAnalyzer to improve analysis (Closed)
Patch Set: Add some changes to TraceAnalyzer to improve analysis Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/test/trace_event_analyzer.h ('k') | base/test/trace_event_analyzer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/test/trace_event_analyzer.cc
diff --git a/base/test/trace_event_analyzer.cc b/base/test/trace_event_analyzer.cc
index 5e0976867f2c866448973d86f821cbaa5b6fa90e..e61337cccbdc259626ce17fec19d71e8c7637a6c 100644
--- a/base/test/trace_event_analyzer.cc
+++ b/base/test/trace_event_analyzer.cc
@@ -449,14 +449,24 @@ bool Query::GetAsString(const TraceEvent& event, std::string* str) const {
}
}
+const TraceEvent* Query::SelectTargetEvent(const TraceEvent* event,
+ TraceEventMember member) {
+ if (member >= OTHER_FIRST_MEMBER && member <= OTHER_LAST_MEMBER) {
+ return event->other_event;
+ } else if (member >= PREV_FIRST_MEMBER && member <= PREV_LAST_MEMBER) {
+ return event->prev_event;
+ } else {
+ return event;
+ }
+}
+
bool Query::GetMemberValueAsDouble(const TraceEvent& event,
double* num) const {
DCHECK_EQ(QUERY_EVENT_MEMBER, type_);
// This could be a request for a member of |event| or a member of |event|'s
- // associated event. Store the target event in the_event:
- const TraceEvent* the_event = (member_ < OTHER_PID) ?
- &event : event.other_event;
+ // associated previous or next event. Store the target event in the_event:
+ const TraceEvent* the_event = SelectTargetEvent(&event, member_);
// Request for member of associated event, but there is no associated event.
if (!the_event)
@@ -465,14 +475,17 @@ bool Query::GetMemberValueAsDouble(const TraceEvent& event,
switch (member_) {
case EVENT_PID:
case OTHER_PID:
+ case PREV_PID:
*num = static_cast<double>(the_event->thread.process_id);
return true;
case EVENT_TID:
case OTHER_TID:
+ case PREV_TID:
*num = static_cast<double>(the_event->thread.thread_id);
return true;
case EVENT_TIME:
case OTHER_TIME:
+ case PREV_TIME:
*num = the_event->timestamp;
return true;
case EVENT_DURATION:
@@ -487,18 +500,22 @@ bool Query::GetMemberValueAsDouble(const TraceEvent& event,
return true;
case EVENT_PHASE:
case OTHER_PHASE:
+ case PREV_PHASE:
*num = static_cast<double>(the_event->phase);
return true;
case EVENT_HAS_STRING_ARG:
case OTHER_HAS_STRING_ARG:
+ case PREV_HAS_STRING_ARG:
*num = (the_event->HasStringArg(string_) ? 1.0 : 0.0);
return true;
case EVENT_HAS_NUMBER_ARG:
case OTHER_HAS_NUMBER_ARG:
+ case PREV_HAS_NUMBER_ARG:
*num = (the_event->HasNumberArg(string_) ? 1.0 : 0.0);
return true;
case EVENT_ARG:
- case OTHER_ARG: {
+ case OTHER_ARG:
+ case PREV_ARG: {
// Search for the argument name and return its value if found.
std::map<std::string, double>::const_iterator num_i =
the_event->arg_numbers.find(string_);
@@ -511,6 +528,9 @@ bool Query::GetMemberValueAsDouble(const TraceEvent& event,
// return 1.0 (true) if the other event exists
*num = event.other_event ? 1.0 : 0.0;
return true;
+ case EVENT_HAS_PREV:
+ *num = event.prev_event ? 1.0 : 0.0;
+ return true;
default:
return false;
}
@@ -521,9 +541,8 @@ bool Query::GetMemberValueAsString(const TraceEvent& event,
DCHECK_EQ(QUERY_EVENT_MEMBER, type_);
// This could be a request for a member of |event| or a member of |event|'s
- // associated event. Store the target event in the_event:
- const TraceEvent* the_event = (member_ < OTHER_PID) ?
- &event : event.other_event;
+ // associated previous or next event. Store the target event in the_event:
+ const TraceEvent* the_event = SelectTargetEvent(&event, member_);
// Request for member of associated event, but there is no associated event.
if (!the_event)
@@ -532,18 +551,22 @@ bool Query::GetMemberValueAsString(const TraceEvent& event,
switch (member_) {
case EVENT_CATEGORY:
case OTHER_CATEGORY:
+ case PREV_CATEGORY:
*str = the_event->category;
return true;
case EVENT_NAME:
case OTHER_NAME:
+ case PREV_NAME:
*str = the_event->name;
return true;
case EVENT_ID:
case OTHER_ID:
+ case PREV_ID:
*str = the_event->id;
return true;
case EVENT_ARG:
- case OTHER_ARG: {
+ case OTHER_ARG:
+ case PREV_ARG: {
// Search for the argument name and return its value if found.
std::map<std::string, std::string>::const_iterator str_i =
the_event->arg_strings.find(string_);
@@ -740,7 +763,7 @@ void TraceAnalyzer::AssociateBeginEndEvents() {
AssociateEvents(begin, end, match);
}
-void TraceAnalyzer::AssociateAsyncBeginEndEvents() {
+void TraceAnalyzer::AssociateAsyncBeginEndEvents(bool match_pid) {
using trace_analyzer::Query;
Query begin(
@@ -750,10 +773,13 @@ void TraceAnalyzer::AssociateAsyncBeginEndEvents() {
Query end(Query::EventPhaseIs(TRACE_EVENT_PHASE_ASYNC_END) ||
Query::EventPhaseIs(TRACE_EVENT_PHASE_ASYNC_STEP_INTO) ||
Query::EventPhaseIs(TRACE_EVENT_PHASE_ASYNC_STEP_PAST));
- Query match(Query::EventName() == Query::OtherName() &&
- Query::EventCategory() == Query::OtherCategory() &&
+ Query match(Query::EventCategory() == Query::OtherCategory() &&
Query::EventId() == Query::OtherId());
+ if (match_pid) {
+ match = match && Query::EventPid() == Query::OtherPid();
+ }
+
AssociateEvents(begin, end, match);
}
@@ -782,6 +808,8 @@ void TraceAnalyzer::AssociateEvents(const Query& first,
begin_event.other_event = &this_event;
if (match.Evaluate(begin_event)) {
// Found a matching begin/end pair.
+ // Set the associated previous event
+ this_event.prev_event = &begin_event;
// Erase the matching begin event index from the stack.
begin_stack.erase(begin_stack.begin() + stack_index);
break;
« no previous file with comments | « base/test/trace_event_analyzer.h ('k') | base/test/trace_event_analyzer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698