Files
mutter/cogl/cogl/cogl-profile.c
Bilal Elmoussaoui f4f6422699 cogl: Remove remaining i18n infrastructure
Not sure it makes sense to translate only parts of the debugging output
and on top of that, those files were not part of POTFILES, so they were not
translated anyways..

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3895>
2024-07-22 13:06:33 +02:00

122 lines
3.9 KiB
C

#include "config.h"
#ifdef COGL_ENABLE_PROFILE
#include "cogl/cogl-profile.h"
#include "cogl/cogl-debug.h"
#include <stdlib.h>
UProfContext *_cogl_uprof_context;
static gboolean
debug_option_getter (void *user_data)
{
unsigned int shift = GPOINTER_TO_UINT (user_data);
return COGL_DEBUG_ENABLED (shift);
}
static void
debug_option_setter (gboolean value, void *user_data)
{
unsigned int shift = GPOINTER_TO_UINT (user_data);
if (value)
COGL_DEBUG_SET_FLAG (shift);
else
COGL_DEBUG_CLEAR_FLAG (shift);
}
static void
print_exit_report (void)
{
if (getenv ("COGL_PROFILE_OUTPUT_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);
}
uprof_context_unref (_cogl_uprof_context);
}
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; \
uprof_context_add_boolean_option (_cogl_uprof_context, \
GROUP, \
NAME, \
NAME_FORMATTED, \
DESCRIPTION, \
debug_option_getter, \
debug_option_setter, \
GUINT_TO_POINTER (shift)); \
} G_STMT_END;
#include "cogl/cogl-debug-options.h"
#undef OPT
atexit (print_exit_report);
}
void
_cogl_profile_trace_message (const char *format, ...)
{
va_list ap;
va_start (ap, format);
g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, ap);
va_end (ap);
if (_cogl_uprof_context)
uprof_context_vtrace_message (_cogl_uprof_context, format, ap);
}
#endif