mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +00:00
libsysprof-capture: add mark and log variants
This commit is contained in:
@ -116,10 +116,10 @@ _do_getcpu (void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline gsize
|
||||||
_realign (gsize *pos)
|
realign (gsize size)
|
||||||
{
|
{
|
||||||
*pos = (*pos + SYSPROF_CAPTURE_ALIGN - 1) & ~(SYSPROF_CAPTURE_ALIGN - 1);
|
return (size + SYSPROF_CAPTURE_ALIGN - 1) & ~(SYSPROF_CAPTURE_ALIGN - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MappedRingBuffer *
|
static MappedRingBuffer *
|
||||||
@ -372,3 +372,85 @@ sysprof_collector_sample (SysprofBacktraceFunc backtrace_func,
|
|||||||
|
|
||||||
} COLLECTOR_END;
|
} COLLECTOR_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sysprof_collector_mark (gint64 time,
|
||||||
|
gint64 duration,
|
||||||
|
const gchar *group,
|
||||||
|
const gchar *mark,
|
||||||
|
const gchar *message)
|
||||||
|
{
|
||||||
|
COLLECTOR_BEGIN {
|
||||||
|
SysprofCaptureMark *ev;
|
||||||
|
gsize len;
|
||||||
|
gsize sl;
|
||||||
|
|
||||||
|
if (group == NULL)
|
||||||
|
group = "";
|
||||||
|
|
||||||
|
if (mark == NULL)
|
||||||
|
mark = "";
|
||||||
|
|
||||||
|
if (message == NULL)
|
||||||
|
message = "";
|
||||||
|
|
||||||
|
sl = strlen (message);
|
||||||
|
len = realign (sizeof *ev + sl + 1);
|
||||||
|
|
||||||
|
if ((ev = mapped_ring_buffer_allocate (collector->buffer, len)))
|
||||||
|
{
|
||||||
|
ev->frame.len = len;
|
||||||
|
ev->frame.type = SYSPROF_CAPTURE_FRAME_MARK;
|
||||||
|
ev->frame.cpu = _do_getcpu ();
|
||||||
|
ev->frame.pid = collector->pid;
|
||||||
|
ev->frame.time = time;
|
||||||
|
ev->duration = duration;
|
||||||
|
g_strlcpy (ev->group, group, sizeof ev->group);
|
||||||
|
g_strlcpy (ev->name, message, sizeof ev->name);
|
||||||
|
memcpy (ev->message, message, sl);
|
||||||
|
ev->message[sl] = 0;
|
||||||
|
|
||||||
|
mapped_ring_buffer_advance (collector->buffer, ev->frame.len);
|
||||||
|
}
|
||||||
|
|
||||||
|
} COLLECTOR_END;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sysprof_collector_log (GLogLevelFlags severity,
|
||||||
|
const gchar *domain,
|
||||||
|
const gchar *message)
|
||||||
|
{
|
||||||
|
COLLECTOR_BEGIN {
|
||||||
|
SysprofCaptureLog *ev;
|
||||||
|
gsize len;
|
||||||
|
gsize sl;
|
||||||
|
|
||||||
|
if (domain == NULL)
|
||||||
|
domain = "";
|
||||||
|
|
||||||
|
if (message == NULL)
|
||||||
|
message = "";
|
||||||
|
|
||||||
|
sl = strlen (message);
|
||||||
|
len = realign (sizeof *ev + sl + 1);
|
||||||
|
|
||||||
|
if ((ev = mapped_ring_buffer_allocate (collector->buffer, len)))
|
||||||
|
{
|
||||||
|
ev->frame.len = len;
|
||||||
|
ev->frame.type = SYSPROF_CAPTURE_FRAME_LOG;
|
||||||
|
ev->frame.cpu = _do_getcpu ();
|
||||||
|
ev->frame.pid = collector->pid;
|
||||||
|
ev->frame.time = SYSPROF_CAPTURE_CURRENT_TIME;
|
||||||
|
ev->severity = severity & 0xFFFF;
|
||||||
|
ev->padding1 = 0;
|
||||||
|
ev->padding2 = 0;
|
||||||
|
g_strlcpy (ev->domain, domain, sizeof ev->domain);
|
||||||
|
memcpy (ev->message, message, sl);
|
||||||
|
ev->message[sl] = 0;
|
||||||
|
|
||||||
|
mapped_ring_buffer_advance (collector->buffer, ev->frame.len);
|
||||||
|
}
|
||||||
|
|
||||||
|
} COLLECTOR_END;
|
||||||
|
}
|
||||||
|
|||||||
@ -62,14 +62,24 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
SYSPROF_AVAILABLE_IN_3_36
|
SYSPROF_AVAILABLE_IN_3_36
|
||||||
void sysprof_collector_init (void);
|
void sysprof_collector_init (void);
|
||||||
SYSPROF_AVAILABLE_IN_3_36
|
SYSPROF_AVAILABLE_IN_3_36
|
||||||
void sysprof_collector_allocate (SysprofCaptureAddress alloc_addr,
|
void sysprof_collector_allocate (SysprofCaptureAddress alloc_addr,
|
||||||
gint64 alloc_size,
|
gint64 alloc_size,
|
||||||
SysprofBacktraceFunc backtrace_func,
|
SysprofBacktraceFunc backtrace_func,
|
||||||
gpointer backtrace_data);
|
gpointer backtrace_data);
|
||||||
SYSPROF_AVAILABLE_IN_3_36
|
SYSPROF_AVAILABLE_IN_3_36
|
||||||
void sysprof_collector_sample (SysprofBacktraceFunc backtrace_func,
|
void sysprof_collector_sample (SysprofBacktraceFunc backtrace_func,
|
||||||
gpointer backtrace_data);
|
gpointer backtrace_data);
|
||||||
|
SYSPROF_AVAILABLE_IN_3_36
|
||||||
|
void sysprof_collector_mark (gint64 time,
|
||||||
|
gint64 duration,
|
||||||
|
const gchar *group,
|
||||||
|
const gchar *mark,
|
||||||
|
const gchar *message);
|
||||||
|
SYSPROF_AVAILABLE_IN_3_36
|
||||||
|
void sysprof_collector_log (GLogLevelFlags severity,
|
||||||
|
const gchar *domain,
|
||||||
|
const gchar *message);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
Reference in New Issue
Block a user