diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2017-09-19 17:31:27 +0100 |
---|---|---|
committer | P. F. Chimento <philip.chimento@gmail.com> | 2018-01-10 10:28:35 -0800 |
commit | 9febff20c71f7112a3652cba81d41b260c178716 (patch) | |
tree | 0dbd26c56b7d0539c6d0559268f4a4bbf36f86d8 /endless/eosprofile.h | |
parent | 06bb46430f71fe89d63c0e57cd733a448b07c695 (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.h | 48 |
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 |