summaryrefslogtreecommitdiffstats
path: root/src/citra_qt/debugger/profiler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/citra_qt/debugger/profiler.cpp')
-rw-r--r--src/citra_qt/debugger/profiler.cpp111
1 files changed, 2 insertions, 109 deletions
diff --git a/src/citra_qt/debugger/profiler.cpp b/src/citra_qt/debugger/profiler.cpp
index cee10403d..f060bbe08 100644
--- a/src/citra_qt/debugger/profiler.cpp
+++ b/src/citra_qt/debugger/profiler.cpp
@@ -2,6 +2,8 @@
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
+#include <QAction>
+#include <QLayout>
#include <QMouseEvent>
#include <QPainter>
#include <QString>
@@ -9,121 +11,12 @@
#include "citra_qt/util/util.h"
#include "common/common_types.h"
#include "common/microprofile.h"
-#include "common/profiler_reporting.h"
// Include the implementation of the UI in this file. This isn't in microprofile.cpp because the
// non-Qt frontends don't need it (and don't implement the UI drawing hooks either).
#if MICROPROFILE_ENABLED
#define MICROPROFILEUI_IMPL 1
#include "common/microprofileui.h"
-#endif
-
-using namespace Common::Profiling;
-
-static QVariant GetDataForColumn(int col, const AggregatedDuration& duration) {
- static auto duration_to_float = [](Duration dur) -> float {
- using FloatMs = std::chrono::duration<float, std::chrono::milliseconds::period>;
- return std::chrono::duration_cast<FloatMs>(dur).count();
- };
-
- switch (col) {
- case 1:
- return duration_to_float(duration.avg);
- case 2:
- return duration_to_float(duration.min);
- case 3:
- return duration_to_float(duration.max);
- default:
- return QVariant();
- }
-}
-
-ProfilerModel::ProfilerModel(QObject* parent) : QAbstractItemModel(parent) {
- updateProfilingInfo();
-}
-
-QVariant ProfilerModel::headerData(int section, Qt::Orientation orientation, int role) const {
- if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
- switch (section) {
- case 0:
- return tr("Category");
- case 1:
- return tr("Avg");
- case 2:
- return tr("Min");
- case 3:
- return tr("Max");
- }
- }
-
- return QVariant();
-}
-
-QModelIndex ProfilerModel::index(int row, int column, const QModelIndex& parent) const {
- return createIndex(row, column);
-}
-
-QModelIndex ProfilerModel::parent(const QModelIndex& child) const {
- return QModelIndex();
-}
-
-int ProfilerModel::columnCount(const QModelIndex& parent) const {
- return 4;
-}
-
-int ProfilerModel::rowCount(const QModelIndex& parent) const {
- if (parent.isValid()) {
- return 0;
- } else {
- return 2;
- }
-}
-
-QVariant ProfilerModel::data(const QModelIndex& index, int role) const {
- if (role == Qt::DisplayRole) {
- if (index.row() == 0) {
- if (index.column() == 0) {
- return tr("Frame");
- } else {
- return GetDataForColumn(index.column(), results.frame_time);
- }
- } else if (index.row() == 1) {
- if (index.column() == 0) {
- return tr("Frame (with swapping)");
- } else {
- return GetDataForColumn(index.column(), results.interframe_time);
- }
- }
- }
-
- return QVariant();
-}
-
-void ProfilerModel::updateProfilingInfo() {
- results = GetTimingResultsAggregator()->GetAggregatedResults();
- emit dataChanged(createIndex(0, 1), createIndex(rowCount() - 1, 3));
-}
-
-ProfilerWidget::ProfilerWidget(QWidget* parent) : QDockWidget(parent) {
- ui.setupUi(this);
-
- model = new ProfilerModel(this);
- ui.treeView->setModel(model);
-
- connect(this, SIGNAL(visibilityChanged(bool)), SLOT(setProfilingInfoUpdateEnabled(bool)));
- connect(&update_timer, SIGNAL(timeout()), model, SLOT(updateProfilingInfo()));
-}
-
-void ProfilerWidget::setProfilingInfoUpdateEnabled(bool enable) {
- if (enable) {
- update_timer.start(100);
- model->updateProfilingInfo();
- } else {
- update_timer.stop();
- }
-}
-
-#if MICROPROFILE_ENABLED
class MicroProfileWidget : public QWidget {
public: