Browse Source

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
Ryan Foster 2 years ago
parent
commit
02478d4939

+ 3 - 3
UI/volume-control.cpp

@@ -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
UI/volume-control.hpp

@@ -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
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<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
UI/window-basic-main.hpp

@@ -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
UI/window-extra-browsers.cpp

@@ -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);