update
[lttv.git] / ltt / branches / poly / ltt / markers.c
CommitLineData
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
14int 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
30int 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
44int 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
52int 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}
This page took 0.02503 seconds and 4 git commands to generate.