diff options
| -rw-r--r-- | src/libsysprof-ui/sysprof-capture-view.c | 8 | ||||
| -rw-r--r-- | src/libsysprof-ui/sysprof-marks-model.c | 24 | 
2 files changed, 29 insertions, 3 deletions
| diff --git a/src/libsysprof-ui/sysprof-capture-view.c b/src/libsysprof-ui/sysprof-capture-view.c index 2d36e79b..a7462a35 100644 --- a/src/libsysprof-ui/sysprof-capture-view.c +++ b/src/libsysprof-ui/sysprof-capture-view.c @@ -40,6 +40,7 @@ typedef struct    gint64 end_time;    guint has_samples : 1;    guint has_counters : 1; +  guint has_forks : 1;    guint has_marks : 1;    guint can_replay : 1;  } SysprofCaptureFeatures; @@ -330,6 +331,11 @@ sysprof_capture_view_scan_worker (GTask        *task,                  features.can_replay = TRUE;              }          } +      else if (frame.type == SYSPROF_CAPTURE_FRAME_FORK) +        { +          features.has_forks = TRUE; +          sysprof_capture_reader_read_fork (reader); +        }        else if (frame.type == SYSPROF_CAPTURE_FRAME_MARK)          {            const SysprofCaptureMark *mark; @@ -465,7 +471,7 @@ sysprof_capture_view_scan_finish (SysprofCaptureView  *self,    if (!priv->features.has_samples)      gtk_widget_hide (GTK_WIDGET (priv->callgraph_view)); -  if (!priv->features.has_marks) +  if (!priv->features.has_marks && !priv->features.has_forks)      gtk_widget_hide (GTK_WIDGET (priv->marks_view));    if (!priv->features.has_counters) diff --git a/src/libsysprof-ui/sysprof-marks-model.c b/src/libsysprof-ui/sysprof-marks-model.c index abedb5f2..fa5772af 100644 --- a/src/libsysprof-ui/sysprof-marks-model.c +++ b/src/libsysprof-ui/sysprof-marks-model.c @@ -311,7 +311,8 @@ cursor_foreach_cb (const SysprofCaptureFrame *frame,    g_assert (SYSPROF_IS_MARKS_MODEL (self));    g_assert (frame->type == SYSPROF_CAPTURE_FRAME_MARK ||              frame->type == SYSPROF_CAPTURE_FRAME_CTRSET || -            frame->type == SYSPROF_CAPTURE_FRAME_CTRDEF); +            frame->type == SYSPROF_CAPTURE_FRAME_CTRDEF || +            frame->type == SYSPROF_CAPTURE_FRAME_FORK);    if (frame->type == SYSPROF_CAPTURE_FRAME_MARK)      { @@ -331,6 +332,22 @@ cursor_foreach_cb (const SysprofCaptureFrame *frame,        g_array_append_val (self->items, item);      } +  else if (frame->type == SYSPROF_CAPTURE_FRAME_FORK) +    { +      SysprofCaptureFork *fk = (SysprofCaptureFork *)frame; +      g_autofree gchar *message = g_strdup_printf ("PID: %d, Child PID: %d", frame->pid, fk->child_pid); + +      item.begin_time = frame->time; +      item.end_time = item.begin_time; +      item.group = g_string_chunk_insert_const (self->chunks, "fork"); +      item.name = g_string_chunk_insert_const (self->chunks, "Fork"); +      item.message = g_string_chunk_insert_const (self->chunks, message); +      item.value.v64 = 0; +      item.is_counter = FALSE; +      item.counter_type = 0; + +      g_array_append_val (self->items, item); +    }    else if (frame->type == SYSPROF_CAPTURE_FRAME_CTRDEF)      {        SysprofCaptureCounterDefine *ctrdef = (SysprofCaptureCounterDefine *)frame; @@ -475,7 +492,10 @@ sysprof_marks_model_new_async (SysprofCaptureReader  *reader,      }    else if (kind == SYSPROF_MARKS_MODEL_MARKS)      { -      static const SysprofCaptureFrameType types[] = { SYSPROF_CAPTURE_FRAME_MARK }; +      static const SysprofCaptureFrameType types[] = { +        SYSPROF_CAPTURE_FRAME_MARK, +        SYSPROF_CAPTURE_FRAME_FORK, +      };        c = sysprof_capture_condition_new_where_type_in (G_N_ELEMENTS (types), types);      } | 
