diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 08a510f32c..4755d9137a 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -208,7 +208,7 @@ void Agent::run() { _scriptEngine.init(); // must be done before we set up the viewers - _scriptEngine.registerGlobalObject("SoundCache", &SoundCache::getInstance()); + _scriptEngine.registerGlobalObject("SoundCache", DependencyManager::get().data()); _scriptEngine.registerGlobalObject("EntityViewer", &_entityViewer); _entityViewer.setJurisdictionListener(_scriptEngine.getEntityScriptingInterface()->getJurisdictionListener()); diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 9eb2fad739..80f3cbab5e 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -136,7 +136,7 @@ AssignmentClient::AssignmentClient(int &argc, char **argv) : // Create Singleton objects on main thread NetworkAccessManager::getInstance(); - SoundCache::getInstance(); + auto soundCache = DependencyManager::get(); } void AssignmentClient::sendAssignmentRequest() { diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2011f9b82e..903cae413e 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -211,6 +211,8 @@ bool setupEssentials(int& argc, char** argv) { auto addressManager = DependencyManager::set(); auto nodeList = DependencyManager::set(NodeType::Agent, listenPort); auto geometryCache = DependencyManager::set(); + auto scriptCache = DependencyManager::set(); + auto soundCache = DependencyManager::set(); auto glowEffect = DependencyManager::set(); auto faceshift = DependencyManager::set(); auto audio = DependencyManager::set(); @@ -563,11 +565,14 @@ Application::~Application() { _myAvatar = NULL; DependencyManager::destroy(); + + qDebug() << "start destroying ResourceCaches Application::~Application() line:" << __LINE__; DependencyManager::destroy(); DependencyManager::destroy(); DependencyManager::destroy(); DependencyManager::destroy(); DependencyManager::destroy(); + qDebug() << "done destroying ResourceCaches Application::~Application() line:" << __LINE__; } void Application::initializeGL() { @@ -3466,7 +3471,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri scriptEngine->registerGlobalObject("Settings", SettingsScriptingInterface::getInstance()); scriptEngine->registerGlobalObject("AudioDevice", AudioDeviceScriptingInterface::getInstance()); scriptEngine->registerGlobalObject("AnimationCache", DependencyManager::get().data()); - scriptEngine->registerGlobalObject("SoundCache", &SoundCache::getInstance()); + scriptEngine->registerGlobalObject("SoundCache", DependencyManager::get().data()); scriptEngine->registerGlobalObject("Account", AccountScriptingInterface::getInstance()); scriptEngine->registerGlobalObject("Metavoxels", &_metavoxels); diff --git a/interface/src/ui/CachesSizeDialog.cpp b/interface/src/ui/CachesSizeDialog.cpp index 4d4457c922..d21d1c2db8 100644 --- a/interface/src/ui/CachesSizeDialog.cpp +++ b/interface/src/ui/CachesSizeDialog.cpp @@ -59,8 +59,8 @@ CachesSizeDialog::CachesSizeDialog(QWidget* parent) : void CachesSizeDialog::confirmClicked(bool checked) { DependencyManager::get()->setUnusedResourceCacheSize(_animations->value() * BYTES_PER_MEGABYTES); DependencyManager::get()->setUnusedResourceCacheSize(_geometries->value() * BYTES_PER_MEGABYTES); - ScriptCache::getInstance()->setUnusedResourceCacheSize(_scripts->value() * BYTES_PER_MEGABYTES); - SoundCache::getInstance().setUnusedResourceCacheSize(_sounds->value() * BYTES_PER_MEGABYTES); + DependencyManager::get()->setUnusedResourceCacheSize(_scripts->value() * BYTES_PER_MEGABYTES); + DependencyManager::get()->setUnusedResourceCacheSize(_sounds->value() * BYTES_PER_MEGABYTES); DependencyManager::get()->setUnusedResourceCacheSize(_textures->value() * BYTES_PER_MEGABYTES); QDialog::close(); @@ -69,8 +69,8 @@ void CachesSizeDialog::confirmClicked(bool checked) { void CachesSizeDialog::resetClicked(bool checked) { _animations->setValue(DependencyManager::get()->getUnusedResourceCacheSize() / BYTES_PER_MEGABYTES); _geometries->setValue(DependencyManager::get()->getUnusedResourceCacheSize() / BYTES_PER_MEGABYTES); - _scripts->setValue(ScriptCache::getInstance()->getUnusedResourceCacheSize() / BYTES_PER_MEGABYTES); - _sounds->setValue(SoundCache::getInstance().getUnusedResourceCacheSize() / BYTES_PER_MEGABYTES); + _scripts->setValue(DependencyManager::get()->getUnusedResourceCacheSize() / BYTES_PER_MEGABYTES); + _sounds->setValue(DependencyManager::get()->getUnusedResourceCacheSize() / BYTES_PER_MEGABYTES); _textures->setValue(DependencyManager::get()->getUnusedResourceCacheSize() / BYTES_PER_MEGABYTES); } diff --git a/libraries/audio/src/SoundCache.cpp b/libraries/audio/src/SoundCache.cpp index fe05372ce5..2949a6c70a 100644 --- a/libraries/audio/src/SoundCache.cpp +++ b/libraries/audio/src/SoundCache.cpp @@ -15,11 +15,6 @@ static int soundPointerMetaTypeId = qRegisterMetaType(); -SoundCache& SoundCache::getInstance() { - static SoundCache staticInstance; - return staticInstance; -} - SoundCache::SoundCache(QObject* parent) : ResourceCache(parent) { diff --git a/libraries/audio/src/SoundCache.h b/libraries/audio/src/SoundCache.h index f9fbf51c10..7942e16010 100644 --- a/libraries/audio/src/SoundCache.h +++ b/libraries/audio/src/SoundCache.h @@ -17,11 +17,11 @@ #include "Sound.h" /// Scriptable interface for sound loading. -class SoundCache : public ResourceCache { +class SoundCache : public ResourceCache, public Dependency { Q_OBJECT + SINGLETON_DEPENDENCY + public: - static SoundCache& getInstance(); - Q_INVOKABLE SharedSoundPointer getSound(const QUrl& url); protected: diff --git a/libraries/metavoxels/src/Bitstream.cpp b/libraries/metavoxels/src/Bitstream.cpp index 642562bfb5..9c672a415e 100644 --- a/libraries/metavoxels/src/Bitstream.cpp +++ b/libraries/metavoxels/src/Bitstream.cpp @@ -465,9 +465,9 @@ void Bitstream::writeRawDelta(const QScriptValue& value, const QScriptValue& ref } else if (reference.isArray()) { if (value.isArray()) { *this << false; - int length = value.property(ScriptCache::getInstance()->getLengthString()).toInt32(); + int length = value.property(DependencyManager::get()->getLengthString()).toInt32(); *this << length; - int referenceLength = reference.property(ScriptCache::getInstance()->getLengthString()).toInt32(); + int referenceLength = reference.property(DependencyManager::get()->getLengthString()).toInt32(); for (int i = 0; i < length; i++) { if (i < referenceLength) { writeDelta(value.property(i), reference.property(i)); @@ -555,7 +555,7 @@ void Bitstream::readRawDelta(QScriptValue& value, const QScriptValue& reference) } else { QVariant variant; readRawDelta(variant, reference.toVariant()); - value = ScriptCache::getInstance()->getEngine()->newVariant(variant); + value = DependencyManager::get()->getEngine()->newVariant(variant); } } else if (reference.isQObject()) { bool typeChanged; @@ -566,7 +566,7 @@ void Bitstream::readRawDelta(QScriptValue& value, const QScriptValue& reference) } else { QObject* object; readRawDelta(object, reference.toQObject()); - value = ScriptCache::getInstance()->getEngine()->newQObject(object, QScriptEngine::ScriptOwnership); + value = DependencyManager::get()->getEngine()->newQObject(object, QScriptEngine::ScriptOwnership); } } else if (reference.isQMetaObject()) { bool typeChanged; @@ -577,7 +577,7 @@ void Bitstream::readRawDelta(QScriptValue& value, const QScriptValue& reference) } else { const QMetaObject* metaObject; *this >> metaObject; - value = ScriptCache::getInstance()->getEngine()->newQMetaObject(metaObject); + value = DependencyManager::get()->getEngine()->newQMetaObject(metaObject); } } else if (reference.isDate()) { bool typeChanged; @@ -588,7 +588,7 @@ void Bitstream::readRawDelta(QScriptValue& value, const QScriptValue& reference) } else { QDateTime dateTime; *this >> dateTime; - value = ScriptCache::getInstance()->getEngine()->newDate(dateTime); + value = DependencyManager::get()->getEngine()->newDate(dateTime); } } else if (reference.isRegExp()) { bool typeChanged; @@ -599,7 +599,7 @@ void Bitstream::readRawDelta(QScriptValue& value, const QScriptValue& reference) } else { QRegExp regExp; *this >> regExp; - value = ScriptCache::getInstance()->getEngine()->newRegExp(regExp); + value = DependencyManager::get()->getEngine()->newRegExp(regExp); } } else if (reference.isArray()) { bool typeChanged; @@ -610,8 +610,8 @@ void Bitstream::readRawDelta(QScriptValue& value, const QScriptValue& reference) } else { int length; *this >> length; - value = ScriptCache::getInstance()->getEngine()->newArray(length); - int referenceLength = reference.property(ScriptCache::getInstance()->getLengthString()).toInt32(); + value = DependencyManager::get()->getEngine()->newArray(length); + int referenceLength = reference.property(DependencyManager::get()->getLengthString()).toInt32(); for (int i = 0; i < length; i++) { QScriptValue element; if (i < referenceLength) { @@ -630,7 +630,7 @@ void Bitstream::readRawDelta(QScriptValue& value, const QScriptValue& reference) } else { // start by shallow-copying the reference - value = ScriptCache::getInstance()->getEngine()->newObject(); + value = DependencyManager::get()->getEngine()->newObject(); for (QScriptValueIterator it(reference); it.hasNext(); ) { it.next(); value.setProperty(it.scriptName(), it.value()); @@ -1036,7 +1036,7 @@ Bitstream& Bitstream::operator<<(const QScriptValue& value) { } else if (value.isArray()) { writeScriptValueType(*this, ARRAY_SCRIPT_VALUE); - int length = value.property(ScriptCache::getInstance()->getLengthString()).toInt32(); + int length = value.property(DependencyManager::get()->getLengthString()).toInt32(); *this << length; for (int i = 0; i < length; i++) { *this << value.property(i); @@ -1087,37 +1087,37 @@ Bitstream& Bitstream::operator>>(QScriptValue& value) { case VARIANT_SCRIPT_VALUE: { QVariant variantValue; *this >> variantValue; - value = ScriptCache::getInstance()->getEngine()->newVariant(variantValue); + value = DependencyManager::get()->getEngine()->newVariant(variantValue); break; } case QOBJECT_SCRIPT_VALUE: { QObject* object; *this >> object; - ScriptCache::getInstance()->getEngine()->newQObject(object, QScriptEngine::ScriptOwnership); + DependencyManager::get()->getEngine()->newQObject(object, QScriptEngine::ScriptOwnership); break; } case QMETAOBJECT_SCRIPT_VALUE: { const QMetaObject* metaObject; *this >> metaObject; - ScriptCache::getInstance()->getEngine()->newQMetaObject(metaObject); + DependencyManager::get()->getEngine()->newQMetaObject(metaObject); break; } case DATE_SCRIPT_VALUE: { QDateTime dateTime; *this >> dateTime; - value = ScriptCache::getInstance()->getEngine()->newDate(dateTime); + value = DependencyManager::get()->getEngine()->newDate(dateTime); break; } case REGEXP_SCRIPT_VALUE: { QRegExp regExp; *this >> regExp; - value = ScriptCache::getInstance()->getEngine()->newRegExp(regExp); + value = DependencyManager::get()->getEngine()->newRegExp(regExp); break; } case ARRAY_SCRIPT_VALUE: { int length; *this >> length; - value = ScriptCache::getInstance()->getEngine()->newArray(length); + value = DependencyManager::get()->getEngine()->newArray(length); for (int i = 0; i < length; i++) { QScriptValue element; *this >> element; @@ -1126,7 +1126,7 @@ Bitstream& Bitstream::operator>>(QScriptValue& value) { break; } case OBJECT_SCRIPT_VALUE: { - value = ScriptCache::getInstance()->getEngine()->newObject(); + value = DependencyManager::get()->getEngine()->newObject(); forever { QScriptString name; *this >> name; @@ -1477,7 +1477,7 @@ Bitstream& Bitstream::operator>(QScriptString& string) { QString rawString; *this >> rawString; string = (rawString == INVALID_STRING) ? QScriptString() : - ScriptCache::getInstance()->getEngine()->toStringHandle(rawString); + DependencyManager::get()->getEngine()->toStringHandle(rawString); return *this; } @@ -1828,7 +1828,7 @@ QJsonValue JSONWriter::getData(const QScriptValue& value) { } else if (value.isArray()) { object.insert("type", QString("ARRAY")); QJsonArray array; - int length = value.property(ScriptCache::getInstance()->getLengthString()).toInt32(); + int length = value.property(DependencyManager::get()->getLengthString()).toInt32(); for (int i = 0; i < length; i++) { array.append(getData(value.property(i))); } @@ -2209,31 +2209,31 @@ void JSONReader::putData(const QJsonValue& data, QScriptValue& value) { } else if (type == "VARIANT") { QVariant variant; putData(object.value("value"), variant); - value = ScriptCache::getInstance()->getEngine()->newVariant(variant); + value = DependencyManager::get()->getEngine()->newVariant(variant); } else if (type == "QOBJECT") { QObject* qObject; putData(object.value("value"), qObject); - value = ScriptCache::getInstance()->getEngine()->newQObject(qObject, QScriptEngine::ScriptOwnership); + value = DependencyManager::get()->getEngine()->newQObject(qObject, QScriptEngine::ScriptOwnership); } else if (type == "QMETAOBJECT") { const QMetaObject* metaObject; putData(object.value("value"), metaObject); - value = ScriptCache::getInstance()->getEngine()->newQMetaObject(metaObject); + value = DependencyManager::get()->getEngine()->newQMetaObject(metaObject); } else if (type == "DATE") { QDateTime dateTime; putData(object.value("value"), dateTime); - value = ScriptCache::getInstance()->getEngine()->newDate(dateTime); + value = DependencyManager::get()->getEngine()->newDate(dateTime); } else if (type == "REGEXP") { QRegExp regExp; putData(object.value("value"), regExp); - value = ScriptCache::getInstance()->getEngine()->newRegExp(regExp); + value = DependencyManager::get()->getEngine()->newRegExp(regExp); } else if (type == "ARRAY") { QJsonArray array = object.value("value").toArray(); - value = ScriptCache::getInstance()->getEngine()->newArray(array.size()); + value = DependencyManager::get()->getEngine()->newArray(array.size()); for (int i = 0; i < array.size(); i++) { QScriptValue element; putData(array.at(i), element); @@ -2241,7 +2241,7 @@ void JSONReader::putData(const QJsonValue& data, QScriptValue& value) { } } else if (type == "OBJECT") { QJsonObject jsonObject = object.value("value").toObject(); - value = ScriptCache::getInstance()->getEngine()->newObject(); + value = DependencyManager::get()->getEngine()->newObject(); for (QJsonObject::const_iterator it = jsonObject.constBegin(); it != jsonObject.constEnd(); it++) { QScriptValue element; putData(it.value(), element); diff --git a/libraries/metavoxels/src/MetavoxelUtil.cpp b/libraries/metavoxels/src/MetavoxelUtil.cpp index 73900fdcbc..4e86e1c636 100644 --- a/libraries/metavoxels/src/MetavoxelUtil.cpp +++ b/libraries/metavoxels/src/MetavoxelUtil.cpp @@ -663,7 +663,7 @@ void ParameterizedURLEditor::updateURL() { QByteArray valuePropertyName = widget->property("valuePropertyName").toByteArray(); const QMetaObject* widgetMetaObject = widget->metaObject(); QMetaProperty widgetProperty = widgetMetaObject->property(widgetMetaObject->indexOfProperty(valuePropertyName)); - parameters.insert(ScriptCache::getInstance()->getEngine()->toStringHandle( + parameters.insert(DependencyManager::get()->getEngine()->toStringHandle( widget->property("parameterName").toString()), widgetProperty.read(widget)); } } @@ -677,7 +677,7 @@ void ParameterizedURLEditor::updateParameters() { if (_program) { _program->disconnect(this); } - _program = ScriptCache::getInstance()->getProgram(_url.getURL()); + _program = DependencyManager::get()->getProgram(_url.getURL()); if (_program->isLoaded()) { continueUpdatingParameters(); } else { @@ -698,7 +698,7 @@ void ParameterizedURLEditor::continueUpdatingParameters() { } delete form; } - QSharedPointer value = ScriptCache::getInstance()->getValue(_url.getURL()); + QSharedPointer value = DependencyManager::get()->getValue(_url.getURL()); const QList& parameters = static_cast(value.data())->getParameterInfo(); if (parameters.isEmpty()) { return; diff --git a/libraries/metavoxels/src/ScriptCache.cpp b/libraries/metavoxels/src/ScriptCache.cpp index 7e8dbc4bae..b7e81b5381 100644 --- a/libraries/metavoxels/src/ScriptCache.cpp +++ b/libraries/metavoxels/src/ScriptCache.cpp @@ -57,8 +57,8 @@ bool operator==(const QScriptValue& first, const QScriptValue& second) { if (!second.isArray()) { return false; } - int length = first.property(ScriptCache::getInstance()->getLengthString()).toInt32(); - if (second.property(ScriptCache::getInstance()->getLengthString()).toInt32() != length) { + int length = first.property(DependencyManager::get()->getLengthString()).toInt32(); + if (second.property(DependencyManager::get()->getLengthString()).toInt32() != length) { return false; } for (int i = 0; i < length; i++) { @@ -103,11 +103,6 @@ bool operator<(const QScriptValue& first, const QScriptValue& second) { return first.lessThan(second); } -ScriptCache* ScriptCache::getInstance() { - static ScriptCache cache; - return &cache; -} - ScriptCache::ScriptCache() : _engine(NULL) { diff --git a/libraries/metavoxels/src/ScriptCache.h b/libraries/metavoxels/src/ScriptCache.h index 5d29157b3d..b9294a7504 100644 --- a/libraries/metavoxels/src/ScriptCache.h +++ b/libraries/metavoxels/src/ScriptCache.h @@ -25,13 +25,11 @@ class NetworkProgram; class NetworkValue; /// Maintains a cache of loaded scripts. -class ScriptCache : public ResourceCache { +class ScriptCache : public ResourceCache, public Dependency { Q_OBJECT + SINGLETON_DEPENDENCY public: - - static ScriptCache* getInstance(); - ScriptCache(); void setEngine(QScriptEngine* engine); diff --git a/tests/metavoxels/src/MetavoxelTests.cpp b/tests/metavoxels/src/MetavoxelTests.cpp index 106c56b0fe..938b5470e8 100644 --- a/tests/metavoxels/src/MetavoxelTests.cpp +++ b/tests/metavoxels/src/MetavoxelTests.cpp @@ -219,14 +219,14 @@ static QScriptValue createRandomScriptValue(bool complex = false, bool ensureHas case 4: { int length = randIntInRange(2, 6); - QScriptValue value = ScriptCache::getInstance()->getEngine()->newArray(length); + QScriptValue value = DependencyManager::get()->getEngine()->newArray(length); for (int i = 0; i < length; i++) { value.setProperty(i, createRandomScriptValue()); } return value; } default: { - QScriptValue value = ScriptCache::getInstance()->getEngine()->newObject(); + QScriptValue value = DependencyManager::get()->getEngine()->newObject(); if (ensureHashOrder) { // we can't depend on the iteration order, so if we need it to be the same (as when comparing bytes), we // can only have one property @@ -747,7 +747,7 @@ static SharedObjectPointer mutate(const SharedObjectPointer& state) { case 3: { SharedObjectPointer newState = state->clone(true); QScriptValue oldValue = static_cast(newState.data())->getBizzle(); - QScriptValue newValue = ScriptCache::getInstance()->getEngine()->newObject(); + QScriptValue newValue = DependencyManager::get()->getEngine()->newObject(); for (QScriptValueIterator it(oldValue); it.hasNext(); ) { it.next(); newValue.setProperty(it.scriptName(), it.value()); @@ -755,8 +755,8 @@ static SharedObjectPointer mutate(const SharedObjectPointer& state) { switch (randIntInRange(0, 2)) { case 0: { QScriptValue oldArray = oldValue.property("foo"); - int oldLength = oldArray.property(ScriptCache::getInstance()->getLengthString()).toInt32(); - QScriptValue newArray = ScriptCache::getInstance()->getEngine()->newArray(oldLength); + int oldLength = oldArray.property(DependencyManager::get()->getLengthString()).toInt32(); + QScriptValue newArray = DependencyManager::get()->getEngine()->newArray(oldLength); for (int i = 0; i < oldLength; i++) { newArray.setProperty(i, oldArray.property(i)); } @@ -1203,8 +1203,8 @@ TestSharedObjectA::TestSharedObjectA(float foo, TestEnum baz, TestFlags bong) : _bong(bong) { sharedObjectsCreated++; - _bizzle = ScriptCache::getInstance()->getEngine()->newObject(); - _bizzle.setProperty("foo", ScriptCache::getInstance()->getEngine()->newArray(4)); + _bizzle = DependencyManager::get()->getEngine()->newObject(); + _bizzle.setProperty("foo", DependencyManager::get()->getEngine()->newArray(4)); } TestSharedObjectA::~TestSharedObjectA() {