mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof: add file frame with path condition
This commit is contained in:
@ -45,6 +45,7 @@ typedef enum
|
|||||||
SYSPROF_CAPTURE_CONDITION_WHERE_TIME_BETWEEN,
|
SYSPROF_CAPTURE_CONDITION_WHERE_TIME_BETWEEN,
|
||||||
SYSPROF_CAPTURE_CONDITION_WHERE_PID_IN,
|
SYSPROF_CAPTURE_CONDITION_WHERE_PID_IN,
|
||||||
SYSPROF_CAPTURE_CONDITION_WHERE_COUNTER_IN,
|
SYSPROF_CAPTURE_CONDITION_WHERE_COUNTER_IN,
|
||||||
|
SYSPROF_CAPTURE_CONDITION_WHERE_FILE,
|
||||||
} SysprofCaptureConditionType;
|
} SysprofCaptureConditionType;
|
||||||
|
|
||||||
struct _SysprofCaptureCondition
|
struct _SysprofCaptureCondition
|
||||||
@ -63,12 +64,13 @@ struct _SysprofCaptureCondition
|
|||||||
SysprofCaptureCondition *left;
|
SysprofCaptureCondition *left;
|
||||||
SysprofCaptureCondition *right;
|
SysprofCaptureCondition *right;
|
||||||
} and, or;
|
} and, or;
|
||||||
|
gchar *where_file;
|
||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
sysprof_capture_condition_match (const SysprofCaptureCondition *self,
|
sysprof_capture_condition_match (const SysprofCaptureCondition *self,
|
||||||
const SysprofCaptureFrame *frame)
|
const SysprofCaptureFrame *frame)
|
||||||
{
|
{
|
||||||
g_assert (self != NULL);
|
g_assert (self != NULL);
|
||||||
g_assert (frame != NULL);
|
g_assert (frame != NULL);
|
||||||
@ -143,6 +145,12 @@ sysprof_capture_condition_match (const SysprofCaptureCondition *self,
|
|||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
case SYSPROF_CAPTURE_CONDITION_WHERE_FILE:
|
||||||
|
if (frame->type != SYSPROF_CAPTURE_FRAME_FILE_CHUNK)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return g_strcmp0 (((const SysprofCaptureFileChunk *)frame)->path, self->u.where_file) == 0;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -166,11 +174,6 @@ sysprof_capture_condition_init (void)
|
|||||||
SysprofCaptureCondition *
|
SysprofCaptureCondition *
|
||||||
sysprof_capture_condition_copy (const SysprofCaptureCondition *self)
|
sysprof_capture_condition_copy (const SysprofCaptureCondition *self)
|
||||||
{
|
{
|
||||||
SysprofCaptureCondition *copy;
|
|
||||||
|
|
||||||
copy = sysprof_capture_condition_init ();
|
|
||||||
copy->type = self->type;
|
|
||||||
|
|
||||||
switch (self->type)
|
switch (self->type)
|
||||||
{
|
{
|
||||||
case SYSPROF_CAPTURE_CONDITION_AND:
|
case SYSPROF_CAPTURE_CONDITION_AND:
|
||||||
@ -189,7 +192,9 @@ sysprof_capture_condition_copy (const SysprofCaptureCondition *self)
|
|||||||
(const SysprofCaptureFrameType *)(gpointer)self->u.where_type_in->data);
|
(const SysprofCaptureFrameType *)(gpointer)self->u.where_type_in->data);
|
||||||
|
|
||||||
case SYSPROF_CAPTURE_CONDITION_WHERE_TIME_BETWEEN:
|
case SYSPROF_CAPTURE_CONDITION_WHERE_TIME_BETWEEN:
|
||||||
break;
|
return sysprof_capture_condition_new_where_time_between (
|
||||||
|
self->u.where_time_between.begin,
|
||||||
|
self->u.where_time_between.end);
|
||||||
|
|
||||||
case SYSPROF_CAPTURE_CONDITION_WHERE_PID_IN:
|
case SYSPROF_CAPTURE_CONDITION_WHERE_PID_IN:
|
||||||
return sysprof_capture_condition_new_where_pid_in (
|
return sysprof_capture_condition_new_where_pid_in (
|
||||||
@ -201,12 +206,14 @@ sysprof_capture_condition_copy (const SysprofCaptureCondition *self)
|
|||||||
self->u.where_counter_in->len,
|
self->u.where_counter_in->len,
|
||||||
(const guint *)(gpointer)self->u.where_counter_in->data);
|
(const guint *)(gpointer)self->u.where_counter_in->data);
|
||||||
|
|
||||||
|
case SYSPROF_CAPTURE_CONDITION_WHERE_FILE:
|
||||||
|
return sysprof_capture_condition_new_where_file (self->u.where_file);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return copy;
|
g_return_val_if_reached (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -239,6 +246,10 @@ sysprof_capture_condition_finalize (SysprofCaptureCondition *self)
|
|||||||
g_array_free (self->u.where_counter_in, TRUE);
|
g_array_free (self->u.where_counter_in, TRUE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SYSPROF_CAPTURE_CONDITION_WHERE_FILE:
|
||||||
|
g_free (self->u.where_file);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
break;
|
break;
|
||||||
@ -396,3 +407,26 @@ sysprof_capture_condition_new_or (SysprofCaptureCondition *left,
|
|||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sysprof_capture_condition_new_where_file:
|
||||||
|
* @path: a file path to lookup
|
||||||
|
*
|
||||||
|
* Creates a new condition that matches #SysprofCaptureFileChunk frames
|
||||||
|
* which contain the path @path.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): a new #SysprofCaptureCondition
|
||||||
|
*/
|
||||||
|
SysprofCaptureCondition *
|
||||||
|
sysprof_capture_condition_new_where_file (const gchar *path)
|
||||||
|
{
|
||||||
|
SysprofCaptureCondition *self;
|
||||||
|
|
||||||
|
g_return_val_if_fail (path != NULL, NULL);
|
||||||
|
|
||||||
|
self = sysprof_capture_condition_init ();
|
||||||
|
self->type = SYSPROF_CAPTURE_CONDITION_WHERE_FILE;
|
||||||
|
self->u.where_file = g_strdup (path);
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|||||||
@ -50,6 +50,8 @@ SYSPROF_AVAILABLE_IN_ALL
|
|||||||
SysprofCaptureCondition *sysprof_capture_condition_new_where_counter_in (guint n_counters,
|
SysprofCaptureCondition *sysprof_capture_condition_new_where_counter_in (guint n_counters,
|
||||||
const guint *counters);
|
const guint *counters);
|
||||||
SYSPROF_AVAILABLE_IN_ALL
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
|
SysprofCaptureCondition *sysprof_capture_condition_new_where_file (const gchar *path);
|
||||||
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
gboolean sysprof_capture_condition_match (const SysprofCaptureCondition *self,
|
gboolean sysprof_capture_condition_match (const SysprofCaptureCondition *self,
|
||||||
const SysprofCaptureFrame *frame);
|
const SysprofCaptureFrame *frame);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user