mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 07:47:17 +00:00
gl/cocoa: Improve the NSApplication initialization
This is only for non-Cocoa apps but previously caused a 2 second waiting during startup for Cocoa apps. This is unacceptable. Instead we now check a bit more extensive if something actually runs on the GLib default main context, and if not don't even bother waiting for something to happen from there.
This commit is contained in:
parent
7cf214796a
commit
9ff86a3c54
1 changed files with 28 additions and 12 deletions
|
@ -154,24 +154,40 @@ gst_gl_context_cocoa_class_init (GstGLContextCocoaClass * klass)
|
|||
* glib main loop running this is for debugging
|
||||
* purposes so that's ok to let us a chance
|
||||
*/
|
||||
GMainContext *context;
|
||||
gboolean is_loop_running = FALSE;
|
||||
gint64 end_time = 0;
|
||||
|
||||
g_mutex_init (&nsapp_lock);
|
||||
g_cond_init (&nsapp_cond);
|
||||
context = g_main_context_default ();
|
||||
|
||||
g_mutex_lock (&nsapp_lock);
|
||||
g_idle_add_full (G_PRIORITY_HIGH, gst_gl_window_cocoa_init_nsapp, NULL, NULL);
|
||||
end_time = g_get_monotonic_time () + 2 * 1000 * 1000;
|
||||
is_loop_running = g_cond_wait_until (&nsapp_cond, &nsapp_lock, end_time);
|
||||
g_mutex_unlock (&nsapp_lock);
|
||||
if (g_main_context_is_owner (context)) {
|
||||
/* At the thread running the default GLib main context but
|
||||
* not the Cocoa main thread
|
||||
* We can't do anything here
|
||||
*/
|
||||
} else if (g_main_context_acquire (context)) {
|
||||
/* No main loop running on the default main context,
|
||||
* we can't do anything here */
|
||||
g_main_context_release (context);
|
||||
} else {
|
||||
/* Main loop running on the default main context but it
|
||||
* is not running in this thread */
|
||||
g_mutex_init (&nsapp_lock);
|
||||
g_cond_init (&nsapp_cond);
|
||||
|
||||
if (!is_loop_running) {
|
||||
GST_WARNING ("no mainloop running");
|
||||
g_mutex_lock (&nsapp_lock);
|
||||
g_idle_add_full (G_PRIORITY_HIGH, gst_gl_window_cocoa_init_nsapp, NULL, NULL);
|
||||
end_time = g_get_monotonic_time () + 500 * 1000;
|
||||
is_loop_running = g_cond_wait_until (&nsapp_cond, &nsapp_lock, end_time);
|
||||
g_mutex_unlock (&nsapp_lock);
|
||||
|
||||
if (!is_loop_running) {
|
||||
GST_WARNING ("no mainloop running");
|
||||
}
|
||||
|
||||
g_cond_clear (&nsapp_cond);
|
||||
g_mutex_clear (&nsapp_lock);
|
||||
}
|
||||
|
||||
g_cond_clear (&nsapp_cond);
|
||||
g_mutex_clear (&nsapp_lock);
|
||||
}
|
||||
|
||||
[pool release];
|
||||
|
|
Loading…
Reference in a new issue