mirror of
https://github.com/brl/mutter.git
synced 2025-02-23 16:34:10 +00:00
profile: Print warning if "Mainloop" timer missing
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. Reviewed-by: Neil Roberts <neil@linux.intel.com> (cherry picked from commit 3d052dbca86bf36f30b2d60ff59b967d14665436)
This commit is contained in:
parent
85efcfac2a
commit
ac72d0685c
@ -35,7 +35,48 @@ print_exit_report (void)
|
|||||||
{
|
{
|
||||||
if (getenv ("COGL_PROFILE_OUTPUT_REPORT"))
|
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_add_context (report, _cogl_uprof_context);
|
||||||
uprof_report_print (report);
|
uprof_report_print (report);
|
||||||
uprof_report_unref (report);
|
uprof_report_unref (report);
|
||||||
@ -47,6 +88,7 @@ void
|
|||||||
_cogl_uprof_init (void)
|
_cogl_uprof_init (void)
|
||||||
{
|
{
|
||||||
_cogl_uprof_context = uprof_context_new ("Cogl");
|
_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) \
|
#define OPT(MASK_NAME, GROUP, NAME, NAME_FORMATTED, DESCRIPTION) \
|
||||||
G_STMT_START { \
|
G_STMT_START { \
|
||||||
int shift = COGL_DEBUG_ ## MASK_NAME; \
|
int shift = COGL_DEBUG_ ## MASK_NAME; \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user