History

* integrate with latest master * consolidate emit entityScriptDetailsUpdated calls * limit maxRetries to 1 when isEntityServerScript()

humbletim committed 9 years ago

Commit 0f7652e1 parent 831bf932 files · +37 −21Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 2 files). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+34−20
@@ -183,6 +183,7 @@ QString ScriptEngine::reportUncaughtException(const QString& overrideFileName) { · 182 unmodified lines
183183 return message;
184184 }
185185
186+int ScriptEngine::processLevelMaxRetries { ScriptRequest::MAX_RETRIES };
186187 ScriptEngine::ScriptEngine(Context context, const QString& scriptContents, const QString& fileNameString) :
187188 _context(context),
188189 _scriptContents(scriptContents),
@@ -198,6 +199,11 @@ ScriptEngine::ScriptEngine(Context context, const QString& scriptContents, const · 9 unmodified lines
198199 });
199200
200201 setProcessEventsInterval(MSECS_PER_SECOND);
202+ if (isEntityServerScript()) {
203+ qCDebug(scriptengine) << "isEntityServerScript() -- limiting maxRetries to 1";
204+ processLevelMaxRetries = 1;
205+ }
206+ qCDebug(scriptengine) << getContext() << "processLevelMaxRetries =" << processLevelMaxRetries;
201207 }
202208
203209 QString ScriptEngine::getContext() const {
@@ -1372,7 +1378,7 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac · 1168 unmodified lines
13721378 // If we are destroyed before the loader completes, make sure to clean it up
13731379 connect(this, &QObject::destroyed, loader, &QObject::deleteLater);
13741380
1375− loader->start();
1381+ loader->start(processLevelMaxRetries);
13761382
13771383 if (!callback.isFunction() && !loader->isFinished()) {
13781384 QEventLoop loop;
@@ -1452,6 +1458,7 @@ int ScriptEngine::getNumRunningEntityScripts() const { · 73 unmodified lines
14521458 }
14531459 }
14541460 return sum;
1461+}
14551462
14561463 QString ScriptEngine::getEntityScriptStatus(const EntityItemID& entityID) {
14571464 if (_entityScripts.contains(entityID))
@@ -1468,17 +1475,30 @@ bool ScriptEngine::getEntityScriptDetails(const EntityItemID& entityID, EntitySc · 10 unmodified lines
14681475 return true;
14691476 }
14701477
1478+void ScriptEngine::setEntityScriptDetails(const EntityItemID& entityID, const EntityScriptDetails& details) {
1479+ _entityScripts[entityID] = details;
1480+ emit entityScriptDetailsUpdated();
1481+}
1482+
1483+void ScriptEngine::updateEntityScriptStatus(const EntityItemID& entityID, const EntityScriptStatus &status, const QString& errorInfo) {
1484+ EntityScriptDetails &details = _entityScripts[entityID];
1485+ details.status = status;
1486+ details.errorInfo = errorInfo;
1487+ emit entityScriptDetailsUpdated();
1488+}
1489+
14711490 // since all of these operations can be asynch we will always do the actual work in the response handler
14721491 // for the download
14731492 void ScriptEngine::loadEntityScript(QWeakPointer<ScriptEngine> theEngine, const EntityItemID& entityID, const QString& entityScript, bool forceRedownload) {
1493+
14741494 {
14751495 // set EntityScriptDetails.status to LOADING (over on theEngine's thread)
14761496 QObject threadPunter;
1477− connect(&threadPunter, &QObject::destroyed, theEngine.data(), [=]() {
1478− EntityScriptDetails &details = theEngine.data()->_entityScripts[entityID];
1497+ auto engine = theEngine.data();
1498+ connect(&threadPunter, &QObject::destroyed, engine, [=]() {
1499+ EntityScriptDetails details = engine->_entityScripts[entityID];
14791500 if (details.status == EntityScriptStatus::PENDING || details.status == EntityScriptStatus::UNLOADED) {
1480− details.status = EntityScriptStatus::LOADING;
1481− emit entityScriptDetailsUpdated();
1501+ engine->updateEntityScriptStatus(entityID, EntityScriptStatus::LOADING, QThread::currentThread()->objectName());
14821502 }
14831503 });
14841504 }
@@ -1496,7 +1516,7 @@ void ScriptEngine::loadEntityScript(QWeakPointer<ScriptEngine> theEngine, const · 11 unmodified lines
14961516 #endif
14971517 strongEngine->entityScriptContentAvailable(entityID, scriptOrURL, contents, isURL, success, status);
14981518 }
1499− }, forceRedownload);
1519+ }, forceRedownload, processLevelMaxRetries);
15001520 }
15011521
15021522 // since all of these operations can be asynch we will always do the actual work in the response handler
@@ -1534,8 +1554,7 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co · 31 unmodified lines
15341554 if (!success) {
15351555 newDetails.status = EntityScriptStatus::ERROR_LOADING_SCRIPT;
15361556 newDetails.errorInfo = "Failed to load script (" + status + ")";
1537− _entityScripts[entityID] = newDetails;
1538− emit entityScriptDetailsUpdated();
1557+ setEntityScriptDetails(entityID, newDetails);
15391558 return;
15401559 }
15411560
@@ -1544,8 +1563,7 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co · 2 unmodified lines
15441563 if (!syntaxError.isNull() || program.isNull()) {
15451564 newDetails.status = EntityScriptStatus::ERROR_RUNNING_SCRIPT;
15461565 newDetails.errorInfo = QString("Bad syntax (%1)").arg(syntaxError);
1547− _entityScripts[entityID] = newDetails;
1548− emit entityScriptDetailsUpdated();
1566+ setEntityScriptDetails(entityID, newDetails);
15491567 qCDebug(scriptengine) << newDetails.errorInfo << scriptOrURL;
15501568 return; // done processing script
15511569 }
@@ -1578,8 +1596,7 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co · 26 unmodified lines
15781596 if (!exceptionMessage.isNull()) {
15791597 newDetails.status = EntityScriptStatus::ERROR_RUNNING_SCRIPT;
15801598 newDetails.errorInfo = exceptionMessage;
1581− _entityScripts[entityID] = newDetails;
1582− emit entityScriptDetailsUpdated();
1599+ setEntityScriptDetails(entityID, newDetails);
15831600 qCDebug(scriptengine) << "----- ScriptEngine::entityScriptContentAvailable -- hadUncaughtExceptions (" << scriptOrURL << ")";
15841601 return;
15851602 }
@@ -1601,8 +1618,7 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co · 15 unmodified lines
16011618
16021619 newDetails.status = EntityScriptStatus::ERROR_RUNNING_SCRIPT;
16031620 newDetails.errorInfo = "Could not find constructor";
1604− _entityScripts[entityID] = newDetails;
1605− emit entityScriptDetailsUpdated();
1621+ setEntityScriptDetails(entityID, newDetails);
16061622
16071623 qCDebug(scriptengine) << "----- ScriptEngine::entityScriptContentAvailable -- failed to run (" << scriptOrURL << ")";
16081624 return; // done processing script
@@ -1625,8 +1641,7 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co · 16 unmodified lines
16251641 newDetails.scriptObject = entityScriptObject;
16261642 newDetails.lastModified = lastModified;
16271643 newDetails.definingSandboxURL = sandboxURL;
1628− _entityScripts[entityID] = newDetails;
1629− emit entityScriptDetailsUpdated();
1644+ setEntityScriptDetails(entityID, newDetails);
16301645
16311646 if (isURL) {
16321647 setParentURL("");
@@ -1656,11 +1671,10 @@ void ScriptEngine::unloadEntityScript(const EntityItemID& entityID) { · 23 unmodified lines
16561671 if (isEntityScriptRunning(entityID)) {
16571672 callEntityScriptMethod(entityID, "unload");
16581673 }
1659− EntityScriptDetails details;
1660− details.status = EntityScriptStatus::UNLOADED;
1661− _entityScripts[entityID] = details;
1674+ EntityScriptDetails newDetails;
1675+ newDetails.status = EntityScriptStatus::UNLOADED;
1676+ setEntityScriptDetails(entityID, newDetails);
16621677 stopAllTimersForEntityScript(entityID);
1663− emit entityScriptDetailsUpdated();
16641678 }
16651679 }
16661680