mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof-capture: add collector interface for samples
This commit is contained in:
@ -364,3 +364,37 @@ sysprof_collector_allocate (SysprofCaptureAddress alloc_addr,
|
||||
|
||||
} COLLECTOR_END;
|
||||
}
|
||||
|
||||
void
|
||||
sysprof_collector_sample (SysprofBacktraceFunc backtrace_func,
|
||||
gpointer backtrace_data)
|
||||
{
|
||||
COLLECTOR_BEGIN {
|
||||
SysprofCaptureSample *ev;
|
||||
gsize len;
|
||||
|
||||
len = sizeof *ev + (sizeof (SysprofCaptureSample) * MAX_UNWIND_DEPTH);
|
||||
|
||||
if ((ev = mapped_ring_buffer_allocate (collector->buffer, len)))
|
||||
{
|
||||
gint n_addrs;
|
||||
|
||||
/* See comment from sysprof_collector_allocate(). */
|
||||
if (backtrace_func)
|
||||
n_addrs = backtrace_func (ev->addrs, MAX_UNWIND_DEPTH, backtrace_data);
|
||||
else
|
||||
n_addrs = 0;
|
||||
|
||||
ev->n_addrs = CLAMP (n_addrs, 0, MAX_UNWIND_DEPTH);
|
||||
ev->frame.len = sizeof *ev + sizeof (SysprofCaptureAddress) * ev->n_addrs;
|
||||
ev->frame.type = SYSPROF_CAPTURE_FRAME_SAMPLE;
|
||||
ev->frame.cpu = _do_getcpu ();
|
||||
ev->frame.pid = collector->pid;
|
||||
ev->frame.time = SYSPROF_CAPTURE_CURRENT_TIME;
|
||||
ev->tid = collector->tid;
|
||||
|
||||
mapped_ring_buffer_advance (collector->buffer, ev->frame.len);
|
||||
}
|
||||
|
||||
} COLLECTOR_END;
|
||||
}
|
||||
|
||||
@ -68,5 +68,8 @@ void sysprof_collector_allocate (SysprofCaptureAddress
|
||||
gint64 alloc_size,
|
||||
SysprofBacktraceFunc backtrace_func,
|
||||
gpointer backtrace_data);
|
||||
SYSPROF_AVAILABLE_IN_3_36
|
||||
void sysprof_collector_sample (SysprofBacktraceFunc backtrace_func,
|
||||
gpointer backtrace_data);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
Reference in New Issue
Block a user