mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +00:00
capture: add sp_capture_reader_peek_frame()
It can be useful to peek at the whole frame header (for things like time or pid or cpu).
This commit is contained in:
@ -277,26 +277,42 @@ sp_capture_reader_skip (SpCaptureReader *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
sp_capture_reader_peek_type (SpCaptureReader *self,
|
sp_capture_reader_peek_frame (SpCaptureReader *self,
|
||||||
SpCaptureFrameType *type)
|
SpCaptureFrame *frame)
|
||||||
{
|
{
|
||||||
SpCaptureFrame *frame;
|
SpCaptureFrame *real_frame;
|
||||||
|
|
||||||
g_assert (self != NULL);
|
g_assert (self != NULL);
|
||||||
g_assert ((self->pos % SP_CAPTURE_ALIGN) == 0);
|
g_assert ((self->pos % SP_CAPTURE_ALIGN) == 0);
|
||||||
g_assert (self->pos <= self->bufsz);
|
g_assert (self->pos <= self->bufsz);
|
||||||
g_assert (type != NULL);
|
|
||||||
|
|
||||||
*type = 0;
|
if (!sp_capture_reader_ensure_space_for (self, sizeof *real_frame))
|
||||||
|
|
||||||
if (!sp_capture_reader_ensure_space_for (self, sizeof *frame))
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
g_assert ((self->pos % SP_CAPTURE_ALIGN) == 0);
|
g_assert ((self->pos % SP_CAPTURE_ALIGN) == 0);
|
||||||
|
|
||||||
frame = (SpCaptureFrame *)(gpointer)&self->buf[self->pos];
|
real_frame = (SpCaptureFrame *)(gpointer)&self->buf[self->pos];
|
||||||
|
|
||||||
*type = frame->type;
|
*frame = *real_frame;
|
||||||
|
|
||||||
|
sp_capture_reader_bswap_frame (self, frame);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
sp_capture_reader_peek_type (SpCaptureReader *self,
|
||||||
|
SpCaptureFrameType *type)
|
||||||
|
{
|
||||||
|
SpCaptureFrame frame;
|
||||||
|
|
||||||
|
g_assert (self != NULL);
|
||||||
|
g_assert (type != NULL);
|
||||||
|
|
||||||
|
if (!sp_capture_reader_peek_frame (self, &frame))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*type = frame.type;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,6 +37,8 @@ gint64 sp_capture_reader_get_start_time (SpCapt
|
|||||||
gboolean sp_capture_reader_skip (SpCaptureReader *self);
|
gboolean sp_capture_reader_skip (SpCaptureReader *self);
|
||||||
gboolean sp_capture_reader_peek_type (SpCaptureReader *self,
|
gboolean sp_capture_reader_peek_type (SpCaptureReader *self,
|
||||||
SpCaptureFrameType *type);
|
SpCaptureFrameType *type);
|
||||||
|
gboolean sp_capture_reader_peek_frame (SpCaptureReader *self,
|
||||||
|
SpCaptureFrame *frame);
|
||||||
const SpCaptureMap *sp_capture_reader_read_map (SpCaptureReader *self);
|
const SpCaptureMap *sp_capture_reader_read_map (SpCaptureReader *self);
|
||||||
const SpCaptureExit *sp_capture_reader_read_exit (SpCaptureReader *self);
|
const SpCaptureExit *sp_capture_reader_read_exit (SpCaptureReader *self);
|
||||||
const SpCaptureFork *sp_capture_reader_read_fork (SpCaptureReader *self);
|
const SpCaptureFork *sp_capture_reader_read_fork (SpCaptureReader *self);
|
||||||
|
|||||||
Reference in New Issue
Block a user