## GstTrace

GstTrace — Tracing functionality

## Synopsis

    #include <gst/gst.h>

    struct              GstTrace;
    GstTrace *          gst_trace_new                       (const gchar *filename,
                                                             gint size);
    void                gst_trace_destroy                   (GstTrace *trace);
    void                gst_trace_flush                     (GstTrace *trace);
    void                gst_trace_text_flush                (GstTrace *trace);
    #define             gst_trace_add_entry                 (trace,
                                                             seq,
                                                             data,
                                                             msg)
    #define             gst_trace_get_size                  (trace)
    #define             gst_trace_get_offset                (trace)
    #define             gst_trace_get_remaining             (trace)
    void                gst_trace_set_default               (GstTrace *trace);
    void                gst_trace_read_tsc                  (gint64 *dst);
    enum                GstAllocTraceFlags;
    struct              GstAllocTrace;
    gboolean            gst_alloc_trace_available           (void);
    const GList *       gst_alloc_trace_list                (void);
    int                 gst_alloc_trace_live_all            (void);
    void                gst_alloc_trace_print_all           (void);
    void                gst_alloc_trace_set_flags_all       (GstAllocTraceFlags flags);
    GstAllocTrace *     gst_alloc_trace_get                 (const gchar *name);
    void                gst_alloc_trace_print               (const GstAllocTrace *trace);
    void                gst_alloc_trace_print_live          (void);
    void                gst_alloc_trace_set_flags           (GstAllocTrace *trace,
                                                             GstAllocTraceFlags flags);
    #define             gst_alloc_trace_register            (name)
    #define             gst_alloc_trace_new                 (trace,
                                                             mem)
    #define             gst_alloc_trace_free                (trace,
                                                             mem)

## Description

Traces allows to track object allocation. They provide a instance counter per GType. The counter is incremented for each object allocated and decremented it when it's freed.

Example 18. Tracing object instances

    1
    2
    3
    4
    5
    6
    7
    8

    // trace un-freed object instances
    gst_alloc_trace_set_flags_all (GST_ALLOC_TRACE_LIVE);
    if (!gst_alloc_trace_available ()) {
      g_warning ("Trace not available (recompile with trace enabled).");
    }
    gst_alloc_trace_print_live ();
    // do something here
    gst_alloc_trace_print_live ();

Last reviewed on 2005-11-21 (0.9.5)

## Details

### struct GstTrace

    struct GstTrace {
    };

Opaque GstTrace structure.

### gst_trace_new ()

    GstTrace *          gst_trace_new                       (const gchar *filename,
                                                             gint size);

Create a ringbuffer of `size` in the file with `filename` to store trace results in.

Free-function: gst_trace_destroy

`filename` : | a filename
`size` : | the max size of the file
Returns : | a new GstTrace. [transfer full]

### gst_trace_destroy ()

    void                gst_trace_destroy                   (GstTrace *trace);

Flush an close the previously allocated `trace`.

`trace` : | the GstTrace to destroy. [in][transfer full]

### gst_trace_flush ()

    void                gst_trace_flush                     (GstTrace *trace);

Flush any pending trace entries in `trace` to the trace file. `trace` can be NULL in which case the default GstTrace will be flushed.

`trace` : | the GstTrace to flush.

### gst_trace_text_flush ()

    void                gst_trace_text_flush                (GstTrace *trace);

Flush any pending trace entries in `trace` to the trace file, formatted as a text line with timestamp and sequence numbers. `trace` can be NULL in which case the default GstTrace will be flushed.

`trace` : | the GstTrace to flush.

### gst_trace_add_entry()

    #define             gst_trace_add_entry(trace,seq,data,msg)

Add an entry to `trace` with sequence number `seq`, `data` and `msg`. If `trace` is NULL, the entry will be added to the default GstTrace.

`trace` : | a GstTrace
`seq` : | a sequence number
`data` : | the data to trace
`msg` : | the trace message

### gst_trace_get_size()

    #define 	gst_trace_get_size(trace) 	((trace)->bufsize)

Retrieve the buffer size of `trace`.

`trace` : | a GstTrace

### gst_trace_get_offset()

    #define 	gst_trace_get_offset(trace) 	((trace)->bufoffset)

Retrieve the current buffer offset of `trace`.

`trace` : | a GstTrace

### gst_trace_get_remaining()

    #define 	gst_trace_get_remaining(trace) 	((trace)->bufsize - (trace)->bufoffset)

Retrieve the remaining size in the `trace` buffer.

`trace` : | a GstTrace

### gst_trace_set_default ()

    void                gst_trace_set_default               (GstTrace *trace);

Set the default GstTrace to `trace`.

`trace` : | the GstTrace to set as the default.

### gst_trace_read_tsc ()

    void                gst_trace_read_tsc                  (gint64 *dst);

Read a platform independent timer value that can be used in benchmarks.

`dst` : | (out) pointer to hold the result.

### enum GstAllocTraceFlags

    typedef enum {
      GST_ALLOC_TRACE_NONE      = 0,
      GST_ALLOC_TRACE_LIVE      = (1 << 0),
      GST_ALLOC_TRACE_MEM_LIVE = (1 << 1)
    } GstAllocTraceFlags;

Flags indicating which tracing feature to enable.

`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.

### struct GstAllocTrace

    struct GstAllocTrace {
      gchar		*name;
      gint		 flags;

      gint		 live;
      GSList *mem_live;
    };

The main tracing object

gchar *`name`; | The name of the tracing object
gint `flags`; | Flags for this object
gint `live`; | counter for live memory
GSList *`mem_live`; | list with pointers to unfreed memory

### gst_alloc_trace_available ()

    gboolean            gst_alloc_trace_available           (void);

Check if alloc tracing was compiled into the core

Returns : | TRUE if the core was compiled with alloc tracing enabled.

### gst_alloc_trace_list ()

    const GList *       gst_alloc_trace_list                (void);

Get a list of all registered alloc trace objects.

Returns : | a GList of GstAllocTrace objects.

### gst_alloc_trace_live_all ()

    int                 gst_alloc_trace_live_all            (void);

Get the total number of live registered alloc trace objects.

Returns : | the total number of live registered alloc trace objects.

### gst_alloc_trace_print_all ()

    void                gst_alloc_trace_print_all           (void);

Print the status of all registered alloc trace objects.

### gst_alloc_trace_set_flags_all ()

    void                gst_alloc_trace_set_flags_all       (GstAllocTraceFlags flags);

Enable the specified options on all registered alloc trace objects.

`flags` : | the options to enable

### gst_alloc_trace_get ()

    GstAllocTrace *     gst_alloc_trace_get                 (const gchar *name);

Get the named alloc trace object.

`name` : | the name of the alloc trace object
Returns : | a GstAllocTrace with the given name or NULL when no alloc tracer was registered with that name.

### gst_alloc_trace_print ()

    void                gst_alloc_trace_print               (const GstAllocTrace *trace);

Print the status of the given GstAllocTrace.

`trace` : | the GstAllocTrace to print

### gst_alloc_trace_print_live ()

    void                gst_alloc_trace_print_live          (void);

Print the status of all registered alloc trace objects, ignoring those without live objects.

### gst_alloc_trace_set_flags ()

    void                gst_alloc_trace_set_flags           (GstAllocTrace *trace,
                                                             GstAllocTraceFlags flags);

Enable the given features on the given GstAllocTrace object.

`trace` : | the GstAllocTrace
`flags` : | flags to set

### gst_alloc_trace_register()

    #define gst_alloc_trace_register(name) _gst_alloc_trace_register (name);

Register a new alloc tracer with the given name

`name` : | The name of the tracer object

### gst_alloc_trace_new()

    #define             gst_alloc_trace_new(trace, mem)

Use the tracer to trace a new memory allocation

`trace` : | The tracer to use
`mem` : | The memory allocated

### gst_alloc_trace_free()

    #define             gst_alloc_trace_free(trace, mem)

Trace a memory free operation

`trace` : | The tracer to use
`mem` : | The memory that is freed