X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fresourceview%2Fdrawing.c;h=d6a87e40652bd7990cfa5377540ed7eac618c633;hb=37b0f1ed7982a8995d29da17a5b1b6b8127eb162;hp=30a6f8eb3f7bc455ba192d6dcfb79753fd5edb3a;hpb=598026baa39b5672b77d46e70a1434f975d52486;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/resourceview/drawing.c b/ltt/branches/poly/lttv/modules/gui/resourceview/drawing.c index 30a6f8eb..d6a87e40 100644 --- a/ltt/branches/poly/lttv/modules/gui/resourceview/drawing.c +++ b/ltt/branches/poly/lttv/modules/gui/resourceview/drawing.c @@ -37,7 +37,6 @@ #include "cfv.h" //#define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format) -//#define g_debug(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format) //FIXME // fixed #define TRACE_NUMBER 0 @@ -86,12 +85,27 @@ GdkColor drawing_colors[NUM_COLORS] = GdkColor drawing_colors_cpu[NUM_COLORS_CPU] = { /* Pixel, R, G, B */ - { 0, 0xFFFF, 0x0000, 0x0000 }, /* COL_CPU_UNKNOWN */ + { 0, 0x0000, 0x0000, 0x0000 }, /* COL_CPU_UNKNOWN */ { 0, 0xBBBB, 0xBBBB, 0xBBBB }, /* COL_CPU_IDLE */ { 0, 0xFFFF, 0xFFFF, 0xFFFF }, /* COL_CPU_BUSY */ - { 0, 0xFFFF, 0x0000, 0x0000 }, /* COL_CPU_IRQ */ + { 0, 0xFFFF, 0x5E00, 0x0000 }, /* COL_CPU_IRQ */ + { 0, 0xFF00, 0xFF00, 0x0100 }, /* COL_CPU_TRAP */ }; +GdkColor drawing_colors_irq[NUM_COLORS_IRQ] = +{ /* Pixel, R, G, B */ + { 0, 0x0000, 0x0000, 0x0000 }, /* COL_IRQ_UNKNOWN */ + { 0, 0xBBBB, 0xBBBB, 0xBBBB }, /* COL_IRQ_IDLE */ + { 0, 0xFFFF, 0x5E00, 0x0000 }, /* COL_IRQ_BUSY */ +}; + +GdkColor drawing_colors_bdev[NUM_COLORS_BDEV] = +{ /* Pixel, R, G, B */ + { 0, 0x0000, 0x0000, 0x0000 }, /* COL_BDEV_UNKNOWN */ + { 0, 0xBBBB, 0xBBBB, 0xBBBB }, /* COL_BDEV_IDLE */ + { 0, 0x0000, 0x0000, 0xFFFF }, /* COL_BDEV_BUSY_READING */ + { 0, 0xFFFF, 0x0000, 0x0000 }, /* COL_BDEV_BUSY_WRITING */ +}; /***************************************************************************** * drawing functions * @@ -124,7 +138,7 @@ void drawing_data_request(Drawing_t *drawing, ControlFlowData *control_flow_data = drawing->control_flow_data; // (ControlFlowData*)g_object_get_data( - // G_OBJECT(drawing->drawing_area), "control_flow_data"); + // G_OBJECT(drawing->drawing_area), "resourceview_data"); LttTime start, time_end; LttTime window_end = time_window.end_time; @@ -169,15 +183,14 @@ void drawing_data_request(Drawing_t *drawing, LttvTraceHook *hook; - LttvTraceHookByFacility *thf; + LttvTraceHook *th; guint ret; - gint before_hn, after_hn; + guint first_after; nb_trace = lttv_traceset_number(traceset); // FIXME (fixed) : eventually request for more traces for(i = 0 ; i < nb_trace ; i++) { - //for(i = 0; iparent.t, -// LTT_FACILITY_KERNEL_ARCH, LTT_EVENT_SYSCALL_ENTRY, -// LTT_FIELD_SYSCALL_ID, 0, 0, -// before_execmode_hook, -// events_request, -// &g_array_index(hooks, LttvTraceHook, before_hn++)); -// if(ret) before_hn--; -// -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_KERNEL_ARCH, LTT_EVENT_SYSCALL_EXIT, -// 0, 0, 0, -// before_execmode_hook, -// events_request, -// &g_array_index(hooks, LttvTraceHook, before_hn++)); -// if(ret) before_hn--; -// -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_KERNEL_ARCH, LTT_EVENT_TRAP_ENTRY, -// LTT_FIELD_TRAP_ID, 0, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_KERNEL_ARCH, +// LTT_EVENT_SYSCALL_ENTRY, +// FIELD_ARRAY(LTT_FIELD_SYSCALL_ID), // before_execmode_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, before_hn++)); -// if(ret) before_hn--; +// &hooks); // -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_KERNEL_ARCH, LTT_EVENT_TRAP_EXIT, -// 0, 0, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_KERNEL_ARCH, +// LTT_EVENT_SYSCALL_EXIT, +// NULL, // before_execmode_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, before_hn++)); -// if(ret) before_hn--; +// &hooks); // - ret = lttv_trace_find_hook(ts->parent.t, - LTT_FACILITY_KERNEL, LTT_EVENT_IRQ_ENTRY, - LTT_FIELD_IRQ_ID, 0, 0, + lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL_ARCH, + LTT_EVENT_TRAP_ENTRY, + FIELD_ARRAY(LTT_FIELD_TRAP_ID), before_execmode_hook, events_request, - &g_array_index(hooks, LttvTraceHook, before_hn++)); - if(ret) before_hn--; + &hooks); - ret = lttv_trace_find_hook(ts->parent.t, - LTT_FACILITY_KERNEL, LTT_EVENT_IRQ_EXIT, - 0, 0, 0, + lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL_ARCH, + LTT_EVENT_TRAP_EXIT, + NULL, before_execmode_hook, events_request, - &g_array_index(hooks, LttvTraceHook, before_hn++)); - if(ret) before_hn--; + &hooks); + + lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, + LTT_EVENT_IRQ_ENTRY, + FIELD_ARRAY(LTT_FIELD_IRQ_ID), + before_execmode_hook, + events_request, + &hooks); + + lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, + LTT_EVENT_IRQ_EXIT, + NULL, + before_execmode_hook, + events_request, + &hooks); // -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_ENTRY, -// LTT_FIELD_SOFT_IRQ_ID, 0, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_KERNEL, +// LTT_EVENT_SOFT_IRQ_ENTRY, +// FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID), // before_execmode_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, before_hn++)); -// if(ret) before_hn--; +// &hooks); // -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_EXIT, -// 0, 0, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_KERNEL, +// LTT_EVENT_SOFT_IRQ_EXIT, +// NULL, // before_execmode_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, before_hn++)); -// if(ret) before_hn--; +// &hooks); - ret = lttv_trace_find_hook(ts->parent.t, - LTT_FACILITY_KERNEL, LTT_EVENT_SCHED_SCHEDULE, - LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE, + lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, + LTT_EVENT_SCHED_SCHEDULE, + FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE), before_schedchange_hook, events_request, - &g_array_index(hooks, LttvTraceHook, before_hn++)); - if(ret) before_hn--; + &hooks); -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_KERNEL, LTT_EVENT_PROCESS_EXIT, -// LTT_FIELD_PID, 0, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_KERNEL, +// LTT_EVENT_PROCESS_EXIT, +// FIELD_ARRAY(LTT_FIELD_PID), // before_process_exit_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, before_hn++)); -// if(ret) before_hn--; +// &hooks); // -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_KERNEL, LTT_EVENT_PROCESS_FREE, -// LTT_FIELD_PID, 0, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_KERNEL, +// LTT_EVENT_PROCESS_FREE, +// FIELD_ARRAY(LTT_FIELD_PID), // before_process_release_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, before_hn++)); -// if(ret) before_hn--; +// &hooks); // -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_LIST, LTT_EVENT_STATEDUMP_END, -// 0, 0, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_LIST, +// LTT_EVENT_STATEDUMP_END, +// NULL, // before_statedump_end, // events_request, -// &g_array_index(hooks, LttvTraceHook, before_hn++)); -// if(ret) before_hn--; +// &hooks); -#if 0 lttv_trace_find_hook(ts->parent.t, - "core", "process", "event_sub_id", - "event_data1", "event_data2", before_process_hook, - &g_array_index(hooks, LttvTraceHook, hn++)); -#endif //0 -#if 0 - lttv_trace_find_hook(ts->parent.t, "core", "process_fork", "child_pid", - NULL, NULL, process_fork, &g_array_index(hooks, LttvTraceHook, hn++)); - - lttv_trace_find_hook(ts->parent.t, "core", "process_exit", NULL, NULL, - NULL, process_exit, &g_array_index(hooks, LttvTraceHook, hn++)); -#endif //0 + LTT_FACILITY_KERNEL, + LTT_EVENT_REQUEST_ISSUE, + FIELD_ARRAY(LTT_FIELD_MAJOR, LTT_FIELD_MINOR, LTT_FIELD_OPERATION), + before_bdev_event_hook, + events_request, + &hooks); - /* after hooks */ - -#if 0 - /**** DESACTIVATED ****/ - lttv_trace_find_hook(ts->parent.t, "core","syscall_entry","syscall_id", - NULL, NULL, after_execmode_hook, &g_array_index(hooks, LttvTraceHook, hn++)); - /**** DESACTIVATED ****/ - lttv_trace_find_hook(ts->parent.t, "core", "syscall_exit", NULL, NULL, - NULL, after_execmode_hook, &g_array_index(hooks, LttvTraceHook, hn++)); - - /**** DESACTIVATED ****/ - lttv_trace_find_hook(ts->parent.t, "core", "trap_entry", "trap_id", - NULL, NULL, after_execmode_hook, &g_array_index(hooks, LttvTraceHook, hn++)); - - /**** DESACTIVATED ****/ - lttv_trace_find_hook(ts->parent.t, "core", "trap_exit", NULL, NULL, NULL, - after_execmode_hook, &g_array_index(hooks, LttvTraceHook, hn++)); - - /**** DESACTIVATED ****/ - lttv_trace_find_hook(ts->parent.t, "core", "irq_entry", "irq_id", NULL, - NULL, after_execmode_hook, &g_array_index(hooks, LttvTraceHook, hn++)); - - /**** DESACTIVATED ****/ - lttv_trace_find_hook(ts->parent.t, "core", "irq_exit", NULL, NULL, NULL, - after_execmode_hook, &g_array_index(hooks, LttvTraceHook, hn++)); -#endif //0 -#if 0 - lttv_trace_find_hook(ts->parent.t, "core", "schedchange", "in", "out", - "out_state", after_schedchange_hook, - &g_array_index(hooks, LttvTraceHook, hn++)); + lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, + LTT_EVENT_REQUEST_COMPLETE, + FIELD_ARRAY(LTT_FIELD_MAJOR, LTT_FIELD_MINOR, LTT_FIELD_OPERATION), + before_bdev_event_hook, + events_request, + &hooks); - lttv_trace_find_hook(ts->parent.t, "core", "process", "event_sub_id", - "event_data1", "event_data2", after_process_hook, - &g_array_index(hooks, LttvTraceHook, hn++)); -#endif //0 - after_hn = before_hn; + /* After hooks */ + first_after = hooks->len; - ret = lttv_trace_find_hook(ts->parent.t, - LTT_FACILITY_KERNEL, LTT_EVENT_SCHED_SCHEDULE, - LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE, + lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, + LTT_EVENT_SCHED_SCHEDULE, + FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE), after_schedchange_hook, events_request, - &g_array_index(hooks, LttvTraceHook, after_hn++)); - if(ret) after_hn--; + &hooks); -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_KERNEL, LTT_EVENT_PROCESS_FORK, -// LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_KERNEL, +// LTT_EVENT_PROCESS_FORK, +// FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID), // after_process_fork_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, after_hn++)); -// if(ret) after_hn--; +// &hooks); // -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_KERNEL, LTT_EVENT_PROCESS_EXIT, -// LTT_FIELD_PID, 0, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_KERNEL, +// LTT_EVENT_PROCESS_EXIT, +// FIELD_ARRAY(LTT_FIELD_PID), // after_process_exit_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, after_hn++)); -// if(ret) after_hn--; +// &hooks); // -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_FS, LTT_EVENT_EXEC, -// 0, 0, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_KERNEL, +// LTT_EVENT_EXEC, +// NULL, // after_fs_exec_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, after_hn++)); -// if(ret) after_hn--; +// &hooks); // -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_USER_GENERIC, LTT_EVENT_THREAD_BRAND, -// LTT_FIELD_NAME, 0, 0, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_USER_GENERIC, +// LTT_EVENT_THREAD_BRAND, +// FIELD_ARRAY(LTT_FIELD_NAME), // after_user_generic_thread_brand_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, after_hn++)); -// if(ret) after_hn--; +// &hooks); // -// ret = lttv_trace_find_hook(ts->parent.t, -// LTT_FACILITY_LIST, LTT_EVENT_PROCESS_STATE, -// LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME, +// lttv_trace_find_hook(ts->parent.t, +// LTT_FACILITY_LIST, +// LTT_EVENT_PROCESS_STATE, +// FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME), // after_event_enum_process_hook, // events_request, -// &g_array_index(hooks, LttvTraceHook, after_hn++)); -// if(ret) after_hn--; - - hooks = g_array_set_size(hooks, after_hn); - -#if 0 - lttv_trace_find_hook(ts->parent.t, "core", "process_fork", "child_pid", - NULL, NULL, process_fork, &g_array_index(hooks, LttvTraceHook, hn++)); - - lttv_trace_find_hook(ts->parent.t, "core", "process_exit", NULL, NULL, - NULL, process_exit, &g_array_index(hooks, LttvTraceHook, hn++)); -#endif //0 - +// &hooks); /* Add these hooks to each event_by_id hooks list */ /* add before */ - for(k = 0 ; k < before_hn ; k++) { - hook = &g_array_index(hooks, LttvTraceHook, k); - for(l=0;lfac_list->len;l++) { - thf = g_array_index(hook->fac_list, LttvTraceHookByFacility*, l); - lttv_hooks_add(lttv_hooks_by_id_find(event_by_id, thf->id), - thf->h, - thf, - LTTV_PRIO_STATE-5); - } + for(k = 0 ; k < first_after ; k++) { + th = &g_array_index(hooks, LttvTraceHook, k); + lttv_hooks_add(lttv_hooks_by_id_find(event_by_id, th->id), + th->h, + th, + LTTV_PRIO_STATE-5); } /* add after */ - for(k = before_hn ; k < after_hn ; k++) { - hook = &g_array_index(hooks, LttvTraceHook, k); - for(l=0;lfac_list->len;l++) { - thf = g_array_index(hook->fac_list, LttvTraceHookByFacility*, l); - lttv_hooks_add(lttv_hooks_by_id_find(event_by_id, thf->id), - thf->h, - thf, - LTTV_PRIO_STATE+5); - } + for(k = first_after ; k < hooks->len ; k++) { + th = &g_array_index(hooks, LttvTraceHook, k); + lttv_hooks_add(lttv_hooks_by_id_find(event_by_id, th->id), + th->h, + th, + LTTV_PRIO_STATE+5); } events_request->hooks = hooks; @@ -485,42 +447,13 @@ void drawing_data_request(Drawing_t *drawing, lttvwindow_events_request(tab, events_request); } - } - -#if 0 - lttv_hooks_add(event, - before_schedchange_hook, - events_request, - LTTV_PRIO_STATE-5); - lttv_hooks_add(event, - after_schedchange_hook, - events_request, - LTTV_PRIO_STATE+5); - lttv_hooks_add(event, - before_execmode_hook, - events_request, - LTTV_PRIO_STATE-5); - lttv_hooks_add(event, - after_execmode_hook, - events_request, - LTTV_PRIO_STATE+5); - lttv_hooks_add(event, - before_process_hook, - events_request, - LTTV_PRIO_STATE-5); - lttv_hooks_add(event, - after_process_hook, - events_request, - LTTV_PRIO_STATE+5); -#endif //0 - } static void set_last_start(gpointer key, gpointer value, gpointer user_data) { - ResourceInfo *process_info = (ResourceInfo*)key; + //ResourceInfo *process_info = (ResourceInfo*)key; HashedResourceData *hashed_process_data = (HashedResourceData*)value; guint x = (guint)user_data; @@ -540,6 +473,8 @@ static void set_last_start(gpointer key, gpointer value, gpointer user_data) void drawing_data_request_begin(EventsRequest *events_request, LttvTracesetState *tss) { + int i; + g_debug("Begin of data request"); ControlFlowData *cfd = events_request->viewer_data; LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tss); @@ -557,8 +492,10 @@ void drawing_data_request_begin(EventsRequest *events_request, LttvTracesetState width, &x); - g_hash_table_foreach(cfd->process_list->process_hash, set_last_start, - (gpointer)x); + for(i=0; iprocess_list->restypes[i].hash_table, set_last_start, + (gpointer)x); + } } @@ -566,7 +503,7 @@ void drawing_chunk_begin(EventsRequest *events_request, LttvTracesetState *tss) { g_debug("Begin of chunk"); ControlFlowData *cfd = events_request->viewer_data; - LttvTracesetContext *tsc = &tss->parent.parent; + LttvTracesetContext *tsc = &tss->parent; //LttTime current_time = lttv_traceset_context_get_current_tfc(tsc)->timestamp; guint i; LttvTraceset *traceset = tsc->ts; @@ -740,7 +677,7 @@ expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer user_data ) ControlFlowData *control_flow_data = (ControlFlowData*)g_object_get_data( G_OBJECT(widget), - "control_flow_data"); + "resourceview_data"); #if 0 if(unlikely(drawing->gc == NULL)) { drawing->gc = gdk_gc_new(drawing->drawing_area->window); @@ -867,7 +804,7 @@ button_press_event( GtkWidget *widget, GdkEventButton *event, gpointer user_data ControlFlowData *control_flow_data = (ControlFlowData*)g_object_get_data( G_OBJECT(widget), - "control_flow_data"); + "resourceview_data"); Drawing_t *drawing = control_flow_data->drawing; TimeWindow time_window = lttvwindow_get_time_window(control_flow_data->tab); @@ -1064,10 +1001,14 @@ Drawing_t *drawing_construct(ControlFlowData *control_flow_data) /* Allocate the colors */ GdkColormap* colormap = gdk_colormap_get_system(); gboolean success[NUM_COLORS]; - //gdk_colormap_alloc_colors(colormap, drawing_colors, NUM_COLORS, FALSE, - // TRUE, success); + gdk_colormap_alloc_colors(colormap, drawing_colors, NUM_COLORS, FALSE, + TRUE, success); gdk_colormap_alloc_colors(colormap, drawing_colors_cpu, NUM_COLORS_CPU, FALSE, TRUE, success); + gdk_colormap_alloc_colors(colormap, drawing_colors_irq, NUM_COLORS_IRQ, FALSE, + TRUE, success); + gdk_colormap_alloc_colors(colormap, drawing_colors_bdev, NUM_COLORS_BDEV, FALSE, + TRUE, success); drawing->gc = gdk_gc_new(GDK_DRAWABLE(main_window_get_widget(control_flow_data->tab)->window)); @@ -1123,10 +1064,10 @@ void drawing_destroy(Drawing_t *drawing) /* Free the colors */ GdkColormap* colormap = gdk_colormap_get_system(); - //gdk_colormap_free_colors(colormap, drawing_colors, NUM_COLORS); + gdk_colormap_free_colors(colormap, drawing_colors, NUM_COLORS); gdk_colormap_free_colors(colormap, drawing_colors_cpu, NUM_COLORS_CPU); - - + gdk_colormap_free_colors(colormap, drawing_colors_irq, NUM_COLORS_IRQ); + gdk_colormap_free_colors(colormap, drawing_colors_bdev, NUM_COLORS_BDEV); // Do not unref here, Drawing_t destroyed by it's widget. //g_object_unref( G_OBJECT(drawing->drawing_area));