V8-related cleanup

This commit is contained in:
ksuprynowicz 2023-05-05 17:45:36 +02:00
parent 30f4608c25
commit 3c80411bf1
14 changed files with 5 additions and 62 deletions

View file

@ -53,7 +53,6 @@ PickResultPointer LaserPointer::getPickResultCopy(const PickResultPointer& pickR
} }
QVariantMap LaserPointer::toVariantMap() const { QVariantMap LaserPointer::toVariantMap() const {
//V8TODO: this cannot be done anymore without script engine
QVariantMap qVariantMap = Parent::toVariantMap(); QVariantMap qVariantMap = Parent::toVariantMap();
QVariantMap qRenderStates; QVariantMap qRenderStates;

View file

@ -542,7 +542,7 @@ std::shared_ptr<Pointer> PointerScriptingInterface::buildParabolaPointer(const P
} }
void PointerScriptingInterface::editRenderState(unsigned int uid, const QString& renderState, const QVariant& properties) const { void PointerScriptingInterface::editRenderState(unsigned int uid, const QString& renderState, const QVariant& properties) const {
//V8TODO: this won't work for now //V8TODO: this needs testing
QVariantMap propMap = properties.toMap(); QVariantMap propMap = properties.toMap();
QVariant startProps; QVariant startProps;

View file

@ -51,8 +51,7 @@ STATIC_SCRIPT_TYPES_INITIALIZER((+[](ScriptManager* manager){
RayToOverlayIntersectionResultFromScriptValue>(scriptEngine); RayToOverlayIntersectionResultFromScriptValue>(scriptEngine);
})); }));
// V8TODO: _scriptEngine can be safely removed as soon as 3D overlays are not used anymore by default scripts Overlays::Overlays() {
Overlays::Overlays() /*: _scriptEngine(newScriptEngine())*/ {
ADD_TYPE_MAP(Box, cube); ADD_TYPE_MAP(Box, cube);
ADD_TYPE_MAP(Sphere, sphere); ADD_TYPE_MAP(Sphere, sphere);
_overlayToEntityTypes["rectangle3d"] = "Shape"; _overlayToEntityTypes["rectangle3d"] = "Shape";
@ -310,12 +309,6 @@ QString Overlays::entityToOverlayType(const QString& type) {
static QHash<QUuid, std::pair<glm::quat, bool>> savedRotations = QHash<QUuid, std::pair<glm::quat, bool>>(); static QHash<QUuid, std::pair<glm::quat, bool>> savedRotations = QHash<QUuid, std::pair<glm::quat, bool>>();
// V8TODO: This can be safely removed as soon as 3D overlays are not used anymore by default scripts
/*EntityItemProperties Overlays::convertOverlayToEntityProperties(QVariantMap& overlayProps, const QString& type, bool add, const QUuid& id) {
std::pair<glm::quat, bool> rotation;
return convertOverlayToEntityProperties(overlayProps, rotation, type, add, id);
}*/
// V8TODO: This can be safely removed as soon as 3D overlays are not used anymore by default scripts // V8TODO: This can be safely removed as soon as 3D overlays are not used anymore by default scripts
/*EntityItemProperties Overlays::convertOverlayToEntityProperties(QVariantMap& overlayProps, std::pair<glm::quat, bool>& rotationToSave, const QString& type, bool add, const QUuid& id) { /*EntityItemProperties Overlays::convertOverlayToEntityProperties(QVariantMap& overlayProps, std::pair<glm::quat, bool>& rotationToSave, const QString& type, bool add, const QUuid& id) {
overlayProps["type"] = type; overlayProps["type"] = type;
@ -815,22 +808,6 @@ QUuid Overlays::addOverlay(const QString& type, const QVariant& properties) {
} }
return UNKNOWN_ENTITY_ID; return UNKNOWN_ENTITY_ID;
// V8TODO: This can be safely removed as soon as 3D overlays are not used anymore by default scripts
/*QString entityType = overlayToEntityType(type);
if (entityType == "Unknown") {
return UNKNOWN_ENTITY_ID;
}
QVariantMap propertyMap = properties.toMap();
if (type == "rectangle3d") {
propertyMap["shape"] = "Quad";
}
std::pair<glm::quat, bool> rotationToSave;
QUuid id = DependencyManager::get<EntityScriptingInterface>()->addEntityInternal(convertOverlayToEntityProperties(propertyMap, rotationToSave, entityType, true), entity::HostType::LOCAL);
if (entityType == "Text" || entityType == "Image" || entityType == "Grid" || entityType == "Web") {
savedRotations[id] = rotationToSave;
}
return id;*/
} }
QUuid Overlays::add2DOverlay(const Overlay::Pointer& overlay) { QUuid Overlays::add2DOverlay(const Overlay::Pointer& overlay) {
@ -889,13 +866,6 @@ bool Overlays::editOverlay(const QUuid& id, const QVariant& properties) {
} }
return false; return false;
// V8TODO: This can be safely removed as soon as 3D overlays are not used anymore by default scripts
/*
auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>();
auto propertyMap = properties.toMap();
EntityItemProperties entityProperties = convertOverlayToEntityProperties(propertyMap, entityScriptingInterface->getEntityType(id), false, id);
return !entityScriptingInterface->editEntity(id, entityProperties).isNull();*/
} }
bool Overlays::editOverlays(const QVariant& propertiesById) { bool Overlays::editOverlays(const QVariant& propertiesById) {
@ -907,7 +877,6 @@ bool Overlays::editOverlays(const QVariant& propertiesById) {
QVariantMap deferred; QVariantMap deferred;
const QVariantMap map = propertiesById.toMap(); const QVariantMap map = propertiesById.toMap();
//auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>();
for (const auto& key : map.keys()) { for (const auto& key : map.keys()) {
QUuid id = QUuid(key); QUuid id = QUuid(key);
const QVariant& properties = map[key]; const QVariant& properties = map[key];
@ -921,9 +890,6 @@ bool Overlays::editOverlays(const QVariant& propertiesById) {
overlay->setProperties(properties.toMap()); overlay->setProperties(properties.toMap());
} else { } else {
qDebug() << "Overlays::editOverlays doesn't support editing entities anymore"; qDebug() << "Overlays::editOverlays doesn't support editing entities anymore";
// V8TODO: This can be safely removed as soon as 3D overlays are not used anymore by default scripts
/*auto propertyMap = properties.toMap();
entityScriptingInterface->editEntity(id, convertOverlayToEntityProperties(propertyMap, entityScriptingInterface->getEntityType(id), false, id));*/
} }
} }

View file

@ -123,9 +123,6 @@ public:
void cleanupAllOverlays(); void cleanupAllOverlays();
// V8TODO: This can be safely removed as soon as 3D overlays are not used anymore by default scripts
//mutable ScriptEnginePointer _scriptEngine;
public slots: public slots:
/*@jsdoc /*@jsdoc
* Adds an overlay to the scene. * Adds an overlay to the scene.
@ -763,16 +760,9 @@ private:
QMouseEvent* event, PointerEvent::EventType eventType); QMouseEvent* event, PointerEvent::EventType eventType);
static QString entityToOverlayType(const QString& type); static QString entityToOverlayType(const QString& type);
// V8TODO: This can be safely removed as soon as 3D overlays are not used anymore by default scripts
//static QString overlayToEntityType(const QString& type);
static std::unordered_map<QString, QString> _entityToOverlayTypes; static std::unordered_map<QString, QString> _entityToOverlayTypes;
static std::unordered_map<QString, QString> _overlayToEntityTypes; static std::unordered_map<QString, QString> _overlayToEntityTypes;
// V8TODO: This can be safely removed as soon as 3D overlays are not used anymore by default scripts
/*QVariantMap convertEntityToOverlayProperties(const EntityItemProperties& entityProps);
EntityItemProperties convertOverlayToEntityProperties(QVariantMap& overlayProps, const QString& type, bool add, const QUuid& id);
EntityItemProperties convertOverlayToEntityProperties(QVariantMap& overlayProps, std::pair<glm::quat, bool>& rotationToSave, const QString& type, bool add, const QUuid& id = QUuid());*/
private slots: private slots:
void mousePressOnPointerEvent(const QUuid& id, const PointerEvent& event); void mousePressOnPointerEvent(const QUuid& id, const PointerEvent& event);
void mousePressOffPointerEvent(); void mousePressOffPointerEvent();

View file

@ -1680,6 +1680,7 @@ bool EntityScriptingInterface::getServerScriptStatus(const QUuid& entityID, Scri
auto engine = callback.engine(); auto engine = callback.engine();
// V8TODO: it seems to sometimes be called on a wrong thread, reading to script engine crashes. I added an assert for now. // V8TODO: it seems to sometimes be called on a wrong thread, reading to script engine crashes. I added an assert for now.
// V8TODO: somehow the asserts are not happening here, but destructor still runs on main thread sometimes and deadlocks. // V8TODO: somehow the asserts are not happening here, but destructor still runs on main thread sometimes and deadlocks.
// V8TODO: I think this was fixed? Should be tested
Q_ASSERT(QThread::currentThread() == engine->thread()); Q_ASSERT(QThread::currentThread() == engine->thread());
Q_ASSERT(QThread::currentThread() == engine->manager()->thread()); Q_ASSERT(QThread::currentThread() == engine->manager()->thread());
QString statusString = EntityScriptStatus_::valueToKey(request->getStatus()); QString statusString = EntityScriptStatus_::valueToKey(request->getStatus());

View file

@ -27,7 +27,6 @@
#include "ScriptException.h" #include "ScriptException.h"
// These are used for debugging memory leaks caused by persistent handles // These are used for debugging memory leaks caused by persistent handles
// V8TODO: Rename to something better, like for example OVERTE_V8_MEMORY_DEBUG
#define OVERTE_V8_MEMORY_DEBUG #define OVERTE_V8_MEMORY_DEBUG
class QByteArray; class QByteArray;

View file

@ -119,8 +119,6 @@ public:
inline QObject* toQObject() const; inline QObject* toQObject() const;
protected: protected:
//V8TODO
//Won't a regular pointer cause memory leak?
ScriptValueProxy* _proxy; ScriptValueProxy* _proxy;
}; };
Q_DECLARE_OPERATORS_FOR_FLAGS(ScriptValue::PropertyFlags); Q_DECLARE_OPERATORS_FOR_FLAGS(ScriptValue::PropertyFlags);

View file

@ -282,7 +282,7 @@ bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3) {
} }
if (!x.isValid() || !y.isValid() || !z.isValid()) { if (!x.isValid() || !y.isValid() || !z.isValid()) {
// V8TODO: This breaks the sit script for some reason // V8TODO: This breaks the sit script because in our API valid Vec3 can be created from just 2 values
//return false; //return false;
} }

View file

@ -421,7 +421,6 @@ private:
const glm::vec3& UP() { return Vectors::UP; } const glm::vec3& UP() { return Vectors::UP; }
const glm::vec3& FRONT() { return Vectors::FRONT; } const glm::vec3& FRONT() { return Vectors::FRONT; }
//V8TODO delete after V8 works - used only for debugging
public: public:
virtual ~Vec3(); virtual ~Vec3();
}; };

View file

@ -221,6 +221,7 @@ void XMLHttpRequestClass::requestFinished() {
_rawResponseData.append(_reply->readAll()); _rawResponseData.append(_reply->readAll());
if (_responseType == "json") { if (_responseType == "json") {
// V8TODO: V8 JSON parser needs to be used instead
_responseData = _engine->evaluate("(" + QString(_rawResponseData.data()) + ")"); _responseData = _engine->evaluate("(" + QString(_rawResponseData.data()) + ")");
if (_responseData.isError()) { if (_responseData.isError()) {
_engine->clearExceptions(); _engine->clearExceptions();

View file

@ -966,7 +966,6 @@ ScriptValue ScriptEngineV8::newArrayBuffer(const QByteArray& message) {
v8::Isolate::Scope isolateScope(_v8Isolate); v8::Isolate::Scope isolateScope(_v8Isolate);
v8::HandleScope handleScope(_v8Isolate); v8::HandleScope handleScope(_v8Isolate);
v8::Context::Scope contextScope(getContext()); v8::Context::Scope contextScope(getContext());
//V8TODO: this will leak memory
std::shared_ptr<v8::BackingStore> backingStore(v8::ArrayBuffer::NewBackingStore(_v8Isolate, message.size())); std::shared_ptr<v8::BackingStore> backingStore(v8::ArrayBuffer::NewBackingStore(_v8Isolate, message.size()));
std::memcpy(backingStore.get()->Data(), message.constData(), message.size()); std::memcpy(backingStore.get()->Data(), message.constData(), message.size());
auto arrayBuffer = v8::ArrayBuffer::New(_v8Isolate, backingStore); auto arrayBuffer = v8::ArrayBuffer::New(_v8Isolate, backingStore);

View file

@ -213,7 +213,6 @@ ScriptObjectV8Proxy::~ScriptObjectV8Proxy() {
v8::HandleScope handleScope(isolate); v8::HandleScope handleScope(isolate);
if (_object) if (_object)
qCDebug(scriptengine_v8) << "Deleting object proxy: " << name(); qCDebug(scriptengine_v8) << "Deleting object proxy: " << name();
// V8TODO: once WeakPersistent pointer is added we should check if it's valid before deleting
Q_ASSERT(!_v8Object.Get(isolate)->IsNullOrUndefined()); Q_ASSERT(!_v8Object.Get(isolate)->IsNullOrUndefined());
// This prevents unwrap function from unwrapping proxy that was deleted // This prevents unwrap function from unwrapping proxy that was deleted
_v8Object.Get(isolate)->SetAlignedPointerInInternalField(0, const_cast<void*>(internalPointsToDeletedQObjectProxy)); _v8Object.Get(isolate)->SetAlignedPointerInInternalField(0, const_cast<void*>(internalPointsToDeletedQObjectProxy));
@ -359,9 +358,7 @@ void ScriptObjectV8Proxy::investigate() {
v8Object->SetInternalField(2, propertiesObject); v8Object->SetInternalField(2, propertiesObject);
// Add all the methods objects as properties - this allows adding properties to a given method later. Is used by Script.request. // Add all the methods objects as properties - this allows adding properties to a given method later. Is used by Script.request.
// V8TODO: Should these be deleted when the script-owned object is destroyed? It needs checking if script-owned objects will be garbage-collected, or will self-referencing prevent it.
for (auto i = _methods.begin(); i != _methods.end(); i++) { for (auto i = _methods.begin(); i != _methods.end(); i++) {
//V8TODO: lifetime may prevent garbage collection?
V8ScriptValue method = ScriptMethodV8Proxy::newMethod(_engine, qobject, V8ScriptValue(_engine, v8Object), V8ScriptValue method = ScriptMethodV8Proxy::newMethod(_engine, qobject, V8ScriptValue(_engine, v8Object),
i.value().methods, i.value().numMaxParams); i.value().methods, i.value().numMaxParams);
if(!propertiesObject->Set(_engine->getContext(), v8::String::NewFromUtf8(isolate, i.value().name.toStdString().c_str()).ToLocalChecked(), method.get()).FromMaybe(false)) { if(!propertiesObject->Set(_engine->getContext(), v8::String::NewFromUtf8(isolate, i.value().name.toStdString().c_str()).ToLocalChecked(), method.get()).FromMaybe(false)) {

View file

@ -101,7 +101,6 @@ private: // helper functions
private: // storage private: // storage
ScriptEngineV8 *_engine; ScriptEngineV8 *_engine;
//V8TODO: this needs a persistent handle instead, maybe with set weak?
V8ScriptValue _value; V8ScriptValue _value;
Q_DISABLE_COPY(ScriptValueV8Wrapper) Q_DISABLE_COPY(ScriptValueV8Wrapper)

View file

@ -37,13 +37,8 @@
// # define WEBRTC_POSIX 1 // # define WEBRTC_POSIX 1
// # define WEBRTC_LEGACY 1 // # define WEBRTC_LEGACY 1
#elif defined(Q_OS_LINUX) && defined(Q_PROCESSOR_X86_64) #elif defined(Q_OS_LINUX) && defined(Q_PROCESSOR_X86_64)
//V8TODO:
// WEBRTC_AUDIO causes:
// overte/libraries/audio-client/src/AudioClient.cpp:1258:36: runtime error: member call on address 0x61b000006980 which does not point to an object of type 'AudioProcessing'
// 0x61b000006980: note: object has invalid vptr
# define WEBRTC_AUDIO 1 # define WEBRTC_AUDIO 1
# define WEBRTC_POSIX 1 # define WEBRTC_POSIX 1
//V8TODO: temporarily disabled, because linker failed for memory debugging
# define WEBRTC_DATA_CHANNELS 1 # define WEBRTC_DATA_CHANNELS 1
#elif defined(Q_OS_LINUX) && defined(Q_PROCESSOR_ARM) #elif defined(Q_OS_LINUX) && defined(Q_PROCESSOR_ARM)
// WebRTC is basically impossible to build on aarch64 Linux. // WebRTC is basically impossible to build on aarch64 Linux.