mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof-capture: add mark and log variants
This commit is contained in:
@ -116,10 +116,10 @@ _do_getcpu (void)
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void
|
||||
_realign (gsize *pos)
|
||||
static inline gsize
|
||||
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 *
|
||||
@ -372,3 +372,85 @@ sysprof_collector_sample (SysprofBacktraceFunc backtrace_func,
|
||||
|
||||
} 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
|
||||
|
||||
SYSPROF_AVAILABLE_IN_3_36
|
||||
void sysprof_collector_init (void);
|
||||
void sysprof_collector_init (void);
|
||||
SYSPROF_AVAILABLE_IN_3_36
|
||||
void sysprof_collector_allocate (SysprofCaptureAddress alloc_addr,
|
||||
gint64 alloc_size,
|
||||
SysprofBacktraceFunc backtrace_func,
|
||||
gpointer backtrace_data);
|
||||
void sysprof_collector_allocate (SysprofCaptureAddress alloc_addr,
|
||||
gint64 alloc_size,
|
||||
SysprofBacktraceFunc backtrace_func,
|
||||
gpointer backtrace_data);
|
||||
SYSPROF_AVAILABLE_IN_3_36
|
||||
void sysprof_collector_sample (SysprofBacktraceFunc backtrace_func,
|
||||
gpointer backtrace_data);
|
||||
void sysprof_collector_sample (SysprofBacktraceFunc backtrace_func,
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user