diff options
author | Steven Rostedt <srostedt@redhat.com> | 2010-02-17 11:47:05 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-02-17 13:07:27 -0500 |
commit | 4991c35c3bab5e000917ad41a0277008f18c4ab3 (patch) | |
tree | c6ea6d603cd29ee7276d7d82cebae2ced7c1992b | |
parent | 9459d400902a9a5332f9605832ecea6976c9ef00 (diff) |
parse-events: Add pevent_filter_event_has_trivial()
Add pevent_filter_event_has_trivial() to test if an event has
a trivial TRUE, FALSE, or either filter.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | parse-events.h | 14 | ||||
-rw-r--r-- | parse-filter.c | 43 | ||||
-rw-r--r-- | trace-view-store.c | 2 |
3 files changed, 50 insertions, 9 deletions
diff --git a/parse-events.h b/parse-events.h index ffc0b48..88b471b 100644 --- a/parse-events.h +++ b/parse-events.h | |||
@@ -582,10 +582,10 @@ struct event_filter *pevent_filter_alloc(struct pevent *pevent); | |||
582 | #define FILTER_MISS 0 | 582 | #define FILTER_MISS 0 |
583 | #define FILTER_MATCH 1 | 583 | #define FILTER_MATCH 1 |
584 | 584 | ||
585 | enum filter_remove_type { | 585 | enum filter_trivial_type { |
586 | FILTER_REMOVE_FALSE, | 586 | FILTER_TRIVIAL_FALSE, |
587 | FILTER_REMOVE_TRUE, | 587 | FILTER_TRIVIAL_TRUE, |
588 | FILTER_REMOVE_BOTH, | 588 | FILTER_TRIVIAL_BOTH, |
589 | }; | 589 | }; |
590 | 590 | ||
591 | int pevent_filter_add_filter_str(struct event_filter *filter, | 591 | int pevent_filter_add_filter_str(struct event_filter *filter, |
@@ -602,7 +602,7 @@ int pevent_event_filtered(struct event_filter *filter, | |||
602 | void pevent_filter_reset(struct event_filter *filter); | 602 | void pevent_filter_reset(struct event_filter *filter); |
603 | 603 | ||
604 | void pevent_filter_clear_trivial(struct event_filter *filter, | 604 | void pevent_filter_clear_trivial(struct event_filter *filter, |
605 | enum filter_remove_type type); | 605 | enum filter_trivial_type type); |
606 | 606 | ||
607 | void pevent_filter_free(struct event_filter *filter); | 607 | void pevent_filter_free(struct event_filter *filter); |
608 | 608 | ||
@@ -611,4 +611,8 @@ char *pevent_filter_make_string(struct event_filter *filter, int event_id); | |||
611 | int pevent_filter_remove_event(struct event_filter *filter, | 611 | int pevent_filter_remove_event(struct event_filter *filter, |
612 | int event_id); | 612 | int event_id); |
613 | 613 | ||
614 | int pevent_filter_event_has_trivial(struct event_filter *filter, | ||
615 | int event_id, | ||
616 | enum filter_trivial_type type); | ||
617 | |||
614 | #endif /* _PARSE_EVENTS_H */ | 618 | #endif /* _PARSE_EVENTS_H */ |
diff --git a/parse-filter.c b/parse-filter.c index d7d40fc..c00aa7c 100644 --- a/parse-filter.c +++ b/parse-filter.c | |||
@@ -861,7 +861,7 @@ void pevent_filter_free(struct event_filter *filter) | |||
861 | * Removes filters that only contain a TRUE or FALES boolean arg. | 861 | * Removes filters that only contain a TRUE or FALES boolean arg. |
862 | */ | 862 | */ |
863 | void pevent_filter_clear_trivial(struct event_filter *filter, | 863 | void pevent_filter_clear_trivial(struct event_filter *filter, |
864 | enum filter_remove_type type) | 864 | enum filter_trivial_type type) |
865 | { | 865 | { |
866 | struct filter_type *filter_type; | 866 | struct filter_type *filter_type; |
867 | int count = 0; | 867 | int count = 0; |
@@ -880,10 +880,10 @@ void pevent_filter_clear_trivial(struct event_filter *filter, | |||
880 | if (filter_type->filter->type != FILTER_ARG_BOOLEAN) | 880 | if (filter_type->filter->type != FILTER_ARG_BOOLEAN) |
881 | continue; | 881 | continue; |
882 | switch (type) { | 882 | switch (type) { |
883 | case FILTER_REMOVE_FALSE: | 883 | case FILTER_TRIVIAL_FALSE: |
884 | if (filter_type->filter->bool.value) | 884 | if (filter_type->filter->bool.value) |
885 | continue; | 885 | continue; |
886 | case FILTER_REMOVE_TRUE: | 886 | case FILTER_TRIVIAL_TRUE: |
887 | if (!filter_type->filter->bool.value) | 887 | if (!filter_type->filter->bool.value) |
888 | continue; | 888 | continue; |
889 | default: | 889 | default: |
@@ -907,6 +907,43 @@ void pevent_filter_clear_trivial(struct event_filter *filter, | |||
907 | free(ids); | 907 | free(ids); |
908 | } | 908 | } |
909 | 909 | ||
910 | /** | ||
911 | * pevent_filter_event_has_trivial - return true event contains trivial filter | ||
912 | * @filter: the filter with the information | ||
913 | * @event_id: the id of the event to test | ||
914 | * @type: trivial type to test for (TRUE, FALSE, EITHER) | ||
915 | * | ||
916 | * Returns 1 if the event contains a matching trivial type | ||
917 | * otherwise 0. | ||
918 | */ | ||
919 | int pevent_filter_event_has_trivial(struct event_filter *filter, | ||
920 | int event_id, | ||
921 | enum filter_trivial_type type) | ||
922 | { | ||
923 | struct filter_type *filter_type; | ||
924 | |||
925 | if (!filter->filters) | ||
926 | return 0; | ||
927 | |||
928 | filter_type = find_filter_type(filter, event_id); | ||
929 | |||
930 | if (!filter_type) | ||
931 | return 0; | ||
932 | |||
933 | if (filter_type->filter->type != FILTER_ARG_BOOLEAN) | ||
934 | return 0; | ||
935 | |||
936 | switch (type) { | ||
937 | case FILTER_TRIVIAL_FALSE: | ||
938 | return !filter_type->filter->bool.value; | ||
939 | |||
940 | case FILTER_TRIVIAL_TRUE: | ||
941 | return filter_type->filter->bool.value; | ||
942 | default: | ||
943 | return 1; | ||
944 | } | ||
945 | } | ||
946 | |||
910 | static int test_filter(struct event_format *event, | 947 | static int test_filter(struct event_format *event, |
911 | struct filter_arg *arg, struct record *record); | 948 | struct filter_arg *arg, struct record *record); |
912 | 949 | ||
diff --git a/trace-view-store.c b/trace-view-store.c index a98e5df..f2a03fc 100644 --- a/trace-view-store.c +++ b/trace-view-store.c | |||
@@ -525,7 +525,7 @@ void trace_view_store_clear_all_events_enabled(TraceViewStore *store) | |||
525 | { | 525 | { |
526 | g_return_if_fail (TRACE_VIEW_IS_LIST (store)); | 526 | g_return_if_fail (TRACE_VIEW_IS_LIST (store)); |
527 | 527 | ||
528 | pevent_filter_clear_trivial(store->event_filter, FILTER_REMOVE_TRUE); | 528 | pevent_filter_clear_trivial(store->event_filter, FILTER_TRIVIAL_TRUE); |
529 | store->all_events = 0; | 529 | store->all_events = 0; |
530 | } | 530 | } |
531 | 531 | ||