mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-10 06:44:34 +00:00
Add logging for CallFromMainThread
This commit is contained in:
parent
e32ed90d21
commit
213a19c9f3
@ -218,6 +218,11 @@ public:
|
|||||||
// Get current thread name
|
// Get current thread name
|
||||||
static std::string get_name()
|
static std::string get_name()
|
||||||
{
|
{
|
||||||
|
if (!g_tls_this_thread)
|
||||||
|
{
|
||||||
|
return "not named_thread";
|
||||||
|
}
|
||||||
|
|
||||||
return *g_tls_this_thread->m_tname.load();
|
return *g_tls_this_thread->m_tname.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5253,7 +5253,7 @@ s64 spu_thread::get_ch_value(u32 ch)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool seed = (utils::get_tsc() >> 8) % 100;
|
const usz seed = (utils::get_tsc() >> 8) % 100;
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
const bool reservation_busy_waiting = false;
|
const bool reservation_busy_waiting = false;
|
||||||
|
@ -161,17 +161,16 @@ void fmt_class_string<cfg_mode>::format(std::string& out, u64 arg)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Emulator::CallFromMainThread(std::function<void()>&& func, atomic_t<u32>* wake_up, bool track_emu_state, u64 stop_ctr) const
|
void Emulator::CallFromMainThread(std::function<void()>&& func, atomic_t<u32>* wake_up, bool track_emu_state, u64 stop_ctr, u32 line, u32 col, const char* file, const char* fun) const
|
||||||
{
|
{
|
||||||
if (!track_emu_state)
|
std::function<void()> final_func = [this, before = IsStopped(), track_emu_state, thread_name = thread_ctrl::get_name(), src = src_loc{line, col, file, fun}
|
||||||
|
, count = (stop_ctr == umax ? +m_stop_ctr : stop_ctr), func = std::move(func)]
|
||||||
{
|
{
|
||||||
m_cb.call_from_main_thread(std::move(func), wake_up);
|
const bool call_it = (!track_emu_state || (count == m_stop_ctr && before == IsStopped()));
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::function<void()> final_func = [this, before = IsStopped(), count = (stop_ctr == umax ? +m_stop_ctr : stop_ctr), func = std::move(func)]
|
sys_log.trace("Callback from thread '%s' at [%s] is %s", thread_name, src, call_it ? "called" : "skipped");
|
||||||
{
|
|
||||||
if (count == m_stop_ctr && before == IsStopped())
|
if (call_it)
|
||||||
{
|
{
|
||||||
func();
|
func();
|
||||||
}
|
}
|
||||||
@ -184,14 +183,17 @@ void Emulator::BlockingCallFromMainThread(std::function<void()>&& func, u32 line
|
|||||||
{
|
{
|
||||||
atomic_t<u32> wake_up = 0;
|
atomic_t<u32> wake_up = 0;
|
||||||
|
|
||||||
CallFromMainThread(std::move(func), &wake_up);
|
sys_log.trace("Blocking Callback from thread '%s' at [%s] is queued", thread_ctrl::get_name(), src_loc{line, col, file, fun});
|
||||||
|
|
||||||
|
CallFromMainThread(std::move(func), &wake_up, true, umax, line, col, file, fun);
|
||||||
|
|
||||||
while (!wake_up)
|
while (!wake_up)
|
||||||
{
|
{
|
||||||
if (!thread_ctrl::get_current())
|
if (!thread_ctrl::get_current())
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Current thread null while calling BlockingCallFromMainThread from %s", src_loc{line, col, file, fun});
|
fmt::throw_exception("Calling thread of BlockingCallFromMainThread is not of named_thread<>, calling from %s", src_loc{line, col, file, fun});
|
||||||
}
|
}
|
||||||
|
|
||||||
wake_up.wait(0);
|
wake_up.wait(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -183,7 +183,11 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Call from the GUI thread
|
// Call from the GUI thread
|
||||||
void CallFromMainThread(std::function<void()>&& func, atomic_t<u32>* wake_up = nullptr, bool track_emu_state = true, u64 stop_ctr = umax) const;
|
void CallFromMainThread(std::function<void()>&& func, atomic_t<u32>* wake_up = nullptr, bool track_emu_state = true, u64 stop_ctr = umax,
|
||||||
|
u32 line = __builtin_LINE(),
|
||||||
|
u32 col = __builtin_COLUMN(),
|
||||||
|
const char* file = __builtin_FILE(),
|
||||||
|
const char* fun = __builtin_FUNCTION()) const;
|
||||||
|
|
||||||
// Blocking call from the GUI thread
|
// Blocking call from the GUI thread
|
||||||
void BlockingCallFromMainThread(std::function<void()>&& func,
|
void BlockingCallFromMainThread(std::function<void()>&& func,
|
||||||
@ -200,9 +204,13 @@ public:
|
|||||||
return stop_counter_t{+m_stop_ctr};
|
return stop_counter_t{+m_stop_ctr};
|
||||||
}
|
}
|
||||||
|
|
||||||
void CallFromMainThread(std::function<void()>&& func, stop_counter_t counter) const
|
void CallFromMainThread(std::function<void()>&& func, stop_counter_t counter,
|
||||||
|
u32 line = __builtin_LINE(),
|
||||||
|
u32 col = __builtin_COLUMN(),
|
||||||
|
const char* file = __builtin_FILE(),
|
||||||
|
const char* fun = __builtin_FUNCTION()) const
|
||||||
{
|
{
|
||||||
CallFromMainThread(std::move(func), nullptr, true, static_cast<u64>(counter));
|
CallFromMainThread(std::move(func), nullptr, true, static_cast<u64>(counter), line, col, file, fun);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PostponeInitCode(std::function<void()>&& func)
|
void PostponeInitCode(std::function<void()>&& func)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user