<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dolphin/Source/Core/VideoCommon/PerformanceMetrics.h, branch release-prep-2606</title>
<subtitle>GameCube and Wii emulator</subtitle>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/'/>
<entry>
<title>VideoCommon: Added an option to showcase internal resolution, EFB width x height as screen overlay. Option to turn it on is a checkbox in screen on the OSD settings, in debug. This supports enhancements.</title>
<updated>2026-04-19T21:19:21+00:00</updated>
<author>
<name>Elyas Hue</name>
<email>elyas.hue@telecom-paris.fr</email>
</author>
<published>2026-04-14T08:07:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=fb4ff3e51b2c41f9fc44116916fc2deb1cfa366a'/>
<id>fb4ff3e51b2c41f9fc44116916fc2deb1cfa366a</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Move PerformanceMetrics from global variable to System</title>
<updated>2026-03-14T14:42:21+00:00</updated>
<author>
<name>Mihai Brodschi</name>
<email>m.brodschi@gmail.com</email>
</author>
<published>2026-03-14T13:36:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=f9c3f06f0a03cbff599bb9a601454fc1ae440a69'/>
<id>f9c3f06f0a03cbff599bb9a601454fc1ae440a69</id>
<content type='text'>
This avoids the static initialization order fiasco between Core and VideoCommon

Co-authored-by: Jordan Woyak &lt;jordan.woyak@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This avoids the static initialization order fiasco between Core and VideoCommon

Co-authored-by: Jordan Woyak &lt;jordan.woyak@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>PerformanceMetrics: Use HookableEvent for state changed callback</title>
<updated>2026-03-07T20:50:59+00:00</updated>
<author>
<name>Dentomologist</name>
<email>dentomologist@gmail.com</email>
</author>
<published>2026-03-07T20:33:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=252ec7452c4c908537036215c1888f5c5d596bd7'/>
<id>252ec7452c4c908537036215c1888f5c5d596bd7</id>
<content type='text'>
Use the normal state changed `HookableEvent` instead of having
`Core::NotifyStateChanged` call `g_perf_metrics.OnEmulationStateChanged`
directly.

The direct call was added in bad78cfed416d89ceb6b0acf6c134d3691b3d624 to
avoid a crash. At the time state changed callbacks were stored in a
vector, and the crash was caused by `g_perf_metric`'s destructor trying
to remove the callback from the already-destroyed vector.

Later a97627e736ff352e031123519c799e65cc98b32c switched state changed
callbacks to use `HookableEvent`, which is specifically designed to
handle the case where a hook outlives its associated event.

Since the workaround is no longer necessary replace it with a standard
`EventHook`.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Use the normal state changed `HookableEvent` instead of having
`Core::NotifyStateChanged` call `g_perf_metrics.OnEmulationStateChanged`
directly.

The direct call was added in bad78cfed416d89ceb6b0acf6c134d3691b3d624 to
avoid a crash. At the time state changed callbacks were stored in a
vector, and the crash was caused by `g_perf_metric`'s destructor trying
to remove the callback from the already-destroyed vector.

Later a97627e736ff352e031123519c799e65cc98b32c switched state changed
callbacks to use `HookableEvent`, which is specifically designed to
handle the case where a hook outlives its associated event.

Since the workaround is no longer necessary replace it with a standard
`EventHook`.
</pre>
</div>
</content>
</entry>
<entry>
<title>VideoCommon/PerformanceMetrics: Display current offset between the latest frame presentation time and the intended presentation time in the "Show Frame Times" box.</title>
<updated>2025-11-12T02:01:52+00:00</updated>
<author>
<name>Jordan Woyak</name>
<email>jordan.woyak@gmail.com</email>
</author>
<published>2025-10-28T04:59:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=bf61c890cafc494def3a30ec06b742571b20b8d9'/>
<id>bf61c890cafc494def3a30ec06b742571b20b8d9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Core, VideoCommon: Fix crash at shutdown due to destructor ordering</title>
<updated>2025-04-28T04:11:53+00:00</updated>
<author>
<name>Mihai Brodschi</name>
<email>m.brodschi@gmail.com</email>
</author>
<published>2025-04-27T14:33:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=bad78cfed416d89ceb6b0acf6c134d3691b3d624'/>
<id>bad78cfed416d89ceb6b0acf6c134d3691b3d624</id>
<content type='text'>
Previously, PerformanceTracker registered a callback to be updated on
emulation state changes. PerformanceTrackers live in a global variable
(g_perf_metrics) within libvideocommon. The callback was stored in a
global variable in libcore. This created a race condition at shutdown
between these libraries, when the PerfTracker's destructor tried to
unregister the callback.
Notify the PerfTracker directly from libcore, without callbacks, since
Core.cpp already references g_perf_metrics explicitly. Also rename
Core::CallOnStateChangedCallbacks to NotifyStateChanged to better
reflect what it's doing.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, PerformanceTracker registered a callback to be updated on
emulation state changes. PerformanceTrackers live in a global variable
(g_perf_metrics) within libvideocommon. The callback was stored in a
global variable in libcore. This created a race condition at shutdown
between these libraries, when the PerfTracker's destructor tried to
unregister the callback.
Notify the PerfTracker directly from libcore, without callbacks, since
Core.cpp already references g_perf_metrics explicitly. Also rename
Core::CallOnStateChangedCallbacks to NotifyStateChanged to better
reflect what it's doing.
</pre>
</div>
</content>
</entry>
<entry>
<title>Core: Move CountPerformanceMarker to VideoInterface to eliminate a Throttle call. PerformanceMetrics: Fixes/Cleanups.</title>
<updated>2025-04-03T04:23:51+00:00</updated>
<author>
<name>Jordan Woyak</name>
<email>jordan.woyak@gmail.com</email>
</author>
<published>2025-03-08T01:26:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=c42dab6388de9318bed370900c3431d8231a5376'/>
<id>c42dab6388de9318bed370900c3431d8231a5376</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #13398 from jordan-woyak/perf-tracker</title>
<updated>2025-03-23T19:21:11+00:00</updated>
<author>
<name>JMC47</name>
<email>JMC4789@gmail.com</email>
</author>
<published>2025-03-23T19:21:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=28f1beeca84911481e7ad8f925bd5fd1f5b2563e'/>
<id>28f1beeca84911481e7ad8f925bd5fd1f5b2563e</id>
<content type='text'>
PerformanceTracker: Eliminate mutex. General cleanups.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
PerformanceTracker: Eliminate mutex. General cleanups.</pre>
</div>
</content>
</entry>
<entry>
<title>PerformanceTracker: Pass chrono values instead of us s64.</title>
<updated>2025-03-15T19:40:00+00:00</updated>
<author>
<name>Jordan Woyak</name>
<email>jordan.woyak@gmail.com</email>
</author>
<published>2025-03-05T07:36:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=b2ce3fbefc34fac9449e5f88f15c7a4da0825fac'/>
<id>b2ce3fbefc34fac9449e5f88f15c7a4da0825fac</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Core: Remove unused GetActualEmulationSpeed function and related variables/functions.</title>
<updated>2025-03-14T08:10:13+00:00</updated>
<author>
<name>Jordan Woyak</name>
<email>jordan.woyak@gmail.com</email>
</author>
<published>2025-03-05T20:44:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=2690a62949617c6cf7964e7972b8f95eb1588216'/>
<id>2690a62949617c6cf7964e7972b8f95eb1588216</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>PerformanceMetrics: Eliminated a mutex. Code cleanups.</title>
<updated>2025-03-14T08:10:13+00:00</updated>
<author>
<name>Jordan Woyak</name>
<email>jordan.woyak@gmail.com</email>
</author>
<published>2025-03-05T03:32:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=e1745f682fd2846f12ac0693896785dacf3f3b91'/>
<id>e1745f682fd2846f12ac0693896785dacf3f3b91</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
