X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fresourceview%2Fdrawing.c;h=48e0fcfbc21586ee78e42ed674d4e5e0a0a51d91;hb=0305fe774206ec12a98378be3cf891446b1b901c;hp=ab9de32cb86e2aa33148807676a97ac746365414;hpb=8743690d339401db862834d50f9b6bbd1268271f;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 ab9de32c..48e0fcfb 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 @@ -97,7 +96,22 @@ 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, 0xFFFF, 0xFFFF }, /* COL_IRQ_BUSY */ + { 0, 0xFFFF, 0x5E00, 0x0000 }, /* COL_IRQ_BUSY */ +}; + +GdkColor drawing_colors_soft_irq[NUM_COLORS_SOFT_IRQ] = +{ /* Pixel, R, G, B */ + { 0, 0x0000, 0x0000, 0x0000 }, /* COL_SOFT_IRQ_UNKNOWN */ + { 0, 0x0000, 0x0000, 0x0000 }, /* COL_SOFT_IRQ_IDLE */ + { 0, 0xFFFF, 0x9400, 0x9600 }, /* COL_SOFT_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 */ }; /***************************************************************************** @@ -131,7 +145,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; @@ -176,15 +190,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, +// 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_SYSCALL_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_ARCH, LTT_EVENT_TRAP_ENTRY, - LTT_FIELD_TRAP_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_ARCH, LTT_EVENT_TRAP_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); - 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, + LTT_EVENT_IRQ_ENTRY, + FIELD_ARRAY(LTT_FIELD_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_IRQ_EXIT, - 0, 0, 0, + lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, + LTT_EVENT_IRQ_EXIT, + NULL, 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, LTT_EVENT_SOFT_IRQ_ENTRY, -// LTT_FIELD_SOFT_IRQ_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, LTT_EVENT_SOFT_IRQ_EXIT, -// 0, 0, 0, -// 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_SOFT_IRQ_ENTRY, + FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID), + before_execmode_hook, + events_request, + &hooks); + + lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, + LTT_EVENT_SOFT_IRQ_EXIT, + NULL, + before_execmode_hook, + events_request, + &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; @@ -492,42 +454,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; @@ -547,6 +480,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); @@ -564,8 +499,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); + } } @@ -573,7 +510,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; @@ -747,7 +684,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); @@ -874,7 +811,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); @@ -1075,6 +1012,12 @@ Drawing_t *drawing_construct(ControlFlowData *control_flow_data) 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_soft_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)); @@ -1133,6 +1076,8 @@ void drawing_destroy(Drawing_t *drawing) 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_soft_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));