[gtk/tracing] Keep the capture writer object around
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/tracing] Keep the capture writer object around
- Date: Thu, 17 May 2018 14:37:22 +0000 (UTC)
commit 7a184ff3f8ea666cf7a87dab6768042fb1b539b5
Author: Matthias Clasen <mclasen redhat com>
Date: Thu May 17 12:09:06 2018 +0100
Keep the capture writer object around
Maintain a separate boolean for the tracer state.
This solves several problems, like not having to
redefine the counters, and not stepping on the same
filename.
gdk/gdkprofiler.c | 63 ++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 42 insertions(+), 21 deletions(-)
---
diff --git a/gdk/gdkprofiler.c b/gdk/gdkprofiler.c
index 7f80f799f0..246b092d16 100644
--- a/gdk/gdkprofiler.c
+++ b/gdk/gdkprofiler.c
@@ -28,7 +28,15 @@
#include "gdkframeclockprivate.h"
static SpCaptureWriter *writer = NULL;
-static int fps_counter;
+static gboolean running = FALSE;
+static int fps_counter = 0;
+
+static void
+profiler_stop (void)
+{
+ if (writer)
+ sp_capture_writer_unref (writer);
+}
void
gdk_profiler_start (void)
@@ -36,6 +44,8 @@ gdk_profiler_start (void)
char *filename;
SpCaptureCounter counter;
+ running = TRUE;
+
if (writer)
return;
@@ -60,30 +70,19 @@ gdk_profiler_start (void)
&counter,
1);
- atexit (gdk_profiler_stop);
+ atexit (profiler_stop);
}
void
gdk_profiler_stop (void)
{
- sp_capture_writer_unref (writer);
- writer = NULL;
+ running = FALSE;
}
gboolean
gdk_profiler_is_running (void)
{
- return writer != NULL;
-}
-
-static void
-add_mark (SpCaptureWriter *writer,
- gint64 start,
- guint64 duration,
- const char *name,
- const char *message)
-{
- sp_capture_writer_add_mark (writer, start, 0, getpid (), duration, "gtk", name, message);
+ return running;
}
void
@@ -92,7 +91,14 @@ gdk_profiler_add_mark (gint64 start,
const char *name,
const char *message)
{
- sp_capture_writer_add_mark (writer, start, 0, getpid (), duration, "gtk", name, message);
+ if (!running)
+ return;
+
+ sp_capture_writer_add_mark (writer,
+ start,
+ -1, getpid (),
+ duration,
+ "gtk", name, message);
}
static gint64
@@ -172,16 +178,31 @@ gdk_profiler_add_frame (GdkFrameClock *clock,
{
SpCaptureCounterValue value;
- if (!writer)
+ if (!running)
return;
- add_mark (writer, timings->frame_time * 1000, (timings->frame_end_time - timings->frame_time) * 1000,
"frame", "");
+ sp_capture_writer_add_mark (writer,
+ timings->frame_time * 1000,
+ -1, getpid (),
+ (timings->frame_end_time - timings->frame_time) * 1000,
+ "gtk", "frame", "");
if (timings->layout_start_time != 0)
- add_mark (writer, timings->layout_start_time * 1000, (timings->paint_start_time -
timings->layout_start_time) * 1000, "layout", "");
+ sp_capture_writer_add_mark (writer,
+ timings->layout_start_time * 1000,
+ -1, getpid (),
+ (timings->paint_start_time - timings->layout_start_time) * 1000,
+ "gtk", "layout", "");
if (timings->paint_start_time != 0)
- add_mark (writer, timings->paint_start_time * 1000, (timings->frame_end_time -
timings->paint_start_time) * 1000, "paint", "");
+ sp_capture_writer_add_mark (writer,
+ timings->paint_start_time * 1000,
+ -1, getpid (),
+ (timings->frame_end_time - timings->paint_start_time) * 1000,
+ "gtk", "paint", "");
value.vdbl = frame_clock_get_fps (clock);
- sp_capture_writer_set_counters (writer, timings->frame_end_time, -1, getpid (), &fps_counter, &value, 1);
+ sp_capture_writer_set_counters (writer,
+ timings->frame_end_time,
+ -1, getpid (),
+ &fps_counter, &value, 1);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]