[Cogl] [PATCH] profile: Print warning if "Mainloop" timer missing
Robert Bragg
robert at sixbynine.org
Tue Aug 28 08:51:16 PDT 2012
From: Robert Bragg <robert at linux.intel.com>
As a helpful aid Cogl will now print a warning if no "Mainloop" UProf
timer was setup by the application that explains that either Clutter
should be built with --enable-profile or if Clutter isn't being used
then it shows how it can create its own Mainloop timer.
---
cogl/cogl-profile.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 43 insertions(+), 1 deletions(-)
diff --git a/cogl/cogl-profile.c b/cogl/cogl-profile.c
index f552b63..042fb78 100644
--- a/cogl/cogl-profile.c
+++ b/cogl/cogl-profile.c
@@ -35,7 +35,48 @@ print_exit_report (void)
{
if (getenv ("COGL_PROFILE_OUTPUT_REPORT"))
{
- UProfReport *report = uprof_report_new ("Cogl report");
+ UProfContext *mainloop_context;
+ UProfTimerResult *mainloop_timer;
+ UProfReport *report;
+
+ /* NB: uprof provides a shared context for mainloop statistics
+ * which needs to be setup by the application which controls the
+ * mainloop.
+ *
+ * If no "Mainloop" timer has been setup then we print a warning
+ * since we can't provide a meaningful Cogl report without one.
+ */
+ mainloop_context = uprof_get_mainloop_context ();
+ mainloop_timer = uprof_context_get_timer_result (mainloop_context,
+ "Mainloop");
+ /* just bail out if the mainloop timer wasn't hit */
+ if (!mainloop_timer)
+ {
+ g_warning ("\n\n"
+ "No UProf \"Mainloop\" timer was setup by the "
+ "application therefore we\ncan't provide a meaningful "
+ "profile report.\n"
+ "\n"
+ "This should be done automatically if you are using Clutter "
+ "(if\nbuilt with --enable-profile)\n"
+ "\n"
+ "If you aren't using Clutter then you can declare a "
+ "\"Mainloop\" UProf\ntimer in your application like this:\n\n"
+ " UPROF_STATIC_TIMER (mainloop_timer, \n"
+ " NULL,\n"
+ " \"Mainloop\",\n"
+ " \"Time in glib mainloop\",\n"
+ " 0);\n"
+ "\n"
+ "And start/stop it around your mainloop like this:\n"
+ "\n"
+ " UPROF_TIMER_START (uprof_get_mainloop_context (), mainloop_timer);\n"
+ " g_main_loop_run (loop);\n"
+ " UPROF_TIMER_STOP (uprof_get_mainloop_context (), mainloop_timer);\n");
+ return;
+ }
+
+ report = uprof_report_new ("Cogl report");
uprof_report_add_context (report, _cogl_uprof_context);
uprof_report_print (report);
uprof_report_unref (report);
@@ -47,6 +88,7 @@ void
_cogl_uprof_init (void)
{
_cogl_uprof_context = uprof_context_new ("Cogl");
+ uprof_context_link (_cogl_uprof_context, uprof_get_mainloop_context ());
#define OPT(MASK_NAME, GROUP, NAME, NAME_FORMATTED, DESCRIPTION) \
G_STMT_START { \
int shift = COGL_DEBUG_ ## MASK_NAME; \
--
1.7.7.6
More information about the Cogl
mailing list