libsysprof: create hook for supplemental writer data

This commit is contained in:
Christian Hergert
2019-05-27 20:54:41 -07:00
parent 4da55f4267
commit 8a246d4453
3 changed files with 39 additions and 0 deletions

View File

@ -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);

View File

@ -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);
}

View File

@ -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