kernel explorer: Add more information about SPU/PPU threads

This commit is contained in:
Eladash 2020-04-29 09:49:13 +03:00
parent dd6825a7bd
commit f4f0fb88b1
4 changed files with 28 additions and 6 deletions

View File

@ -77,7 +77,7 @@ void fmt_class_string<ppu_join_status>::format(std::string& out, u64 arg)
{
switch (js)
{
case ppu_join_status::joinable: return "";
case ppu_join_status::joinable: return "none";
case ppu_join_status::detached: return "detached";
case ppu_join_status::zombie: return "zombie";
case ppu_join_status::exited: return "exited";

View File

@ -25,6 +25,28 @@ LOG_CHANNEL(sys_spu);
extern u64 get_timebased_time();
template <>
void fmt_class_string<spu_group_status>::format(std::string& out, u64 arg)
{
format_enum(out, arg, [](spu_group_status value)
{
switch (value)
{
case SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED: return "uninitialized";
case SPU_THREAD_GROUP_STATUS_INITIALIZED: return "initialized";
case SPU_THREAD_GROUP_STATUS_READY: return "ready";
case SPU_THREAD_GROUP_STATUS_WAITING: return "waiting";
case SPU_THREAD_GROUP_STATUS_SUSPENDED: return "suspended";
case SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED: return "waiting and suspended";
case SPU_THREAD_GROUP_STATUS_RUNNING: return "running";
case SPU_THREAD_GROUP_STATUS_STOPPED: return "stopped";
case SPU_THREAD_GROUP_STATUS_UNKNOWN: break;
}
return unknown;
});
}
void sys_spu_image::load(const fs::file& stream)
{
const spu_exec_object obj{stream, 0, elf_opt::no_sections + elf_opt::no_data};

View File

@ -48,7 +48,7 @@ enum
SYS_SPU_THREAD_GROUP_LOG_GET_STATUS = 0x2,
};
enum : u32
enum spu_group_status : u32
{
SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED,
SPU_THREAD_GROUP_STATUS_INITIALIZED,
@ -263,7 +263,7 @@ struct lv2_spu_group
atomic_t<u32> init; // Initialization Counter
atomic_t<s32> prio; // SPU Thread Group Priority
atomic_t<u32> run_state; // SPU Thread Group State
atomic_t<spu_group_status> run_state; // SPU Thread Group State
atomic_t<s32> exit_status; // SPU Thread Group Exit Status
atomic_t<u32> join_state; // flags used to detect exit cause and signal
atomic_t<u32> running; // Number of running threads

View File

@ -282,7 +282,7 @@ void kernel_explorer::Update()
idm::select<named_thread<ppu_thread>>([&](u32 id, ppu_thread& ppu)
{
lv2_types.back().count++;
l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"PPU Thread: ID = 0x%08x “%s”", id, *ppu.ppu_tname.load())));
l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"PPU: ID = 0x%07x “%s”, priority = %d, joiner = %s, state = %s", id, *ppu.ppu_tname.load(), +ppu.prio, ppu.joiner.load(), ppu.state.load())));
});
lv2_types.emplace_back(l_addTreeChild(root, "SPU Threads"));
@ -290,7 +290,7 @@ void kernel_explorer::Update()
idm::select<named_thread<spu_thread>>([&](u32 /*id*/, spu_thread& spu)
{
lv2_types.back().count++;
l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"SPU Thread: ID = 0x%08x “%s”", spu.lv2_id, *spu.spu_tname.load())));
l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"SPU: ID = 0x%07x “%s”, state = %s", spu.lv2_id, *spu.spu_tname.load(), spu.state.load())));
});
lv2_types.emplace_back(l_addTreeChild(root, "SPU Thread Groups"));
@ -298,7 +298,7 @@ void kernel_explorer::Update()
idm::select<lv2_spu_group>([&](u32 id, lv2_spu_group& tg)
{
lv2_types.back().count++;
l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"SPU Thread Group: ID = 0x%08x “%s”", id, tg.name)));
l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"SPU Group: ID = 0x%07x “%s”, status = %s, priority = %d, type = 0x%x", id, tg.name, tg.run_state.load(), +tg.prio, tg.type)));
});
lv2_types.emplace_back(l_addTreeChild(root, "File Descriptors"));