d2007fbd |
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 | } |