[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 03/14] ui/cocoa: Adds non-app runloop on main thread mode
From: |
Phil Dennis-Jordan |
Subject: |
[PATCH v3 03/14] ui/cocoa: Adds non-app runloop on main thread mode |
Date: |
Sat, 28 Sep 2024 10:57:16 +0200 |
Various system frameworks on macOS and other Apple platforms
require a main runloop to be processing events on the process’s
main thread. The Cocoa UI’s requirement to run the process as a
Cocoa application automatically enables this runloop, but it
can be useful to have the runloop handling events even without
the Cocoa UI active.
This change adds a non-app runloop mode to the cocoa_main
function. This can be requested by other code, while the Cocoa UI
additionally enables app mode. This arrangement ensures there is
only one qemu_main function switcheroo, and the Cocoa UI’s app
mode requirement and other subsystems’ runloop requests don’t
conflict with each other.
The main runloop is required for the AppleGFX PV graphics device,
so the runloop request call has been added to its initialisation.
Signed-off-by: Phil Dennis-Jordan <phil@philjordan.eu>
---
hw/display/apple-gfx.m | 3 +++
include/qemu-main.h | 2 ++
ui/cocoa.m | 15 +++++++++++++--
3 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/hw/display/apple-gfx.m b/hw/display/apple-gfx.m
index 837300f9cd4..6ef1048d93d 100644
--- a/hw/display/apple-gfx.m
+++ b/hw/display/apple-gfx.m
@@ -14,6 +14,7 @@
#include "apple-gfx.h"
#include "trace.h"
+#include "qemu-main.h"
#include "qemu/main-loop.h"
#include "ui/console.h"
#include "monitor/monitor.h"
@@ -299,6 +300,8 @@ void apple_gfx_common_init(Object *obj, AppleGFXState *s,
const char* obj_name)
error_report_err(local_err);
}
}
+
+ cocoa_enable_runloop_on_main_thread();
}
static void apple_gfx_register_task_mapping_handlers(AppleGFXState *s,
diff --git a/include/qemu-main.h b/include/qemu-main.h
index 940960a7dbc..da4516e69eb 100644
--- a/include/qemu-main.h
+++ b/include/qemu-main.h
@@ -8,4 +8,6 @@
int qemu_default_main(void);
extern int (*qemu_main)(void);
+void cocoa_enable_runloop_on_main_thread(void);
+
#endif /* QEMU_MAIN_H */
diff --git a/ui/cocoa.m b/ui/cocoa.m
index 4c2dd335323..40f65d7a45d 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -2028,6 +2028,7 @@ static void cocoa_clipboard_request(QemuClipboardInfo
*info,
exit(status);
}
+static bool run_as_cocoa_app = false;
static int cocoa_main(void)
{
QemuThread thread;
@@ -2040,7 +2041,11 @@ static int cocoa_main(void)
// Start the main event loop
COCOA_DEBUG("Main thread: entering OSX run loop\n");
- [NSApp run];
+ if (run_as_cocoa_app) {
+ [NSApp run];
+ } else {
+ CFRunLoopRun();
+ }
COCOA_DEBUG("Main thread: left OSX run loop, which should never happen\n");
abort();
@@ -2114,13 +2119,19 @@ static void cocoa_cursor_define(DisplayChangeListener
*dcl, QEMUCursor *cursor)
});
}
+void cocoa_enable_runloop_on_main_thread(void)
+{
+ qemu_main = cocoa_main;
+}
+
static void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
COCOA_DEBUG("qemu_cocoa: cocoa_display_init\n");
- qemu_main = cocoa_main;
+ run_as_cocoa_app = true;
+ cocoa_enable_runloop_on_main_thread();
// Pull this console process up to being a fully-fledged graphical
// app with a menubar and Dock icon
--
2.39.3 (Apple Git-145)
- [PATCH v3 00/14] macOS PV Graphics and new vmapple machine type, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 09/14] gpex: Allow more than 4 legacy IRQs, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 02/14] hw/display/apple-gfx: Adds PCI implementation, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 13/14] hw/vmapple/virtio-blk: Add support for apple virtio-blk, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 04/14] hw/display/apple-gfx: Adds configurable mode list, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 05/14] MAINTAINERS: Add myself as maintainer for apple-gfx, reviewer for HVF, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 03/14] ui/cocoa: Adds non-app runloop on main thread mode,
Phil Dennis-Jordan <=
- [PATCH v3 07/14] hw/misc/pvpanic: Add MMIO interface, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 08/14] hvf: arm: Ignore writes to CNTP_CTL_EL0, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 14/14] hw/vmapple/vmapple: Add vmapple machine type, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 06/14] hw: Add vmapple subdir, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 01/14] hw/display/apple-gfx: Introduce ParavirtualizedGraphics.Framework support, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 11/14] hw/vmapple/bdif: Introduce vmapple backdoor interface, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 10/14] hw/vmapple/aes: Introduce aes engine, Phil Dennis-Jordan, 2024/09/28
- [PATCH v3 12/14] hw/vmapple/cfg: Introduce vmapple cfg region, Phil Dennis-Jordan, 2024/09/28