#include <stdio.h>
#include <stdint.h>
+#include "radeon_track.h"
/* bo object */
#define RADEON_BO_FLAGS_MACRO_TILE 1
uint32_t domains;
uint32_t flags;
unsigned cref;
+#ifdef RADEON_BO_TRACK
+ struct radeon_track *track;
+#endif
void *ptr;
struct radeon_bo_manager *bom;
};
struct radeon_bo_manager {
struct radeon_bo_funcs *funcs;
int fd;
+ struct radeon_tracker tracker;
};
static inline void _radeon_bo_debug(struct radeon_bo *bo,
int line)
{
struct radeon_bo *bo;
+
bo = bom->funcs->bo_open(bom, handle, size, alignment, domains, flags);
-#ifdef RADEON_BO_TRACK_OPEN
+#ifdef RADEON_BO_TRACK
if (bo) {
- _radeon_bo_debug(bo, 1, file, func, line);
+ bo->track = radeon_tracker_add_track(&bom->tracker, bo->handle);
+ radeon_track_add_event(bo->track, file, func, "open", line);
}
#endif
return bo;
int line)
{
bo->cref++;
-#ifdef RADEON_BO_TRACK_REF
- _radeon_bo_debug(bo, 2, file, func, line);
+#ifdef RADEON_BO_TRACK
+ radeon_track_add_event(bo->track, file, func, "ref", line);
#endif
bo->bom->funcs->bo_ref(bo);
}
int line)
{
bo->cref--;
-#ifdef RADEON_BO_TRACK_REF
- _radeon_bo_debug(bo, 3, file, func, line);
+#ifdef RADEON_BO_TRACK
+ radeon_track_add_event(bo->track, file, func, "unref", line);
+ if (bo->cref <= 0) {
+ radeon_tracker_remove_track(&bo->bom->tracker, bo->track);
+ bo->track = NULL;
+ }
#endif
bo->bom->funcs->bo_unref(bo);
}
const char *func,
int line)
{
-#ifdef RADEON_BO_TRACK_MAP
- _radeon_bo_debug(bo, 4, file, func, line);
-#endif
return bo->bom->funcs->bo_map(bo, write);
}
const char *func,
int line)
{
-#ifdef RADEON_BO_TRACK_MAP
- _radeon_bo_debug(bo, 5, file, func, line);
-#endif
return bo->bom->funcs->bo_unmap(bo);
}