summaryrefslogtreecommitdiff
path: root/src/yuzu/debugger/wait_tree.h
diff options
context:
space:
mode:
authorJames Rowe <jroweboy@gmail.com>2018-01-11 19:21:20 -0700
committerJames Rowe <jroweboy@gmail.com>2018-01-12 19:11:03 -0700
commitebf9a784a9f7f4148a669dbb39e7cd50df779a14 (patch)
treed585685a1c0a34b903af1d086d62560bf56bb29f /src/yuzu/debugger/wait_tree.h
parent890bbc0cd3ab070f8e1ef32806fe51ab20dd8579 (diff)
Massive removal of unused modules
Diffstat (limited to 'src/yuzu/debugger/wait_tree.h')
-rw-r--r--src/yuzu/debugger/wait_tree.h187
1 files changed, 187 insertions, 0 deletions
diff --git a/src/yuzu/debugger/wait_tree.h b/src/yuzu/debugger/wait_tree.h
new file mode 100644
index 000000000..4034e909b
--- /dev/null
+++ b/src/yuzu/debugger/wait_tree.h
@@ -0,0 +1,187 @@
+// Copyright 2016 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <QAbstractItemModel>
+#include <QDockWidget>
+#include <QTreeView>
+#include <boost/container/flat_set.hpp>
+#include "core/core.h"
+#include "core/hle/kernel/kernel.h"
+
+class EmuThread;
+
+namespace Kernel {
+class WaitObject;
+class Event;
+class Mutex;
+class ConditionVariable;
+class Thread;
+class Timer;
+}
+
+class WaitTreeThread;
+
+class WaitTreeItem : public QObject {
+ Q_OBJECT
+public:
+ virtual bool IsExpandable() const;
+ virtual std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const;
+ virtual QString GetText() const = 0;
+ virtual QColor GetColor() const;
+ virtual ~WaitTreeItem();
+ void Expand();
+ WaitTreeItem* Parent() const;
+ const std::vector<std::unique_ptr<WaitTreeItem>>& Children() const;
+ std::size_t Row() const;
+ static std::vector<std::unique_ptr<WaitTreeThread>> MakeThreadItemList();
+
+private:
+ std::size_t row;
+ bool expanded = false;
+ WaitTreeItem* parent = nullptr;
+ std::vector<std::unique_ptr<WaitTreeItem>> children;
+};
+
+class WaitTreeText : public WaitTreeItem {
+ Q_OBJECT
+public:
+ explicit WaitTreeText(const QString& text);
+ QString GetText() const override;
+
+private:
+ QString text;
+};
+
+class WaitTreeExpandableItem : public WaitTreeItem {
+ Q_OBJECT
+public:
+ bool IsExpandable() const override;
+};
+
+class WaitTreeWaitObject : public WaitTreeExpandableItem {
+ Q_OBJECT
+public:
+ explicit WaitTreeWaitObject(const Kernel::WaitObject& object);
+ static std::unique_ptr<WaitTreeWaitObject> make(const Kernel::WaitObject& object);
+ QString GetText() const override;
+ std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
+
+protected:
+ const Kernel::WaitObject& object;
+
+ static QString GetResetTypeQString(Kernel::ResetType reset_type);
+};
+
+class WaitTreeObjectList : public WaitTreeExpandableItem {
+ Q_OBJECT
+public:
+ WaitTreeObjectList(const std::vector<Kernel::SharedPtr<Kernel::WaitObject>>& list,
+ bool wait_all);
+ QString GetText() const override;
+ std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
+
+private:
+ const std::vector<Kernel::SharedPtr<Kernel::WaitObject>>& object_list;
+ bool wait_all;
+};
+
+class WaitTreeThread : public WaitTreeWaitObject {
+ Q_OBJECT
+public:
+ explicit WaitTreeThread(const Kernel::Thread& thread);
+ QString GetText() const override;
+ QColor GetColor() const override;
+ std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
+};
+
+class WaitTreeEvent : public WaitTreeWaitObject {
+ Q_OBJECT
+public:
+ explicit WaitTreeEvent(const Kernel::Event& object);
+ std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
+};
+
+class WaitTreeMutex : public WaitTreeWaitObject {
+ Q_OBJECT
+public:
+ explicit WaitTreeMutex(const Kernel::Mutex& object);
+ std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
+};
+
+class WaitTreeConditionVariable : public WaitTreeWaitObject {
+ Q_OBJECT
+public:
+ explicit WaitTreeConditionVariable(const Kernel::ConditionVariable& object);
+ std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
+};
+
+class WaitTreeTimer : public WaitTreeWaitObject {
+ Q_OBJECT
+public:
+ explicit WaitTreeTimer(const Kernel::Timer& object);
+ std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
+};
+
+class WaitTreeMutexList : public WaitTreeExpandableItem {
+ Q_OBJECT
+public:
+ explicit WaitTreeMutexList(
+ const boost::container::flat_set<Kernel::SharedPtr<Kernel::Mutex>>& list);
+
+ QString GetText() const override;
+ std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
+
+private:
+ const boost::container::flat_set<Kernel::SharedPtr<Kernel::Mutex>>& mutex_list;
+};
+
+class WaitTreeThreadList : public WaitTreeExpandableItem {
+ Q_OBJECT
+public:
+ explicit WaitTreeThreadList(const std::vector<Kernel::SharedPtr<Kernel::Thread>>& list);
+ QString GetText() const override;
+ std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
+
+private:
+ const std::vector<Kernel::SharedPtr<Kernel::Thread>>& thread_list;
+};
+
+class WaitTreeModel : public QAbstractItemModel {
+ Q_OBJECT
+
+public:
+ explicit WaitTreeModel(QObject* parent = nullptr);
+
+ QVariant data(const QModelIndex& index, int role) const override;
+ QModelIndex index(int row, int column, const QModelIndex& parent) const override;
+ QModelIndex parent(const QModelIndex& index) const override;
+ int rowCount(const QModelIndex& parent) const override;
+ int columnCount(const QModelIndex& parent) const override;
+
+ void ClearItems();
+ void InitItems();
+
+private:
+ std::vector<std::unique_ptr<WaitTreeThread>> thread_items;
+};
+
+class WaitTreeWidget : public QDockWidget {
+ Q_OBJECT
+
+public:
+ explicit WaitTreeWidget(QWidget* parent = nullptr);
+
+public slots:
+ void OnDebugModeEntered();
+ void OnDebugModeLeft();
+
+ void OnEmulationStarting(EmuThread* emu_thread);
+ void OnEmulationStopping();
+
+private:
+ QTreeView* view;
+ WaitTreeModel* model;
+};