mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-05 22:41:25 +12:00
g_fxo: implement logging for object creation/destruction.
Only logged at automated phase for initial/final processing.
This commit is contained in:
parent
ee46ad1ca9
commit
f71cdb4eb8
2 changed files with 27 additions and 1 deletions
|
@ -1762,4 +1762,16 @@ s32 error_code::error_report(const fmt_type_info* sup, u64 arg, const fmt_type_i
|
||||||
return static_cast<s32>(arg);
|
return static_cast<s32>(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
void stx::manual_fixed_typemap<void>::init_reporter(const char* name, unsigned long long created)
|
||||||
|
{
|
||||||
|
sys_log.notice("Object '%s' was created [%u]", name, created);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
void stx::manual_fixed_typemap<void>::destroy_reporter(const char* name, unsigned long long created)
|
||||||
|
{
|
||||||
|
sys_log.notice("Object '%s' was destroyed [%u]", name, created);
|
||||||
|
}
|
||||||
|
|
||||||
Emulator Emu;
|
Emulator Emu;
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
namespace stx
|
namespace stx
|
||||||
{
|
{
|
||||||
// Typemap with exactly one object of each used type, created on init() and destroyed on clear()
|
// Typemap with exactly one object of each used type, created on init() and destroyed on clear()
|
||||||
template <typename /*Tag*/>
|
template <typename /*Tag*/, bool Report = true>
|
||||||
class manual_fixed_typemap
|
class manual_fixed_typemap
|
||||||
{
|
{
|
||||||
// Save default constructor and destructor
|
// Save default constructor and destructor
|
||||||
|
@ -17,6 +17,7 @@ namespace stx
|
||||||
{
|
{
|
||||||
void(*create)(void*& ptr) noexcept;
|
void(*create)(void*& ptr) noexcept;
|
||||||
void(*destroy)(void*& ptr) noexcept;
|
void(*destroy)(void*& ptr) noexcept;
|
||||||
|
const char* type_name = "__";
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void call_ctor(void*& ptr) noexcept
|
static void call_ctor(void*& ptr) noexcept
|
||||||
|
@ -45,6 +46,7 @@ namespace stx
|
||||||
typeinfo r;
|
typeinfo r;
|
||||||
r.create = &call_ctor<T>;
|
r.create = &call_ctor<T>;
|
||||||
r.destroy = &call_dtor<T>;
|
r.destroy = &call_dtor<T>;
|
||||||
|
r.type_name = typeid(T).name();
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -94,6 +96,7 @@ namespace stx
|
||||||
void** object_pointer;
|
void** object_pointer;
|
||||||
unsigned long long created;
|
unsigned long long created;
|
||||||
void(*destroy)(void*& ptr) noexcept;
|
void(*destroy)(void*& ptr) noexcept;
|
||||||
|
const char* name;
|
||||||
};
|
};
|
||||||
|
|
||||||
auto all_data = std::make_unique<destroy_info[]>(stx::typelist<typeinfo>().count());
|
auto all_data = std::make_unique<destroy_info[]>(stx::typelist<typeinfo>().count());
|
||||||
|
@ -113,6 +116,7 @@ namespace stx
|
||||||
all_data[_max].object_pointer = &m_list[type.index()];
|
all_data[_max].object_pointer = &m_list[type.index()];
|
||||||
all_data[_max].created = m_order[type.index()];
|
all_data[_max].created = m_order[type.index()];
|
||||||
all_data[_max].destroy = type.destroy;
|
all_data[_max].destroy = type.destroy;
|
||||||
|
all_data[_max].name = type.type_name;
|
||||||
|
|
||||||
// Clear creation order
|
// Clear creation order
|
||||||
m_order[type.index()] = 0;
|
m_order[type.index()] = 0;
|
||||||
|
@ -129,6 +133,8 @@ namespace stx
|
||||||
// Destroy objects in correct order
|
// Destroy objects in correct order
|
||||||
for (unsigned i = 0; i < _max; i++)
|
for (unsigned i = 0; i < _max; i++)
|
||||||
{
|
{
|
||||||
|
if constexpr (Report)
|
||||||
|
destroy_reporter(all_data[i].name, all_data[i].created);
|
||||||
all_data[i].destroy(*all_data[i].object_pointer);
|
all_data[i].destroy(*all_data[i].object_pointer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -144,6 +150,8 @@ namespace stx
|
||||||
if (m_list[type.index()])
|
if (m_list[type.index()])
|
||||||
{
|
{
|
||||||
m_order[type.index()] = ++m_init_count;
|
m_order[type.index()] = ++m_init_count;
|
||||||
|
if constexpr (Report)
|
||||||
|
init_reporter(type.type_name, m_init_count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -190,5 +198,11 @@ namespace stx
|
||||||
{
|
{
|
||||||
return static_cast<T*>(m_list[stx::typeindex<typeinfo, std::decay_t<T>>()]);
|
return static_cast<T*>(m_list[stx::typeindex<typeinfo, std::decay_t<T>>()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Body is somewhere else if enabled
|
||||||
|
void init_reporter(const char* name, unsigned long long created);
|
||||||
|
|
||||||
|
// Body is somewhere else if enabled
|
||||||
|
void destroy_reporter(const char* name, unsigned long long created);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue