History

Fix V8 scope performance issue on libnode22

ksuprynowicz committed 11 months ago

Commit a9bd0781 parent 4aad6b218 files · +298 −349Browse files

Showing the changes to assignment-client/src/scripts/EntityScriptServer.cpp (1 of 18 files). Show all

Unified · Split

assignment-client/src/scripts/EntityScriptServer.cpp+47−42
@@ -470,49 +470,54 @@ void EntityScriptServer::resetEntitiesScriptEngine() { · 469 unmodified lines
470470 auto newManager = scriptManagerFactory(ScriptManager::ENTITY_SERVER_SCRIPT, NO_SCRIPT, engineName);
471471 auto newEngine = newManager->engine();
472472
473− auto webSocketServerConstructorValue = newEngine->newFunction(WebSocketServerClass::constructor);
474− newEngine->globalObject().setProperty("WebSocketServer", webSocketServerConstructorValue);
475−
476− newEngine->registerGlobalObject("SoundCache", DependencyManager::get<SoundCacheScriptingInterface>().data());
477− newEngine->registerGlobalObject("AvatarList", DependencyManager::get<AvatarHashMap>().data());
478−
479− // connect this script engines printedMessage signal to the global ScriptEngines these various messages
480− auto scriptEngines = DependencyManager::get<ScriptEngines>().data();
481− connect(newManager.get(), &ScriptManager::printedMessage, scriptEngines, &ScriptEngines::onPrintedMessage);
482− connect(newManager.get(), &ScriptManager::errorMessage, scriptEngines, &ScriptEngines::onErrorMessage);
483− connect(newManager.get(), &ScriptManager::warningMessage, scriptEngines, &ScriptEngines::onWarningMessage);
484− connect(newManager.get(), &ScriptManager::infoMessage, scriptEngines, &ScriptEngines::onInfoMessage);
485−
486− // Make script engine messages available through ScriptDiscoveryService
487− connect(newManager.get(), &ScriptManager::infoEntityMessage, scriptEngines, &ScriptEngines::infoEntityMessage);
488− connect(newManager.get(), &ScriptManager::printedEntityMessage, scriptEngines, &ScriptEngines::printedEntityMessage);
489− connect(newManager.get(), &ScriptManager::errorEntityMessage, scriptEngines, &ScriptEngines::errorEntityMessage);
490− connect(newManager.get(), &ScriptManager::warningEntityMessage, scriptEngines, &ScriptEngines::warningEntityMessage);
491−
492− connect(newManager.get(), &ScriptManager::infoEntityMessage,
493− [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) {
494− addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_INFO);
495− });
496− connect(newManager.get(), &ScriptManager::printedEntityMessage,
497− [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) {
498− addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_PRINT);
499− });
500− connect(newManager.get(), &ScriptManager::errorEntityMessage,
501− [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) {
502− addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_ERROR);
503− });
504− connect(newManager.get(), &ScriptManager::warningEntityMessage,
505− [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) {
506− addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_WARNING);
507− });
508−
509− connect(newManager.get(), &ScriptManager::update, this, [this] {
510− _entityViewer.queryOctree();
511− _entityViewer.getTree()->preUpdate();
512− _entityViewer.getTree()->update();
513− });
473+ {
474+ auto guard = newEngine->getScopeGuard();
475+ {
476+ auto webSocketServerConstructorValue = newEngine->newFunction(WebSocketServerClass::constructor);
477+ newEngine->globalObject().setProperty("WebSocketServer", webSocketServerConstructorValue);
478+ }
514479
515− scriptEngines->runScriptInitializers(newManager);
480+ newEngine->registerGlobalObject("SoundCache", DependencyManager::get<SoundCacheScriptingInterface>().data());
481+ newEngine->registerGlobalObject("AvatarList", DependencyManager::get<AvatarHashMap>().data());
482+
483+ // connect this script engines printedMessage signal to the global ScriptEngines these various messages
484+ auto scriptEngines = DependencyManager::get<ScriptEngines>().data();
485+ connect(newManager.get(), &ScriptManager::printedMessage, scriptEngines, &ScriptEngines::onPrintedMessage);
486+ connect(newManager.get(), &ScriptManager::errorMessage, scriptEngines, &ScriptEngines::onErrorMessage);
487+ connect(newManager.get(), &ScriptManager::warningMessage, scriptEngines, &ScriptEngines::onWarningMessage);
488+ connect(newManager.get(), &ScriptManager::infoMessage, scriptEngines, &ScriptEngines::onInfoMessage);
489+
490+ // Make script engine messages available through ScriptDiscoveryService
491+ connect(newManager.get(), &ScriptManager::infoEntityMessage, scriptEngines, &ScriptEngines::infoEntityMessage);
492+ connect(newManager.get(), &ScriptManager::printedEntityMessage, scriptEngines, &ScriptEngines::printedEntityMessage);
493+ connect(newManager.get(), &ScriptManager::errorEntityMessage, scriptEngines, &ScriptEngines::errorEntityMessage);
494+ connect(newManager.get(), &ScriptManager::warningEntityMessage, scriptEngines, &ScriptEngines::warningEntityMessage);
495+
496+ connect(newManager.get(), &ScriptManager::infoEntityMessage,
497+ [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) {
498+ addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_INFO);
499+ });
500+ connect(newManager.get(), &ScriptManager::printedEntityMessage,
501+ [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) {
502+ addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_PRINT);
503+ });
504+ connect(newManager.get(), &ScriptManager::errorEntityMessage,
505+ [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) {
506+ addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_ERROR);
507+ });
508+ connect(newManager.get(), &ScriptManager::warningEntityMessage,
509+ [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) {
510+ addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_WARNING);
511+ });
512+
513+ connect(newManager.get(), &ScriptManager::update, this, [this] {
514+ _entityViewer.queryOctree();
515+ _entityViewer.getTree()->preUpdate();
516+ _entityViewer.getTree()->update();
517+ });
518+
519+ scriptEngines->runScriptInitializers(newManager);
520+ }
516521 newManager->runInThread();
517522 std::shared_ptr<EntitiesScriptEngineProvider> newEngineSP = newManager;
518523 // On the entity script server, these are the same