aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-02-17 11:47:05 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-02-17 13:07:27 -0500
commit4991c35c3bab5e000917ad41a0277008f18c4ab3 (patch)
treec6ea6d603cd29ee7276d7d82cebae2ced7c1992b
parent9459d400902a9a5332f9605832ecea6976c9ef00 (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.h14
-rw-r--r--parse-filter.c43
-rw-r--r--trace-view-store.c2
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
585enum filter_remove_type { 585enum 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
591int pevent_filter_add_filter_str(struct event_filter *filter, 591int pevent_filter_add_filter_str(struct event_filter *filter,
@@ -602,7 +602,7 @@ int pevent_event_filtered(struct event_filter *filter,
602void pevent_filter_reset(struct event_filter *filter); 602void pevent_filter_reset(struct event_filter *filter);
603 603
604void pevent_filter_clear_trivial(struct event_filter *filter, 604void pevent_filter_clear_trivial(struct event_filter *filter,
605 enum filter_remove_type type); 605 enum filter_trivial_type type);
606 606
607void pevent_filter_free(struct event_filter *filter); 607void 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);
611int pevent_filter_remove_event(struct event_filter *filter, 611int pevent_filter_remove_event(struct event_filter *filter,
612 int event_id); 612 int event_id);
613 613
614int 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 */
863void pevent_filter_clear_trivial(struct event_filter *filter, 863void 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 */
919int 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
910static int test_filter(struct event_format *event, 947static 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