X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst%2Fgsttrace.h;h=ca70a836799c24163d08d3ea4196c7a0c65671a2;hb=066b515985897495cae32fca5b7eeeec260c40c9;hp=410a530ce308901e55656137c486385ff9f8fa2e;hpb=1f212d7a8f17dda5261056706a584ab97a8f9f75;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst/gsttrace.h b/gst/gsttrace.h index 410a530..ca70a83 100644 --- a/gst/gsttrace.h +++ b/gst/gsttrace.h @@ -2,7 +2,7 @@ * Copyright (C) 1999,2000 Erik Walthinsen * 2000 Wim Taymans * - * gsttrace.h: Header for tracing functions (depracated) + * gsttrace.h: Header for tracing functions (deprecated) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -24,73 +24,119 @@ #ifndef __GST_TRACE_H__ #define __GST_TRACE_H__ -#ifndef GST_DISABLE_TRACE - #include G_BEGIN_DECLS -typedef struct _GstTrace GstTrace; -typedef struct _GstTraceEntry GstTraceEntry; - -struct _GstTrace { - /* where this trace is going */ - gchar *filename; - int fd; +/** + * GstAllocTraceFlags: + * @GST_ALLOC_TRACE_NONE: No tracing specified or desired. Since 0.10.36. + * @GST_ALLOC_TRACE_LIVE: Trace number of non-freed memory. + * @GST_ALLOC_TRACE_MEM_LIVE: Trace pointers of unfreed memory. + * + * Flags indicating which tracing feature to enable. + */ +typedef enum { + GST_ALLOC_TRACE_NONE = 0, + GST_ALLOC_TRACE_LIVE = (1 << 0), + GST_ALLOC_TRACE_MEM_LIVE = (1 << 1) +} GstAllocTraceFlags; + +typedef struct _GstAllocTrace GstAllocTrace; + +/** + * GstAllocTrace: + * @name: The name of the tracing object + * @flags: Flags for this object + * @offset: offset of the GType + * @live: counter for live memory + * @mem_live: list with pointers to unfreed memory + * + * The main tracing object + */ +struct _GstAllocTrace { + gchar *name; + gint flags; - /* current buffer, size, head offset */ - GstTraceEntry *buf; - gint bufsize; - gint bufoffset; + goffset offset; + gint live; + GSList *mem_live; }; -struct _GstTraceEntry { - gint64 timestamp; - guint32 sequence; - guint32 data; - gchar message[112]; -}; +#ifndef GST_DISABLE_TRACE + +GST_EXPORT GMutex _gst_trace_mutex; -GstTrace* gst_trace_new (gchar *filename, gint size); +void _priv_gst_alloc_trace_initialize (void); +void _priv_gst_alloc_trace_deinit (void); +GstAllocTrace* _priv_gst_alloc_trace_register (const gchar *name, goffset offset); -void gst_trace_destroy (GstTrace *trace); -void gst_trace_flush (GstTrace *trace); -void gst_trace_text_flush (GstTrace *trace); -#define gst_trace_get_size(trace) ((trace)->bufsize) -#define gst_trace_get_offset(trace) ((trace)->bufoffset) -#define gst_trace_get_remaining(trace) ((trace)->bufsize - (trace)->bufoffset) -void gst_trace_set_default (GstTrace *trace); +void _priv_gst_alloc_trace_dump (void); -void _gst_trace_add_entry (GstTrace *trace, guint32 seq, - guint32 data, gchar *msg); +#ifndef GST_DISABLE_ALLOC_TRACE +/** + * gst_alloc_trace_register: + * @name: The name of the tracer object + * + * Register a new alloc tracer with the given name + */ +#define _gst_alloc_trace_register(name,offset) _priv_gst_alloc_trace_register (name,offset) -void gst_trace_read_tsc (guint64 *dst); +#define _gst_alloc_trace_dump _priv_gst_alloc_trace_dump -#define TRACE_ENABLE +/** + * gst_alloc_trace_new: + * @trace: The tracer to use + * @mem: The memory allocated + * + * Use the tracer to trace a new memory allocation + */ +#define _gst_alloc_trace_new(trace, mem) \ +G_STMT_START { \ + if (G_UNLIKELY ((trace)->flags)) { \ + g_mutex_lock (&_gst_trace_mutex); \ + if ((trace)->flags & GST_ALLOC_TRACE_LIVE) \ + (trace)->live++; \ + if ((trace)->flags & GST_ALLOC_TRACE_MEM_LIVE) \ + (trace)->mem_live = \ + g_slist_prepend ((trace)->mem_live, mem); \ + g_mutex_unlock (&_gst_trace_mutex); \ + } \ +} G_STMT_END + +/** + * gst_alloc_trace_free: + * @trace: The tracer to use + * @mem: The memory that is freed + * + * Trace a memory free operation + */ +#define _gst_alloc_trace_free(trace, mem) \ +G_STMT_START { \ + if (G_UNLIKELY ((trace)->flags)) { \ + g_mutex_lock (&_gst_trace_mutex); \ + if ((trace)->flags & GST_ALLOC_TRACE_LIVE) \ + (trace)->live--; \ + if ((trace)->flags & GST_ALLOC_TRACE_MEM_LIVE) \ + (trace)->mem_live = \ + g_slist_remove ((trace)->mem_live, mem); \ + g_mutex_unlock (&_gst_trace_mutex); \ + } \ +} G_STMT_END -#ifdef TRACE_ENABLE -extern gint _gst_trace_on; -#define gst_trace_add_entry(trace,seq,data,msg) \ - if (_gst_trace_on) { \ - _gst_trace_add_entry(trace,(guint32)seq,(guint32)data,msg); \ - } #else -#define gst_trace_add_entry(trace,seq,data,msg) +#define _gst_alloc_trace_register(name) (NULL) +#define _gst_alloc_trace_new(trace, mem) +#define _gst_alloc_trace_free(trace, mem) +#define _gst_alloc_trace_dump() #endif #else /* GST_DISABLE_TRACE */ -#pragma GCC poison gst_trace_new -#pragma GCC poison gst_trace_destroy -#pragma GCC poison gst_trace_flush -#pragma GCC poison gst_trace_text_flush -#pragma GCC poison gst_trace_get_size -#pragma GCC poison gst_trace_get_offset -#pragma GCC poison gst_trace_get_remaining -#pragma GCC poison gst_trace_set_default -#pragma GCC poison _gst_trace_add_entry -#pragma GCC poison gst_trace_read_tsc -#pragma GCC poison gst_trace_add_entry +#define _gst_alloc_trace_register(name, offset) (NULL) +#define _gst_alloc_trace_new(trace, mem) +#define _gst_alloc_trace_free(trace, mem) +#define _gst_alloc_trace_dump() #endif /* GST_DISABLE_TRACE */