mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-06-01 07:52:37 +00:00
Timer: protect usages of ms timers from rollover
This commit is contained in:
parent
0fe99e9bc8
commit
fec61f89a3
4 changed files with 16 additions and 31 deletions
|
@ -32,12 +32,14 @@ static std::atomic<int> s_obscured_pixels_top = 0;
|
|||
struct Message
|
||||
{
|
||||
Message() = default;
|
||||
Message(std::string text_, u64 timestamp_, u32 duration_, u32 color_)
|
||||
: text(std::move(text_)), timestamp(timestamp_), duration(duration_), color(color_)
|
||||
Message(std::string text_, u32 duration_, u32 color_)
|
||||
: text(std::move(text_)), duration(duration_), color(color_)
|
||||
{
|
||||
timer.Start();
|
||||
}
|
||||
s64 TimeRemaining() const { return duration - timer.ElapsedMs(); }
|
||||
std::string text;
|
||||
u64 timestamp = 0;
|
||||
Common::Timer timer;
|
||||
u32 duration = 0;
|
||||
bool ever_drawn = false;
|
||||
u32 color = 0;
|
||||
|
@ -93,20 +95,18 @@ void AddTypedMessage(MessageType type, std::string message, u32 ms, u32 argb)
|
|||
{
|
||||
std::lock_guard lock{s_messages_mutex};
|
||||
s_messages.erase(type);
|
||||
s_messages.emplace(type, Message(std::move(message), Common::Timer::NowMs() + ms, ms, argb));
|
||||
s_messages.emplace(type, Message(std::move(message), ms, argb));
|
||||
}
|
||||
|
||||
void AddMessage(std::string message, u32 ms, u32 argb)
|
||||
{
|
||||
std::lock_guard lock{s_messages_mutex};
|
||||
s_messages.emplace(MessageType::Typeless,
|
||||
Message(std::move(message), Common::Timer::NowMs() + ms, ms, argb));
|
||||
s_messages.emplace(MessageType::Typeless, Message(std::move(message), ms, argb));
|
||||
}
|
||||
|
||||
void DrawMessages()
|
||||
{
|
||||
const bool draw_messages = Config::Get(Config::MAIN_OSD_MESSAGES);
|
||||
const u64 now = Common::Timer::NowMs();
|
||||
const float current_x =
|
||||
LEFT_MARGIN * ImGui::GetIO().DisplayFramebufferScale.x + s_obscured_pixels_left;
|
||||
float current_y = TOP_MARGIN * ImGui::GetIO().DisplayFramebufferScale.y + s_obscured_pixels_top;
|
||||
|
@ -117,7 +117,7 @@ void DrawMessages()
|
|||
for (auto it = s_messages.begin(); it != s_messages.end();)
|
||||
{
|
||||
Message& msg = it->second;
|
||||
const int time_left = static_cast<int>(msg.timestamp - now);
|
||||
const s64 time_left = msg.TimeRemaining();
|
||||
|
||||
// Make sure we draw them at least once if they were printed with 0ms,
|
||||
// unless enough time has expired, in that case, we drop them
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue