Core: Change a volatile into an atomic
Also changes s_drawn_video into an atomic, as it's used across threads as well.
This commit is contained in:
parent
c53e7f2842
commit
af4cfd32d4
|
@ -2,6 +2,7 @@
|
||||||
// Licensed under GPLv2+
|
// Licensed under GPLv2+
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include <atomic>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -10,7 +11,6 @@
|
||||||
|
|
||||||
#include "AudioCommon/AudioCommon.h"
|
#include "AudioCommon/AudioCommon.h"
|
||||||
|
|
||||||
#include "Common/Atomic.h"
|
|
||||||
#include "Common/CommonPaths.h"
|
#include "Common/CommonPaths.h"
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
#include "Common/CPUDetect.h"
|
#include "Common/CPUDetect.h"
|
||||||
|
@ -83,8 +83,8 @@ bool g_want_determinism;
|
||||||
|
|
||||||
// Declarations and definitions
|
// Declarations and definitions
|
||||||
static Common::Timer s_timer;
|
static Common::Timer s_timer;
|
||||||
static volatile u32 s_drawn_frame = 0;
|
static std::atomic<u32> s_drawn_frame;
|
||||||
static u32 s_drawn_video = 0;
|
static std::atomic<u32> s_drawn_video;
|
||||||
|
|
||||||
// Function forwarding
|
// Function forwarding
|
||||||
void Callback_WiimoteInterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);
|
void Callback_WiimoteInterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);
|
||||||
|
@ -725,14 +725,14 @@ void VideoThrottle()
|
||||||
{
|
{
|
||||||
// Update info per second
|
// Update info per second
|
||||||
u32 ElapseTime = (u32)s_timer.GetTimeDifference();
|
u32 ElapseTime = (u32)s_timer.GetTimeDifference();
|
||||||
if ((ElapseTime >= 1000 && s_drawn_video > 0) || s_request_refresh_info)
|
if ((ElapseTime >= 1000 && s_drawn_video.load() > 0) || s_request_refresh_info)
|
||||||
{
|
{
|
||||||
UpdateTitle();
|
UpdateTitle();
|
||||||
|
|
||||||
// Reset counter
|
// Reset counter
|
||||||
s_timer.Update();
|
s_timer.Update();
|
||||||
Common::AtomicStore(s_drawn_frame, 0);
|
s_drawn_frame.store(0);
|
||||||
s_drawn_video = 0;
|
s_drawn_video.store(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
s_drawn_video++;
|
s_drawn_video++;
|
||||||
|
@ -746,7 +746,7 @@ bool ShouldSkipFrame(int skipped)
|
||||||
const u32 TargetFPS = (SConfig::GetInstance().m_Framelimit > 1)
|
const u32 TargetFPS = (SConfig::GetInstance().m_Framelimit > 1)
|
||||||
? (SConfig::GetInstance().m_Framelimit - 1) * 5
|
? (SConfig::GetInstance().m_Framelimit - 1) * 5
|
||||||
: VideoInterface::TargetRefreshRate;
|
: VideoInterface::TargetRefreshRate;
|
||||||
const u32 frames = Common::AtomicLoad(s_drawn_frame);
|
const u32 frames = s_drawn_frame.load();
|
||||||
const bool fps_slow = !(s_timer.GetTimeDifference() < (frames + skipped) * 1000 / TargetFPS);
|
const bool fps_slow = !(s_timer.GetTimeDifference() < (frames + skipped) * 1000 / TargetFPS);
|
||||||
|
|
||||||
return fps_slow;
|
return fps_slow;
|
||||||
|
@ -758,7 +758,8 @@ bool ShouldSkipFrame(int skipped)
|
||||||
void Callback_VideoCopiedToXFB(bool video_update)
|
void Callback_VideoCopiedToXFB(bool video_update)
|
||||||
{
|
{
|
||||||
if (video_update)
|
if (video_update)
|
||||||
Common::AtomicIncrement(s_drawn_frame);
|
s_drawn_frame++;
|
||||||
|
|
||||||
Movie::FrameUpdate();
|
Movie::FrameUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -771,9 +772,9 @@ void UpdateTitle()
|
||||||
if (ElapseTime == 0)
|
if (ElapseTime == 0)
|
||||||
ElapseTime = 1;
|
ElapseTime = 1;
|
||||||
|
|
||||||
float FPS = (float) (Common::AtomicLoad(s_drawn_frame) * 1000.0 / ElapseTime);
|
float FPS = (float)(s_drawn_frame.load() * 1000.0 / ElapseTime);
|
||||||
float VPS = (float) (s_drawn_video * 1000.0 / ElapseTime);
|
float VPS = (float)(s_drawn_video.load() * 1000.0 / ElapseTime);
|
||||||
float Speed = (float) (s_drawn_video * (100 * 1000.0) / (VideoInterface::TargetRefreshRate * ElapseTime));
|
float Speed = (float)(s_drawn_video.load() * (100 * 1000.0) / (VideoInterface::TargetRefreshRate * ElapseTime));
|
||||||
|
|
||||||
// Settings are shown the same for both extended and summary info
|
// Settings are shown the same for both extended and summary info
|
||||||
std::string SSettings = StringFromFormat("%s %s | %s | %s", cpu_core_base->GetName(), _CoreParameter.bCPUThread ? "DC" : "SC",
|
std::string SSettings = StringFromFormat("%s %s | %s | %s", cpu_core_base->GetName(), _CoreParameter.bCPUThread ? "DC" : "SC",
|
||||||
|
|
Loading…
Reference in New Issue