init state timestamp is beginning of trace, not 0
authorcompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Thu, 29 Jul 2004 04:01:15 +0000 (04:01 +0000)
committercompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Thu, 29 Jul 2004 04:01:15 +0000 (04:01 +0000)
git-svn-id: http://ltt.polymtl.ca/svn@645 04897980-b3bd-0310-b5e0-8ef037075253

ltt/branches/poly/lttv/lttv/batchtest.c
ltt/branches/poly/lttv/lttv/state.c
ltt/branches/poly/lttv/lttv/state.h
ltt/branches/poly/lttv/lttv/stats.c
ltt/branches/poly/lttv/lttv/stats.h
ltt/branches/poly/lttv/lttv/tracecontext.c

index f72733cb6152d99e9b29e7abdf6d3f2514cccd32..08922fd738d8fb07a8327bbcc6ce54550edb8a8b 100644 (file)
@@ -253,7 +253,7 @@ static gboolean process_traceset(void *hook_data, void *call_data)
 
   LttTracefile *tracefile, *tf;
 
-  LttEvent *event;
+  LttEvent *event = ltt_event_new();
 
   LttFacility *facility;
 
@@ -300,7 +300,7 @@ static gboolean process_traceset(void *hook_data, void *call_data)
         ltt_tracefile_seek_time(tracefile, zero_time);
         previous_time = zero_time;
         nb_equal = 0;
-        while((event = ltt_tracefile_read(tracefile)) != NULL) {
+        while((ltt_tracefile_read(tracefile, event)) != NULL) {
           facility = ltt_event_facility(event);
           event_type = ltt_event_eventtype(event);
           time = ltt_event_time(event);
@@ -539,6 +539,7 @@ static gboolean process_traceset(void *hook_data, void *call_data)
   g_free(a_event_position);
   lttv_context_fini(tc);
   g_object_unref(tscs);
+  ltt_event_destroy(event);
 
   if(lttv_profile_memory) {
     g_message("Memory summary at the end of batchtest");
index f7d34be1a753433bff6c4c05e1f0d1593af05530..f13bd8dba876b4cc960497c8de76405e92352d6a 100644 (file)
@@ -121,8 +121,6 @@ restore_init_state(LttvTraceState *self)
 
   LttvTracefileState *tfcs;
   
-  LttTime null_time = {0,0};
-
   if(self->processes != NULL) lttv_state_free_process_table(self->processes);
   self->processes = g_hash_table_new(process_hash, process_equal);
   self->nb_event = 0;
@@ -132,7 +130,7 @@ restore_init_state(LttvTraceState *self)
 
   for(i = 0 ; i < nb_tracefile ; i++) {
     tfcs = LTTV_TRACEFILE_STATE(self->parent.tracefiles[i]);
-    tfcs->parent.timestamp = null_time;
+    ltt_trace_time_span_get(self->parent.t, &tfcs->parent.timestamp, NULL);
     tfcs->saved_position = 0;
     tfcs->process = lttv_state_create_process(tfcs, NULL,0);
     tfcs->process->state->s = LTTV_STATE_RUN;
@@ -808,6 +806,7 @@ lttv_state_create_process(LttvTracefileState *tfs, LttvProcessState *parent,
   es->t = LTTV_STATE_USER_MODE;
   es->n = LTTV_STATE_SUBMODE_NONE;
   es->entry = tfs->parent.timestamp;
+  g_assert(tfs->parent.timestamp.tv_sec != 0);
   es->change = tfs->parent.timestamp;
   es->s = LTTV_STATE_WAIT_FORK;
 
@@ -1254,6 +1253,8 @@ void lttv_state_save_add_event_hooks(LttvTracesetState *self)
 
   LttvTraceHook hook_start, hook_end;
 
+  lttv_state_add_event_hooks(self);
+  
   nb_trace = lttv_traceset_number(traceset);
   for(i = 0 ; i < nb_trace ; i++) {
     ts = (LttvTraceState *)self->parent.traces[i];
@@ -1317,6 +1318,8 @@ void lttv_state_save_remove_event_hooks(LttvTracesetState *self)
           tfs->parent.event_by_id, hook_end.id), hook_end.h, NULL);
     }
   }
+  
+  lttv_state_remove_event_hooks(self);
 }
 
 gint lttv_state_save_hook_remove_event_hooks(void *hook_data, void *call_data)
index 54277f4fe3c988fe56c716ca99e0cd7569d4f304..988ee647d1eee61e213ca48c56e3b8a1ad07803b 100644 (file)
@@ -28,7 +28,7 @@
    sufficient for the analysis, and possibly organized quite differently.
 
    The state information is added to LttvTracesetContext, LttvTraceContext 
-   and LttvTracefileContext objects, used by processTrace, through
+   and LttvTracefileContext objects, used by process_traceset, through
    subtyping. The context objects already reflect the multiple tracefiles
    (one per cpu) per trace and multiple traces per trace set. The state
    objects defined here simply add fields to the relevant context objects. 
@@ -150,7 +150,6 @@ typedef struct _LttvProcessState {
   /* opened file descriptors, address map?... */
 } LttvProcessState;
 
-
 LttvProcessState *
 lttv_state_find_process(LttvTracefileState *tfs, guint pid);
 
index fa697d0c0dfe11c044684558ef5743fd22953ae6..5bb91af6e46169571360161adf13b80d44b70eea 100644 (file)
@@ -80,9 +80,12 @@ init(LttvTracesetStats *self, LttvTraceset *ts)
   LTTV_TRACESET_CONTEXT_CLASS(g_type_class_peek(LTTV_TRACESET_STATE_TYPE))->
       init((LttvTracesetContext *)self, ts);
 
-  self->stats =lttv_attribute_find_subdir(self->parent.parent.ts_a,LTTV_STATS);
-  lttv_attribute_find(self->parent.parent.ts_a, LTTV_STATS_USE_COUNT, 
-        LTTV_UINT, &v);
+  self->stats = lttv_attribute_find_subdir(
+                      lttv_traceset_attribute(self->parent.parent.ts),
+                      LTTV_STATS);
+  lttv_attribute_find(lttv_traceset_attribute(self->parent.parent.ts),
+                      LTTV_STATS_USE_COUNT, 
+                      LTTV_UINT, &v);
 
   *(v.v_uint)++;
   if(*(v.v_uint) == 1) { 
@@ -121,7 +124,6 @@ init(LttvTracesetStats *self, LttvTraceset *ts)
   }
 }
 
-
 static void
 fini(LttvTracesetStats *self)
 {
@@ -575,7 +577,7 @@ gboolean every_event(void *hook_data, void *call_data)
 void
 lttv_stats_sum_trace(LttvTraceStats *self)
 {
-  LttvTraceStats *tcs;
+  LttvAttribute *sum_container = self->stats;
 
   LttvAttributeType type;
 
@@ -594,16 +596,18 @@ lttv_stats_sum_trace(LttvTraceStats *self)
       *cpu_events_tree, *process_modes_tree, *trace_cpu_tree, 
       *trace_modes_tree;
 
-  main_tree = self->stats;
+  main_tree = sum_container;
 
-  lttv_attribute_find(self->parent.parent.t_a, LTTV_STATS_SUMMED, 
-      LTTV_UINT, &value);
+  lttv_attribute_find(sum_container,
+                      LTTV_STATS_SUMMED, 
+                      LTTV_UINT, &value);
   if(*(value.v_uint) != 0) return;
   *(value.v_uint) = 1;
 
   processes_tree = lttv_attribute_find_subdir(main_tree, 
-      LTTV_STATS_PROCESSES);
-  trace_modes_tree = lttv_attribute_find_subdir(main_tree, LTTV_STATS_MODES);
+                                              LTTV_STATS_PROCESSES);
+  trace_modes_tree = lttv_attribute_find_subdir(main_tree,
+                                                LTTV_STATS_MODES);
   nb_process = lttv_attribute_get_number(processes_tree);
 
   for(i = 0 ; i < nb_process ; i++) {
@@ -665,10 +669,17 @@ lttv_stats_sum_trace(LttvTraceStats *self)
 }
 
 
+gboolean lttv_stats_sum_traceset_hook(void *hook_data, void *call_data)
+{
+  lttv_stats_sum_traceset((LttvTracesetStats *)call_data);
+  return 0;
+}
+
 void
 lttv_stats_sum_traceset(LttvTracesetStats *self)
 {
   LttvTraceset *traceset = self->parent.parent.ts;
+  LttvAttribute *sum_container = self->stats;
 
   LttvTraceStats *tcs;
 
@@ -678,12 +689,12 @@ lttv_stats_sum_traceset(LttvTracesetStats *self)
 
   LttvAttributeValue value;
 
-  lttv_attribute_find(self->parent.parent.ts_a, LTTV_STATS_SUMMED, 
+  lttv_attribute_find(sum_container, LTTV_STATS_SUMMED, 
       LTTV_UINT, &value);
   if(*(value.v_uint) != 0) return;
   *(value.v_uint) = 1;
 
-  traceset_modes_tree = lttv_attribute_find_subdir(self->stats
+  traceset_modes_tree = lttv_attribute_find_subdir(sum_container
       LTTV_STATS_MODES);
   nb_trace = lttv_traceset_number(traceset);
 
@@ -697,6 +708,16 @@ lttv_stats_sum_traceset(LttvTracesetStats *self)
 }
 
 
+// Hook wrapper. call_data is a traceset context.
+gint lttv_stats_hook_add_event_hooks(void *hook_data, void *call_data)
+{
+   LttvTracesetStats *tss = (LttvTracesetStats*)call_data;
+
+   lttv_stats_add_event_hooks(tss);
+
+   return 0;
+}
+
 lttv_stats_add_event_hooks(LttvTracesetStats *self)
 {
   LttvTraceset *traceset = self->parent.parent.ts;
@@ -719,6 +740,8 @@ lttv_stats_add_event_hooks(LttvTracesetStats *self)
 
   LttvAttributeValue val;
 
+  lttv_state_add_event_hooks(&self->parent);
+  
   nb_trace = lttv_traceset_number(traceset);
   for(i = 0 ; i < nb_trace ; i++) {
     ts = (LttvTraceStats *)self->parent.parent.traces[i];
@@ -822,6 +845,15 @@ lttv_stats_add_event_hooks(LttvTracesetStats *self)
   }
 }
 
+// Hook wrapper. call_data is a traceset context.
+gint lttv_stats_hook_remove_event_hooks(void *hook_data, void *call_data)
+{
+   LttvTracesetStats *tss = (LttvTracesetStats*)call_data;
+
+   lttv_stats_remove_event_hooks(tss);
+
+   return 0;
+}
 
 lttv_stats_remove_event_hooks(LttvTracesetStats *self)
 {
@@ -878,6 +910,7 @@ lttv_stats_remove_event_hooks(LttvTracesetStats *self)
     g_array_free(before_hooks, TRUE);
     g_array_free(after_hooks, TRUE);
   }
+  lttv_state_remove_event_hooks(&self->parent);
 }
 
 
index af708f42fc9da600398950cdaff24658bb514633..ef6f05cdcc52a9dfa3b458b8a99b970fd94efdd7 100644 (file)
@@ -150,10 +150,17 @@ typedef struct _LttvTraceStatsClass LttvTraceStatsClass;
 typedef struct _LttvTracefileStats LttvTracefileStats;
 typedef struct _LttvTracefileStatsClass LttvTracefileStatsClass;
 
+
+
+// Hook wrapper. call_data is a trace context.
+gint lttv_stats_hook_add_event_hooks(void *hook_data, void *call_data);
 gboolean lttv_stats_add_event_hooks(LttvTracesetStats *self);
 
+// Hook wrapper. call_data is a trace context.
+gint lttv_stats_hook_remove_event_hooks(void *hook_data, void *call_data);
 gboolean lttv_stats_remove_event_hooks(LttvTracesetStats *self);
 
+gboolean lttv_stats_sum_traceset_hook(void *hook_data, void *call_data);
 void lttv_stats_sum_traceset(LttvTracesetStats *self);
 
 void lttv_stats_sum_trace(LttvTraceStats *self);
index bdd3bdc752e6e1a3a04094ffa2af1c07167321e0..89d792c5b86021a701b514eb06670b1c191d3230 100644 (file)
@@ -184,6 +184,7 @@ init(LttvTracesetContext *self, LttvTraceset *ts)
         tfc->tf = ltt_trace_per_cpu_tracefile_get(tc->t, j - nb_control);
       }
       tfc->t_context = tc;
+      tfc->e = ltt_event_new();
       tfc->event = lttv_hooks_new();
       tfc->event_by_id = lttv_hooks_by_id_new();
       tfc->a = g_object_new(LTTV_ATTRIBUTE_TYPE, NULL);
@@ -223,6 +224,7 @@ void fini(LttvTracesetContext *self)
 
     for(j = 0 ; j < nb_tracefile ; j++) {
       tfc = tc->tracefiles[j];
+      ltt_event_destroy(tfc->e);
       lttv_hooks_destroy(tfc->event);
       lttv_hooks_by_id_destroy(tfc->event_by_id);
       g_object_unref(tfc->a);
@@ -646,8 +648,6 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self,
 
   LttvTracefileContext *tfc;
 
-  LttEvent *event;
-
   unsigned count = 0;
 
   gboolean last_ret = FALSE; /* return value of the last hook list called */
@@ -694,10 +694,8 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self,
     last_ret = lttv_hooks_call_merge(tfc->event, tfc,
                         lttv_hooks_by_id_get(tfc->event_by_id, id), tfc);
 
-    event = ltt_tracefile_read(tfc->tf);
-    if(event != NULL) {
-      tfc->e = event;
-      tfc->timestamp = ltt_event_time(event);
+    if(ltt_tracefile_read(tfc->tf, tfc->e) != NULL) {
+      tfc->timestamp = ltt_event_time(tfc->e);
            g_tree_insert(pqueue, tfc, tfc);
     }
   }
@@ -727,8 +725,6 @@ void lttv_process_trace_seek_time(LttvTraceContext *self, LttTime start)
 
   LttvTracefileContext *tfc;
 
-  LttEvent *event;
-
   GTree *pqueue = self->ts_context->pqueue;
 
   nb_tracefile = ltt_trace_control_tracefile_number(self->t) +
@@ -738,10 +734,8 @@ void lttv_process_trace_seek_time(LttvTraceContext *self, LttTime start)
     tfc = self->tracefiles[i];
     ltt_tracefile_seek_time(tfc->tf, start);
     g_tree_remove(pqueue, tfc);
-    event = ltt_tracefile_read(tfc->tf);
-    tfc->e = event;
-    if(event != NULL) {
-      tfc->timestamp = ltt_event_time(event);
+    if(ltt_tracefile_read(tfc->tf, tfc->e) != NULL) {
+      tfc->timestamp = ltt_event_time(tfc->e);
       g_tree_insert(pqueue, tfc, tfc);
     }
   }
@@ -775,10 +769,8 @@ gboolean lttv_process_tracefile_seek_position(LttvTracefileContext *self,
   
   ltt_tracefile_seek_position(tfc->tf, pos);
   g_tree_remove(pqueue, tfc);
-  event = ltt_tracefile_read(tfc->tf);
-  tfc->e = event;
-  if(event != NULL) {
-    tfc->timestamp = ltt_event_time(event);
+  if(ltt_tracefile_read(tfc->tf, tfc->e) != NULL) {
+    tfc->timestamp = ltt_event_time(tfc->e);
     g_tree_insert(pqueue, tfc, tfc);
   }
 
This page took 0.031754 seconds and 4 git commands to generate.