Commit Graph
40 Commits
Author SHA1 Message Date
libretroadmin f1208a7a5a Make threading lock-free
The core and the headless tools no longer use mutexes, condition variables,
spinlocks, std::atomic, std::thread or volatile flags. Threads hand off through
libretro-common's retro_atomic and rthreads plus a few small pieces on top of
them in Common/Thread: Thread, MpscQueue, EventCounter, ParkingLot waits and
ReaderGate. Every wait blocks until it's woken; nothing polls on a timer.

State that only one thread touches just loses its lock. The PSP filesystem,
sceIo and the savedata dialog now belong to the emulation thread: async reads
and writes run when they're queued and complete later in emulated time, and
the IO and savedata threads are gone. The friend finder only talks to the
adhoc server and hands what it gets to the emulation thread. GPU init always
runs on the thread that starts the game.

The Vulkan render and compile queues, pipeline and render pass caches, delete
list and SPIR-V cache, the GL render queue, the software renderer's jit caches,
the file loader caches, the web debugger, UPnP, input, savestates, logging and
the GE debugger all hand off through queues and atomics. The IR jit's spinning
profiler thread goes.

A CPU thread with nothing to run now sleeps until work is queued instead of
spinning. Headless with --debugger waits for a client while stopped, and ends
the run once every client that connected has left. Web server shutdown keeps
servicing the CPU queue until the server has finished.
2026-10-09 04:56:16 +02:00
Henrik RydgårdandClaude Sonnet 5 12579e8603 OSD: lock mutex_ in all methods that touch entries_
Update()/Entries()/ClickEntry()/Show()/SetProgressBar()/RemoveProgressBar()
locked mutex_ around entries_, but CancelById/ShowAchievementUnlocked/
ShowAchievementProgress/ShowChallengeIndicator/ShowLeaderboardTracker/
ClearAchievementStuff/SetClickCallback/SetFlags didn't. Core/WebServer.cpp
runs its own thread and calls SetClickCallback() while the main thread's
Update() concurrently erases/iterates the same vector every frame.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4QAoxV2KY7ek4PcZw3WvY
2026-08-10 01:00:28 +02:00
Henrik Rydgård 5e0a9a0113 Add really simple 7z extraction, using the 7z VFS 2026-03-27 14:34:18 -06:00
Henrik Rydgård a92ff89d5f Clean up the OSD click callback code 2026-02-09 13:08:44 +01:00
Henrik Rydgård 2b6be8090c Cancel compatibility warning popups if you start another game in the meantime 2026-02-08 16:38:07 +01:00
Henrik Rydgård e7a9a10aac Fix issue with hiding certain notifications when not in-game (should be per type, not per edge) 2025-10-29 13:39:34 +01:00
Henrik Rydgård 6f76c579fc Delete dead code, more std::string_view 2025-09-01 00:15:23 +02:00
Henrik Rydgård f410b7e6ea Show a tiny indicator in the top left of the screen when the game is saving or loading. 2025-07-10 15:11:59 +02:00
Henrik Rydgård eb10247d77 Skip showing regular notifications that don't have messages 2025-01-20 17:48:16 +01:00
Henrik Rydgård 6575ba5487 Make screenshot notifications clickable (on platforms where it's possible) 2024-04-10 13:21:23 +02:00
Henrik Rydgård c6c733a27a Add way to pass data into OSD click callbacks (and a way to free it) 2024-04-10 13:18:30 +02:00
Herman Semenov 4b92848bdc [System/Core] Simplify loops 2024-04-03 19:25:55 +03:00
Henrik Rydgård c5791764d8 Make the i18n T function use std::string_view
Buildfixes, crashfixes

One more

Android buildfix

Buildfix Qt
2024-02-12 18:44:39 +01:00
Henrik Rydgård 3ce843819e Show a notification if a game exits with sceKernelExitGame. Mainly useful for homebrew. 2024-01-15 10:36:32 +01:00
Herman Semenov 5a0d54be83 [Common/Data/GPU/Input/System/UI] Added const reference for function params 2023-12-14 14:21:11 +03:00
Henrik Rydgård 5fcca7d9f5 Fix customization of Leaderboard Submitted events.
See #17631
2023-09-11 10:47:59 +02:00
Henrik Rydgård 6eba885955 Slight OSD message duration tweak. 2023-09-08 12:33:00 +02:00
Nemoumbra 0faa1109d2 Included <algorithm> for std::min 2023-09-07 12:14:36 +03:00
Henrik Rydgård cd78097e74 Allow dismissing notifications by touching/clicking them.
Fixes #18040

Might do something more elegant in the future.
2023-09-04 10:01:07 +02:00
Henrik Rydgård b637a9c42e Upgrade rcheevos to latest
The timer issue has been fixed upstream. Hopefully nothing will regress on
32-bit Android this time.

See #17631
2023-08-28 14:09:46 +02:00
Henrik Rydgård feb0ea245e Add mappable key to toggle networking
Fixes #17352

Requested in #17343
2023-08-23 22:14:51 +02:00
Henrik Rydgård ac269aaa4b rcheevos: revert to before #17806
PR #17806 upgraded rcheevos, after which a regression is reported in
issue #17631.

Experimentally revert to confirm.
2023-08-08 15:38:22 +02:00
Henrik Rydgård f45176fd25 Allow configuring in which corner achievement notifications can show up. 2023-08-01 12:52:09 +02:00
Henrik Rydgård 1071e1f248 Move towards separate types for leaderboard events 2023-08-01 11:57:28 +02:00
Henrik Rydgård a28ae79ef7 Safer handling of NONE 2023-08-01 00:28:54 +02:00
Henrik Rydgård 48d577014a Refactor the on-screen display to be more customizable 2023-08-01 00:28:54 +02:00
Henrik Rydgård 1c05f71b50 Update to the latest version of rcheevos. 2023-07-30 11:58:55 +02:00
Unknown W. Brackets 94f7231e73 net: Fix request cancelling.
Was broken in #17737.
2023-07-25 19:42:37 -07:00
Henrik Rydgård 370bb4c315 More progressbar improvements 2023-07-18 15:52:14 +02:00
Henrik Rydgård ecea3844b0 Improved progress bar popups for downloads
Now shows the filename, and also there's a delay mode where they'll only
be visible if the download takes more than a second, plus they can be
named.
2023-07-18 15:13:44 +02:00
Henrik Rydgård b092e08af1 Make literal into constexpr. 2023-07-16 09:01:16 +02:00
Henrik Rydgård 6bb97b3d46 Better mechanism to fade out the side bar when not on EmuScreen 2023-07-16 08:55:48 +02:00
Henrik Rydgård aa4264a192 RetroAchievements: Better handling of not being online when trying to log in 2023-07-13 11:26:43 +02:00
Henrik Rydgård 3f924d1494 Smoothly remove any left-over overlays on emuscreen exit. 2023-07-10 21:04:22 +02:00
Henrik Rydgård 4ae3c519e2 Add assorted null checks for safety
More probably needed. Should at least hopefully fix the leaderboard crash reported in #17631

Will try to do something more systematic later.
2023-07-10 19:27:07 +02:00
Henrik Rydgård c17b84b3d4 Implement RetroAchievements challenge mode restrictions, and fix related bugs 2023-07-08 21:55:32 +02:00
Henrik Rydgård 9e4387c529 Implement more OSD types (challenge, progress indicators). Not really tested. 2023-07-08 21:48:23 +02:00
Henrik Rydgård d0b42705a0 Switch over to rc-client 2023-07-08 18:59:37 +02:00
Henrik Rydgård 1375b6e097 Buildfix 2023-06-30 17:25:44 +02:00
Henrik Rydgård eb21a2e6c9 Break out the OSD data holder from Common/System/System.h, into OSD.cpp/h 2023-06-30 17:15:49 +02:00