From 02478d49398c00f999d51ce34cb9bee3f82e48c7 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Tue, 3 Oct 2023 18:13:56 -0400 Subject: [PATCH] UI: Use std::shared_ptr instead of QSharedPointer Also use std::weak_ptr instead of QWeakPointer as needed. Qt has been porting QSharedPointer and QWeakPointer to std::shared_ptr and std::weak_ptr respectively. QSharedPointer is apparently 2x slower than std::shared_ptr. References: * https://bugreports.qt.io/browse/QTBUG-109570 * https://codereview.qt-project.org/c/qt/qtbase/+/359678 * https://codereview.qt-project.org/c/qt/qtgrpc/+/447780 * https://codereview.qt-project.org/c/qt/qtbase/+/450134 * https://codereview.qt-project.org/c/qt/qttools/+/450776 * https://codereview.qt-project.org/c/qt/qttools/+/450777 * https://codereview.qt-project.org/q/QSharedPointer --- UI/volume-control.cpp | 6 +++--- UI/volume-control.hpp | 5 ++--- UI/window-basic-main.cpp | 4 ++-- UI/window-basic-main.hpp | 4 ++-- UI/window-extra-browsers.cpp | 6 +++--- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/UI/volume-control.cpp b/UI/volume-control.cpp index 5f9c271af..9303f78dc 100644 --- a/UI/volume-control.cpp +++ b/UI/volume-control.cpp @@ -23,7 +23,7 @@ using namespace std; // Padding on top and bottom of vertical meters #define METER_PADDING 1 -QWeakPointer VolumeMeter::updateTimer; +std::weak_ptr VolumeMeter::updateTimer; static inline Qt::CheckState GetCheckState(bool muted, bool unassigned) { @@ -870,9 +870,9 @@ VolumeMeter::VolumeMeter(QWidget *parent, obs_volmeter_t *obs_volmeter, channels = (int)audio_output_get_channels(obs_get_audio()); doLayout(); - updateTimerRef = updateTimer.toStrongRef(); + updateTimerRef = updateTimer.lock(); if (!updateTimerRef) { - updateTimerRef = QSharedPointer::create(); + updateTimerRef = std::make_shared(); updateTimerRef->setTimerType(Qt::PreciseTimer); updateTimerRef->start(16); updateTimer = updateTimerRef; diff --git a/UI/volume-control.hpp b/UI/volume-control.hpp index bf13035c9..613add27f 100644 --- a/UI/volume-control.hpp +++ b/UI/volume-control.hpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -96,8 +95,8 @@ class VolumeMeter : public QWidget { private: obs_volmeter_t *obs_volmeter; - static QWeakPointer updateTimer; - QSharedPointer updateTimerRef; + static std::weak_ptr updateTimer; + std::shared_ptr updateTimerRef; inline void resetLevels(); inline void doLayout(); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 4fb0e38db..c768a4473 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -10487,7 +10487,7 @@ void OBSBasic::AddDockWidget(QDockWidget *dock, Qt::DockWidgetArea area, #endif extraDockNames.push_back(dock->objectName()); - extraDocks.push_back(QSharedPointer(dock)); + extraDocks.push_back(std::shared_ptr(dock)); } void OBSBasic::RemoveDockWidget(const QString &name) @@ -10495,7 +10495,7 @@ void OBSBasic::RemoveDockWidget(const QString &name) if (extraDockNames.contains(name)) { int idx = extraDockNames.indexOf(name); extraDockNames.removeAt(idx); - extraDocks[idx].clear(); + extraDocks[idx].reset(); extraDocks.removeAt(idx); } else if (extraCustomDockNames.contains(name)) { int idx = extraCustomDockNames.indexOf(name); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index b1eb39592..348ffcd97 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -564,7 +564,7 @@ private: void UpdatePreviewProgramIndicators(); QStringList extraDockNames; - QList> extraDocks; + QList> extraDocks; QStringList extraCustomDockNames; QList> extraCustomDocks; @@ -572,7 +572,7 @@ private: #ifdef BROWSER_AVAILABLE QPointer extraBrowserMenuDocksSeparator; - QList> extraBrowserDocks; + QList> extraBrowserDocks; QStringList extraBrowserDockNames; QStringList extraBrowserDockTargets; diff --git a/UI/window-extra-browsers.cpp b/UI/window-extra-browsers.cpp index 821ca7a8d..5ee8c686c 100644 --- a/UI/window-extra-browsers.cpp +++ b/UI/window-extra-browsers.cpp @@ -174,7 +174,7 @@ void ExtraBrowsersModel::UpdateItem(Item &item) OBSBasic *main = OBSBasic::Get(); BrowserDock *dock = reinterpret_cast( - main->extraBrowserDocks[idx].data()); + main->extraBrowserDocks[idx].get()); dock->setWindowTitle(item.title); dock->setObjectName(item.title + OBJ_NAME_SUFFIX); @@ -498,7 +498,7 @@ void OBSBasic::SaveExtraBrowserDocks() { Json::array array; for (int i = 0; i < extraBrowserDocks.size(); i++) { - QDockWidget *dock = extraBrowserDocks[i].data(); + QDockWidget *dock = extraBrowserDocks[i].get(); QString title = extraBrowserDockNames[i]; QString url = extraBrowserDockTargets[i]; QString uuid = dock->property("uuid").toString(); @@ -571,7 +571,7 @@ void OBSBasic::AddExtraBrowserDock(const QString &title, const QString &url, } AddDockWidget(dock, Qt::RightDockWidgetArea, true); - extraBrowserDocks.push_back(QSharedPointer(dock)); + extraBrowserDocks.push_back(std::shared_ptr(dock)); extraBrowserDockNames.push_back(title); extraBrowserDockTargets.push_back(url);