summaryrefslogtreecommitdiff
path: root/endless/eosprofile.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.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.h')
-rw-r--r--endless/eosprofile.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/endless/eosprofile.h b/endless/eosprofile.h
new file mode 100644
index 0000000..9dacb50
--- /dev/null
+++ b/endless/eosprofile.h
@@ -0,0 +1,48 @@
+/* Copyright 2017 Endless Mobile, Inc. */
+
+#pragma once
+
+#if !(defined(_EOS_SDK_INSIDE_ENDLESS_H) || defined(COMPILING_EOS_SDK))
+#error "Please do not include this header file directly."
+#endif
+
+#include "eostypes.h"
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/**
+ * EosProfileProbe:
+ *
+ * An opaque identifier for a profiling probe.
+ *
+ * Since: 0.6
+ */
+typedef struct _EosProfileProbe EosProfileProbe;
+
+/**
+ * EOS_PROFILE_PROBE:
+ * @name: the name of the profiling probe
+ *
+ * A convenience macro that creates a profiling probe at the given
+ * location.
+ *
+ * Since: 0.6
+ */
+#define EOS_PROFILE_PROBE(name) \
+ eos_profile_probe_start (__FILE__, __LINE__, G_STRFUNC, name)
+
+EOS_SDK_AVAILABLE_IN_0_6
+GType eos_profile_probe_get_type (void) G_GNUC_CONST;
+
+EOS_SDK_AVAILABLE_IN_0_6
+EosProfileProbe * eos_profile_probe_start (const char *file,
+ gsize line,
+ const char *function,
+ const char *name);
+EOS_SDK_AVAILABLE_IN_0_6
+void eos_profile_probe_stop (EosProfileProbe *probe);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(EosProfileProbe, eos_profile_probe_stop)
+
+G_END_DECLS