summaryrefslogtreecommitdiff
path: root/endless/eosprofile-private.h
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2017-09-19 17:31:27 +0100
committerP. F. Chimento <philip.chimento@gmail.com>2018-01-10 10:28:35 -0800
commit9febff20c71f7112a3652cba81d41b260c178716 (patch)
tree0dbd26c56b7d0539c6d0559268f4a4bbf36f86d8 /endless/eosprofile-private.h
parent06bb46430f71fe89d63c0e57cd733a448b07c695 (diff)
Add initial infrastructure for Profiling
The EosProfileProbe API allows defining profiling probes that can be used to efficiently measure the time spent in a critical section. The Profiling API is meant to collect samples and generate a report at the end of the lifetime of the process, either by printing out the results once the process terminates; or by saving the raw data in a binary file that can be loaded at a later date. This profiling API is meant to be as close as possible to a zero cost abstraction: - probes are only allocated if profiling is enabled - all profiling API is a no-op if profiling isn't enabled - the C API is meant to be easily tied to a scope, through the use of auto-cleanup macros provided by GLib This allows projects using the Endless SDK to keep the profiling probes in place, instead of conditionally compile them in. https://phabricator.endlessm.com/T18514
Diffstat (limited to 'endless/eosprofile-private.h')
-rw-r--r--endless/eosprofile-private.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/endless/eosprofile-private.h b/endless/eosprofile-private.h
new file mode 100644
index 0000000..a07de0e
--- /dev/null
+++ b/endless/eosprofile-private.h
@@ -0,0 +1,36 @@
+/* Copyright 2017 Endless */
+
+#pragma once
+
+#include "eosprofile.h"
+
+G_BEGIN_DECLS
+
+/* Increase every time the probe format changes */
+#define PROBE_DB_VERSION 1
+
+#define PROBE_DB_META_BASE_KEY "/com/endlessm/Sdk/meta"
+#define PROBE_DB_META_VERSION_KEY PROBE_DB_META_BASE_KEY "/db_version"
+
+typedef struct {
+ GHashTable *probes;
+
+ gboolean capture;
+ char *capture_file;
+} ProfileState;
+
+G_LOCK_DEFINE_STATIC (profile_state);
+static ProfileState *profile_state;
+
+typedef struct {
+ gint64 start_time;
+ gint64 end_time;
+} ProfileSample;
+
+void
+eos_profile_state_init (void);
+
+void
+eos_profile_state_dump (void);
+
+G_END_DECLS