From e853c79be9a38ba8abed0f714fcaca5c584192cd Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Tue, 15 May 2018 16:32:42 +0100 Subject: [PATCH] mark: add group to mark event This allows grouping marks together so that the UI can present marks within the same group in the same visualizer row. The goal here is that our perf stream with drm data will have "drm" or some similar group name (resulting in one row). mutter/cogl/gnome-shell will use the thread-id as the group name (or something else that is useful) so their events are grouped together. gdk-wayland might have it's own group name as well. The end result is that we can get a mark row for each series of related data. --- lib/capture/sp-capture-types.h | 5 +++-- lib/capture/sp-capture-writer.c | 5 ++++- lib/capture/sp-capture-writer.h | 1 + tests/test-capture.c | 6 ++++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/capture/sp-capture-types.h b/lib/capture/sp-capture-types.h index 8c169210..ed438665 100644 --- a/lib/capture/sp-capture-types.h +++ b/lib/capture/sp-capture-types.h @@ -184,7 +184,8 @@ typedef struct { SpCaptureFrame frame; gint64 duration; - gchar name[32]; + gchar group[24]; + gchar name[40]; gchar message[0]; } SpCaptureMark; @@ -203,7 +204,7 @@ G_STATIC_ASSERT (sizeof (SpCaptureCounter) == 128); G_STATIC_ASSERT (sizeof (SpCaptureCounterValues) == 96); G_STATIC_ASSERT (sizeof (SpCaptureFrameCounterDefine) == 32); G_STATIC_ASSERT (sizeof (SpCaptureFrameCounterSet) == 32); -G_STATIC_ASSERT (sizeof (SpCaptureMark) == 64); +G_STATIC_ASSERT (sizeof (SpCaptureMark) == 96); static inline gint sp_capture_address_compare (SpCaptureAddress a, diff --git a/lib/capture/sp-capture-writer.c b/lib/capture/sp-capture-writer.c index 893b712c..a1fa2205 100644 --- a/lib/capture/sp-capture-writer.c +++ b/lib/capture/sp-capture-writer.c @@ -542,6 +542,7 @@ sp_capture_writer_add_mark (SpCaptureWriter *self, gint cpu, GPid pid, guint64 duration, + const gchar *group, const gchar *name, const gchar *message) { @@ -551,6 +552,7 @@ sp_capture_writer_add_mark (SpCaptureWriter *self, g_assert (self != NULL); g_assert (name != NULL); + g_assert (group != NULL); if (message == NULL) message = ""; @@ -569,7 +571,8 @@ sp_capture_writer_add_mark (SpCaptureWriter *self, SP_CAPTURE_FRAME_MARK); ev->duration = duration; - memcpy (ev->name, name, sizeof ev->name); + g_strlcpy (ev->group, group, sizeof ev->group); + g_strlcpy (ev->name, name, sizeof ev->name); memcpy (ev->message, message, message_len); self->stat.frame_count[SP_CAPTURE_FRAME_MARK]++; diff --git a/lib/capture/sp-capture-writer.h b/lib/capture/sp-capture-writer.h index 0c208e78..18670589 100644 --- a/lib/capture/sp-capture-writer.h +++ b/lib/capture/sp-capture-writer.h @@ -60,6 +60,7 @@ gboolean sp_capture_writer_add_mark (SpCaptureWriter * gint cpu, GPid pid, guint64 duration, + const gchar *group, const gchar *name, const gchar *message); guint64 sp_capture_writer_add_jitmap (SpCaptureWriter *self, diff --git a/tests/test-capture.c b/tests/test-capture.c index ecc88ad5..4e348c16 100644 --- a/tests/test-capture.c +++ b/tests/test-capture.c @@ -543,8 +543,8 @@ test_reader_writer_mark (void) writer = sp_capture_writer_new ("mark1.syscap", 0); - sp_capture_writer_add_mark (writer, SP_CAPTURE_CURRENT_TIME, -1, -1, 125, "Draw", "hdmi-1"); - sp_capture_writer_add_mark (writer, SP_CAPTURE_CURRENT_TIME, -1, -1, 0, "Deadline", "hdmi-1"); + sp_capture_writer_add_mark (writer, SP_CAPTURE_CURRENT_TIME, -1, -1, 125, "thread-0", "Draw", "hdmi-1"); + sp_capture_writer_add_mark (writer, SP_CAPTURE_CURRENT_TIME, -1, -1, 0, "thread-1", "Deadline", "hdmi-1"); g_clear_pointer (&writer, sp_capture_writer_unref); @@ -554,6 +554,7 @@ test_reader_writer_mark (void) mark = sp_capture_reader_read_mark (reader); g_assert_nonnull (mark); + g_assert_cmpstr (mark->group, ==, "thread-0"); g_assert_cmpstr (mark->name, ==, "Draw"); g_assert_cmpint (mark->duration, ==, 125); g_assert_cmpstr (mark->message, ==, "hdmi-1"); @@ -562,6 +563,7 @@ test_reader_writer_mark (void) mark = sp_capture_reader_read_mark (reader); g_assert_nonnull (mark); + g_assert_cmpstr (mark->group, ==, "thread-1"); g_assert_cmpstr (mark->name, ==, "Deadline"); g_assert_cmpint (mark->duration, ==, 0); g_assert_cmpstr (mark->message, ==, "hdmi-1");