mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof: create hook for supplemental writer data
This commit is contained in:
@ -185,12 +185,23 @@ static void
|
|||||||
sysprof_local_profiler_finish_stopping (SysprofLocalProfiler *self)
|
sysprof_local_profiler_finish_stopping (SysprofLocalProfiler *self)
|
||||||
{
|
{
|
||||||
SysprofLocalProfilerPrivate *priv = sysprof_local_profiler_get_instance_private (self);
|
SysprofLocalProfilerPrivate *priv = sysprof_local_profiler_get_instance_private (self);
|
||||||
|
g_autoptr(SysprofCaptureReader) reader = NULL;
|
||||||
|
|
||||||
g_assert (SYSPROF_IS_LOCAL_PROFILER (self));
|
g_assert (SYSPROF_IS_LOCAL_PROFILER (self));
|
||||||
g_assert (priv->is_starting == FALSE);
|
g_assert (priv->is_starting == FALSE);
|
||||||
g_assert (priv->is_stopping == TRUE);
|
g_assert (priv->is_stopping == TRUE);
|
||||||
g_assert (priv->stopping->len == 0);
|
g_assert (priv->stopping->len == 0);
|
||||||
|
|
||||||
|
reader = sysprof_capture_writer_create_reader (priv->writer, 0);
|
||||||
|
|
||||||
|
for (guint i = 0; i < priv->sources->len; i++)
|
||||||
|
{
|
||||||
|
SysprofSource *source = g_ptr_array_index (priv->sources, i);
|
||||||
|
|
||||||
|
sysprof_capture_reader_reset (reader);
|
||||||
|
sysprof_source_supplement (source, reader);
|
||||||
|
}
|
||||||
|
|
||||||
if (priv->failures->len > 0)
|
if (priv->failures->len > 0)
|
||||||
{
|
{
|
||||||
const GError *error = g_ptr_array_index (priv->failures, 0);
|
const GError *error = g_ptr_array_index (priv->failures, 0);
|
||||||
|
|||||||
@ -178,3 +178,14 @@ sysprof_source_deserialize (SysprofSource *self,
|
|||||||
if (SYSPROF_SOURCE_GET_IFACE (self)->deserialize)
|
if (SYSPROF_SOURCE_GET_IFACE (self)->deserialize)
|
||||||
SYSPROF_SOURCE_GET_IFACE (self)->deserialize (self, keyfile, group);
|
SYSPROF_SOURCE_GET_IFACE (self)->deserialize (self, keyfile, group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sysprof_source_supplement (SysprofSource *self,
|
||||||
|
SysprofCaptureReader *reader)
|
||||||
|
{
|
||||||
|
g_return_if_fail (SYSPROF_IS_SOURCE (self));
|
||||||
|
g_return_if_fail (reader != NULL);
|
||||||
|
|
||||||
|
if (SYSPROF_SOURCE_GET_IFACE (self)->supplement)
|
||||||
|
SYSPROF_SOURCE_GET_IFACE (self)->supplement (self, reader);
|
||||||
|
}
|
||||||
|
|||||||
@ -133,6 +133,20 @@ struct _SysprofSourceInterface
|
|||||||
GSubprocessLauncher *launcher,
|
GSubprocessLauncher *launcher,
|
||||||
GPtrArray *argv);
|
GPtrArray *argv);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SysprofSource::supplement:
|
||||||
|
*
|
||||||
|
* The "supplement" vfunc is called when a source should attempt to add
|
||||||
|
* any additional data to the trace file based on existing data within
|
||||||
|
* the trace file. A #SysprofCaptureReader is provided to simplify this
|
||||||
|
* process for the vfunc. It should write to the writer provided in
|
||||||
|
* sysprof_source_set_writer().
|
||||||
|
*
|
||||||
|
* This function must finish synchronously.
|
||||||
|
*/
|
||||||
|
void (*supplement) (SysprofSource *self,
|
||||||
|
SysprofCaptureReader *reader);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SysprofSource::serialize:
|
* SysprofSource::serialize:
|
||||||
* @self: a #SysprofSource
|
* @self: a #SysprofSource
|
||||||
@ -192,5 +206,8 @@ SYSPROF_AVAILABLE_IN_ALL
|
|||||||
void sysprof_source_deserialize (SysprofSource *self,
|
void sysprof_source_deserialize (SysprofSource *self,
|
||||||
GKeyFile *keyfile,
|
GKeyFile *keyfile,
|
||||||
const gchar *group);
|
const gchar *group);
|
||||||
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
|
void sysprof_source_supplement (SysprofSource *self,
|
||||||
|
SysprofCaptureReader *reader);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
Reference in New Issue
Block a user