diff options
author | Daniel Schürmann <daschuer@mixxx.org> | 2020-06-10 17:50:50 +0200 |
---|---|---|
committer | Daniel Schürmann <daschuer@mixxx.org> | 2020-06-10 18:00:19 +0200 |
commit | fd37489a8d6bfa8f30cc495153381e29fc00e624 (patch) | |
tree | c472cc869275282f44601c3cbf1b8d10609942f9 /src | |
parent | 65698c9adf47ff020d4e2b6624799b94362af6c9 (diff) |
Get rid of char group strings
For accessing control objects we need QStrings and converting them on the fly
takes some unnecassary time.
Diffstat (limited to 'src')
68 files changed, 234 insertions, 248 deletions
diff --git a/src/engine/enginedelay.cpp b/src/engine/enginedelay.cpp index 72c13b84e0..fea2383373 100644 --- a/src/engine/enginedelay.cpp +++ b/src/engine/enginedelay.cpp @@ -28,7 +28,7 @@ const int kiMaxDelay = (kdMaxDelayPot + 8) / 1000 * mixxx::audio::SampleRate::kValueMax * mixxx::kEngineChannelCount; } // anonymous namespace -EngineDelay::EngineDelay(const char* group, ConfigKey delayControl, bool bPersist) +EngineDelay::EngineDelay(const QString& group, ConfigKey delayControl, bool bPersist) : m_iDelayPos(0), m_iDelay(0) { m_pDelayBuffer = SampleUtil::alloc(kiMaxDelay); diff --git a/src/engine/enginedelay.h b/src/engine/enginedelay.h index 8fab4b867e..5f2d16f689 100644 --- a/src/engine/enginedelay.h +++ b/src/engine/enginedelay.h @@ -26,7 +26,7 @@ class ControlProxy; class EngineDelay : public EngineObject { Q_OBJECT public: - EngineDelay(const char* group, ConfigKey delayControl, bool bPersist = true); + EngineDelay(const QString& group, ConfigKey delayControl, bool bPersist = true); virtual ~EngineDelay(); void process(CSAMPLE* pInOut, const int iBufferSize); diff --git a/src/engine/enginemaster.cpp b/src/engine/enginemaster.cpp index d5e207d95a..76deaf7140 100644 --- a/src/engine/enginemaster.cpp +++ b/src/engine/enginemaster.cpp @@ -29,8 +29,9 @@ #include "util/timer.h" #include "util/trace.h" -EngineMaster::EngineMaster(UserSettingsPointer pConfig, - const char* group, +EngineMaster::EngineMaster( + UserSettingsPointer pConfig, + const QString& group, EffectsManager* pEffectsManager, ChannelHandleFactoryPointer pChannelHandleFactory, bool bEnableSidechain) diff --git a/src/engine/enginemaster.h b/src/engine/enginemaster.h index 73b4edb939..5b5a1f2405 100644 --- a/src/engine/enginemaster.h +++ b/src/engine/enginemaster.h @@ -56,7 +56,7 @@ class EngineMaster : public QObject, public AudioSource { Q_OBJECT public: EngineMaster(UserSettingsPointer pConfig, - const char* pGroup, + const QString& group, EffectsManager* pEffectsManager, ChannelHandleFactoryPointer pChannelHandleFactory, bool bEnableSidechain); diff --git a/src/engine/enginesidechaincompressor.cpp b/src/engine/enginesidechaincompressor.cpp index 0dc9a6bdac..bfc6b49739 100644 --- a/src/engine/enginesidechaincompressor.cpp +++ b/src/engine/enginesidechaincompressor.cpp @@ -2,7 +2,7 @@ #include "engine/enginesidechaincompressor.h" -EngineSideChainCompressor::EngineSideChainCompressor(const char* group) +EngineSideChainCompressor::EngineSideChainCompressor(const QString& group) : m_compressRatio(1.0), m_bAboveThreshold(false), m_threshold(1.0), diff --git a/src/engine/enginesidechaincompressor.h b/src/engine/enginesidechaincompressor.h index e7b043f267..ca124d39b4 100644 --- a/src/engine/enginesidechaincompressor.h +++ b/src/engine/enginesidechaincompressor.h @@ -5,7 +5,7 @@ class EngineSideChainCompressor { public: - EngineSideChainCompressor(const char* group); + EngineSideChainCompressor(const QString& group); virtual ~EngineSideChainCompressor() { }; void setParameters(CSAMPLE threshold, CSAMPLE strength, diff --git a/src/engine/enginetalkoverducking.cpp b/src/engine/enginetalkoverducking.cpp index 02e9830e9c..e67df8b131 100644 --- a/src/engine/enginetalkoverducking.cpp +++ b/src/engine/enginetalkoverducking.cpp @@ -4,10 +4,10 @@ #define DUCK_THRESHOLD 0.1 EngineTalkoverDucking::EngineTalkoverDucking( - UserSettingsPointer pConfig, const char* group) - : EngineSideChainCompressor(group), - m_pConfig(pConfig), - m_group(group) { + UserSettingsPointer pConfig, const QString& group) + : EngineSideChainCompressor(group), + m_pConfig(pConfig), + m_group(group) { m_pMasterSampleRate = new ControlProxy(m_group, "samplerate", this); m_pMasterSampleRate->connectValueChanged(this, &EngineTalkoverDucking::slotSampleRateChanged, Qt::DirectConnection); diff --git a/src/engine/enginetalkoverducking.h b/src/engine/enginetalkoverducking.h index ef98284404..090b683af8 100644 --- a/src/engine/enginetalkoverducking.h +++ b/src/engine/enginetalkoverducking.h @@ -15,7 +15,7 @@ class EngineTalkoverDucking : public QObject, public EngineSideChainCompressor { MANUAL, }; - EngineTalkoverDucking(UserSettingsPointer pConfig, const char* group); + EngineTalkoverDucking(UserSettingsPointer pConfig, const QString& group); virtual ~EngineTalkoverDucking(); TalkoverDuckSetting getMode() const { @@ -31,7 +31,7 @@ class EngineTalkoverDucking : public QObject, public EngineSideChainCompressor { private: UserSettingsPointer m_pConfig; - const char* m_group; + const QString m_group; ControlProxy* m_pMasterSampleRate; ControlPotmeter* m_pDuckStrength; diff --git a/src/engine/sync/basesyncablelistener.cpp b/src/engine/sync/basesyncablelistener.cpp index f3cde3f886..d0318aafd1 100644 --- a/src/engine/sync/basesyncablelistener.cpp +++ b/src/engine/sync/basesyncablelistener.cpp @@ -4,7 +4,7 @@ #include "engine/sync/internalclock.h" -static const char* kInternalClockGroup = "[InternalClock]"; +const QString kInternalClockGroup = QStringLiteral("[InternalClock]"); BaseSyncableListener::BaseSyncableListener(UserSettingsPointer pConfig) : m_pConfig(pConfig), diff --git a/src/engine/sync/internalclock.cpp b/src/engine/sync/internalclock.cpp index c2e7071424..0f598743c0 100644 --- a/src/engine/sync/internalclock.cpp +++ b/src/engine/sync/internalclock.cpp @@ -13,8 +13,8 @@ namespace { const mixxx::Logger kLogger("InternalClock"); } // namespace -InternalClock::InternalClock(const char* pGroup, SyncableListener* pEngineSync) - : m_group(pGroup), +InternalClock::InternalClock(const QString& group, SyncableListener* pEngineSync) + : m_group(group), m_pEngineSync(pEngineSync), m_mode(SYNC_NONE), m_iOldSampleRate(44100), @@ -28,8 +28,8 @@ InternalClock::InternalClock(const char* pGroup, SyncableListener* pEngineSync) // and bpm_down controls. // bpm_up / bpm_down steps by 1 // bpm_up_small / bpm_down_small steps by 0.1 - m_pClockBpm.reset(new ControlLinPotmeter(ConfigKey(m_group, "bpm"), - 1, 200, 1, 0.1, true)); + m_pClockBpm.reset( + new ControlLinPotmeter(ConfigKey(m_group, "bpm"), 1, 200, 1, 0.1, true)); connect(m_pClockBpm.data(), &ControlObject::valueChanged, this, &InternalClock::slotBpmChanged, Qt::DirectConnection); @@ -41,11 +41,10 @@ InternalClock::InternalClock(const char* pGroup, SyncableListener* pEngineSync) Qt::DirectConnection); m_pSyncMasterEnabled.reset( - new ControlPushButton(ConfigKey(pGroup, "sync_master"))); + new ControlPushButton(ConfigKey(m_group, "sync_master"))); m_pSyncMasterEnabled->setButtonMode(ControlPushButton::TOGGLE); m_pSyncMasterEnabled->connectValueChangeRequest( - this, &InternalClock::slotSyncMasterEnabledChangeRequest, - Qt::DirectConnection); + this, &InternalClock::slotSyncMasterEnabledChangeRequest, Qt::DirectConnection); } InternalClock::~InternalClock() { diff --git a/src/engine/sync/internalclock.h b/src/engine/sync/internalclock.h index 085fe7d9c5..21d819e6f4 100644 --- a/src/engine/sync/internalclock.h +++ b/src/engine/sync/internalclock.h @@ -22,7 +22,7 @@ class EngineSync; class InternalClock : public QObject, public Clock, public Syncable { Q_OBJECT public: - InternalClock(const char* pGroup, SyncableListener* pEngineSync); + InternalClock(const QString& group, SyncableListener* pEngineSync); ~InternalClock() override; const QString& getGroup() const override { diff --git a/src/skin/legacyskinparser.cpp b/src/skin/legacyskinparser.cpp index 0a3978a183..6ad00f9b40 100644 --- a/src/skin/legacyskinparser.cpp +++ b/src/skin/legacyskinparser.cpp @@ -89,8 +89,9 @@ using mixxx::skin::SkinManifest; -QList<const char*> LegacySkinParser::s_channelStrs; -QMutex LegacySkinParser::s_safeStringMutex; +/// This QSet allows to make use of the implicit sharing +/// of QString instead of every widget keeping its own copy. +QSet<QString> LegacySkinParser::s_sharedGroupStrings; static bool sDebug = false; @@ -248,14 +249,9 @@ QList<QString> LegacySkinParser::getSchemeList(const QString& qSkinPath) { } // static -void LegacySkinParser::freeChannelStrings() { - QMutexLocker lock(&s_safeStringMutex); - for (int i = 0; i < s_channelStrs.length(); ++i) { - if (s_channelStrs[i]) { - delete [] s_channelStrs[i]; - } - s_channelStrs[i] = NULL; - } +void LegacySkinParser::clearSharedGroupStrings() { + // This frees up the memory allocated by the QString objects + s_sharedGroupStrings.clear(); } SkinManifest LegacySkinParser::getSkinManifest(const QDomElement& skinDocument) { @@ -919,25 +915,22 @@ void LegacySkinParser::setupLabelWidget(const QDomElement& element, WLabel* pLab } QWidget* LegacySkinParser::parseOverview(const QDomElement& node) { - QString channelStr = lookupNodeGroup(node); - - const char* pSafeChannelStr = safeChannelString(channelStr); - - BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr); - - if (pPlayer == NULL) - return NULL; + QString group = lookupNodeGroup(node); + BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group); + if (!pPlayer) { + return nullptr; + } - WOverview* overviewWidget = NULL; + WOverview* overviewWidget = nullptr; // "RGB" = "2", "HSV" = "1" or "Filtered" = "0" (LMH) waveform overview type int type = m_pConfig->getValue(ConfigKey("[Waveform]","WaveformOverviewType"), 2); if (type == 0) { - overviewWidget = new WOverviewLMH(pSafeChannelStr, m_pPlayerManager, m_pConfig, m_pParent); + overviewWidget = new WOverviewLMH(group, m_pPlayerManager, m_pConfig, m_pParent); } else if (type == 1) { - overviewWidget = new WOverviewHSV(pSafeChannelStr, m_pPlayerManager, m_pConfig, m_pParent); + overviewWidget = new WOverviewHSV(group, m_pPlayerManager, m_pConfig, m_pParent); } else { - overviewWidget = new WOverviewRGB(pSafeChannelStr, m_pPlayerManager, m_pConfig, m_pParent); + overviewWidget = new WOverviewRGB(group, m_pPlayerManager, m_pConfig, m_pParent); } connect(overviewWidget, SIGNAL(trackDropped(QString, QString)), @@ -965,15 +958,13 @@ QWidget* LegacySkinParser::parseOverview(const QDomElement& node) { } QWidget* LegacySkinParser::parseVisual(const QDomElement& node) { - QString channelStr = lookupNodeGroup(node); - BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr); - - const char* pSafeChannelStr = safeChannelString(channelStr); - - if (pPlayer == NULL) - return NULL; + QString group = lookupNodeGroup(node); + BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group); + if (!pPlayer) { + return nullptr; + } - WWaveformViewer* viewer = new WWaveformViewer(pSafeChannelStr, m_pConfig, m_pParent); + WWaveformViewer* viewer = new WWaveformViewer(group, m_pConfig, m_pParent); viewer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); WaveformWidgetFactory* factory = WaveformWidgetFactory::instance(); factory->setWaveformWidget(viewer, node, *m_pContext); @@ -1004,18 +995,16 @@ QWidget* LegacySkinParser::parseVisual(const QDomElement& node) { } QWidget* LegacySkinParser::parseText(const QDomElement& node) { - QString channelStr = lookupNodeGroup(node); - const char* pSafeChannelStr = safeChannelString(channelStr); - - BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr); - - if (!pPlayer) - return NULL; + QString group = lookupNodeGroup(node); + BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group); + if (!pPlayer) { + return nullptr; + } WTrackText* p = new WTrackText(m_pParent, m_pConfig, m_pLibrary->trackCollections(), - pSafeChannelStr); + group); setupLabelWidget(node, p); connect(pPlayer, SIGNAL(newTrackLoaded(TrackPointer)), @@ -1036,18 +1025,17 @@ QWidget* LegacySkinParser::parseText(const QDomElement& node) { } QWidget* LegacySkinParser::parseTrackProperty(const QDomElement& node) { - QString channelStr = lookupNodeGroup(node); - const char* pSafeChannelStr = safeChannelString(channelStr); - - BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr); - - if (!pPlayer) - return NULL; + QString group = lookupNodeGroup(node); + BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group); + if (!pPlayer) { + return nullptr; + } - WTrackProperty* p = new WTrackProperty(m_pParent, + WTrackProperty* p = new WTrackProperty( + m_pParent, m_pConfig, m_pLibrary->trackCollections(), - pSafeChannelStr); + group); setupLabelWidget(node, p); connect(pPlayer, SIGNAL(newTrackLoaded(TrackPointer)), @@ -1068,15 +1056,13 @@ QWidget* LegacySkinParser::parseTrackProperty(const QDomElement& node) { } QWidget* LegacySkinParser::parseStarRating(const QDomElement& node) { - QString channelStr = lookupNodeGroup(node); - const char* pSafeChannelStr = safeChannelString(channelStr); - - BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr); - - if (!pPlayer) - return NULL; + QString group = lookupNodeGroup(node); + BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group); + if (!pPlayer) { + return nullptr; + } - WStarRating* p = new WStarRating(pSafeChannelStr, m_pParent); + WStarRating* p = new WStarRating(group, m_pParent); commonWidgetSetup(node, p, false); p->setup(node, *m_pContext); @@ -1096,10 +1082,7 @@ QWidget* LegacySkinParser::parseStarRating(const QDomElement& node) { QWidget* LegacySkinParser::parseNumberRate(const QDomElement& node) { - QString channelStr = lookupNodeGroup(node); - - const char* pSafeChannelStr = safeChannelString(channelStr); - + QString group = lookupNodeGroup(node); QColor c(255,255,255); QString cStr; if (m_pContext->hasNodeSelectString(node, "BgColor", &cStr)) { @@ -1110,7 +1093,7 @@ QWidget* LegacySkinParser::parseNumberRate(const QDomElement& node) { //palette.setBrush(QPalette::Background, WSkinColor::getCorrectColor(c)); palette.setBrush(QPalette::Button, Qt::NoBrush); - WNumberRate* p = new WNumberRate(pSafeChannelStr, m_pParent); + WNumberRate* p = new WNumberRate(group, m_pParent); setupLabelWidget(node, p); // TODO(rryan): Let's look at removing this palette change in 1.12.0. I @@ -1121,19 +1104,15 @@ QWidget* LegacySkinParser::parseNumberRate(const QDomElement& node) { } QWidget* LegacySkinParser::parseNumberPos(const QDomElement& node) { - QString channelStr = lookupNodeGroup(node); - - const char* pSafeChannelStr = safeChannelString(channelStr); - - WNumberPos* p = new WNumberPos(pSafeChannelStr, m_pParent); + QString group = lookupNodeGroup(node); + WNumberPos* p = new WNumberPos(group, m_pParent); setupLabelWidget(node, p); return p; } QWidget* LegacySkinParser::parseEngineKey(const QDomElement& node) { - QString channelStr = lookupNodeGroup(node); - const char* pSafeChannelStr = safeChannelString(channelStr); - WKey* pEngineKey = new WKey(pSafeChannelStr, m_pParent); + QString group = lookupNodeGroup(node); + WKey* pEngineKey = new WKey(group, m_pParent); setupLabelWidget(node, pEngineKey); return pEngineKey; } @@ -1181,7 +1160,6 @@ QWidget* LegacySkinParser::parseRecordingDuration(const QDomElement& node) { } QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) { - QString channelStr = lookupNodeGroup(node); if (CmdlineArgs::Instance().getSafeMode()) { WLabel* dummy = new WLabel(m_pParent); //: Shown when Mixxx is running in safe mode. @@ -1199,9 +1177,9 @@ QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) { return dummy; } - BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr); - WSpinny* spinny = new WSpinny(m_pParent, channelStr, m_pConfig, - m_pVCManager, pPlayer); + QString group = lookupNodeGroup(node); + BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group); + WSpinny* spinny = new WSpinny(m_pParent, group, m_pConfig, m_pVCManager, pPlayer); commonWidgetSetup(node, spinny); connect(waveformWidgetFactory, SIGNAL(renderSpinnies(VSyncThread*)), spinny, SLOT(render(VSyncThread*))); @@ -1563,24 +1541,14 @@ QString LegacySkinParser::lookupNodeGroup(const QDomElement& node) { } } - return group; + QString sharedGroup = getSharedGroupString(group); + return sharedGroup; } // static -const char* LegacySkinParser::safeChannelString(const QString& channelStr) { - QMutexLocker lock(&s_safeStringMutex); - foreach (const char *s, s_channelStrs) { - if (channelStr == s) { // calls QString::operator==(const char*) - return s; - } - } - QByteArray qba(channelStr.toLatin1()); - char *safe = new char[qba.size() + 1]; // +1 for \0 - int i = 0; - // Copy string - while ((safe[i] = qba[i])) ++i; - s_channelStrs.append(safe); - return safe; +QString LegacySkinParser::getSharedGroupString(const QString& channelStr) { + QSet<QString>::iterator i = s_sharedGroupStrings.insert(channelStr); + return *i; } QWidget* LegacySkinParser::parseEffectChainName(const QDomElement& node) { diff --g |