#include "cfv.h"
#include "processlist.h"
#include "drawing.h"
-#include "cfv-private.h"
#define MAX_PATH_LEN 256
{
ControlFlowData *control_flow_data = (ControlFlowData *)hook_data;
LttvTrace *trace = (LttvTrace*)call_data;
- LttvTracesetContext *tsc =
- lttvwindow_get_traceset_context(control_flow_data->tab);
control_flow_data->background_info_waiting--;
control_flow_data->tab = tab;
- //g_debug("time width2 : %u",time_window->time_width);
// Unreg done in the GuiControlFlow_Destructor
lttvwindow_register_traceset_notify(tab,
traceset_notify,
g_debug("DEBUG : event selected by main window : %u", *event_number);
+ return 0;
}
/* Function that selects the color of status&exemode line */
-static __inline__ PropertiesLine prepare_s_e_line(LttvProcessState *process)
+static inline PropertiesLine prepare_s_e_line(LttvProcessState *process)
{
PropertiesLine prop_line;
prop_line.line_width = 2;
}
#if 0
-static __inline__ PropertiesLine prepare_status_line(LttvProcessState *process)
+static inline PropertiesLine prepare_status_line(LttvProcessState *process)
{
PropertiesLine prop_line;
prop_line.line_width = 2;
{
EventsRequest *events_request = (EventsRequest*)hook_data;
ControlFlowData *control_flow_data = events_request->viewer_data;
- Drawing_t *drawing = control_flow_data->drawing;
LttvTracefileContext *tfc = (LttvTracefileContext *)call_data;
LttvTracefileState *tfs = (LttvTracefileState *)call_data;
- LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context;
LttEvent *e;
e = tfc->e;
LttTime evtime = ltt_event_time(e);
- guint width = drawing->width;
-
/* we are in a schedchange, before the state update. We must draw the
* items corresponding to the state before it changes : now is the right
* time to do it.
hashed_process_data,
&y,
&height);
- drawing_insert_square( drawing, y, height);
+ drawing_insert_square( control_flow_data->drawing, y, height);
}
/* Now, the process is in the state hash and our own process hash.
* We definitely can draw the items related to the ending state.
*/
- /* Check if the x position is unset. In can have been left unset by
- * a draw closure from a after chunk hook. This should never happen,
- * because it must be set by before chunk hook to the damage_begin
- * value.
- */
- g_assert(hashed_process_data->x.middle != -1);
if(ltt_time_compare(hashed_process_data->next_good_time,
evtime) > 0)
{
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
-
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint x;
convert_time_to_pixels(
time_window,
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
-
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint x;
convert_time_to_pixels(
time_window,
hashed_process_data,
&y,
&height);
- drawing_insert_square( drawing, y, height);
+ drawing_insert_square( control_flow_data->drawing, y, height);
}
//We could set the current process and hash here, but will be done
//by after schedchange hook
* We definitely can draw the items related to the ending state.
*/
- /* Check if the x position is unset. In can have been left unset by
- * a draw closure from a after chunk hook. This should never happen,
- * because it must be set by before chunk hook to the damage_begin
- * value.
- */
- g_assert(hashed_process_data->x.middle != -1);
-
if(ltt_time_compare(hashed_process_data->next_good_time,
evtime) > 0)
{
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint x;
convert_time_to_pixels(
time_window,
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint x;
convert_time_to_pixels(
LttvTracefileContext *tfc = (LttvTracefileContext *)call_data;
LttvTracefileState *tfs = (LttvTracefileState *)call_data;
- LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context;
LttEvent *e;
e = tfc->e;
LttTime evtime = ltt_event_time(e);
- guint width = control_flow_data->drawing->width;
-
/* Add process to process list (if not present) */
- LttvProcessState *process_out, *process_in;
+ LttvProcessState *process_in;
LttTime birth;
- guint y_in = 0, y_out = 0, height = 0, pl_height = 0;
+ guint y_in = 0, height = 0, pl_height = 0;
HashedProcessData *hashed_process_data_in = NULL;
ProcessList *process_list = control_flow_data->process_list;
//process_in = lttv_state_find_process(tfs, pid_in);
process_in = tfs->process;
/* It should exist, because we are after the state update. */
+#ifdef EXTRA_CHECK
g_assert(process_in != NULL);
-
+#endif //EXTRA_CHECK
birth = process_in->creation_time;
hashed_process_data_in = processlist_get_process_data(process_list,
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
-
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint new_x;
convert_time_to_pixels(
}
#if 0
-static __inline__ PropertiesLine prepare_execmode_line(LttvProcessState *process)
+static inline PropertiesLine prepare_execmode_line(LttvProcessState *process)
{
PropertiesLine prop_line;
prop_line.line_width = 1;
{
EventsRequest *events_request = (EventsRequest*)hook_data;
ControlFlowData *control_flow_data = events_request->viewer_data;
- Drawing_t *drawing = control_flow_data->drawing;
LttvTracefileContext *tfc = (LttvTracefileContext *)call_data;
LttvTracefileState *tfs = (LttvTracefileState *)call_data;
- LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context;
LttEvent *e;
e = tfc->e;
LttTime evtime = ltt_event_time(e);
- guint width = drawing->width;
/* we are in a execmode, before the state update. We must draw the
* items corresponding to the state before it changes : now is the right
ProcessList *process_list = control_flow_data->process_list;
LttTime birth = process->creation_time;
- if(process_list->current_hash_data[tfc->index] != NULL) {
+ if(likely(process_list->current_hash_data[tfc->index] != NULL)) {
hashed_process_data = process_list->current_hash_data[tfc->index];
} else {
hashed_process_data = processlist_get_process_data(process_list,
process->last_cpu_index,
&birth,
tfc->t_context->index);
- if(hashed_process_data == NULL)
+ if(unlikely(hashed_process_data == NULL))
{
g_assert(pid == 0 || pid != process->ppid);
ProcessInfo *process_info;
hashed_process_data,
&y,
&height);
- drawing_insert_square( drawing, y, height);
+ drawing_insert_square( control_flow_data->drawing, y, height);
}
/* Set the current process */
process_list->current_hash_data[process->last_cpu_index] =
/* Now, the process is in the state hash and our own process hash.
* We definitely can draw the items related to the ending state.
*/
-
- /* Check if the x position is unset. In can have been left unset by
- * a draw closure from a after chunk hook. This should never happen,
- * because it must be set by before chunk hook to the damage_begin
- * value.
- */
- g_assert(hashed_process_data->x.over != -1);
- if(ltt_time_compare(hashed_process_data->next_good_time,
- evtime) > 0)
+ if(likely(ltt_time_compare(hashed_process_data->next_good_time,
+ evtime) > 0))
{
- if(hashed_process_data->x.middle_marked == FALSE) {
+ if(unlikely(hashed_process_data->x.middle_marked == FALSE)) {
processlist_get_pixels_from_data(process_list,
hashed_process_data,
&y,
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint x;
convert_time_to_pixels(
time_window,
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint x;
convert_time_to_pixels(
/* Jump over draw if we are at the same x position */
- if(x == hashed_process_data->x.middle &&
- hashed_process_data->x.middle_used)
+ if(unlikely(x == hashed_process_data->x.middle &&
+ hashed_process_data->x.middle_used))
{
- if(hashed_process_data->x.middle_marked == FALSE) {
+ if(unlikely(hashed_process_data->x.middle_marked == FALSE)) {
/* Draw collision indicator */
gdk_gc_set_foreground(drawing->gc, &drawing_colors[COL_WHITE]);
gdk_draw_point(drawing->pixmap,
*/
int after_execmode_hook(void *hook_data, void *call_data)
{
+ /**************** DOES NOTHING!! *************/
+ /* hook desactivated in drawing.c */
+ return 0;
+
+
+
EventsRequest *events_request = (EventsRequest*)hook_data;
ControlFlowData *control_flow_data = events_request->viewer_data;
LttvTracefileContext *tfc = (LttvTracefileContext *)call_data;
LttvTracefileState *tfs = (LttvTracefileState *)call_data;
- LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context;
LttEvent *e;
e = tfc->e;
LttTime evtime = ltt_event_time(e);
- guint width = control_flow_data->drawing->width;
/* Add process to process list (if not present) */
LttvProcessState *process;
birth = process->creation_time;
- if(process_list->current_hash_data[tfc->index] != NULL) {
+ if(likely(process_list->current_hash_data[tfc->index] != NULL)) {
hashed_process_data = process_list->current_hash_data[tfc->index];
} else {
hashed_process_data = processlist_get_process_data(process_list,
process->last_cpu_index,
&birth,
tfc->t_context->index);
- if(hashed_process_data == NULL)
+ if(unlikely(hashed_process_data == NULL))
{
g_assert(pid == 0 || pid != process->ppid);
/* Process not present */
hashed_process_data;
}
- if(ltt_time_compare(hashed_process_data->next_good_time,
- evtime) <= 0)
+ if(unlikely(ltt_time_compare(hashed_process_data->next_good_time,
+ evtime) <= 0))
{
#if 0
processlist_get_pixels_from_data(process_list,
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
-
-
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint new_x;
convert_time_to_pixels(
{
EventsRequest *events_request = (EventsRequest*)hook_data;
ControlFlowData *control_flow_data = events_request->viewer_data;
- Drawing_t *drawing = control_flow_data->drawing;
LttvTracefileContext *tfc = (LttvTracefileContext *)call_data;
LttvTracefileState *tfs = (LttvTracefileState *)call_data;
- LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context;
LttEvent *e;
e = tfc->e;
LttTime evtime = ltt_event_time(e);
- guint width = control_flow_data->drawing->width;
guint sub_id;
{
birth = process->creation_time;
- if(process_list->current_hash_data[tfc->index] != NULL) {
+ if(likely(process_list->current_hash_data[tfc->index] != NULL)) {
hashed_process_data = process_list->current_hash_data[tfc->index];
} else {
hashed_process_data = processlist_get_process_data(process_list,
process->last_cpu_index,
&birth,
tfc->t_context->index);
- if(hashed_process_data == NULL)
+ if(unlikely(hashed_process_data == NULL))
{
g_assert(pid == 0 || pid != process->ppid);
/* Process not present */
* We definitely can draw the items related to the ending state.
*/
- /* Check if the x position is unset. In can have been left unset by
- * a draw closure from a after chunk hook. This should never happen,
- * because it must be set by before chunk hook to the damage_begin
- * value.
- */
- g_assert(hashed_process_data->x.over != -1);
-
- if(ltt_time_compare(hashed_process_data->next_good_time,
- evtime) > 0)
+ if(likely(ltt_time_compare(hashed_process_data->next_good_time,
+ evtime) > 0))
{
- if(hashed_process_data->x.middle_marked == FALSE) {
+ if(unlikely(hashed_process_data->x.middle_marked == FALSE)) {
processlist_get_pixels_from_data(process_list,
hashed_process_data,
&y,
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
-
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint x;
convert_time_to_pixels(
time_window,
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
-
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint x;
convert_time_to_pixels(
/* Jump over draw if we are at the same x position */
- if(x == hashed_process_data->x.middle &&
- hashed_process_data->x.middle_used)
+ if(unlikely(x == hashed_process_data->x.middle &&
+ hashed_process_data->x.middle_used))
{
- if(hashed_process_data->x.middle_marked == FALSE) {
+ if(unlikely(hashed_process_data->x.middle_marked == FALSE)) {
/* Draw collision indicator */
gdk_gc_set_foreground(drawing->gc, &drawing_colors[COL_WHITE]);
gdk_draw_point(drawing->pixmap,
LttvTracefileContext *tfc = (LttvTracefileContext *)call_data;
LttvTracefileState *tfs = (LttvTracefileState *)call_data;
- LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context;
LttEvent *e;
e = tfc->e;
LttTime evtime = ltt_event_time(e);
- guint width = control_flow_data->drawing->width;
guint sub_id;
guint param1;
process_child->last_cpu_index,
&birth,
tfc->t_context->index);
- if(hashed_process_data_child == NULL)
+ if(likely(hashed_process_data_child == NULL))
{
g_assert(child_pid == 0 || child_pid != process_child->ppid);
/* Process not present */
}
- if(ltt_time_compare(hashed_process_data_child->next_good_time,
- evtime) <= 0)
+ if(likely(ltt_time_compare(hashed_process_data_child->next_good_time,
+ evtime) <= 0))
{
#if 0
processlist_get_pixels_from_data(process_list,
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
-
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint new_x;
convert_time_to_pixels(
time_window,
width,
&new_x);
- if(hashed_process_data_child->x.over != new_x) {
+ if(likely(hashed_process_data_child->x.over != new_x)) {
hashed_process_data_child->x.over = new_x;
hashed_process_data_child->x.over_used = FALSE;
hashed_process_data_child->x.over_marked = FALSE;
}
- if(hashed_process_data_child->x.middle != new_x) {
+ if(likely(hashed_process_data_child->x.middle != new_x)) {
hashed_process_data_child->x.middle = new_x;
hashed_process_data_child->x.middle_used = FALSE;
hashed_process_data_child->x.middle_marked = FALSE;
}
- if(hashed_process_data_child->x.under != new_x) {
+ if(likely(hashed_process_data_child->x.under != new_x)) {
hashed_process_data_child->x.under = new_x;
hashed_process_data_child->x.under_used = FALSE;
hashed_process_data_child->x.under_marked = FALSE;
birth = process->creation_time;
- if(process_list->current_hash_data[tfc->index] != NULL) {
+ if(likely(process_list->current_hash_data[tfc->index] != NULL) ){
hashed_process_data = process_list->current_hash_data[tfc->index];
} else {
hashed_process_data = processlist_get_process_data(process_list,
process->last_cpu_index,
&birth,
tfc->t_context->index);
- if(hashed_process_data == NULL)
+ if(unlikely(hashed_process_data == NULL))
{
g_assert(pid == 0 || pid != process->ppid);
/* Process not present */
hashed_process_data;
}
- if(ltt_time_compare(hashed_process_data->next_good_time,
- evtime) <= 0)
+ if(unlikely(ltt_time_compare(hashed_process_data->next_good_time,
+ evtime) <= 0))
{
#if 0
processlist_get_pixels_from_data(process_list,
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
-
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
guint new_x;
convert_time_to_pixels(
time_window,
evtime,
width,
&new_x);
- if(hashed_process_data->x.middle != new_x) {
+ if(unlikely(hashed_process_data->x.middle != new_x)) {
hashed_process_data->x.middle = new_x;
hashed_process_data->x.middle_used = FALSE;
hashed_process_data->x.middle_marked = FALSE;
* currently shown time interval. (reuse is only for scrolling)
*/
- g_info("Old time window HOOK : %u, %u to %u, %u",
+ g_info("Old time window HOOK : %lu, %lu to %lu, %lu",
old_time_window->start_time.tv_sec,
old_time_window->start_time.tv_nsec,
old_time_window->time_width.tv_sec,
old_time_window->time_width.tv_nsec);
- g_info("New time window HOOK : %u, %u to %u, %u",
+ g_info("New time window HOOK : %lu, %lu to %lu, %lu",
new_time_window->start_time.tv_sec,
new_time_window->start_time.tv_nsec,
new_time_window->time_width.tv_sec,
{
ControlFlowData *control_flow_data = (ControlFlowData*) hook_data;
Drawing_t *drawing = control_flow_data->drawing;
- GtkWidget *widget = drawing->drawing_area;
drawing_clear(control_flow_data->drawing);
redraw_notify(control_flow_data, NULL);
request_background_data(control_flow_data);
-#if 0
- drawing->damage_begin = 0;
- drawing->damage_end = drawing->width;
- if(drawing->damage_begin < drawing->damage_end)
- {
- drawing_data_request(drawing,
- &drawing->pixmap,
- drawing->damage_begin,
- 0,
- drawing->damage_end-drawing->damage_begin,
- drawing->height);
- }
-
- gtk_widget_queue_draw_area(drawing->drawing_area,
- 0,0,
- drawing->width,
- drawing->height);
-#endif //0
return FALSE;
}
{
ControlFlowData *control_flow_data = (ControlFlowData*) hook_data;
Drawing_t *drawing = control_flow_data->drawing;
- GtkWidget *widget = drawing->drawing_area;
//g_assert(widget->allocation.width == drawing->damage_end);
LttTime trace_start = tsc->time_span.start_time;
LttTime trace_end = tsc->time_span.end_time;
- g_info("New current time HOOK : %u, %u", current_time.tv_sec,
+ g_info("New current time HOOK : %lu, %lu", current_time.tv_sec,
current_time.tv_nsec);
EventsRequest *events_request;
LttvTracesetState *tss;
LttTime end_time;
+ guint x_end;
} ClosureData;
EventsRequest *events_request = closure_data->events_request;
ControlFlowData *control_flow_data = events_request->viewer_data;
- Drawing_t *drawing = control_flow_data->drawing;
LttvTracesetState *tss = closure_data->tss;
- LttvTracesetContext *tsc = (LttvTracesetContext*)closure_data->tss;
+ LttvTracesetContext *tsc = (LttvTracesetContext*)tss;
LttTime evtime = closure_data->end_time;
- guint width = drawing->width;
{
/* For the process */
process = lttv_state_find_process(tfs,
process_info->pid);
- if(process != NULL) {
+ if(unlikely(process != NULL)) {
/* Only draw for processes that are currently in the trace states */
- guint y = 0, height = 0, pl_height = 0;
+ guint y = 0, height = 0;
ProcessList *process_list = control_flow_data->process_list;
- LttTime birth = process_info->birth;
-
+#ifdef EXTRA_CHECK
/* Should be alike when background info is ready */
if(control_flow_data->background_info_waiting==0)
g_assert(ltt_time_compare(process->creation_time,
process_info->birth) == 0);
+#endif //EXTRA_CHECK
/* process HAS to be present */
processlist_get_pixels_from_data(process_list,
hashed_process_data,
* We definitely can draw the items related to the ending state.
*/
- /* Check if the x position is unset. In can have been left unset by
- * a draw closure from a after chunk hook. This should never happen,
- * because it must be set by before chunk hook to the damage_begin
- * value.
- */
- g_assert(hashed_process_data->x.over != -1);
-
- if(ltt_time_compare(hashed_process_data->next_good_time,
- evtime) <= 0)
+ if(unlikely(ltt_time_compare(hashed_process_data->next_good_time,
+ evtime) <= 0))
{
TimeWindow time_window =
lttvwindow_get_time_window(control_flow_data->tab);
|| ltt_time_compare(evtime, time_window.end_time) == 1)
return;
#endif //EXTRA_CHECK
- guint x;
+ Drawing_t *drawing = control_flow_data->drawing;
+ guint width = drawing->width;
- convert_time_to_pixels(
- time_window,
- evtime,
- width,
- &x);
+ guint x = closure_data->x_end;
DrawContext draw_context;
}
#endif //0
- if(x == hashed_process_data->x.middle &&
- hashed_process_data->x.middle_used) {
+ if(unlikely(x == hashed_process_data->x.middle &&
+ hashed_process_data->x.middle_used)) {
#if 0 /* do not mark closure : not missing information */
if(hashed_process_data->x.middle_marked == FALSE) {
/* Draw collision indicator */
draw_line((void*)&prop_line, (void*)&draw_context);
/* become the last x position */
- if(x != hashed_process_data->x.middle) {
+ if(likely(x != hashed_process_data->x.middle)) {
hashed_process_data->x.middle = x;
/* but don't use the pixel */
hashed_process_data->x.middle_used = FALSE;
EventsRequest *events_request = (EventsRequest*)hook_data;
ControlFlowData *control_flow_data = events_request->viewer_data;
LttvTracesetState *tss = (LttvTracesetState*)call_data;
- LttvTracesetContext *tsc = (LttvTracesetContext*)call_data;
ProcessList *process_list = control_flow_data->process_list;
LttTime end_time = events_request->end_time;
closure_data.tss = tss;
closure_data.end_time = end_time;
+ TimeWindow time_window =
+ lttvwindow_get_time_window(control_flow_data->tab);
+ guint width = control_flow_data->drawing->width;
+ convert_time_to_pixels(
+ time_window,
+ end_time,
+ width,
+ &closure_data.x_end);
+
+
/* Draw last items */
g_hash_table_foreach(process_list->process_hash, draw_closure,
(void*)&closure_data);
closure_data.tss = tss;
closure_data.end_time = end_time;
+ TimeWindow time_window =
+ lttvwindow_get_time_window(control_flow_data->tab);
+ guint width = control_flow_data->drawing->width;
+ convert_time_to_pixels(
+ time_window,
+ end_time,
+ width,
+ &closure_data.x_end);
+
/* Draw last items */
g_hash_table_foreach(process_list->process_hash, draw_closure,
(void*)&closure_data);