mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +00:00
libsysprof-capture: add stats to reader when possible
We can also back-fill these when reading a capture file.
This commit is contained in:
@ -46,6 +46,8 @@ struct _SysprofCaptureReader
|
|||||||
gint endian;
|
gint endian;
|
||||||
SysprofCaptureFileHeader header;
|
SysprofCaptureFileHeader header;
|
||||||
gint64 end_time;
|
gint64 end_time;
|
||||||
|
SysprofCaptureStat st_buf;
|
||||||
|
guint st_buf_set : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -955,3 +957,33 @@ sysprof_capture_reader_copy (SysprofCaptureReader *self)
|
|||||||
|
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sysprof_capture_reader_set_stat (SysprofCaptureReader *self,
|
||||||
|
const SysprofCaptureStat *st_buf)
|
||||||
|
{
|
||||||
|
g_return_if_fail (self != NULL);
|
||||||
|
|
||||||
|
if (st_buf != NULL)
|
||||||
|
{
|
||||||
|
self->st_buf = *st_buf;
|
||||||
|
self->st_buf_set = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memset (&self->st_buf, 0, sizeof (self->st_buf));
|
||||||
|
self->st_buf_set = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
sysprof_capture_reader_get_stat (SysprofCaptureReader *self,
|
||||||
|
SysprofCaptureStat *st_buf)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (self != NULL, FALSE);
|
||||||
|
|
||||||
|
if (st_buf != NULL)
|
||||||
|
*st_buf = self->st_buf;
|
||||||
|
|
||||||
|
return self->st_buf_set;
|
||||||
|
}
|
||||||
|
|||||||
@ -85,6 +85,12 @@ SYSPROF_AVAILABLE_IN_ALL
|
|||||||
gboolean sysprof_capture_reader_save_as (SysprofCaptureReader *self,
|
gboolean sysprof_capture_reader_save_as (SysprofCaptureReader *self,
|
||||||
const gchar *filename,
|
const gchar *filename,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
|
gboolean sysprof_capture_reader_get_stat (SysprofCaptureReader *self,
|
||||||
|
SysprofCaptureStat *st_buf);
|
||||||
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
|
void sysprof_capture_reader_set_stat (SysprofCaptureReader *self,
|
||||||
|
const SysprofCaptureStat *st_buf);
|
||||||
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (SysprofCaptureReader, sysprof_capture_reader_unref)
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (SysprofCaptureReader, sysprof_capture_reader_unref)
|
||||||
|
|
||||||
|
|||||||
@ -58,6 +58,19 @@ typedef struct _SysprofCaptureCondition SysprofCaptureCondition;
|
|||||||
|
|
||||||
typedef guint64 SysprofCaptureAddress;
|
typedef guint64 SysprofCaptureAddress;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The number of frames indexed by SysprofCaptureFrameType
|
||||||
|
*/
|
||||||
|
gsize frame_count[16];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Padding for future expansion.
|
||||||
|
*/
|
||||||
|
gsize padding[48];
|
||||||
|
} SysprofCaptureStat;
|
||||||
|
|
||||||
typedef union
|
typedef union
|
||||||
{
|
{
|
||||||
gint64 v64;
|
gint64 v64;
|
||||||
|
|||||||
@ -1012,6 +1012,7 @@ SysprofCaptureReader *
|
|||||||
sysprof_capture_writer_create_reader (SysprofCaptureWriter *self,
|
sysprof_capture_writer_create_reader (SysprofCaptureWriter *self,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
|
SysprofCaptureReader *ret;
|
||||||
int copy;
|
int copy;
|
||||||
|
|
||||||
g_return_val_if_fail (self != NULL, NULL);
|
g_return_val_if_fail (self != NULL, NULL);
|
||||||
@ -1033,7 +1034,10 @@ sysprof_capture_writer_create_reader (SysprofCaptureWriter *self,
|
|||||||
if (-1 == (copy = dup (self->fd)))
|
if (-1 == (copy = dup (self->fd)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return sysprof_capture_reader_new_from_fd (copy, error);
|
if ((ret = sysprof_capture_reader_new_from_fd (copy, error)))
|
||||||
|
sysprof_capture_reader_set_stat (ret, &self->stat);
|
||||||
|
|
||||||
|
return g_steal_pointer (&ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -27,19 +27,6 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
typedef struct _SysprofCaptureWriter SysprofCaptureWriter;
|
typedef struct _SysprofCaptureWriter SysprofCaptureWriter;
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The number of frames indexed by SysprofCaptureFrameType
|
|
||||||
*/
|
|
||||||
gsize frame_count[16];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Padding for future expansion.
|
|
||||||
*/
|
|
||||||
gsize padding[48];
|
|
||||||
} SysprofCaptureStat;
|
|
||||||
|
|
||||||
SYSPROF_AVAILABLE_IN_ALL
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
SysprofCaptureWriter *sysprof_capture_writer_new_from_env (gsize buffer_size);
|
SysprofCaptureWriter *sysprof_capture_writer_new_from_env (gsize buffer_size);
|
||||||
SYSPROF_AVAILABLE_IN_ALL
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
|
|||||||
Reference in New Issue
Block a user