Lines Matching full:query
5 // Use trace_analyzer::Query and trace_analyzer::TraceAnalyzer to search for
15 // A Query is a boolean expression tree that evaluates to true or false for a
34 // analyzer.FindEvents(Query(EVENT_NAME) == "my_event", &events);
38 // Query q = (Query(EVENT_NAME) == Query::String("my_event") &&
39 // Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_BEGIN) &&
40 // Query(EVENT_DURATION) > Query::Double(1000000.0));
58 // Query begin(Query(EVENT_NAME) == Query::String("timing1_begin"));
59 // Query end(Query(EVENT_NAME) == Query::String("timing1_end"));
60 // Query match(Query(EVENT_ARG, "id") == Query(OTHER_ARG, "id"));
64 // Query q = (Query(EVENT_NAME) == Query::String("timing1_begin") &&
65 // Query(EVENT_HAS_OTHER));
146 // Query(EVENT_HAS_OTHER) or by calling has_other_event().
166 // Query(HAS_NUMBER_ARG) or Query(HAS_STRING_ARG).
210 class Query {
212 Query(const Query& query);
214 ~Query();
217 // Query literal values
220 static Query String(const std::string& str);
223 static Query Double(double num);
224 static Query Int(int32_t num);
225 static Query Uint(uint32_t num);
228 static Query Bool(bool boolean);
231 static Query Phase(char phase);
234 // Example: Query(EVENT_NAME) == Query::Pattern("MyEvent*")
235 static Query Pattern(const std::string& pattern);
238 // Query event members
240 static Query EventPid() { return Query(EVENT_PID); } in EventPid()
242 static Query EventTid() { return Query(EVENT_TID); } in EventTid()
245 static Query EventTime() { return Query(EVENT_TIME); } in EventTime()
248 // Only works if Query::EventHasOther() == true.
249 static Query EventDuration() { return Query(EVENT_DURATION); } in EventDuration()
252 static Query EventCompleteDuration() { in EventCompleteDuration()
253 return Query(EVENT_COMPLETE_DURATION); in EventCompleteDuration()
256 static Query EventPhase() { return Query(EVENT_PHASE); } in EventPhase()
258 static Query EventCategory() { return Query(EVENT_CATEGORY); } in EventCategory()
260 static Query EventName() { return Query(EVENT_NAME); } in EventName()
262 static Query EventId() { return Query(EVENT_ID); } in EventId()
264 static Query EventPidIs(int process_id) { in EventPidIs()
265 return Query(EVENT_PID) == Query::Int(process_id); in EventPidIs()
268 static Query EventTidIs(int thread_id) { in EventTidIs()
269 return Query(EVENT_TID) == Query::Int(thread_id); in EventTidIs()
272 static Query EventThreadIs(const TraceEvent::ProcessThreadID& thread) { in EventThreadIs()
276 static Query EventTimeIs(double timestamp) { in EventTimeIs()
277 return Query(EVENT_TIME) == Query::Double(timestamp); in EventTimeIs()
280 static Query EventDurationIs(double duration) { in EventDurationIs()
281 return Query(EVENT_DURATION) == Query::Double(duration); in EventDurationIs()
284 static Query EventPhaseIs(char phase) { in EventPhaseIs()
285 return Query(EVENT_PHASE) == Query::Phase(phase); in EventPhaseIs()
288 static Query EventCategoryIs(const std::string& category) { in EventCategoryIs()
289 return Query(EVENT_CATEGORY) == Query::String(category); in EventCategoryIs()
292 static Query EventNameIs(const std::string& name) { in EventNameIs()
293 return Query(EVENT_NAME) == Query::String(name); in EventNameIs()
296 static Query EventIdIs(const std::string& id) { in EventIdIs()
297 return Query(EVENT_ID) == Query::String(id); in EventIdIs()
301 static Query EventHasStringArg(const std::string& arg_name) { in EventHasStringArg()
302 return Query(EVENT_HAS_STRING_ARG, arg_name); in EventHasStringArg()
307 static Query EventHasNumberArg(const std::string& arg_name) { in EventHasNumberArg()
308 return Query(EVENT_HAS_NUMBER_ARG, arg_name); in EventHasNumberArg()
312 static Query EventArg(const std::string& arg_name) { in EventArg()
313 return Query(EVENT_ARG, arg_name); in EventArg()
317 static Query EventHasOther() { return Query(EVENT_HAS_OTHER); } in EventHasOther()
321 static Query OtherPid() { return Query(OTHER_PID); } in OtherPid()
323 static Query OtherTid() { return Query(OTHER_TID); } in OtherTid()
325 static Query OtherTime() { return Query(OTHER_TIME); } in OtherTime()
327 static Query OtherPhase() { return Query(OTHER_PHASE); } in OtherPhase()
329 static Query OtherCategory() { return Query(OTHER_CATEGORY); } in OtherCategory()
331 static Query OtherName() { return Query(OTHER_NAME); } in OtherName()
333 static Query OtherId() { return Query(OTHER_ID); } in OtherId()
335 static Query OtherPidIs(int process_id) { in OtherPidIs()
336 return Query(OTHER_PID) == Query::Int(process_id); in OtherPidIs()
339 static Query OtherTidIs(int thread_id) { in OtherTidIs()
340 return Query(OTHER_TID) == Query::Int(thread_id); in OtherTidIs()
343 static Query OtherThreadIs(const TraceEvent::ProcessThreadID& thread) { in OtherThreadIs()
347 static Query OtherTimeIs(double timestamp) { in OtherTimeIs()
348 return Query(OTHER_TIME) == Query::Double(timestamp); in OtherTimeIs()
351 static Query OtherPhaseIs(char phase) { in OtherPhaseIs()
352 return Query(OTHER_PHASE) == Query::Phase(phase); in OtherPhaseIs()
355 static Query OtherCategoryIs(const std::string& category) { in OtherCategoryIs()
356 return Query(OTHER_CATEGORY) == Query::String(category); in OtherCategoryIs()
359 static Query OtherNameIs(const std::string& name) { in OtherNameIs()
360 return Query(OTHER_NAME) == Query::String(name); in OtherNameIs()
363 static Query OtherIdIs(const std::string& id) { in OtherIdIs()
364 return Query(OTHER_ID) == Query::String(id); in OtherIdIs()
368 static Query OtherHasStringArg(const std::string& arg_name) { in OtherHasStringArg()
369 return Query(OTHER_HAS_STRING_ARG, arg_name); in OtherHasStringArg()
374 static Query OtherHasNumberArg(const std::string& arg_name) { in OtherHasNumberArg()
375 return Query(OTHER_HAS_NUMBER_ARG, arg_name); in OtherHasNumberArg()
379 static Query OtherArg(const std::string& arg_name) { in OtherArg()
380 return Query(OTHER_ARG, arg_name); in OtherArg()
385 static Query PrevPid() { return Query(PREV_PID); } in PrevPid()
387 static Query PrevTid() { return Query(PREV_TID); } in PrevTid()
389 static Query PrevTime() { return Query(PREV_TIME); } in PrevTime()
391 static Query PrevPhase() { return Query(PREV_PHASE); } in PrevPhase()
393 static Query PrevCategory() { return Query(PREV_CATEGORY); } in PrevCategory()
395 static Query PrevName() { return Query(PREV_NAME); } in PrevName()
397 static Query PrevId() { return Query(PREV_ID); } in PrevId()
399 static Query PrevPidIs(int process_id) { in PrevPidIs()
400 return Query(PREV_PID) == Query::Int(process_id); in PrevPidIs()
403 static Query PrevTidIs(int thread_id) { in PrevTidIs()
404 return Query(PREV_TID) == Query::Int(thread_id); in PrevTidIs()
407 static Query PrevThreadIs(const TraceEvent::ProcessThreadID& thread) { in PrevThreadIs()
411 static Query PrevTimeIs(double timestamp) { in PrevTimeIs()
412 return Query(PREV_TIME) == Query::Double(timestamp); in PrevTimeIs()
415 static Query PrevPhaseIs(char phase) { in PrevPhaseIs()
416 return Query(PREV_PHASE) == Query::Phase(phase); in PrevPhaseIs()
419 static Query PrevCategoryIs(const std::string& category) { in PrevCategoryIs()
420 return Query(PREV_CATEGORY) == Query::String(category); in PrevCategoryIs()
423 static Query PrevNameIs(const std::string& name) { in PrevNameIs()
424 return Query(PREV_NAME) == Query::String(name); in PrevNameIs()
427 static Query PrevIdIs(const std::string& id) { in PrevIdIs()
428 return Query(PREV_ID) == Query::String(id); in PrevIdIs()
432 static Query PrevHasStringArg(const std::string& arg_name) { in PrevHasStringArg()
433 return Query(PREV_HAS_STRING_ARG, arg_name); in PrevHasStringArg()
438 static Query PrevHasNumberArg(const std::string& arg_name) { in PrevHasNumberArg()
439 return Query(PREV_HAS_NUMBER_ARG, arg_name); in PrevHasNumberArg()
443 static Query PrevArg(const std::string& arg_name) { in PrevArg()
444 return Query(PREV_ARG, arg_name); in PrevArg()
451 static Query MatchBeginWithEnd() { in MatchBeginWithEnd()
452 return (Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_BEGIN)) && in MatchBeginWithEnd()
453 Query(EVENT_HAS_OTHER); in MatchBeginWithEnd()
457 static Query MatchComplete() { in MatchComplete()
458 return (Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_COMPLETE)); in MatchComplete()
462 static Query MatchAsyncBeginWithNext() { in MatchAsyncBeginWithNext()
463 return (Query(EVENT_PHASE) == in MatchAsyncBeginWithNext()
464 Query::Phase(TRACE_EVENT_PHASE_ASYNC_BEGIN)) && in MatchAsyncBeginWithNext()
465 Query(EVENT_HAS_OTHER); in MatchAsyncBeginWithNext()
469 static Query MatchBeginName(const std::string& name) { in MatchBeginName()
470 return (Query(EVENT_NAME) == Query(name)) && MatchBeginWithEnd(); in MatchBeginName()
474 static Query MatchCompleteName(const std::string& name) { in MatchCompleteName()
475 return (Query(EVENT_NAME) == Query(name)) && MatchComplete(); in MatchCompleteName()
479 static Query MatchThread(const TraceEvent::ProcessThreadID& thread) { in MatchThread()
480 return (Query(EVENT_PID) == Query::Int(thread.process_id)) && in MatchThread()
481 (Query(EVENT_TID) == Query::Int(thread.thread_id)); in MatchThread()
485 static Query MatchCrossThread() { in MatchCrossThread()
486 return (Query(EVENT_PID) != Query(OTHER_PID)) || in MatchCrossThread()
487 (Query(EVENT_TID) != Query(OTHER_TID)); in MatchCrossThread()
494 Query operator==(const Query& rhs) const;
495 Query operator!=(const Query& rhs) const;
496 Query operator< (const Query& rhs) const;
497 Query operator<=(const Query& rhs) const;
498 Query operator> (const Query& rhs) const;
499 Query operator>=(const Query& rhs) const;
500 Query operator&&(const Query& rhs) const;
501 Query operator||(const Query& rhs) const;
502 Query operator!() const;
506 Query operator+(const Query& rhs) const;
507 Query operator-(const Query& rhs) const;
508 Query operator*(const Query& rhs) const;
509 Query operator/(const Query& rhs) const;
510 Query operator-() const;
512 Query operator%(const Query& rhs) const;
514 // Return true if the given event matches this query tree.
515 // This is a recursive method that walks the query tree.
594 explicit Query(TraceEventMember member);
597 Query(TraceEventMember member, const std::string& arg_name);
600 explicit Query(const std::string& str);
603 explicit Query(double num);
605 // Construct a boolean Query that returns (left <binary_op> right).
606 Query(const Query& left, const Query& right, Operator binary_op);
608 // Construct a boolean Query that returns (<binary_op> left).
609 Query(const Query& left, Operator unary_op);
621 // Attempt to convert this Query to a double. On success, true is returned
625 // Attempt to convert this Query to a string. On success, true is returned
629 // Evaluate this Query as an arithmetic operator on left_ and right_.
633 // For QUERY_EVENT_MEMBER Query: attempt to get the double value of the Query.
636 // For QUERY_EVENT_MEMBER Query: attempt to get the string value of the Query.
639 // Does this Query represent a value?
653 const Query& left() const;
654 const Query& right() const;
668 // QueryNode allows Query to store a ref-counted query tree.
671 explicit QueryNode(const Query& query);
672 const Query& query() const { return query_; } in query() function
678 Query query_;
695 // Associate BEGIN and END events with each other. This allows Query(OTHER_*)
696 // to access the associated event and enables Query(EVENT_DURATION).
720 // |first| - Eligible |first| events match this query.
721 // |second| - Eligible |second| events match this query.
722 // |match| - This query is run on the |first| event. The OTHER_* EventMember
723 // queries will point to an eligible |second| event. The query
736 void AssociateEvents(const Query& first,
737 const Query& second,
738 const Query& match);
744 // Find all events that match query and replace output vector.
745 size_t FindEvents(const Query& query, TraceEventVector* output);
747 // Find first event that matches query or NULL if not found.
748 const TraceEvent* FindFirstOf(const Query& query);
750 // Find last event that matches query or NULL if not found.
751 const TraceEvent* FindLastOf(const Query& query);
803 // Starting from |position|, find the first event that matches |query|.
806 const Query& query,
810 // Starting from |position|, find the last event that matches |query|.
813 const Query& query,
817 // Find the closest events to |position| in time that match |query|.
823 const Query& query,
830 const Query& query,
836 const Query& query) { in CountMatches() argument
837 return CountMatches(events, query, 0u, events.size()); in CountMatches()