From 75cf8450b3628b4225355f48ef7a9e23c681caae Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 14 Nov 2024 13:51:13 +0100 Subject: [PATCH 1/2] sysprof: Use sysprof_document_mark_get_end_time It does exactly what this line of code does already. --- src/sysprof/sysprof-session.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sysprof/sysprof-session.c b/src/sysprof/sysprof-session.c index 930ad2fc..4a571a12 100644 --- a/src/sysprof/sysprof-session.c +++ b/src/sysprof/sysprof-session.c @@ -547,7 +547,7 @@ _sysprof_session_describe (SysprofSession *self, const char *message = sysprof_document_mark_get_message (mark); SysprofTimeSpan span = { .begin_nsec = sysprof_document_frame_get_time (item), - .end_nsec = sysprof_document_frame_get_time (item) + sysprof_document_mark_get_duration (mark), + .end_nsec = sysprof_document_mark_get_end_time (mark), }; span = sysprof_time_span_relative_to (span, begin->begin_nsec); From 33b010f92b4ec08986235161ec2d446c80f907d6 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 14 Nov 2024 13:52:29 +0100 Subject: [PATCH 2/2] libsysprof: Show mark duration in tooltip This helps (a lot!) with the Waterfall view. In fact, I cannot think of a situation where knowing the duration (in addition to the start and end times) won't help. --- src/libsysprof/sysprof-document-mark.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/libsysprof/sysprof-document-mark.c b/src/libsysprof/sysprof-document-mark.c index 66698fe6..edd1c7a2 100644 --- a/src/libsysprof/sysprof-document-mark.c +++ b/src/libsysprof/sysprof-document-mark.c @@ -24,6 +24,7 @@ #include "sysprof-document-frame-private.h" #include "sysprof-document-mark.h" +#include "sysprof-time-span.h" struct _SysprofDocumentMark { @@ -50,18 +51,38 @@ G_DEFINE_FINAL_TYPE (SysprofDocumentMark, sysprof_document_mark, SYSPROF_TYPE_DO static GParamSpec *properties [N_PROPS]; +static char * +get_time_str (gint64 o) +{ + char str[32]; + + if (o == 0) + g_snprintf (str, sizeof str, "%.3lf s", .0); + else if (o < 1000000) + g_snprintf (str, sizeof str, "%.3lf μs", o/1000.); + else if (o < SYSPROF_NSEC_PER_SEC) + g_snprintf (str, sizeof str, "%.3lf ms", o/1000000.); + else + g_snprintf (str, sizeof str, "%.3lf s", o/(double)SYSPROF_NSEC_PER_SEC); + + return g_strdup (str); +} + static char * sysprof_document_mark_dup_tooltip (SysprofDocumentFrame *frame) { SysprofDocumentMark *self = (SysprofDocumentMark *)frame; + g_autofree char *duration_string = NULL; g_autofree char *time_string = NULL; g_assert (SYSPROF_IS_DOCUMENT_MARK (self)); time_string = sysprof_document_frame_dup_time_string (SYSPROF_DOCUMENT_FRAME (self)); + duration_string = get_time_str (sysprof_document_mark_get_duration (self)); - return g_strdup_printf ("%s: %s: %s: %s", + return g_strdup_printf ("%s (%s): %s / %s: %s", time_string, + duration_string, sysprof_document_mark_get_group (self), sysprof_document_mark_get_name (self), sysprof_document_mark_get_message (self));