|
@@ -13,6 +13,7 @@
|
|
|
#include "core/arm/arm_interface.h"
|
|
#include "core/arm/arm_interface.h"
|
|
|
#include "core/core.h"
|
|
#include "core/core.h"
|
|
|
#include "core/hle/kernel/handle_table.h"
|
|
#include "core/hle/kernel/handle_table.h"
|
|
|
|
|
+#include "core/hle/kernel/k_class_token.h"
|
|
|
#include "core/hle/kernel/k_readable_event.h"
|
|
#include "core/hle/kernel/k_readable_event.h"
|
|
|
#include "core/hle/kernel/k_scheduler.h"
|
|
#include "core/hle/kernel/k_scheduler.h"
|
|
|
#include "core/hle/kernel/k_synchronization_object.h"
|
|
#include "core/hle/kernel/k_synchronization_object.h"
|
|
@@ -183,20 +184,20 @@ bool WaitTreeExpandableItem::IsExpandable() const {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
QString WaitTreeSynchronizationObject::GetText() const {
|
|
QString WaitTreeSynchronizationObject::GetText() const {
|
|
|
- // return tr("[%1]%2 %3")
|
|
|
|
|
- // .arg(object.GetObjectId())
|
|
|
|
|
- // .arg(QString::fromStdString(object.GetTypeName()),
|
|
|
|
|
- // QString::fromStdString(object.GetName()));
|
|
|
|
|
-
|
|
|
|
|
- return tr("UNIMPLEMENTED");
|
|
|
|
|
|
|
+ return tr("[%1] %2 %3")
|
|
|
|
|
+ .arg(object.GetId())
|
|
|
|
|
+ .arg(QString::fromStdString(object.GetTypeObj().GetName()),
|
|
|
|
|
+ QString::fromStdString(object.GetName()));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
std::unique_ptr<WaitTreeSynchronizationObject> WaitTreeSynchronizationObject::make(
|
|
std::unique_ptr<WaitTreeSynchronizationObject> WaitTreeSynchronizationObject::make(
|
|
|
const Kernel::KSynchronizationObject& object) {
|
|
const Kernel::KSynchronizationObject& object) {
|
|
|
- switch (object.GetHandleType()) {
|
|
|
|
|
- case Kernel::HandleType::ReadableEvent:
|
|
|
|
|
|
|
+ const auto type =
|
|
|
|
|
+ static_cast<Kernel::KClassTokenGenerator::ObjectType>(object.GetTypeObj().GetClassToken());
|
|
|
|
|
+ switch (type) {
|
|
|
|
|
+ case Kernel::KClassTokenGenerator::ObjectType::KReadableEvent:
|
|
|
return std::make_unique<WaitTreeEvent>(static_cast<const Kernel::KReadableEvent&>(object));
|
|
return std::make_unique<WaitTreeEvent>(static_cast<const Kernel::KReadableEvent&>(object));
|
|
|
- case Kernel::HandleType::Thread:
|
|
|
|
|
|
|
+ case Kernel::KClassTokenGenerator::ObjectType::KThread:
|
|
|
return std::make_unique<WaitTreeThread>(static_cast<const Kernel::KThread&>(object));
|
|
return std::make_unique<WaitTreeThread>(static_cast<const Kernel::KThread&>(object));
|
|
|
default:
|
|
default:
|
|
|
return std::make_unique<WaitTreeSynchronizationObject>(object);
|
|
return std::make_unique<WaitTreeSynchronizationObject>(object);
|
|
@@ -206,12 +207,13 @@ std::unique_ptr<WaitTreeSynchronizationObject> WaitTreeSynchronizationObject::ma
|
|
|
std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeSynchronizationObject::GetChildren() const {
|
|
std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeSynchronizationObject::GetChildren() const {
|
|
|
std::vector<std::unique_ptr<WaitTreeItem>> list;
|
|
std::vector<std::unique_ptr<WaitTreeItem>> list;
|
|
|
|
|
|
|
|
- const auto& threads = object.GetWaitingThreadsForDebugging();
|
|
|
|
|
|
|
+ auto threads = object.GetWaitingThreadsForDebugging();
|
|
|
if (threads.empty()) {
|
|
if (threads.empty()) {
|
|
|
list.push_back(std::make_unique<WaitTreeText>(tr("waited by no thread")));
|
|
list.push_back(std::make_unique<WaitTreeText>(tr("waited by no thread")));
|
|
|
} else {
|
|
} else {
|
|
|
- list.push_back(std::make_unique<WaitTreeThreadList>(threads));
|
|
|
|
|
|
|
+ list.push_back(std::make_unique<WaitTreeThreadList>(std::move(threads)));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
return list;
|
|
return list;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -379,8 +381,8 @@ WaitTreeEvent::WaitTreeEvent(const Kernel::KReadableEvent& object)
|
|
|
: WaitTreeSynchronizationObject(object) {}
|
|
: WaitTreeSynchronizationObject(object) {}
|
|
|
WaitTreeEvent::~WaitTreeEvent() = default;
|
|
WaitTreeEvent::~WaitTreeEvent() = default;
|
|
|
|
|
|
|
|
-WaitTreeThreadList::WaitTreeThreadList(const std::vector<Kernel::KThread*>& list)
|
|
|
|
|
- : thread_list(list) {}
|
|
|
|
|
|
|
+WaitTreeThreadList::WaitTreeThreadList(std::vector<Kernel::KThread*>&& list)
|
|
|
|
|
+ : thread_list(std::move(list)) {}
|
|
|
WaitTreeThreadList::~WaitTreeThreadList() = default;
|
|
WaitTreeThreadList::~WaitTreeThreadList() = default;
|
|
|
|
|
|
|
|
QString WaitTreeThreadList::GetText() const {
|
|
QString WaitTreeThreadList::GetText() const {
|