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)
|
||||
{
|
||||
SysprofLocalProfilerPrivate *priv = sysprof_local_profiler_get_instance_private (self);
|
||||
g_autoptr(SysprofCaptureReader) reader = NULL;
|
||||
|
||||
g_assert (SYSPROF_IS_LOCAL_PROFILER (self));
|
||||
g_assert (priv->is_starting == FALSE);
|
||||
g_assert (priv->is_stopping == TRUE);
|
||||
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)
|
||||
{
|
||||
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)
|
||||
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,
|
||||
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:
|
||||
* @self: a #SysprofSource
|
||||
@ -192,5 +206,8 @@ SYSPROF_AVAILABLE_IN_ALL
|
||||
void sysprof_source_deserialize (SysprofSource *self,
|
||||
GKeyFile *keyfile,
|
||||
const gchar *group);
|
||||
SYSPROF_AVAILABLE_IN_ALL
|
||||
void sysprof_source_supplement (SysprofSource *self,
|
||||
SysprofCaptureReader *reader);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
Reference in New Issue
Block a user