create directories branches, tags, trunk
[lttv.git] / ltt / branches / poly / lttv / lttv / filter.c
index 567b54f0a797d7094f7e8a614e48fe2997848540..f62755868f27f8958e4b13989556d2ef6effd5d1 100644 (file)
  *  | |->category (String, not yet implemented)
  *  | |->time (LttTime)
  *  | |->tsc (LttCycleCount --> uint64)
+ *  | |->target_pid (target PID of the event)
  *  | |->fields
- *  |   |->"event name"
- *  |     |->"field name"
- *  |       |->"sub-field name"
- *  |         |->...
- *  |           |->"leaf-field name" (field type)
+ *  |   |->"facility_name
+ *  |     |->"event name"
+ *  |       |->"field name"
+ *  |         |->"sub-field name"
+ *  |           |->...
+ *  |             |->"leaf-field name" (field type)
  *  |->tracefile
  *  | |->name (String, converted to GQuark)
  *  |->trace
@@ -51,6 +53,7 @@
  *    |->creation_time (LttTime)
  *    |->insertion_time (LttTime)
  *    |->process_name (String, converted to GQuark)
+ *    |->thread_brand (String, converted to GQuark)
  *    |->execution_mode (LttvExecutionMode)
  *    |->execution_submode (LttvExecutionSubmode)
  *    |->process_status (LttvProcessStatus)
@@ -77,8 +80,6 @@
 #include <lttv/lttv.h>
 #include <lttv/filter.h>
 #include <ltt/trace.h>
-#include <ltt/type.h>
-#include <ltt/facility.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -163,6 +164,7 @@ lttv_simple_expression_assign_field(GPtrArray* fp, LttvSimpleExpression* se) {
      *  state.creation_time
      *  state.insertion_time
      *  state.process_name
+     *  state.thread_brand
      *  state.execution_mode
      *  state.execution_submode
      *  state.process_status
@@ -185,6 +187,9 @@ lttv_simple_expression_assign_field(GPtrArray* fp, LttvSimpleExpression* se) {
     else if(!g_strcasecmp(f->str,"process_name") ) {
       se->field = LTTV_FILTER_STATE_P_NAME;
     }
+    else if(!g_strcasecmp(f->str,"thread_brand") ) {
+      se->field = LTTV_FILTER_STATE_T_BRAND;
+    }
     else if(!g_strcasecmp(f->str,"execution_mode") ) {
       se->field = LTTV_FILTER_STATE_EX_MODE;
     }
@@ -204,15 +209,14 @@ lttv_simple_expression_assign_field(GPtrArray* fp, LttvSimpleExpression* se) {
      *  event.category
      *  event.time
      *  event.tsc
+     *  event.target_pid
+     *  event.field
      */
     g_string_free(f,TRUE);
     f=g_ptr_array_remove_index(fp,0);
     if(!g_strcasecmp(f->str,"name") ) {
       se->field = LTTV_FILTER_EVENT_NAME;
     }
-    else if(!g_strcasecmp(f->str,"facility") ) {
-      se->field = LTTV_FILTER_EVENT_FACILITY;
-    }
     else if(!g_strcasecmp(f->str,"category") ) {
       /*
        * FIXME: Category not yet functional in lttv
@@ -225,8 +229,18 @@ lttv_simple_expression_assign_field(GPtrArray* fp, LttvSimpleExpression* se) {
     else if(!g_strcasecmp(f->str,"tsc") ) {
       se->field = LTTV_FILTER_EVENT_TSC;
     }
-    else {  /* core.xml specified options */
+    else if(!g_strcasecmp(f->str,"target_pid") ) {
+      se->field = LTTV_FILTER_EVENT_TARGET_PID;
+    }
+    else if(!g_strcasecmp(f->str,"field") ) {
       se->field = LTTV_FILTER_EVENT_FIELD;
+      g_string_free(f,TRUE);
+      f=g_ptr_array_remove_index(fp,0);
+
+    } else {
+      g_string_free(f,TRUE);
+      f=g_ptr_array_remove_index(fp,0);
+      g_warning("Unknown event filter subtype %s", f->str);
     }
   } else {
     g_string_free(f,TRUE);
@@ -267,8 +281,8 @@ lttv_simple_expression_assign_operator(LttvSimpleExpression* se, LttvExpressionO
      case LTTV_FILTER_TRACE_NAME:
      case LTTV_FILTER_TRACEFILE_NAME:
      case LTTV_FILTER_STATE_P_NAME:
+     case LTTV_FILTER_STATE_T_BRAND:
      case LTTV_FILTER_EVENT_NAME:
-     case LTTV_FILTER_EVENT_FACILITY:
      case LTTV_FILTER_STATE_EX_MODE:
      case LTTV_FILTER_STATE_EX_SUBMODE:
      case LTTV_FILTER_STATE_P_STATUS:
@@ -318,6 +332,7 @@ lttv_simple_expression_assign_operator(LttvSimpleExpression* se, LttvExpressionO
      case LTTV_FILTER_STATE_CPU:
      case LTTV_FILTER_STATE_PID:
      case LTTV_FILTER_STATE_PPID:
+     case LTTV_FILTER_EVENT_TARGET_PID:
        switch(op) {
          case LTTV_FIELD_EQ:
            se->op = lttv_apply_op_eq_uint;
@@ -418,6 +433,7 @@ lttv_simple_expression_assign_value(LttvSimpleExpression* se, char* value) {
   gboolean is_double = FALSE;
   LttTime t = ltt_time_zero;
   GString* v;
+  guint string_len;
   
   switch(se->field) {
      /* 
@@ -427,13 +443,13 @@ lttv_simple_expression_assign_value(LttvSimpleExpression* se, char* value) {
      case LTTV_FILTER_TRACE_NAME:
      case LTTV_FILTER_TRACEFILE_NAME:
      case LTTV_FILTER_STATE_P_NAME:
+     case LTTV_FILTER_STATE_T_BRAND:
      case LTTV_FILTER_EVENT_NAME:
-     case LTTV_FILTER_EVENT_FACILITY:
      case LTTV_FILTER_STATE_EX_MODE:
      case LTTV_FILTER_STATE_EX_SUBMODE:
      case LTTV_FILTER_STATE_P_STATUS:
       // se->value.v_string = value;
-       se->value.v_uint32 = g_quark_from_string(value);
+       se->value.v_quark = g_quark_from_string(value);
        g_free(value);
        break;
      /* 
@@ -449,6 +465,7 @@ lttv_simple_expression_assign_value(LttvSimpleExpression* se, char* value) {
      case LTTV_FILTER_STATE_PID:
      case LTTV_FILTER_STATE_PPID:
      case LTTV_FILTER_STATE_CPU:
+     case LTTV_FILTER_EVENT_TARGET_PID:
        se->value.v_uint = atoi(value);
        g_free(value);
        break;
@@ -464,7 +481,8 @@ lttv_simple_expression_assign_value(LttvSimpleExpression* se, char* value) {
         * but as for now, simpler this way
         */
        v = g_string_new("");
-       for(i=0;i<strlen(value);i++) {
+       string_len = strlen(value);
+       for(i=0;i<string_len;i++) {
           if(value[i] == '.') { 
               /* cannot specify number with more than one '.' */
               if(is_double) return FALSE; 
@@ -472,11 +490,14 @@ lttv_simple_expression_assign_value(LttvSimpleExpression* se, char* value) {
               t.tv_sec = atoi(v->str);
               g_string_free(v,TRUE);
               v = g_string_new("");
-          } else g_string_append_c(v,value[i]);
+          } else v = g_string_append_c(v,value[i]);
        }
        /* number can be integer or double */
        if(is_double) t.tv_nsec = atoi(v->str);
-       else t.tv_sec = atoi(v->str);
+       else {
+         t.tv_sec = atoi(v->str);
+         t.tv_nsec = 0;
+       }
        
        g_string_free(v,TRUE);
        
@@ -539,6 +560,7 @@ lttv_struct_type(gint ft) {
         case LTTV_FILTER_STATE_CT:
         case LTTV_FILTER_STATE_IT:
         case LTTV_FILTER_STATE_P_NAME:
+  case LTTV_FILTER_STATE_T_BRAND:
         case LTTV_FILTER_STATE_EX_MODE:
         case LTTV_FILTER_STATE_EX_SUBMODE:
         case LTTV_FILTER_STATE_P_STATUS:
@@ -546,10 +568,10 @@ lttv_struct_type(gint ft) {
             return LTTV_FILTER_STATE;
             break;
         case LTTV_FILTER_EVENT_NAME:
-        case LTTV_FILTER_EVENT_FACILITY:
         case LTTV_FILTER_EVENT_CATEGORY:
         case LTTV_FILTER_EVENT_TIME:
         case LTTV_FILTER_EVENT_TSC:
+        case LTTV_FILTER_EVENT_TARGET_PID:
         case LTTV_FILTER_EVENT_FIELD:
             return LTTV_FILTER_EVENT;
             break;
@@ -657,8 +679,7 @@ gboolean lttv_apply_op_eq_string(const gpointer v1, LttvFieldValue v2) {
  */
 gboolean lttv_apply_op_eq_quark(const gpointer v1, LttvFieldValue v2) {
   GQuark* r = (GQuark*) v1;
-//  g_print("v1:%i v2:%i\n",*r,v2.v_uint32);
-  return (*r == v2.v_uint32);
+  return (*r == v2.v_quark);
 }
 
 /**
@@ -770,7 +791,7 @@ gboolean lttv_apply_op_ne_string(const gpointer v1, LttvFieldValue v2) {
  */
 gboolean lttv_apply_op_ne_quark(const gpointer v1, LttvFieldValue v2) {
   GQuark* r = (GQuark*) v1;
-  return (*r != v2.v_uint32);
+  return (*r != v2.v_quark);
 }
 
 
@@ -1178,7 +1199,7 @@ lttv_filter_tree_clone(const LttvFilterTree* tree) {
 LttvFilter*
 lttv_filter_clone(const LttvFilter* filter) {
  
-       if(!filter) return NULL;
+  if(!filter) return NULL;
 
   LttvFilter* newfilter = g_new(LttvFilter,1); 
 
@@ -1194,8 +1215,8 @@ lttv_filter_clone(const LttvFilter* filter) {
 /**
  *  @fn LttvFilter* lttv_filter_new()
  * 
- *     Creates a new LttvFilter
- *     @return the current LttvFilter or NULL if error
+ *   Creates a new LttvFilter
+ *   @return the current LttvFilter or NULL if error
  */
 LttvFilter*
 lttv_filter_new() {
@@ -1219,14 +1240,15 @@ lttv_filter_new() {
 gboolean
 lttv_filter_update(LttvFilter* filter) {
     
-//  g_print("filter::lttv_filter_new()\n");            /* debug */
+//  g_print("filter::lttv_filter_new()\n");    /* debug */
   
   if(filter->expression == NULL) return FALSE;
   
-  int  
+  int  
     i, 
-    p_nesting=0,       /* parenthesis nesting value */
+    p_nesting=0,  /* parenthesis nesting value */
     not=0;
+  guint expression_len;
     
   /* trees */
   LttvFilterTree
@@ -1263,19 +1285,21 @@ lttv_filter_update(LttvFilter* filter) {
   
   /* simple expression buffer */
   LttvSimpleExpression* a_simple_expression = lttv_simple_expression_new(); 
+
+  gint nest_quotes = 0;
   
   /*
-   *   Parse entire expression and construct
-   *   the binary tree.  There are two steps 
-   *   in browsing that string
-   *     1. finding boolean ops " &,|,^,! " and parenthesis " {,(,[,],),} "
-   *     2. finding simple expressions
-   *       - field path ( separated by dots )
-   *       - op ( >, <, =, >=, <=, !=)
-   *       - value ( integer, string ... )
-   *   To spare computing time, the whole 
-   *   string is parsed in this loop for a 
-   *   O(n) complexity order.
+   *  Parse entire expression and construct
+   *  the binary tree.  There are two steps 
+   *  in browsing that string
+   *    1. finding boolean ops " &,|,^,! " and parenthesis " {,(,[,],),} "
+   *    2. finding simple expressions
+   *      - field path ( separated by dots )
+   *      - op ( >, <, =, >=, <=, !=)
+   *      - value ( integer, string ... )
+   *  To spare computing time, the whole 
+   *  string is parsed in this loop for a 
+   *  O(n) complexity order.
    *
    *  When encountering logical op &,|,^
    *    1. parse the last value if any
@@ -1301,10 +1325,32 @@ lttv_filter_update(LttvFilter* filter) {
   gettimeofday(&starttime, NULL);
 #endif
   
-  for(i=0;i<strlen(filter->expression);i++) {
+  expression_len = strlen(filter->expression);
+  for(i=0;i<expression_len;i++) {
     // debug
 //    g_print("%c\n ",filter->expression[i]);
-    
+    if(nest_quotes) {
+      switch(filter->expression[i]) {
+        case '\\' :
+          if(filter->expression[i+1] == '\"') {
+            i++;
+          }
+          break;
+        case '\"':
+          nest_quotes = 0;
+          i++;
+          break;
+      }
+      if(a_string_spaces->len != 0) {
+        a_field_component = g_string_append(
+          a_field_component, a_string_spaces->str);
+        a_string_spaces = g_string_set_size(a_string_spaces, 0);
+      }
+      a_field_component = g_string_append_c(a_field_component,
+        filter->expression[i]);
+      continue;
+    }
+
     switch(filter->expression[i]) {
       /*
        *   logical operators
@@ -1338,8 +1384,8 @@ lttv_filter_update(LttvFilter* filter) {
         } else {  /* append a simple expression */
           lttv_simple_expression_assign_value(a_simple_expression,g_string_free(a_field_component,FALSE)); 
           a_field_component = g_string_new("");
-                                       g_string_free(a_string_spaces, TRUE);
-                                       a_string_spaces = g_string_new("");
+          g_string_free(a_string_spaces, TRUE);
+          a_string_spaces = g_string_new("");
           t2->left = LTTV_TREE_LEAF;
           t2->l_child.leaf = a_simple_expression;
           a_simple_expression = lttv_simple_expression_new(); 
@@ -1372,8 +1418,8 @@ lttv_filter_update(LttvFilter* filter) {
        } else {    /* append a simple expression */
           lttv_simple_expression_assign_value(a_simple_expression,g_string_free(a_field_component,FALSE)); 
           a_field_component = g_string_new("");
-                                       g_string_free(a_string_spaces, TRUE);
-                                       a_string_spaces = g_string_new("");
+          g_string_free(a_string_spaces, TRUE);
+          a_string_spaces = g_string_new("");
           t2->left = LTTV_TREE_LEAF;
           t2->l_child.leaf = a_simple_expression;
           a_simple_expression = lttv_simple_expression_new();
@@ -1406,8 +1452,8 @@ lttv_filter_update(LttvFilter* filter) {
         } else {    /* append a simple expression */
           lttv_simple_expression_assign_value(a_simple_expression,g_string_free(a_field_component,FALSE)); 
           a_field_component = g_string_new("");
-                                       g_string_free(a_string_spaces, TRUE);
-                                       a_string_spaces = g_string_new("");
+          g_string_free(a_string_spaces, TRUE);
+          a_string_spaces = g_string_new("");
           t2->left = LTTV_TREE_LEAF;
           t2->l_child.leaf = a_simple_expression;
           a_simple_expression = lttv_simple_expression_new(); 
@@ -1420,8 +1466,8 @@ lttv_filter_update(LttvFilter* filter) {
           g_ptr_array_add( a_field_path,(gpointer) a_field_component );
           lttv_simple_expression_assign_field(a_field_path,a_simple_expression);
           a_field_component = g_string_new("");         
-                                       g_string_free(a_string_spaces, TRUE);
-                                       a_string_spaces = g_string_new("");
+          g_string_free(a_string_spaces, TRUE);
+          a_string_spaces = g_string_new("");
           lttv_simple_expression_assign_operator(a_simple_expression,LTTV_FIELD_NE);
           i++;
         } else {  /* ! */
@@ -1452,7 +1498,7 @@ lttv_filter_update(LttvFilter* filter) {
         p_nesting--;      /* decrementing parenthesis nesting value */
         if(p_nesting<0 || tree_stack->len<2) {
           g_warning("Wrong filtering options, the string\n\"%s\"\n\
-                     is not valid due to parenthesis incorrect use",filter->expression);       
+                     is not valid due to parenthesis incorrect use",filter->expression);  
           return FALSE;
         }
   
@@ -1480,8 +1526,8 @@ lttv_filter_update(LttvFilter* filter) {
         } else {    /* assign subtree as current tree */
           lttv_simple_expression_assign_value(a_simple_expression,g_string_free(a_field_component,FALSE)); 
           a_field_component = g_string_new("");
-                                       g_string_free(a_string_spaces, TRUE);
-                                       a_string_spaces = g_string_new("");
+          g_string_free(a_string_spaces, TRUE);
+          a_string_spaces = g_string_new("");
           t1->right = LTTV_TREE_LEAF;
           t1->r_child.leaf = a_simple_expression;
           a_simple_expression = lttv_simple_expression_new(); 
@@ -1489,16 +1535,16 @@ lttv_filter_update(LttvFilter* filter) {
         }
         break;
 
-      /*       
-       *       mathematic operators
+      /*  
+       *  mathematic operators
        */
       case '<':   /* lower, lower or equal */
         
         g_ptr_array_add( a_field_path,(gpointer) a_field_component );
         lttv_simple_expression_assign_field(a_field_path,a_simple_expression);
         a_field_component = g_string_new("");         
-                               g_string_free(a_string_spaces, TRUE);
-                               a_string_spaces = g_string_new("");
+        g_string_free(a_string_spaces, TRUE);
+        a_string_spaces = g_string_new("");
         if(filter->expression[i+1] == '=') { /* <= */
           i++;
           lttv_simple_expression_assign_operator(a_simple_expression,LTTV_FIELD_LE);
@@ -1510,8 +1556,8 @@ lttv_filter_update(LttvFilter* filter) {
         g_ptr_array_add( a_field_path,(gpointer) a_field_component );   
         lttv_simple_expression_assign_field(a_field_path,a_simple_expression);
         a_field_component = g_string_new("");         
-                               g_string_free(a_string_spaces, TRUE);
-                               a_string_spaces = g_string_new("");
+        g_string_free(a_string_spaces, TRUE);
+        a_string_spaces = g_string_new("");
         if(filter->expression[i+1] == '=') {  /* >= */
           i++;
           lttv_simple_expression_assign_operator(a_simple_expression,LTTV_FIELD_GE);
@@ -1523,8 +1569,8 @@ lttv_filter_update(LttvFilter* filter) {
         g_ptr_array_add( a_field_path,(gpointer) a_field_component );
         lttv_simple_expression_assign_field(a_field_path,a_simple_expression);
         a_field_component = g_string_new("");         
-                               g_string_free(a_string_spaces, TRUE);
-                               a_string_spaces = g_string_new("");
+        g_string_free(a_string_spaces, TRUE);
+        a_string_spaces = g_string_new("");
         lttv_simple_expression_assign_operator(a_simple_expression,LTTV_FIELD_EQ);
         break;
         
@@ -1542,25 +1588,32 @@ lttv_filter_update(LttvFilter* filter) {
         if(a_simple_expression->field == LTTV_FILTER_UNDEFINED) {
           g_ptr_array_add( a_field_path,(gpointer) a_field_component );
           a_field_component = g_string_new("");
-                                       g_string_free(a_string_spaces, TRUE);
-                                       a_string_spaces = g_string_new("");
+          g_string_free(a_string_spaces, TRUE);
+          a_string_spaces = g_string_new("");
+        } else {
+          /* Operator found, we are in the value field */
+          g_string_append_c(a_field_component, filter->expression[i]);
         }
         break;
       case ' ':   /* keep spaces that are within a field component */
-                               if(a_field_component->len == 0) break; /* ignore */
-                               else 
-               a_string_spaces = g_string_append_c(a_string_spaces,
-                                                                                                                                                                                       filter->expression[i]);
+        if(a_field_component->len == 0) break; /* ignore */
+        else 
+          a_string_spaces = g_string_append_c(a_string_spaces,
+                                              filter->expression[i]);
 
       case '\n':  /* ignore */
         break;
+      case '\"':
+               nest_quotes?(nest_quotes=0):(nest_quotes=1);
+               break;
       default:    /* concatening current string */
-                               if(a_string_spaces->len != 0) {
-               g_string_append(a_field_component, a_string_spaces->str);
-                                       a_string_spaces = g_string_set_size(a_string_spaces, 0);
-                               }
-        a_field_component = g_string_append_c(a_field_component,
-                                                                                                                                                                                       filter->expression[i]);
+              if(a_string_spaces->len != 0) {
+                a_field_component = g_string_append(
+                    a_field_component, a_string_spaces->str);
+                a_string_spaces = g_string_set_size(a_string_spaces, 0);
+              }
+              a_field_component = g_string_append_c(a_field_component,
+                    filter->expression[i]);
     }
   }
 
@@ -1570,7 +1623,7 @@ lttv_filter_update(LttvFilter* filter) {
    */
   if( p_nesting>0 ) { 
     g_warning("Wrong filtering options, the string\n\"%s\"\n\
-        is not valid due to parenthesis incorrect use",filter->expression);    
+        is not valid due to parenthesis incorrect use",filter->expression);  
     return FALSE;
   }
  
@@ -1600,8 +1653,8 @@ lttv_filter_update(LttvFilter* filter) {
   } else {  /* add a leaf */
     lttv_simple_expression_assign_value(a_simple_expression,g_string_free(a_field_component,FALSE)); 
     a_field_component = NULL;
-               g_string_free(a_string_spaces, TRUE);
-               a_string_spaces = NULL;
+    g_string_free(a_string_spaces, TRUE);
+    a_string_spaces = NULL;
     t1->right = LTTV_TREE_LEAF;
     t1->r_child.leaf = a_simple_expression;
     a_simple_expression = NULL;
@@ -1618,7 +1671,7 @@ lttv_filter_update(LttvFilter* filter) {
   
   /* free the field buffer if allocated */
   if(a_field_component != NULL) g_string_free(a_field_component,TRUE); 
-       if(a_string_spaces != NULL) g_string_free(a_string_spaces, TRUE);
+   if(a_string_spaces != NULL) g_string_free(a_string_spaces, TRUE);
 
   /* free the simple expression buffer if allocated */
   if(a_simple_expression != NULL) lttv_simple_expression_destroy(a_simple_expression);
@@ -1655,12 +1708,12 @@ lttv_filter_update(LttvFilter* filter) {
 void
 lttv_filter_destroy(LttvFilter* filter) {
   
-       if(!filter) return;
+  if(!filter) return;
 
-       if(filter->expression)
-         g_free(filter->expression);
-       if(filter->head)
-         lttv_filter_tree_destroy(filter->head);
+  if(filter->expression)
+    g_free(filter->expression);
+  if(filter->head)
+    lttv_filter_tree_destroy(filter->head);
   g_free(filter);
   
 }
@@ -1704,10 +1757,10 @@ lttv_filter_append_expression(LttvFilter* filter, const char *expression) {
 
   GString* s = g_string_new("");
   if(filter->expression != NULL) {
-    g_string_append(s,filter->expression);
-    g_string_append_c(s,'&');
+    s = g_string_append(s,filter->expression);
+    s = g_string_append_c(s,'&');
   }
-  g_string_append(s,expression);
+  s = g_string_append(s,expression);
  
   g_free(filter->expression);
   filter->expression = g_string_free(s,FALSE);
@@ -1772,7 +1825,9 @@ lttv_filter_tree_parse(
         const LttEvent* event,
         const LttTracefile* tracefile,
         const LttTrace* trace,
-        const LttvTracefileContext* context
+        const LttvTracefileContext* context,
+       const LttvProcessState* state,
+       const LttvTraceContext* tc
         /*,...*/) 
 {
 
@@ -1813,18 +1868,24 @@ lttv_filter_tree_parse(
     
   gboolean lresult = FALSE, rresult = FALSE;
 
-  LttvProcessState* state;
-  
-  LttvTraceState *ts = (LttvTraceState*)context->t_context;
+  LttvTraceState *ts;
   LttvTracefileState *tfs = (LttvTracefileState*)context;
-  guint cpu = tfs->cpu;
-  state = ts->running_process[cpu];
+  if(tc)
+    ts = (LttvTraceState*)tc;
+  else if(context)
+    ts = (LttvTraceState*)context->t_context;
+
+  if(tfs) {
+    guint cpu = tfs->cpu;
+    if(ts)
+      state = ts->running_process[cpu];
+  }
   
   /*
    * Parse left branch
    */
   if(t->left == LTTV_TREE_NODE) {
-      lresult = lttv_filter_tree_parse(t->l_child.t,event,tracefile,trace,context);
+      lresult = lttv_filter_tree_parse(t->l_child.t,event,tracefile,trace,context,NULL,NULL);
   }
   else if(t->left == LTTV_TREE_LEAF) {
       lresult = lttv_filter_tree_parse_branch(t->l_child.leaf,event,tracefile,trace,state,context);
@@ -1841,7 +1902,7 @@ lttv_filter_tree_parse(
    * Parse right branch
    */
   if(t->right == LTTV_TREE_NODE) {
-      rresult = lttv_filter_tree_parse(t->r_child.t,event,tracefile,trace,context);
+      rresult = lttv_filter_tree_parse(t->r_child.t,event,tracefile,trace,context,NULL,NULL);
   }
   else if(t->right == LTTV_TREE_LEAF) {
       rresult = lttv_filter_tree_parse_branch(t->r_child.leaf,event,tracefile,trace,state,context);
@@ -1928,15 +1989,19 @@ lttv_filter_tree_parse_branch(
             }
             break;
         case LTTV_FILTER_STATE_P_NAME:
-            /*
-             * All 'unnamed' for the moment  
-             */
             if(state == NULL) return TRUE;
             else {
               GQuark quark = state->name;
               return se->op((gpointer)&quark,v);
             }
             break;
+        case LTTV_FILTER_STATE_T_BRAND:
+            if(state == NULL) return TRUE;
+            else {
+              GQuark quark = state->brand;
+              return se->op((gpointer)&quark,v);
+            }
+            break;
         case LTTV_FILTER_STATE_EX_MODE:
             if(state == NULL) return TRUE;
             else return se->op((gpointer)&state->state->t,v);
@@ -1950,30 +2015,18 @@ lttv_filter_tree_parse_branch(
             else return se->op((gpointer)&state->state->s,v);
             break;
         case LTTV_FILTER_STATE_CPU:
-            if(context == NULL) return TRUE;
+            if(state == NULL) return TRUE;
             else {
-              /* FIXME: not sure of that one  Mathieu : fixed.*/
- //             GQuark quark = ((LttvTracefileState*)context)->cpu_name;
- //                return se->op((gpointer)&quark,v);
-              if(state == NULL) return TRUE;
-              else return se->op((gpointer)&state->cpu,v);
+              return se->op((gpointer)&state->cpu,v);
             }
             break;
         case LTTV_FILTER_EVENT_NAME:
             if(event == NULL) return TRUE;
             else {
-              LttEventType* et;
-              et = ltt_event_eventtype(event);
-              GQuark quark = ltt_eventtype_name(et);
-              return se->op((gpointer)&quark,v);
-            }
-            break;
-         case LTTV_FILTER_EVENT_FACILITY:
-            if(event == NULL) return TRUE;
-            else {
-              LttFacility* fac;
-              fac = ltt_event_facility(event);
-              GQuark quark = ltt_facility_name(fac);
+              struct marker_info *info;
+              info = marker_get_info_from_id((LttTrace *)trace, event->event_id);
+              g_assert(info != NULL);
+              GQuark quark = info->name;
               return se->op((gpointer)&quark,v);
             }
             break;
@@ -1997,6 +2050,14 @@ lttv_filter_tree_parse_branch(
               return se->op((gpointer)&count,v);
             }
             break;
+        case LTTV_FILTER_EVENT_TARGET_PID:
+            if(context == NULL) return TRUE;
+            else {
+              guint target_pid =
+                     lttv_state_get_target_pid((LttvTracefileState*)context);
+              return se->op((gpointer)&target_pid,v);
+            }
+            break;
         case LTTV_FILTER_EVENT_FIELD:
             /*
              * TODO: Use the offset to 
This page took 0.033311 seconds and 4 git commands to generate.