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
This commit is contained in:
Ryan Foster
2023-10-04 18:36:20 -04:00
parent 3d05d681b7
commit 02478d4939
5 changed files with 12 additions and 13 deletions
+3 -3
View File
@@ -23,7 +23,7 @@ using namespace std;
// Padding on top and bottom of vertical meters
#define METER_PADDING 1
QWeakPointer<VolumeMeterTimer> VolumeMeter::updateTimer;
std::weak_ptr<VolumeMeterTimer> 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<VolumeMeterTimer>::create();
updateTimerRef = std::make_shared<VolumeMeterTimer>();
updateTimerRef->setTimerType(Qt::PreciseTimer);
updateTimerRef->start(16);
updateTimer = updateTimerRef;
+2 -3
View File
@@ -3,7 +3,6 @@
#include <obs.hpp>
#include <QWidget>
#include <QPaintEvent>
#include <QSharedPointer>
#include <QTimer>
#include <QMutex>
#include <QList>
@@ -96,8 +95,8 @@ class VolumeMeter : public QWidget {
private:
obs_volmeter_t *obs_volmeter;
static QWeakPointer<VolumeMeterTimer> updateTimer;
QSharedPointer<VolumeMeterTimer> updateTimerRef;
static std::weak_ptr<VolumeMeterTimer> updateTimer;
std::shared_ptr<VolumeMeterTimer> updateTimerRef;
inline void resetLevels();
inline void doLayout();
+2 -2
View File
@@ -10487,7 +10487,7 @@ void OBSBasic::AddDockWidget(QDockWidget *dock, Qt::DockWidgetArea area,
#endif
extraDockNames.push_back(dock->objectName());
extraDocks.push_back(QSharedPointer<QDockWidget>(dock));
extraDocks.push_back(std::shared_ptr<QDockWidget>(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);
+2 -2
View File
@@ -564,7 +564,7 @@ private:
void UpdatePreviewProgramIndicators();
QStringList extraDockNames;
QList<QSharedPointer<QDockWidget>> extraDocks;
QList<std::shared_ptr<QDockWidget>> extraDocks;
QStringList extraCustomDockNames;
QList<QPointer<QDockWidget>> extraCustomDocks;
@@ -572,7 +572,7 @@ private:
#ifdef BROWSER_AVAILABLE
QPointer<QAction> extraBrowserMenuDocksSeparator;
QList<QSharedPointer<QDockWidget>> extraBrowserDocks;
QList<std::shared_ptr<QDockWidget>> extraBrowserDocks;
QStringList extraBrowserDockNames;
QStringList extraBrowserDockTargets;
+3 -3
View File
@@ -174,7 +174,7 @@ void ExtraBrowsersModel::UpdateItem(Item &item)
OBSBasic *main = OBSBasic::Get();
BrowserDock *dock = reinterpret_cast<BrowserDock *>(
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<QDockWidget>(dock));
extraBrowserDocks.push_back(std::shared_ptr<QDockWidget>(dock));
extraBrowserDockNames.push_back(title);
extraBrowserDockTargets.push_back(url);