]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/libdrm.git/blob - libdrm/radeon/radeon_track.c
Drop shared-core, bsd-core, linux-core and scripts subdirs
[glsdk/libdrm.git] / libdrm / radeon / radeon_track.c
1 /* 
2  * Copyright © 2008 Jérôme Glisse
3  * All Rights Reserved.
4  * 
5  * Permission is hereby granted, free of charge, to any person obtaining
6  * a copy of this software and associated documentation files (the
7  * "Software"), to deal in the Software without restriction, including
8  * without limitation the rights to use, copy, modify, merge, publish,
9  * distribute, sub license, and/or sell copies of the Software, and to
10  * permit persons to whom the Software is furnished to do so, subject to
11  * the following conditions:
12  * 
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
15  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16  * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS
17  * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 
20  * USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * The above copyright notice and this permission notice (including the
23  * next paragraph) shall be included in all copies or substantial portions
24  * of the Software.
25  */
26 /*
27  * Authors:
28  *      Jérôme Glisse <glisse@freedesktop.org>
29  */
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include "radeon_track.h"
35 void radeon_track_add_event(struct radeon_track *track,
36                             const char *file,
37                             const char *func,
38                             const char *op,
39                             unsigned line)
40 {
41     struct radeon_track_event *event;
43     if (track == NULL) {
44         return;
45     }
46     event = (void*)calloc(1,sizeof(struct radeon_track_event));
47     if (event == NULL) {
48         return;
49     }
50     event->line = line;
51     event->file = strdup(file);
52     event->func = strdup(func);
53     event->op = strdup(op);
54     if (event->file == NULL || event->func == NULL || event->op == NULL) {
55         free(event->file);
56         free(event->func);
57         free(event->op);
58         free(event);
59         return;
60     }
61     event->next = track->events;
62     track->events = event;
63 }
65 struct radeon_track *radeon_tracker_add_track(struct radeon_tracker *tracker,
66                                               unsigned key)
67 {
68     struct radeon_track *track;
70     track = (struct radeon_track*)calloc(1, sizeof(struct radeon_track));
71     if (track) {
72         track->next = tracker->tracks.next;
73         track->prev = &tracker->tracks;
74         tracker->tracks.next = track;
75         if (track->next) {
76             track->next->prev = track;
77         }
78         track->key = key;
79         track->events = NULL;
80     }
81     return track;
82 }
84 void radeon_tracker_remove_track(struct radeon_tracker *tracker,
85                                  struct radeon_track *track)
86 {
87     struct radeon_track_event *event;
88     void *tmp;
90     if (track == NULL) {
91         return;
92     }
93     track->prev->next = track->next;
94     if (track->next) {
95         track->next->prev = track->prev;
96     }
97     track->next = track->prev = NULL;
98     event = track->events;
99     while (event) {
100         tmp = event;
101         free(event->file);
102         free(event->func);
103         free(event->op);
104         event = event->next;
105         free(tmp);
106     }
107     track->events = NULL;
108     free(track);
111 void radeon_tracker_print(struct radeon_tracker *tracker, FILE *file)
113     struct radeon_track *track;
114     struct radeon_track_event *event;
115     void *tmp;
117     track = tracker->tracks.next;
118     while (track) {
119         event = track->events;
120         fprintf(file, "[0x%08X] :\n", track->key);
121         while (event) {
122             tmp = event;
123             fprintf(file, "  [0x%08X:%s](%s:%s:%d)\n",
124                     track->key, event->op,  event->file,
125                     event->func, event->line);
126             free(event->file);
127             free(event->func);
128             free(event->op);
129             event->file = NULL;
130             event->func = NULL;
131             event->op = NULL;
132             event = event->next;
133             free(tmp);
134         }
135         track->events = NULL;
136         tmp = track;
137         track = track->next;
138         free(tmp);
139     }
140         tracker->tracks.next = NULL;