summaryrefslogtreecommitdiff
path: root/endless/eosinit.c
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/eosinit.c
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/eosinit.c')
-rw-r--r--endless/eosinit.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/endless/eosinit.c b/endless/eosinit.c
index 19d6d9b..f5c6185 100644
--- a/endless/eosinit.c
+++ b/endless/eosinit.c
@@ -6,13 +6,14 @@
#include "endless.h"
#include "eosinit-private.h"
+#include "eosprofile-private.h"
/* Constructors supported since GCC 2.7; I have this on GLib's authority. This
should also work on Clang. */
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
#define _EOS_CONSTRUCTOR(func) static void __attribute__((constructor)) func (void);
-#define _EOS_DESTRUCTOR(func) static void __atrribute__((destructor)) func (void);
+#define _EOS_DESTRUCTOR(func) static void __attribute__((destructor)) func (void);
#else
@@ -38,10 +39,19 @@ _eos_init (void)
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ eos_profile_state_init ();
+
_eos_initialized = TRUE;
}
}
+_EOS_DESTRUCTOR(_eos_fini);
+static void
+_eos_fini (void)
+{
+ eos_profile_state_dump ();
+}
+
/*
* eos_is_inited:
*