Commit Graph

107 Commits

Author SHA1 Message Date
JosJuice
71ce8bb6f0 Don't call RunAsCPUThread in config callbacks
In theory, our config system supports calling Set from any thread. But
because we have config callbacks that call RunAsCPUThread, it's a lot
more restricted in practice. Calling Set from any thread other than the
host thread or the CPU thread is formally thread unsafe, and calling Set
on the host thread while the CPU thread is showing a panic alert causes
a deadlock. This is especially a problem because 04072f0 made the
"Ignore for this session" button in panic alerts call Set.

Because so many of our config callbacks want their code to run on the
CPU thread, I thought it would make sense to have a centralized way to
move execution to the CPU thread for config callbacks. To solve the
deadlock problem, this new way is non-blocking. This means that threads
other than the CPU thread might continue executing before the CPU thread
is informed of the new config, but I don't think there's any problem
with that.

Intends to fix https://bugs.dolphin-emu.org/issues/13108.
2023-08-17 19:19:25 +02:00
iwubcode
e54b7ac356 Core: save core timing parameters into variables updated during refresh 2023-07-23 14:03:21 -05:00
Admiral H. Curtiss
0b3d28abaf
Merge pull request #11586 from JosJuice/unknown-opcode-msg
VideoCommon: Reword the unknown opcode error message
2023-06-03 12:53:33 +02:00
Admiral H. Curtiss
23843583bf
PowerPC: Refactor to class, move to System. 2023-04-09 21:48:37 +02:00
JosJuice
f2be35c7cd VideoCommon: Reword the unknown opcode error message
When faced with this error, users often don't try disabling dual core,
even though the error message suggests it. Perhaps the message is just
too long and lists too many things?

To try to improve the situation, I'm rewording the message and making it
say different things depending on what settings you are using.
2023-02-19 16:35:28 +01:00
Sam Belliveau
4a97dc7c81 Let VI Skip work if variance > fallback 2023-02-02 20:59:17 -05:00
Sam Belliveau
87d5d39dfe Set VI Skip Activation to Half The Audio Buffer 2023-02-02 20:55:13 -05:00
Admiral H. Curtiss
41ad0490f0
CoreTiming: Avoid ppcState global. 2023-01-27 15:22:45 +01:00
Admiral H. Curtiss
485bba238e
PowerPC: Add PowerPCState parameter to UpdatePerformanceMonitor(). 2023-01-27 15:22:44 +01:00
Pierre Bourdon
8d5edb13a9
Merge pull request #11367 from Sam-Belliveau/lagbegone
VideoCommon: VI Skip
2023-01-19 01:20:01 +01:00
Scott Mansell
7c202ab411 Reset throttle on savestate load 2023-01-16 14:18:42 +13:00
Sam Belliveau
23ad07b368 Add VISkip 2023-01-14 01:56:37 -05:00
Sam Belliveau
e849172dc9 Limit Throttling to 1200hz 2023-01-13 18:17:24 -05:00
Sam Belliveau
e95c1d55e8 Limit Sleep Calls to 8192hz at most 2023-01-13 11:59:32 -05:00
Sam Belliveau
901e4c7697 Reset Throttle Variables In Init 2023-01-09 11:06:12 -05:00
Sam Belliveau
f7de0e4147 Fix issue that would disable Throttling 2023-01-08 01:20:19 -05:00
Sam Belliveau
bc1cc9eeb4 CoreTiming: Throttle Before Every Event Using Chrono 2023-01-06 17:21:17 -05:00
Admiral H. Curtiss
ceae4242fc
VideoCommon/Fifo: Pass Core::System to methods. 2022-12-10 17:16:26 +01:00
Admiral H. Curtiss
5624dd6d39
VideoCommon/Fifo: Refactor to class, move to Core::System. 2022-12-10 17:16:19 +01:00
Admiral H. Curtiss
daa70533cd
CoreTiming: Store Globals in CoreTimingManager. 2022-11-27 03:47:12 +01:00
Admiral H. Curtiss
c9558ecb4c
CoreTiming: Refactor to class. 2022-11-27 03:47:12 +01:00
Admiral H. Curtiss
4273d3754c
CoreTiming: Move static variables into Core::System. 2022-11-26 04:22:32 +01:00
Admiral H. Curtiss
86f17511fc
CoreTiming: Move the 'Globals' instance into Core::System. 2022-11-26 04:22:32 +01:00
Admiral H. Curtiss
a36a5c1308
CoreTiming: Pass Core::System to Events. 2022-11-06 17:54:58 +01:00
Dentomologist
f6b9acccfc Common: Refactor PointerWrap 2022-05-25 13:06:41 -07:00
Pokechu22
44e93e91d7 Common/Assert: Switch to fmt 2022-01-09 12:43:11 -08:00
Admiral H. Curtiss
88d725c918
Config: Port SyncOnSkipIdle setting to new config system. 2022-01-06 16:13:56 +01:00
Admiral H. Curtiss
7625cb7aca
CoreTiming: Cache the overclock factor instead of re-querying it every Advance(). 2021-12-25 23:40:26 +01:00
Admiral H. Curtiss
cae4b545bd
Config: Port CPU overclock settings to new config system. 2021-12-25 21:52:50 +01:00
Pierre Bourdon
e149ad4f0a
treewide: convert GPLv2+ license info to SPDX tags
SPDX standardizes how source code conveys its copyright and licensing
information. See https://spdx.github.io/spdx-spec/1-rationale/ . SPDX
tags are adopted in many large projects, including things like the Linux
kernel.
2021-07-05 04:35:56 +02:00
Lioncash
a8b0661fb0 Core: Make use of C++17 deduction guides with locks
C++17 allows omitting the mutex type, which makes for both less reading
and more flexibility (e.g. The mutex type can change and all occurrences
don't need to be updated).
2020-12-29 16:06:17 -05:00
JosJuice
f8f3548ca9 CoreTiming: Call UpdatePerformanceMonitor on idle 2020-12-23 17:34:02 +01:00
Lioncash
958cbf38a4 Core: Convert logging over to fmt pt. 1
Converts up to the DSP-related files for easier reviewing, the rest will
be progressively moved over after this change gets merged.
2020-11-19 14:21:06 -05:00
Lioncash
febd1c3dba Core: Replace usages of StringFromFormat with fmt where applicable
Migrates usages of StringFromFormat over to using fmt.
2019-11-11 07:32:57 -05:00
Techjar
ff972e3673 Reformat repo to clang-format 7.0 rules 2019-05-06 18:48:04 +00:00
spycrab
40bb9974f2 Reformat all the things! 2018-04-12 21:28:39 +02:00
Lioncash
50a476c371 Assert: Uppercase assertion macros
Macros should be all upper-cased. This is also kind of a wart that's
been sticking out for quite a while now (we avoid prefixing
underscores).
2018-03-14 22:03:12 -04:00
JosJuice
b8c83dd5f3
Merge pull request #5973 from ligfx/renamefifoqueue
Rename Common::FifoQueue to Common::SPSCQueue
2017-11-19 13:51:22 +01:00
JosJuice
db77549502 Show event name when scheduling from wrong thread 2017-09-30 16:14:59 +02:00
Michael M
b58f8d19ab Rename Common::FifoQueue to Common::SPSCQueue
Since all queues are FIFO data structures, the name wasn't informative
as to why you'd use it over a normal queue. I originally thought it had
something to do with the hardware graphics FIFO.

This renames it using the common acronym SPSC, which stands for
single-producer single-consumer, and is most commonly used to talk about
lock-free data structures, both of which this is.
2017-08-23 17:00:52 -07:00
Lioncash
dd4203bec8 Core: Remove unnecessary includes
Also moves a cpp file's related header file to the top of the inclusions if it isn't already there.
2017-06-15 18:52:22 -04:00
Markus Wick
34ac749b8b Merge pull request #5144 from MerryMage/mfspr
Jit_SystemRegisters: Make mfspr PIE-compliant
2017-04-10 22:30:56 +02:00
MerryMage
38917a151d CoreTiming: Pull globals into a single struct 2017-04-05 10:22:48 +01:00
Lioncash
0c1d56c16f Core: Hide determinism global
This is only ever queried and not set outside of the Core.cpp, so this
should just be hidden internally and just have a function exposed that
allows querying it.
2017-04-03 14:56:12 -04:00
Léo Lam
a085cd431d Adjust event times after a PPC clock change
This likely doesn't change much, but it makes events trigger at the
correct time after a clock change.
2017-02-08 16:22:27 +01:00
EmptyChaos
2e14920e16 CoreTiming: Guarantee FIFO processing of timed events
The min-heap provides no ordering when the key is the same on 2
nodes. Disambiguate identical times by tracking the order items
were added into the queue.
2016-09-08 19:46:42 +10:00
EmptyChaos
fb5537213a CoreTiming: Document initial startup behavior
Events don't update the downcount until after the first Advance(),
thus Advance() must be called once before scheduling works normally.
2016-09-03 14:55:45 +10:00
EmptyChaos
59465911d7 CoreTiming: Fix scheduling into the past
ForceExceptionCheck messes up the downcount and slice length if the
callback is scheduled into the past (g_slice_length becomes negative)
2016-09-03 14:55:44 +10:00
EmptyChaos
aa16282516 Core: Change CoreTiming event key from int to EventType*
Replace 'int' keys with something that carries type information.
Performance is neutral.
2016-09-03 14:55:44 +10:00
EmptyChaos
17c34ae0b1 CoreTiming: Data structure cleanup
Replace adhoc linked list with a priority heap. Performance
characteristics are mostly the same, but is more cache friendly.

[Priority Queues have O(log n) push/pop compared to the linked
list's O(n) push/O(1) pop but the queue is not big enough for
that to matter, so linear is faster over linked. Very slight gains
when framelimit is unlimited (Wind Waker), 1900% -> 1950%]
2016-09-03 12:46:14 +10:00