| 1 | /* |
| 2 | * Marker support code. |
| 3 | * |
| 4 | * Mathieu Desnoyers, August 2007 |
| 5 | * License: LGPL. |
| 6 | */ |
| 7 | |
| 8 | #include <glib.h> |
| 9 | #include <ltt/compiler.h> |
| 10 | #include <ltt/markers.h> |
| 11 | |
| 12 | #define DEFAULT_MARKERS_NUM 100 |
| 13 | |
| 14 | int marker_format_event(LttTrace *trace, const char *name, const char *format) |
| 15 | { |
| 16 | struct marker_info *info; |
| 17 | |
| 18 | info = g_hash_table_lookup(trace->markers_hash, (gconstpointer)name); |
| 19 | if (!info) |
| 20 | g_error("Got marker format %s, but marker name %s has no ID yet. " |
| 21 | "Kernel issue.", |
| 22 | format, name); |
| 23 | if (info->format) |
| 24 | g_free(info->format); |
| 25 | info->format = g_new(char, strlen(format)+1); |
| 26 | strcpy(info->format, format); |
| 27 | /* TODO deal with format string */ |
| 28 | } |
| 29 | |
| 30 | int marker_id_event(LttTrace *trace, const char *name, uint16_t id) |
| 31 | { |
| 32 | struct marker_info *info; |
| 33 | |
| 34 | if (trace->markers->len < id) |
| 35 | trace->markers = g_array_set_size(trace->markers, id+1); |
| 36 | info = &g_array_index(trace->markers, struct marker_info, id); |
| 37 | if (info->name) |
| 38 | g_free(info->name); |
| 39 | info->name = g_new(char, strlen(name)+1); |
| 40 | strcpy(info->name, name); |
| 41 | g_hash_table_insert(trace->markers_hash, (gpointer)name, info); |
| 42 | } |
| 43 | |
| 44 | int allocate_marker_data(LttTrace *trace) |
| 45 | { |
| 46 | /* Init array to 0 */ |
| 47 | trace->markers = g_array_sized_new(FALSE, TRUE, |
| 48 | sizeof(struct marker_info), DEFAULT_MARKERS_NUM); |
| 49 | trace->markers_hash = g_hash_table_new(g_str_hash, g_str_equal); |
| 50 | } |
| 51 | |
| 52 | int destroy_marker_data(LttTrace *trace) |
| 53 | { |
| 54 | unsigned int i; |
| 55 | struct marker_info *info; |
| 56 | |
| 57 | for (i=0; i<trace->markers->len; i++) { |
| 58 | info = &g_array_index(trace->markers, struct marker_info, i); |
| 59 | if (info->name) |
| 60 | g_free(info->name); |
| 61 | if (info->format) |
| 62 | g_free(info->format); |
| 63 | } |
| 64 | g_array_free(trace->markers, TRUE); |
| 65 | g_hash_table_destroy(trace->markers_hash); |
| 66 | } |