From 0fc2ab870a4db6806ffaffdf01b67c142cb8c45a Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Tue, 7 Mar 2023 00:06:15 +0100 Subject: [PATCH] Add V8 logging category Rename logging category to overte Make all V8 code use logging categories --- .../script-engine/src/ScriptEngineLogging.cpp | 7 +- .../src/v8/ScriptContextV8Wrapper.cpp | 4 +- .../src/v8/ScriptEngineLoggingV8.cpp | 17 +++ .../src/v8/ScriptEngineLoggingV8.h | 25 ++++ .../script-engine/src/v8/ScriptEngineV8.cpp | 103 ++++++++------- .../src/v8/ScriptEngineV8_cast.cpp | 27 ++-- .../src/v8/ScriptObjectV8Proxy.cpp | 125 +++++++++--------- .../src/v8/ScriptProgramV8Wrapper.cpp | 5 +- .../src/v8/ScriptValueIteratorV8Wrapper.cpp | 1 + .../src/v8/ScriptValueV8Wrapper.cpp | 58 ++++---- 10 files changed, 211 insertions(+), 161 deletions(-) create mode 100644 libraries/script-engine/src/v8/ScriptEngineLoggingV8.cpp create mode 100644 libraries/script-engine/src/v8/ScriptEngineLoggingV8.h diff --git a/libraries/script-engine/src/ScriptEngineLogging.cpp b/libraries/script-engine/src/ScriptEngineLogging.cpp index b51d7c3780..c9484dcf7a 100644 --- a/libraries/script-engine/src/ScriptEngineLogging.cpp +++ b/libraries/script-engine/src/ScriptEngineLogging.cpp @@ -11,6 +11,7 @@ #include "ScriptEngineLogging.h" -Q_LOGGING_CATEGORY(scriptengine, "hifi.scriptengine") -Q_LOGGING_CATEGORY(scriptengine_module, "hifi.scriptengine.module") -Q_LOGGING_CATEGORY(scriptengine_script, "hifi.scriptengine.script") +Q_LOGGING_CATEGORY(scriptengine, "overte.scriptengine") +Q_LOGGING_CATEGORY(scriptengine_module, "overte.scriptengine.module") +Q_LOGGING_CATEGORY(scriptengine_script, "overte.scriptengine.script") + diff --git a/libraries/script-engine/src/v8/ScriptContextV8Wrapper.cpp b/libraries/script-engine/src/v8/ScriptContextV8Wrapper.cpp index aeff7058b4..2bb5f2640c 100644 --- a/libraries/script-engine/src/v8/ScriptContextV8Wrapper.cpp +++ b/libraries/script-engine/src/v8/ScriptContextV8Wrapper.cpp @@ -16,6 +16,8 @@ #include "ScriptEngineV8.h" #include "ScriptValueV8Wrapper.h" +#include "ScriptEngineLoggingV8.h" + /*ScriptContextV8Wrapper::ScriptContextV8Wrapper(ScriptEngineV8* engine, const v8::Local context) : _functionCallbackInfo(nullptr), _propertyCallbackInfo(nullptr), _engine(engine) { _context.Reset(_engine->getIsolate(), context); @@ -178,7 +180,7 @@ ScriptValue ScriptContextV8Wrapper::throwError(const QString& text) { v8::String::NewFromUtf8(_engine->getIsolate(), text.toStdString().c_str()).ToLocalChecked())); return ScriptValue(new ScriptValueV8Wrapper(_engine, std::move(result))); } else { - qWarning() << "throwError on a different thread not implemented yet, error value: " << text; + qCWarning(scriptengine_v8) << "throwError on a different thread not implemented yet, error value: " << text; //return _engine->undefinedValue(); return ScriptValue(); } diff --git a/libraries/script-engine/src/v8/ScriptEngineLoggingV8.cpp b/libraries/script-engine/src/v8/ScriptEngineLoggingV8.cpp new file mode 100644 index 0000000000..728db5f22a --- /dev/null +++ b/libraries/script-engine/src/v8/ScriptEngineLoggingV8.cpp @@ -0,0 +1,17 @@ +// +// ScriptEngineLoggingV8.cpp +// libraries/script-engine/src/v8 +// +// Created by Dale Glass on 06/03/2023 +// Copyright 2023 Overte e.V. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "ScriptEngineLoggingV8.h" + +Q_LOGGING_CATEGORY(scriptengine_v8, "overte.scriptengine.v8") +Q_LOGGING_CATEGORY(scriptengine_module_v8, "overte.scriptengine.module.v8") +Q_LOGGING_CATEGORY(scriptengine_script_v8, "overte.scriptengine.script.v8") + diff --git a/libraries/script-engine/src/v8/ScriptEngineLoggingV8.h b/libraries/script-engine/src/v8/ScriptEngineLoggingV8.h new file mode 100644 index 0000000000..5035e53873 --- /dev/null +++ b/libraries/script-engine/src/v8/ScriptEngineLoggingV8.h @@ -0,0 +1,25 @@ +// +// ScriptEngineLoggingV8.h +// libraries/script-engine/src/v8 +// +// Created by Dale Glass on 06/03/2023 +// Copyright 2023 Overte e.V. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +/// @addtogroup ScriptEngine +/// @{ + +#pragma once + +#include + +Q_DECLARE_LOGGING_CATEGORY(scriptengine_v8) +Q_DECLARE_LOGGING_CATEGORY(scriptengine_module_v8) +Q_DECLARE_LOGGING_CATEGORY(scriptengine_script_v8) + + + +/// @} diff --git a/libraries/script-engine/src/v8/ScriptEngineV8.cpp b/libraries/script-engine/src/v8/ScriptEngineV8.cpp index fde22908cb..16fef8902c 100644 --- a/libraries/script-engine/src/v8/ScriptEngineV8.cpp +++ b/libraries/script-engine/src/v8/ScriptEngineV8.cpp @@ -51,6 +51,7 @@ #include "ScriptProgramV8Wrapper.h" #include "ScriptValueV8Wrapper.h" #include "V8Lambda.h" +#include "ScriptEngineLoggingV8.h" static const int MAX_DEBUG_VALUE_LENGTH { 80 }; @@ -62,11 +63,11 @@ bool ScriptEngineV8::IS_THREADSAFE_INVOCATION(const QThread* thread, const QStri if (currentThread == thread) { return true; } - qCCritical(scriptengine) << QString("Scripting::%1 @ %2 -- ignoring thread-unsafe call from %3") + qCCritical(scriptengine_v8) << QString("Scripting::%1 @ %2 -- ignoring thread-unsafe call from %3") .arg(method) .arg(thread ? thread->objectName() : "(!thread)") .arg(QThread::currentThread()->objectName()); - qCDebug(scriptengine) << "(please resolve on the calling side by using invokeMethod, executeOnScriptThread, etc.)"; + qCDebug(scriptengine_v8) << "(please resolve on the calling side by using invokeMethod, executeOnScriptThread, etc.)"; Q_ASSERT(false); return false; } @@ -206,7 +207,7 @@ QString Lambda::toString() const { Lambda::~Lambda() { #ifdef DEBUG_JS_LAMBDA_FUNCS - qDebug() << "~Lambda" + qCDebug(scriptengine_v8) << "~Lambda" << "this" << this; #endif } @@ -217,7 +218,7 @@ Lambda::Lambda(ScriptEngineV8* engine, _engine(engine), _operation(operation), _data(data) { #ifdef DEBUG_JS_LAMBDA_FUNCS - qDebug() << "Lambda" << data.toString(); + qCDebug(scriptengine_v8) << "Lambda" << data.toString(); #endif } V8ScriptValue Lambda::call() { @@ -285,10 +286,10 @@ ScriptEngineV8::ScriptEngineV8(ScriptManager *manager) : ScriptEngine(manager), //v8::V8::SetFlagsFromString("--stack-size=256 --single-threaded"); v8::Platform* platform = getV8Platform(); v8::V8::InitializePlatform(platform); - v8::V8::Initialize(); qCDebug(scriptengine) << "V8 platform initialized"; + v8::V8::Initialize(); qCDebug(scriptengine_v8) << "V8 platform initialized"; } ); _v8InitMutex.unlock(); - qDebug() << "Creating new script engine"; + qCDebug(scriptengine_v8) << "Creating new script engine"; { v8::Isolate::CreateParams isolateParams; isolateParams.array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator(); @@ -342,7 +343,7 @@ ScriptEngineV8::ScriptEngineV8(ScriptManager *manager) : ScriptEngine(manager), void ScriptEngineV8::registerEnum(const QString& enumName, QMetaEnum newEnum) { if (!newEnum.isValid()) { - qCCritical(scriptengine) << "registerEnum called on invalid enum with name " << enumName; + qCCritical(scriptengine_v8) << "registerEnum called on invalid enum with name " << enumName; return; } v8::Locker locker(_v8Isolate); @@ -360,7 +361,7 @@ void ScriptEngineV8::registerEnum(const QString& enumName, QMetaEnum newEnum) { void ScriptEngineV8::registerValue(const QString& valueName, V8ScriptValue value) { if (QThread::currentThread() != thread()) { #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::registerValue() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "]"; + qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::registerValue() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "]"; #endif QMetaObject::invokeMethod(this, "registerValue", Q_ARG(const QString&, valueName), @@ -412,7 +413,7 @@ void ScriptEngineV8::registerValue(const QString& valueName, V8ScriptValue value if (partsToGo > 0) { if (!child->IsObject()) { QString details = *v8::String::Utf8Value(_v8Isolate, child->ToDetailString(context).ToLocalChecked()); - qCDebug(scriptengine) << "ScriptEngineV8::registerValue: Part of path is not an object: " << pathPart << " details: " << details; + qCDebug(scriptengine_v8) << "ScriptEngineV8::registerValue: Part of path is not an object: " << pathPart << " details: " << details; Q_ASSERT(false); } partObject = v8::Local::Cast(child); @@ -423,7 +424,7 @@ void ScriptEngineV8::registerValue(const QString& valueName, V8ScriptValue value void ScriptEngineV8::registerGlobalObject(const QString& name, QObject* object) { if (QThread::currentThread() != thread()) { #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::registerGlobalObject() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] name:" << name; + qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::registerGlobalObject() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] name:" << name; #endif QMetaObject::invokeMethod(this, "registerGlobalObject", Q_ARG(const QString&, name), @@ -431,7 +432,7 @@ void ScriptEngineV8::registerGlobalObject(const QString& name, QObject* object) return; } #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "ScriptEngineV8::registerGlobalObject() called on thread [" << QThread::currentThread() << "] name:" << name; + qCDebug(scriptengine_v8) << "ScriptEngineV8::registerGlobalObject() called on thread [" << QThread::currentThread() << "] name:" << name; #endif /*bool is_isolate_exit_needed = false; if(!_v8Isolate->IsCurrent() && !_v8Locker) { @@ -475,7 +476,7 @@ void ScriptEngineV8::registerFunction(const QString& name, ScriptEngine::Functio //} if (QThread::currentThread() != thread()) { #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::registerFunction() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] name:" << name; + qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::registerFunction() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] name:" << name; #endif QMetaObject::invokeMethod(this, "registerFunction", Q_ARG(const QString&, name), @@ -484,7 +485,7 @@ void ScriptEngineV8::registerFunction(const QString& name, ScriptEngine::Functio return; } #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "ScriptEngineV8::registerFunction() called on thread [" << QThread::currentThread() << "] name:" << name; + qCDebug(scriptengine_v8) << "ScriptEngineV8::registerFunction() called on thread [" << QThread::currentThread() << "] name:" << name; #endif /*bool is_isolate_exit_needed = false; @@ -514,7 +515,7 @@ void ScriptEngineV8::registerFunction(const QString& name, ScriptEngine::Functio void ScriptEngineV8::registerFunction(const QString& parent, const QString& name, ScriptEngine::FunctionSignature functionSignature, int numArguments) { if (QThread::currentThread() != thread()) { #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::registerFunction() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] parent:" << parent << "name:" << name; + qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::registerFunction() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] parent:" << parent << "name:" << name; #endif QMetaObject::invokeMethod(this, "registerFunction", Q_ARG(const QString&, name), @@ -523,7 +524,7 @@ void ScriptEngineV8::registerFunction(const QString& parent, const QString& name return; } #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "ScriptEngineV8::registerFunction() called on thread [" << QThread::currentThread() << "] parent:" << parent << "name:" << name; + qCDebug(scriptengine_v8) << "ScriptEngineV8::registerFunction() called on thread [" << QThread::currentThread() << "] parent:" << parent << "name:" << name; #endif /*bool is_isolate_exit_needed = false; @@ -554,7 +555,7 @@ void ScriptEngineV8::registerGetterSetter(const QString& name, ScriptEngine::Fun ScriptEngine::FunctionSignature setter, const QString& parent) { if (QThread::currentThread() != thread()) { #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::registerGetterSetter() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] " + qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::registerGetterSetter() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] " " name:" << name << "parent:" << parent; #endif QMetaObject::invokeMethod(this, "registerGetterSetter", @@ -565,7 +566,7 @@ void ScriptEngineV8::registerGetterSetter(const QString& name, ScriptEngine::Fun return; } #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "ScriptEngineV8::registerGetterSetter() called on thread [" << QThread::currentThread() << "] name:" << name << "parent:" << parent; + qCDebug(scriptengine_v8) << "ScriptEngineV8::registerGetterSetter() called on thread [" << QThread::currentThread() << "] name:" << name << "parent:" << parent; #endif /*bool is_isolate_exit_needed = false; @@ -639,20 +640,20 @@ void ScriptEngineV8::registerGetterSetter(const QString& name, ScriptEngine::Fun v8ObjectToSetProperty = v8ParentObject; } if (!v8ObjectToSetProperty->DefineProperty(getContext(), v8propertyName, propertyDescriptor).FromMaybe(false)) { - qCDebug(scriptengine) << "DefineProperty failed for registerGetterSetter \"" << name << "\" for parent: \"" + qCDebug(scriptengine_v8) << "DefineProperty failed for registerGetterSetter \"" << name << "\" for parent: \"" << parent << "\""; } //object.setProperty(name, setterFunction, ScriptValue::PropertySetter); //object.setProperty(name, getterFunction, ScriptValue::PropertyGetter); } else { - qCDebug(scriptengine) << "Parent object \"" << parent << "\" for registerGetterSetter \"" << name + qCDebug(scriptengine_v8) << "Parent object \"" << parent << "\" for registerGetterSetter \"" << name << "\" is not valid: "; } } else { v8::Local v8propertyName = v8::String::NewFromUtf8(_v8Isolate, name.toStdString().c_str()).ToLocalChecked(); if (!getContext()->Global()->DefineProperty(getContext(), v8propertyName, propertyDescriptor).FromMaybe(false)) { - qCDebug(scriptengine) << "DefineProperty failed for registerGetterSetter \"" << name << "\" for global object"; + qCDebug(scriptengine_v8) << "DefineProperty failed for registerGetterSetter \"" << name << "\" for global object"; } //globalObject().setProperty(name, setterFunction, ScriptValue::PropertySetter); //globalObject().setProperty(name, getterFunction, ScriptValue::PropertyGetter); @@ -697,7 +698,7 @@ void ScriptEngineV8::storeGlobalObjectContents() { } _globalObjectContents.Reset(_v8Isolate, globalMemberObjects); - qDebug() << "ScriptEngineV8::storeGlobalObjectContents: " << globalMemberNames->Length() << " objects stored"; + qCDebug(scriptengine_v8) << "ScriptEngineV8::storeGlobalObjectContents: " << globalMemberNames->Length() << " objects stored"; areGlobalObjectContentsStored = true; } @@ -725,7 +726,7 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, unwrappedProgram = ScriptProgramV8Wrapper::unwrap(_program); if (unwrappedProgram == nullptr) { _evaluatingCounter--; - qDebug(scriptengine) << "Cannot unwrap program for closure"; + qCDebug(scriptengine_v8) << "Cannot unwrap program for closure"; Q_ASSERT(false); return nullValue(); } @@ -737,7 +738,7 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, unwrappedClosure = ScriptValueV8Wrapper::unwrap(_closure); if (unwrappedClosure == nullptr) { _evaluatingCounter--; - qDebug(scriptengine) << "Cannot unwrap closure"; + qCDebug(scriptengine_v8) << "Cannot unwrap closure"; Q_ASSERT(false); return nullValue(); } @@ -746,27 +747,27 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, //const V8ScriptProgram& program = unwrappedProgram->toV8Value(); if (!closure.constGet()->IsObject()) { _evaluatingCounter--; - qDebug(scriptengine) << "Unwrapped closure is not an object"; + qCDebug(scriptengine_v8) << "Unwrapped closure is not an object"; Q_ASSERT(false); return nullValue(); } Q_ASSERT(closure.constGet()->IsObject()); closureObject = v8::Local::Cast(closure.constGet()); - qDebug() << "Closure object members:" << scriptValueDebugListMembersV8(closure); + qCDebug(scriptengine_v8) << "Closure object members:" << scriptValueDebugListMembersV8(closure); v8::Local testObject = v8::Object::New(_v8Isolate); if(!testObject->Set(getContext(), v8::String::NewFromUtf8(_v8Isolate, "test_value").ToLocalChecked(), closureObject).FromMaybe(false)) { Q_ASSERT(false); } - qDebug() << "Test object members:" << scriptValueDebugListMembersV8(V8ScriptValue(this, testObject)); + qCDebug(scriptengine_v8) << "Test object members:" << scriptValueDebugListMembersV8(V8ScriptValue(this, testObject)); if (!closureObject->Get(closure.constGetContext(), v8::String::NewFromUtf8(_v8Isolate, "global").ToLocalChecked()) .ToLocal(&closureGlobal)) { _evaluatingCounter--; - qDebug(scriptengine) << "Cannot get global from unwrapped closure"; + qCDebug(scriptengine_v8) << "Cannot get global from unwrapped closure"; Q_ASSERT(false); return nullValue(); } - //qDebug() << "Closure global details:" << scriptValueDebugDetailsV8(V8ScriptValue(_v8Isolate, closureGlobal)); + //qCDebug(scriptengine_v8) << "Closure global details:" << scriptValueDebugDetailsV8(V8ScriptValue(_v8Isolate, closureGlobal)); } //oldGlobal = _v8Context.Get(_v8Isolate)->Global(); v8::Local closureContext; @@ -794,7 +795,7 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, v8::Context::Scope contextScope(closureContext); //const V8ScriptValue& closure = unwrappedClosure->toV8Value(); if (!unwrappedProgram->compile()) { - qDebug(scriptengine) << "Can't compile script for evaluating in closure"; + qCDebug(scriptengine_v8) << "Can't compile script for evaluating in closure"; Q_ASSERT(false); popContext(); return nullValue(); @@ -806,12 +807,12 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, /*if (!closureObject->Get(closure.constGetContext(), v8::String::NewFromUtf8(_v8Isolate, "this").ToLocalChecked()) .ToLocal(&thiz)) { _evaluatingCounter--; - qDebug(scriptengine) << "Empty this object in closure"; + qCDebug(scriptengine_v8) << "Empty this object in closure"; Q_ASSERT(false); return nullValue(); }*/ //thiz = closure.property("this"); - //qDebug() << "Closure this details:" << scriptValueDebugDetailsV8(V8ScriptValue(_v8Isolate, thiz)); + //qCDebug(scriptengine_v8) << "Closure this details:" << scriptValueDebugDetailsV8(V8ScriptValue(_v8Isolate, thiz)); // V8TODO: /*if (thiz->IsObject()) { #ifdef DEBUG_JS @@ -837,7 +838,7 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, Q_ASSERT(false); } } - qDebug() << "ScriptEngineV8::evaluateInClosure: " << globalMemberNames->Length() << " objects added to global"; + qCDebug(scriptengine_v8) << "ScriptEngineV8::evaluateInClosure: " << globalMemberNames->Length() << " objects added to global"; /*auto oldGlobalMemberNames = oldContext->Global()->GetPropertyNames(oldContext).ToLocalChecked(); //auto oldGlobalMemberNames = oldContext->Global()->GetPropertyNames(closureContext).ToLocalChecked(); @@ -874,15 +875,15 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, } else { membersString = QString(" Is not an object"); }*/ - //qDebug(scriptengine) << "Closure global before run:" << membersString; + //qCDebug(scriptengine_v8) << "Closure global before run:" << membersString; auto maybeResult = program.constGet()->GetUnboundScript()->BindToCurrentContext()->Run(closureContext); - //qDebug(scriptengine) << "Closure after run:" << scriptValueDebugDetailsV8(closure); + //qCDebug(scriptengine_v8) << "Closure after run:" << scriptValueDebugDetailsV8(closure); v8::Local v8Result; if (!maybeResult.ToLocal(&v8Result)) { v8::String::Utf8Value utf8Value(getIsolate(), tryCatch.Exception()); QString errorMessage = QString(*utf8Value); - qWarning(scriptengine) << __FUNCTION__ << "---------- hasCaught:" << errorMessage; - qWarning(scriptengine) << __FUNCTION__ << "---------- tryCatch details:" << formatErrorMessageFromTryCatch(tryCatch); + qCWarning(scriptengine_v8) << __FUNCTION__ << "---------- hasCaught:" << errorMessage; + qCWarning(scriptengine_v8) << __FUNCTION__ << "---------- tryCatch details:" << formatErrorMessageFromTryCatch(tryCatch); //V8TODO: better error reporting } @@ -919,7 +920,7 @@ ScriptValue ScriptEngineV8::evaluate(const QString& sourceCode, const QString& f if (QThread::currentThread() != thread()) { ScriptValue result; #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::evaluate() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] " + qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::evaluate() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] " "sourceCode:" << sourceCode << " fileName:" << fileName; #endif BLOCKING_INVOKE_METHOD(this, "evaluate", @@ -944,7 +945,7 @@ ScriptValue ScriptEngineV8::evaluate(const QString& sourceCode, const QString& f _evaluatingCounter--; return nullValue(); } - //qCDebug(scriptengine) << "Script compilation succesful: " << fileName; + //qCDebug(scriptengine_v8) << "Script compilation succesful: " << fileName; //V8TODO /*auto syntaxError = lintScript(sourceCode, fileName); @@ -971,7 +972,7 @@ ScriptValue ScriptEngineV8::evaluate(const QString& sourceCode, const QString& f Q_ASSERT(tryCatchRun.HasCaught()); auto runError = tryCatchRun.Message(); ScriptValue errorValue(new ScriptValueV8Wrapper(this, V8ScriptValue(this, runError->Get()))); - qCDebug(scriptengine) << "Running script: \"" << fileName << "\" " << formatErrorMessageFromTryCatch(tryCatchRun); + qCDebug(scriptengine_v8) << "Running script: \"" << fileName << "\" " << formatErrorMessageFromTryCatch(tryCatchRun); //V8TODO @@ -995,7 +996,7 @@ void ScriptEngineV8::setUncaughtEngineException(const QString &reason, const QSt void ScriptEngineV8::setUncaughtException(const v8::TryCatch &tryCatch, const QString& info) { if (!tryCatch.HasCaught()) { - qCWarning(scriptengine) << "setUncaughtException called without exception"; + qCWarning(scriptengine_v8) << "setUncaughtException called without exception"; clearExceptions(); return; } @@ -1041,7 +1042,7 @@ void ScriptEngineV8::setUncaughtException(const v8::TryCatch &tryCatch, const QS } void ScriptEngineV8::setUncaughtException(std::shared_ptr uncaughtException) { - qCDebug(scriptengine) << "Emitting exception:" << uncaughtException; + qCDebug(scriptengine_v8) << "Emitting exception:" << uncaughtException; _uncaughtException = uncaughtException; auto copy = uncaughtException->clone(); @@ -1105,7 +1106,7 @@ Q_INVOKABLE ScriptValue ScriptEngineV8::evaluate(const ScriptProgramPointer& pro if (QThread::currentThread() != thread()) { ScriptValue result; #ifdef THREAD_DEBUGGING - qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::evaluate() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] " + qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::evaluate() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] " "sourceCode:" << sourceCode << " fileName:" << fileName; #endif BLOCKING_INVOKE_METHOD(this, "evaluate", @@ -1498,14 +1499,14 @@ QThread* ScriptEngineV8::thread() const { void ScriptEngineV8::setThread(QThread* thread) { if (_v8Isolate->IsCurrent()) { _v8Isolate->Exit(); - qDebug() << "Script engine " << objectName() << " exited isolate"; + qCDebug(scriptengine_v8) << "Script engine " << objectName() << " exited isolate"; } Q_ASSERT(QObject::thread() == QThread::currentThread()); /*if (_v8Locker) { _v8Locker.reset(); }*/ moveToThread(thread); - qDebug() << "Moved script engine " << objectName() << " to different thread"; + qCDebug(scriptengine_v8) << "Moved script engine " << objectName() << " to different thread"; } /*void ScriptEngineV8::enterIsolateOnThisThread() { @@ -1514,7 +1515,7 @@ void ScriptEngineV8::setThread(QThread* thread) { _v8Locker.reset(new v8::Locker(_v8Isolate)); if (!_v8Isolate->IsCurrent()) { _v8Isolate->Enter(); - qDebug() << "Script engine " << objectName() << " entered isolate on a new thread"; + qCDebug(scriptengine_v8) << "Script engine " << objectName() << " entered isolate on a new thread"; } }*/ @@ -1534,14 +1535,14 @@ bool ScriptEngineV8::raiseException(const QString& error, const QString &reason) bool ScriptEngineV8::raiseException(const ScriptValue& exception, const QString &reason) { //V8TODO //Q_ASSERT(false); -// qCritical() << "Script exception occurred: " << exception.toString(); +// qCCritical(scriptengine_v8) << "Script exception occurred: " << exception.toString(); // ScriptValueV8Wrapper* unwrapped = ScriptValueV8Wrapper::unwrap(exception); // V8ScriptValue qException = unwrapped ? unwrapped->toV8Value() : QScriptEngine::newVariant(exception.toVariant()); // emit //return raiseException(qException); -// qCCritical(scriptengine) << "Raise exception for reason" << reason << "NOT IMPLEMENTED!"; +// qCCritical(scriptengine_v8) << "Raise exception for reason" << reason << "NOT IMPLEMENTED!"; // return false; return raiseException(ScriptValueV8Wrapper::fullUnwrap(this, exception)); @@ -1615,9 +1616,9 @@ void ScriptEngineV8::compileTest() { v8::Local script; v8::ScriptOrigin scriptOrigin(getIsolate(), v8::String::NewFromUtf8(getIsolate(),"test").ToLocalChecked()); if (v8::Script::Compile(getContext(), v8::String::NewFromUtf8(getIsolate(), "print(\"hello world\");").ToLocalChecked(), &scriptOrigin).ToLocal(&script)) { - qCDebug(scriptengine) << "Compile test successful"; + qCDebug(scriptengine_v8) << "Compile test successful"; } else { - qCDebug(scriptengine) << "Compile test failed"; + qCDebug(scriptengine_v8) << "Compile test failed"; Q_ASSERT(false); } } @@ -1683,9 +1684,9 @@ QString ScriptEngineV8::scriptValueDebugDetailsV8(const V8ScriptValue &v8Value) void ScriptEngineV8::logBacktrace(const QString &title) { QStringList backtrace = currentContext()->backtrace(); - qDebug(scriptengine) << title; + qCDebug(scriptengine_v8) << title; for (int n = 0; n < backtrace.length(); n++) { - qDebug(scriptengine) << backtrace[n]; + qCDebug(scriptengine_v8) << backtrace[n]; } } diff --git a/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp b/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp index a026138ba9..1420fb067f 100644 --- a/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp +++ b/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp @@ -25,6 +25,7 @@ #include "ScriptObjectV8Proxy.h" #include "ScriptValueV8Wrapper.h" +#include "ScriptEngineLoggingV8.h" void ScriptEngineV8::setDefaultPrototype(int metaTypeId, const ScriptValue& prototype) { ScriptValueV8Wrapper* unwrappedPrototype = ScriptValueV8Wrapper::unwrap(prototype); @@ -310,7 +311,7 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de // Conversion debugging: /*if (destTypeId == QMetaType::QVariant && val->IsBoolean()) { //It's for placing breakpoint here - qDebug() << "Conversion Debug: " << scriptValueDebugDetailsV8(v8Val); + qCDebug(scriptengine_v8) << "Conversion Debug: " << scriptValueDebugDetailsV8(v8Val); }*/ // if we're not particularly interested in a specific type, try to detect if we're dealing with a registered type @@ -408,7 +409,7 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de // V8TODO errorMessage = QString() + "Conversion failure: " + QString(*v8::String::Utf8Value(_v8Isolate, val->ToDetailString(getConstContext()).ToLocalChecked())) + "to variant. Destination type: " + QMetaType::typeName(destTypeId) +" details: "+ scriptValueDebugDetailsV8(v8Val); - qDebug() << errorMessage; + qCDebug(scriptengine_v8) << errorMessage; //Q_ASSERT(false); //dest = val->ToVariant(); @@ -471,7 +472,7 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de // V8TODO: this is to diagnose a really weird segfault where it looks like only half of the QPointer is set to null upon object deletion uint64_t ptrVal = (uint64_t)(ScriptObjectV8Proxy::unwrap(v8Val)); if ((uint32_t)(ptrVal) == 0 && ptrVal != 0) { - qDebug() << "ScriptEngineV8::castValueToVariant pointer bug happened"; + qCDebug(scriptengine_v8) << "ScriptEngineV8::castValueToVariant pointer bug happened"; //Q_ASSERT(false); return false; } @@ -531,7 +532,7 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de //V8TODO is v8::Array to QVariant conversion used anywhere? errorMessage = QString() + "Conversion to variant failed: " + QString(*v8::String::Utf8Value(_v8Isolate, val->ToDetailString(getConstContext()).ToLocalChecked())) + " Destination type: " + QMetaType::typeName(destTypeId) + " Value details: " + scriptValueDebugDetailsV8(v8Val); - qDebug() << errorMessage; + qCDebug(scriptengine_v8) << errorMessage; return false; default: // check to see if this is a pointer to a QObject-derived object @@ -570,7 +571,7 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de // V8TODO errorMessage = QString() + "Conversion failure: " + QString(*v8::String::Utf8Value(_v8Isolate, val->ToDetailString(getConstContext()).ToLocalChecked())) + "to variant. Destination type: " + QMetaType::typeName(destTypeId); - qDebug() << errorMessage; + qCDebug(scriptengine_v8) << errorMessage; if(destTypeId == QMetaType::QVariant) { Q_ASSERT(false); } @@ -591,7 +592,7 @@ bool ScriptEngineV8::convertJSArrayToVariant(v8::Local array, QVarian for (int i = 0; i < length; i++) { v8::Local v8Property; if (!array->Get(context, i).ToLocal(&v8Property)) { - qDebug() << "ScriptEngineV8::convertJSArrayToVariant could not get property: " + QString(i); + qCDebug(scriptengine_v8) << "ScriptEngineV8::convertJSArrayToVariant could not get property: " + QString(i); continue; } QVariant property; @@ -599,7 +600,7 @@ bool ScriptEngineV8::convertJSArrayToVariant(v8::Local array, QVarian if (castValueToVariant(V8ScriptValue(this, v8Property), property, QMetaType::UnknownType)) { properties.append(property); } else { - qDebug() << "ScriptEngineV8::convertJSArrayToVariant could cast property to variant: " + QString(i); + qCDebug(scriptengine_v8) << "ScriptEngineV8::convertJSArrayToVariant could cast property to variant: " + QString(i); ; } } @@ -613,7 +614,7 @@ bool ScriptEngineV8::convertJSObjectToVariant(v8::Local object, QVar v8::Context::Scope contextScope(context); v8::Local names; if(!object->GetPropertyNames(context).ToLocal(&names)) { - qDebug() << "ScriptEngineV8::convertJSObjectToVariant could not get property names"; + qCDebug(scriptengine_v8) << "ScriptEngineV8::convertJSObjectToVariant could not get property names"; return false; } int length = names->Length(); @@ -622,7 +623,7 @@ bool ScriptEngineV8::convertJSObjectToVariant(v8::Local object, QVar v8::Local v8Property; QString name = *v8::String::Utf8Value(_v8Isolate, names->Get(context, i).ToLocalChecked()); if (!object->Get(context, names->Get(context, i).ToLocalChecked()).ToLocal(&v8Property)) { - qDebug() << "ScriptEngineV8::convertJSObjectToVariant could not get property: " + name; + qCDebug(scriptengine_v8) << "ScriptEngineV8::convertJSObjectToVariant could not get property: " + name; continue; } QVariant property; @@ -630,7 +631,7 @@ bool ScriptEngineV8::convertJSObjectToVariant(v8::Local object, QVar if (castValueToVariant(V8ScriptValue(this, v8Property), property, QMetaType::UnknownType)) { properties.insert( name, property); } else { - qDebug() << "ScriptEngineV8::convertJSObjectToVariant could cast property to variant: " + name; + qCDebug(scriptengine_v8) << "ScriptEngineV8::convertJSObjectToVariant could cast property to variant: " + name; ; } } @@ -648,7 +649,7 @@ QString ScriptEngineV8::valueType(const V8ScriptValue& v8Val) { //v8::HandleScope handleScope(const_cast(v8Val.constGetIsolate())); const v8::Local val = v8Val.constGet(); - + if (val->IsUndefined()) { return "undefined"; } @@ -682,7 +683,7 @@ QString ScriptEngineV8::valueType(const V8ScriptValue& v8Val) { if (castValueToVariant(v8Val, dest, QMetaType::QVariant)) { return dest.typeName(); } - qDebug() << "Cast to variant failed"; + qCDebug(scriptengine_v8) << "Cast to variant failed"; // V8TODO: what to return here? return "undefined"; } @@ -780,7 +781,7 @@ V8ScriptValue ScriptEngineV8::castVariantToValue(const QVariant& val) { } // just do a generic variant //V8TODO - qDebug() << "ScriptEngineV8::castVariantToValue failed for " << QMetaType::typeName(valTypeId); + qCDebug(scriptengine_v8) << "ScriptEngineV8::castVariantToValue failed for " << QMetaType::typeName(valTypeId); logBacktrace("ScriptEngineV8::castVariantToValue failed"); //Q_ASSERT(false); return V8ScriptValue(this, v8::Undefined(_v8Isolate)); diff --git a/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp b/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp index 5c301cff26..140dad0248 100644 --- a/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp +++ b/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp @@ -22,6 +22,7 @@ #include "ScriptContextV8Wrapper.h" #include "ScriptValueV8Wrapper.h" +#include "ScriptEngineLoggingV8.h" //V8TODO: is this needed for anything? It could cause trouble with multithreading if V8ScriptContext is v8::Persistent //Q_DECLARE_METATYPE(V8ScriptContext*) @@ -110,7 +111,7 @@ V8ScriptValue ScriptObjectV8Proxy::newQObject(ScriptEngineV8* engine, QObject* o break; default: ownsObject = false; - qCritical() << "Wrong ScriptEngine::ValueOwnership value: " << ownership; + qCCritical(scriptengine_v8) << "Wrong ScriptEngine::ValueOwnership value: " << ownership; break; } @@ -166,16 +167,16 @@ ScriptObjectV8Proxy* ScriptObjectV8Proxy::unwrapProxy(const V8ScriptValue& val) return nullptr; } if (!v8Value->IsObject()) { - //qDebug(scriptengine) << "Cannot unwrap proxy - value is not an object"; + //qCDebug(scriptengine_v8) << "Cannot unwrap proxy - value is not an object"; return nullptr; } v8::Local v8Object = v8::Local::Cast(v8Value); if (v8Object->InternalFieldCount() != 3) { - //qDebug(scriptengine) << "Cannot unwrap proxy - wrong number of internal fields"; + //qCDebug(scriptengine_v8) << "Cannot unwrap proxy - wrong number of internal fields"; return nullptr; } if (v8Object->GetAlignedPointerFromInternalField(0) != internalPointsToQObjectProxy) { - qDebug(scriptengine) << "Cannot unwrap proxy - internal fields don't point to object proxy"; + qCDebug(scriptengine_v8) << "Cannot unwrap proxy - internal fields don't point to object proxy"; return nullptr; } return reinterpret_cast(v8Object->GetAlignedPointerFromInternalField(1)); @@ -189,20 +190,20 @@ ScriptObjectV8Proxy* ScriptObjectV8Proxy::unwrapProxy(v8::Isolate* isolate, v8:: //v8::Local context = val.constGetContext(); //v8::Context::Scope contextScope(context); if (value->IsNullOrUndefined()) { - //qDebug(scriptengine) << "Cannot unwrap proxy - value is not an object"; + //qCDebug(scriptengine_v8) << "Cannot unwrap proxy - value is not an object"; return nullptr; } if (!value->IsObject()) { - //qDebug(scriptengine) << "Cannot unwrap proxy - value is not an object"; + //qCDebug(scriptengine_v8) << "Cannot unwrap proxy - value is not an object"; return nullptr; } v8::Local v8Object = v8::Local::Cast(value); if (v8Object->InternalFieldCount() != 3) { - //qDebug(scriptengine) << "Cannot unwrap proxy - wrong number of internal fields"; + //qCDebug(scriptengine_v8) << "Cannot unwrap proxy - wrong number of internal fields"; return nullptr; } if (v8Object->GetAlignedPointerFromInternalField(0) != internalPointsToQObjectProxy) { - qDebug(scriptengine) << "Cannot unwrap proxy - internal fields don't point to object proxy"; + qCDebug(scriptengine_v8) << "Cannot unwrap proxy - internal fields don't point to object proxy"; return nullptr; } return reinterpret_cast(v8Object->GetAlignedPointerFromInternalField(1)); @@ -218,7 +219,7 @@ ScriptObjectV8Proxy::~ScriptObjectV8Proxy() { v8::Locker locker(isolate); v8::Isolate::Scope isolateScope(isolate); v8::HandleScope handleScope(isolate); - if(_object) qDebug(scriptengine) << "Deleting object proxy: " << name(); + if(_object) 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()); // This prevents unwrap function from unwrapping proxy that was deleted @@ -234,7 +235,7 @@ void ScriptObjectV8Proxy::investigate() { QObject* qobject = _object; if (!qobject) { QStringList backtrace = _engine->currentContext()->backtrace(); - qDebug(scriptengine) << "ScriptObjectV8Proxy::investigate: Object pointer is NULL, " << backtrace; + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::investigate: Object pointer is NULL, " << backtrace; } if (!qobject) return; @@ -251,7 +252,7 @@ void ScriptObjectV8Proxy::investigate() { const QMetaObject* metaObject = qobject->metaObject(); - //qDebug(scriptengine) << "Investigate: " << metaObject->className(); + //qCDebug(scriptengine_v8) << "Investigate: " << metaObject->className(); if (QString("ConsoleScriptingInterface") == metaObject->className()) { printf("ConsoleScriptingInterface"); } @@ -262,7 +263,7 @@ void ScriptObjectV8Proxy::investigate() { QMetaProperty prop = metaObject->property(idx); if (!prop.isScriptable()) continue; - //qDebug(scriptengine) << "Investigate: " << metaObject->className() << " Property: " << prop.name(); + //qCDebug(scriptengine_v8) << "Investigate: " << metaObject->className() << " Property: " << prop.name(); // always exclude child objects (at least until we decide otherwise) int metaTypeId = prop.userType(); if (metaTypeId != QMetaType::UnknownType) { @@ -285,7 +286,7 @@ void ScriptObjectV8Proxy::investigate() { QHash methodNames; for (int idx = startIdx; idx < num; ++idx) { QMetaMethod method = metaObject->method(idx); - //qDebug(scriptengine) << "Investigate: " << metaObject->className() << " Method: " << method.name(); + //qCDebug(scriptengine_v8) << "Investigate: " << metaObject->className() << " Method: " << method.name(); // perhaps keep this comment? Calls (like AudioScriptingInterface::playSound) seem to expect non-public methods to be script-accessible /* if (method.access() != QMetaMethod::Public) continue;*/ @@ -319,9 +320,9 @@ void ScriptObjectV8Proxy::investigate() { SignalDef& signalDef = _signals.insert(idx, SignalDef(_engine, name.get())).value(); signalDef.name = name; signalDef.signal = method; - //qDebug(scriptengine) << "Utf8Value 1: " << QString(*v8::String::Utf8Value(const_cast(_engine->getIsolate()), nameString)); - //qDebug(scriptengine) << "Utf8Value 2: " << QString(*v8::String::Utf8Value(const_cast(_engine->getIsolate()), name.constGet())); - //qDebug(scriptengine) << "toQString: " << name.toQString(); + //qCDebug(scriptengine_v8) << "Utf8Value 1: " << QString(*v8::String::Utf8Value(const_cast(_engine->getIsolate()), nameString)); + //qCDebug(scriptengine_v8) << "Utf8Value 2: " << QString(*v8::String::Utf8Value(const_cast(_engine->getIsolate()), name.constGet())); + //qCDebug(scriptengine_v8) << "toQString: " << name.toQString(); methodNames.insert(name, idx); } else { int originalMethodId = nameLookup.value(); @@ -336,11 +337,11 @@ void ScriptObjectV8Proxy::investigate() { } else { int parameterCount = method.parameterCount(); if(method.returnType() == QMetaType::UnknownType) { - qCritical(scriptengine) << "Method " << metaObject->className() << "::" << name.toQString() << " has QMetaType::UnknownType return value"; + qCCritical(scriptengine_v8) << "Method " << metaObject->className() << "::" << name.toQString() << " has QMetaType::UnknownType return value"; } for (int i = 0; i < method.parameterCount(); i++) { if (method.parameterType(i) == QMetaType::UnknownType) { - qCritical(scriptengine) << "Parameter " << i << "in method " << metaObject->className() << "::" << name.toQString() << " is of type QMetaType::UnknownType"; + qCCritical(scriptengine_v8) << "Parameter " << i << "in method " << metaObject->className() << "::" << name.toQString() << " is of type QMetaType::UnknownType"; } } if (nameLookup == methodNames.end()) { @@ -403,7 +404,7 @@ ScriptObjectV8Proxy::QueryFlags ScriptObjectV8Proxy::queryProperty(const V8Scrip // check for methods for (MethodDefMap::const_iterator trans = _methods.cbegin(); trans != _methods.cend(); ++trans) { v8::String::Utf8Value methodNameStr(isolate, trans.value().name.constGet()); - //qDebug(scriptengine) << "queryProperty : " << *nameStr << " method: " << *methodNameStr; + //qCDebug(scriptengine_v8) << "queryProperty : " << *nameStr << " method: " << *methodNameStr; if (!(trans.value().name == name)) continue; *id = trans.key() | METHOD_TYPE; return flags & (HandlesReadAccess | HandlesWriteAccess); @@ -458,17 +459,17 @@ void ScriptObjectV8Proxy::v8Get(v8::Local name, const v8::PropertyCall v8::HandleScope handleScope(info.GetIsolate()); //V8TODO: should there be a context scope here? v8::String::Utf8Value utf8Value(info.GetIsolate(), name); - //qDebug(scriptengine) << "Get: " << *utf8Value; + //qCDebug(scriptengine_v8) << "Get: " << *utf8Value; v8::Local objectV8 = info.This(); ScriptObjectV8Proxy *proxy = ScriptObjectV8Proxy::unwrapProxy(info.GetIsolate(), objectV8); if (!proxy) { - qDebug(scriptengine) << "Proxy object not found when getting: " << *utf8Value; + qCDebug(scriptengine_v8) << "Proxy object not found when getting: " << *utf8Value; return; } V8ScriptValue object(proxy->_engine, objectV8); if (!name->IsString() && !name->IsSymbol()) { QString notStringMessage("ScriptObjectV8Proxy::v8Get: " + proxy->_engine->scriptValueDebugDetailsV8(V8ScriptValue(proxy->_engine, name))); - qDebug(scriptengine) << notStringMessage; + qCDebug(scriptengine_v8) << notStringMessage; Q_ASSERT(false); } v8::Local v8NameString; @@ -481,7 +482,7 @@ void ScriptObjectV8Proxy::v8Get(v8::Local name, const v8::PropertyCall } if (name->IsSymbol()) { - qDebug(scriptengine) << "ScriptObjectV8Proxy::v8Set: symbol: " + nameString.toQString(); + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8Set: symbol: " + nameString.toQString(); }*/ if (name->IsString()) { V8ScriptString nameString(proxy->_engine, v8::Local::Cast(name)); @@ -498,7 +499,7 @@ void ScriptObjectV8Proxy::v8Get(v8::Local name, const v8::PropertyCall if(info.This()->GetInternalField(2).As()->Get(proxy->_engine->getContext(), name).ToLocal(&property)) { info.GetReturnValue().Set(property); } else { - qDebug(scriptengine) << "Value not found: " << *utf8Value; + qCDebug(scriptengine_v8) << "Value not found: " << *utf8Value; } } @@ -506,17 +507,17 @@ void ScriptObjectV8Proxy::v8Set(v8::Local name, v8::Local v v8::HandleScope handleScope(info.GetIsolate()); //V8TODO: should there be a context scope here? v8::String::Utf8Value utf8Value(info.GetIsolate(), name); - //qDebug(scriptengine) << "Set: " << *utf8Value; + //qCDebug(scriptengine_v8) << "Set: " << *utf8Value; v8::Local objectV8 = info.This(); ScriptObjectV8Proxy *proxy = ScriptObjectV8Proxy::unwrapProxy(info.GetIsolate(), objectV8); if (!proxy) { - qDebug(scriptengine) << "Proxy object not found when setting: " << *utf8Value; + qCDebug(scriptengine_v8) << "Proxy object not found when setting: " << *utf8Value; return; } V8ScriptValue object(proxy->_engine, objectV8); if (!name->IsString() && !name->IsSymbol()) { QString notStringMessage("ScriptObjectV8Proxy::v8Set: " + proxy->_engine->scriptValueDebugDetailsV8(V8ScriptValue(proxy->_engine, name))); - qDebug(scriptengine) << notStringMessage; + qCDebug(scriptengine_v8) << notStringMessage; Q_ASSERT(false); } /*v8::Local v8NameString; @@ -528,7 +529,7 @@ void ScriptObjectV8Proxy::v8Set(v8::Local name, v8::Local v } } if (name->IsSymbol()) { - qDebug(scriptengine) << "ScriptObjectV8Proxy::v8Set: symbol: " + nameString.toQString(); + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8Set: symbol: " + nameString.toQString(); }*/ //V8ScriptString nameString(info.GetIsolate(), name->ToString(proxy->_engine->getContext()).ToLocalChecked()); if (name->IsString()) { @@ -545,19 +546,19 @@ void ScriptObjectV8Proxy::v8Set(v8::Local name, v8::Local v if (info.This()->GetInternalField(2).As()->Set(proxy->_engine->getContext(), name, value).FromMaybe(false)) { info.GetReturnValue().Set(value); } else { - qDebug(scriptengine) << "Set failed: " << *utf8Value; + qCDebug(scriptengine_v8) << "Set failed: " << *utf8Value; } } void ScriptObjectV8Proxy::v8GetPropertyNames(const v8::PropertyCallbackInfo& info) { - qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames called"; + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames called"; v8::HandleScope handleScope(info.GetIsolate()); auto context = info.GetIsolate()->GetCurrentContext(); v8::Context::Scope contextScope(context); v8::Local objectV8 = info.This(); ScriptObjectV8Proxy *proxy = ScriptObjectV8Proxy::unwrapProxy(info.GetIsolate(), objectV8); if (!proxy) { - qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames: Proxy object not found when listing"; + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames: Proxy object not found when listing"; return; } V8ScriptValue object(proxy->_engine, objectV8); @@ -568,7 +569,7 @@ void ScriptObjectV8Proxy::v8GetPropertyNames(const v8::PropertyCallbackInfoGetInternalField(2).As()->GetPropertyNames(context).ToLocal(&objectProperties)) { for (uint32_t n = 0; n < objectProperties->Length(); n++) { if(!properties->Set(context, propertiesLength+n, objectProperties->Get(context, n).ToLocalChecked()).FromMaybe(false)) { - qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames: Cannot add member name"; + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames: Cannot add member name"; } } } @@ -587,17 +588,17 @@ v8::Local ScriptObjectV8Proxy::getPropertyNames() { uint32_t position = 0; for (PropertyDefMap::const_iterator i = _props.begin(); i != _props.end(); i++){ if(!properties->Set(context, position++, i.value().name.constGet()).FromMaybe(false)) { - qDebug(scriptengine) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name"; + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name"; } } for (MethodDefMap::const_iterator i = _methods.begin(); i != _methods.end(); i++){ if(!properties->Set(context, position++, i.value().name.constGet()).FromMaybe(false)) { - qDebug(scriptengine) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name"; + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name"; } } for (SignalDefMap::const_iterator i = _signals.begin(); i != _signals.end(); i++){ if(!properties->Set(context, position++, i.value().name.constGet()).FromMaybe(false)) { - qDebug(scriptengine) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name"; + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name"; } } return handleScope.Escape(properties); @@ -639,7 +640,7 @@ V8ScriptValue ScriptObjectV8Proxy::property(const V8ScriptValue& object, const V const MethodDef& methodDef = lookup.value(); for (auto iter = methodDef.methods.begin(); iter != methodDef.methods.end(); iter++ ) { if((*iter).returnType() == QMetaType::UnknownType) { - qDebug(scriptengine) << "Method with QMetaType::UnknownType " << metaObject->className() << " " << (*iter).name(); + qCDebug(scriptengine_v8) << "Method with QMetaType::UnknownType " << metaObject->className() << " " << (*iter).name(); } } //V8TODO: is new method created during every call? It needs to be cached instead //bool isMethodDefined = false; @@ -650,7 +651,7 @@ V8ScriptValue ScriptObjectV8Proxy::property(const V8ScriptValue& object, const V } } Q_ASSERT(false); - qDebug(scriptengine) << "(This should not happen) Creating new method object for " << metaObject->className() << " " << name.toQString(); + qCDebug(scriptengine_v8) << "(This should not happen) Creating new method object for " << metaObject->className() << " " << name.toQString(); return ScriptMethodV8Proxy::newMethod(_engine, qobject, object, methodDef.methods, methodDef.numMaxParms); } case SIGNAL_TYPE: { @@ -828,7 +829,7 @@ void ScriptVariantV8Proxy::v8Get(v8::Local name, const v8::PropertyCal v8::Local objectV8 = info.This(); ScriptVariantV8Proxy *proxy = ScriptVariantV8Proxy::unwrapProxy(info.GetIsolate(), objectV8); if (!proxy) { - qDebug(scriptengine) << "Proxy object not found when getting: " << *utf8Name; + qCDebug(scriptengine_v8) << "Proxy object not found when getting: " << *utf8Name; return; } V8ScriptValue object(proxy->_engine, proxy->_v8Object.Get(info.GetIsolate())); @@ -844,13 +845,13 @@ void ScriptVariantV8Proxy::v8Get(v8::Local name, const v8::PropertyCal } } - qDebug(scriptengine) << "Value not found: " << *utf8Name; + qCDebug(scriptengine_v8) << "Value not found: " << *utf8Name; // V8TODO: this is done differently for variant proxy - use internal field of _v8Object instead? /*v8::Local property; if(info.This()->GetInternalField(2).As()->Get(proxy->_engine->getContext(), name).ToLocal(&property)) { info.GetReturnValue().Set(property); } else { - qDebug(scriptengine) << "Value not found: " << *utf8Value; + qCDebug(scriptengine_v8) << "Value not found: " << *utf8Value; }*/ } @@ -860,14 +861,14 @@ void ScriptVariantV8Proxy::v8Set(v8::Local name, v8::Local v8::Local objectV8 = info.This(); ScriptVariantV8Proxy *proxy = ScriptVariantV8Proxy::unwrapProxy(info.GetIsolate(), objectV8); if (!proxy) { - qDebug(scriptengine) << "Proxy object not found when getting: " << *utf8Name; + qCDebug(scriptengine_v8) << "Proxy object not found when getting: " << *utf8Name; return; } V8ScriptValue object(proxy->_engine, objectV8); if (!name->IsString() && !name->IsSymbol()) { QString notStringMessage("ScriptObjectV8Proxy::v8Set: " + proxy->_engine->scriptValueDebugDetailsV8(V8ScriptValue(proxy->_engine, name))); - qDebug(scriptengine) << notStringMessage; + qCDebug(scriptengine_v8) << notStringMessage; Q_ASSERT(false); } @@ -885,21 +886,21 @@ void ScriptVariantV8Proxy::v8Set(v8::Local name, v8::Local /*if (info.This()->GetInternalField(2).As()->Set(proxy->_engine->getContext(), name, value).FromMaybe(false)) { info.GetReturnValue().Set(value); } else { - qDebug(scriptengine) << "Set failed: " << *utf8Name; + qCDebug(scriptengine_v8) << "Set failed: " << *utf8Name; }*/ - qDebug(scriptengine) << "Set failed: " << *utf8Name; + qCDebug(scriptengine_v8) << "Set failed: " << *utf8Name; } void ScriptVariantV8Proxy::v8GetPropertyNames(const v8::PropertyCallbackInfo& info) { //V8TODO: Only methods from the prototype should be listed. - qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames called"; + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames called"; v8::HandleScope handleScope(info.GetIsolate()); auto context = info.GetIsolate()->GetCurrentContext(); v8::Context::Scope contextScope(context); v8::Local objectV8 = info.This(); ScriptVariantV8Proxy *proxy = ScriptVariantV8Proxy::unwrapProxy(info.GetIsolate(), objectV8); if (!proxy) { - qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames: Proxy object not found when listing"; + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames: Proxy object not found when listing"; return; } V8ScriptValue object(proxy->_engine, objectV8); @@ -910,7 +911,7 @@ void ScriptVariantV8Proxy::v8GetPropertyNames(const v8::PropertyCallbackInfoGetInternalField(2).As()->GetPropertyNames(context).ToLocal(&objectProperties)) { for (uint32_t n = 0; n < objectProperties->Length(); n++) { if(!properties->Set(context, propertiesLength+n, objectProperties->Get(context, n).ToLocalChecked()).FromMaybe(false)) { - qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames: Cannot add member name"; + qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames: Cannot add member name"; } } }*/ @@ -929,7 +930,7 @@ ScriptMethodV8Proxy::ScriptMethodV8Proxy(ScriptEngineV8* engine, QObject* object } ScriptMethodV8Proxy::~ScriptMethodV8Proxy() { - qDebug(scriptengine) << "ScriptMethodV8Proxy destroyed"; + qCDebug(scriptengine_v8) << "ScriptMethodV8Proxy destroyed"; printf("ScriptMethodV8Proxy destroyed"); } @@ -1107,7 +1108,7 @@ void ScriptMethodV8Proxy::call(const v8::FunctionCallbackInfo& argume // nothing in there for return values so these need to be explicitly runtime-registered! if (returnTypeId == QMetaType::UnknownType) { QString methodName = fullName(); - qDebug(scriptengine) << "returnTypeId == QMetaType::UnknownType for method " << methodName; + qCDebug(scriptengine_v8) << "returnTypeId == QMetaType::UnknownType for method " << methodName; _engine->logBacktrace(""); //Q_ASSERT(false); } @@ -1173,7 +1174,7 @@ void ScriptMethodV8Proxy::call(const v8::FunctionCallbackInfo& argume QByteArray argTypeName = _engine->valueType(V8ScriptValue(_engine, argVal)).toLatin1(); QString errorMessage = QString("Native call of %1 failed: Cannot convert parameter %2 from %3 to %4") .arg(fullName()).arg(arg+1).arg(argTypeName, methodTypeName); - qDebug(scriptengine) << errorMessage << "\n Backtrace:" << _engine->currentContext()->backtrace(); + qCDebug(scriptengine_v8) << errorMessage << "\n Backtrace:" << _engine->currentContext()->backtrace(); isolate->ThrowError(v8::String::NewFromUtf8(isolate, errorMessage.toStdString().c_str()).ToLocalChecked()); //context->throwError(V8ScriptContext::TypeError, QString("Native call of %1 failed: Cannot convert parameter %2 from %3 to %4") // .arg(fullName()).arg(arg+1).arg(argTypeName, methodTypeName)); @@ -1182,7 +1183,7 @@ void ScriptMethodV8Proxy::call(const v8::FunctionCallbackInfo& argume } } QString errorMessage = QString("Native call of %1 failed: could not locate an overload with the requested arguments").arg(fullName()); - qDebug(scriptengine) << errorMessage; + qCDebug(scriptengine_v8) << errorMessage; isolate->ThrowError(v8::String::NewFromUtf8(isolate, errorMessage.toStdString().c_str()).ToLocalChecked()); // V8TODO: it happens sometimes for some reason Q_ASSERT(false); // really shouldn't have gotten here -- it didn't work before and it's working now? @@ -1384,7 +1385,7 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu _callCounter++; if (_callCounter % 10 == 0) { - qDebug() << "Script engine: " << _engine->manager()->getFilename() << " Signal proxy " << fullName() + qCDebug(scriptengine_v8) << "Script engine: " << _engine->manager()->getFilename() << " Signal proxy " << fullName() << " call count: " << _callCounter << " total time: " << _totalCallTime_s; } QElapsedTimer callTimer; @@ -1434,7 +1435,7 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu /*if (!conn.callback.get()->IsFunction()) { auto stringV8 = conn.callback.get()->ToDetailString(context).ToLocalChecked(); QString error = *v8::String::Utf8Value(_engine->getIsolate(), stringV8); - qDebug() << error; + qCDebug(scriptengine_v8) << error; Q_ASSERT(false); } v8::Local callback = v8::Local::Cast(conn.callback.get()); @@ -1449,14 +1450,14 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu Q_ASSERT(!conn.callback.get().IsEmpty()); Q_ASSERT(!conn.callback.get()->IsUndefined()); if (conn.callback.get()->IsNull()) { - qDebug() << "ScriptSignalV8Proxy::qt_metacall: Connection callback is Null"; + qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::qt_metacall: Connection callback is Null"; _engine->popContext(); continue; } if (!conn.callback.get()->IsFunction()) { auto stringV8 = conn.callback.get()->ToDetailString(functionContext).ToLocalChecked(); QString error = *v8::String::Utf8Value(_engine->getIsolate(), stringV8); - qDebug() << error; + qCDebug(scriptengine_v8) << error; Q_ASSERT(false); } v8::Local callback = v8::Local::Cast(conn.callback.get()); @@ -1577,7 +1578,7 @@ void ScriptSignalV8Proxy::connect(ScriptValue arg0, ScriptValue arg1) { Q_ASSERT(ScriptObjectV8Proxy::unwrapProxy(v8ThisObject)); ScriptSignalV8Proxy* thisProxy = dynamic_cast(ScriptObjectV8Proxy::unwrapProxy(v8ThisObject)->toQObject()); Q_ASSERT(thisProxy); - qDebug(scriptengine) << "ScriptSignalV8Proxy::connect: " << thisProxy->fullName() << " fullName: " << fullName(); + qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::connect: " << thisProxy->fullName() << " fullName: " << fullName(); //Q_ASSERT(destFunction->InternalFieldCount() == 4); //Q_ASSERT(destData.get()->IsArray()); //v8::Local destData = destFunction->GetInternalField(3); @@ -1593,14 +1594,14 @@ void ScriptSignalV8Proxy::connect(ScriptValue arg0, ScriptValue arg1) { for (int idx = 0; idx < length && !foundIt; ++idx) { v8::Local entry = destArray->Get(destFunctionContext, idx).ToLocalChecked(); { - qDebug() << "ScriptSignalV8Proxy::connect: entry details: " << _engine->scriptValueDebugDetailsV8(V8ScriptValue(_engine, entry)); + qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::connect: entry details: " << _engine->scriptValueDebugDetailsV8(V8ScriptValue(_engine, entry)); Q_ASSERT(entry->IsObject()); V8ScriptValue v8EntryObject(_engine, entry); Q_ASSERT(ScriptObjectV8Proxy::unwrapProxy(v8EntryObject)); // For debugging ScriptSignalV8Proxy* entryProxy = dynamic_cast(ScriptObjectV8Proxy::unwrapProxy(v8EntryObject)->toQObject()); Q_ASSERT(thisProxy); - qDebug(scriptengine) << "ScriptSignalV8Proxy::connect: entry proxy: " << entryProxy->fullName(); + qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::connect: entry proxy: " << entryProxy->fullName(); } if (!newArray->Set(destFunctionContext, idx, entry).FromMaybe(false)) { Q_ASSERT(false); @@ -1712,7 +1713,7 @@ void ScriptSignalV8Proxy::disconnect(ScriptValue arg0, ScriptValue arg1) { // For debugging ScriptSignalV8Proxy* thisProxy = dynamic_cast(ScriptObjectV8Proxy::unwrapProxy(v8ThisObject)->toQObject()); Q_ASSERT(thisProxy); - qDebug(scriptengine) << "ScriptSignalV8Proxy::disconnect: " << thisProxy->fullName() << " fullName: " << fullName(); + qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::disconnect: " << thisProxy->fullName() << " fullName: " << fullName(); //V8ScriptValue destData = callback.data(); //Q_ASSERT(destData->IsArray()); if (!destFunction->Get(destFunctionContext, destDataName).ToLocal(&destData)) { @@ -1730,7 +1731,7 @@ void ScriptSignalV8Proxy::disconnect(ScriptValue arg0, ScriptValue arg1) { // For debugging: { _engine->logBacktrace("ScriptSignalV8Proxy::disconnect"); - qDebug() << "ScriptSignalV8Proxy::disconnect: entry details: " << _engine->scriptValueDebugDetailsV8(V8ScriptValue(_engine, entry)) + qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::disconnect: entry details: " << _engine->scriptValueDebugDetailsV8(V8ScriptValue(_engine, entry)) << " Array: " << _engine->scriptValueDebugDetailsV8(V8ScriptValue(_engine, destArray)); Q_ASSERT(entry->IsObject()); V8ScriptValue v8EntryObject(_engine, entry); @@ -1738,12 +1739,12 @@ void ScriptSignalV8Proxy::disconnect(ScriptValue arg0, ScriptValue arg1) { // For debugging ScriptSignalV8Proxy* entryProxy = dynamic_cast(ScriptObjectV8Proxy::unwrapProxy(v8EntryObject)->toQObject()); Q_ASSERT(thisProxy); - qDebug(scriptengine) << "ScriptSignalV8Proxy::disconnect: entry proxy: " << entryProxy->fullName(); + qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::disconnect: entry proxy: " << entryProxy->fullName(); } if (entry->StrictEquals(v8ThisObject.get())) { //V8TODO: compare proxies instead? foundIt = true; - qDebug() << "ScriptSignalV8Proxy::disconnect foundIt"; + qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::disconnect foundIt"; //V8ScriptValueList args; //args << idx << 1; //destData.property("splice").call(destData, args); diff --git a/libraries/script-engine/src/v8/ScriptProgramV8Wrapper.cpp b/libraries/script-engine/src/v8/ScriptProgramV8Wrapper.cpp index 9cbd994642..a908489a31 100644 --- a/libraries/script-engine/src/v8/ScriptProgramV8Wrapper.cpp +++ b/libraries/script-engine/src/v8/ScriptProgramV8Wrapper.cpp @@ -16,6 +16,7 @@ #include "ScriptEngineV8.h" #include "ScriptValueV8Wrapper.h" +#include "ScriptEngineLoggingV8.h" ScriptProgramV8Wrapper* ScriptProgramV8Wrapper::unwrap(ScriptProgramPointer val) { if (!val) { @@ -53,13 +54,13 @@ bool ScriptProgramV8Wrapper::compile() { v8::ScriptOrigin scriptOrigin(isolate, v8::String::NewFromUtf8(isolate, _url.toStdString().c_str()).ToLocalChecked()); v8::Local script; if (v8::Script::Compile(context, v8::String::NewFromUtf8(isolate, _source.toStdString().c_str()).ToLocalChecked(), &scriptOrigin).ToLocal(&script)) { - qDebug() << "Script compilation successful: " << _url; + qCDebug(scriptengine_v8) << "Script compilation successful: " << _url; _compileResult = ScriptSyntaxCheckResultV8Wrapper(ScriptSyntaxCheckResult::Valid); _value = V8ScriptProgram(_engine, script); _isCompiled = true; return true; } - qDebug() << "Script compilation failed: " << _url; + qCDebug(scriptengine_v8) << "Script compilation failed: " << _url; v8::String::Utf8Value utf8Value(isolate, tryCatch.Exception()); errorMessage = QString(*utf8Value); v8::Local exceptionMessage = tryCatch.Message(); diff --git a/libraries/script-engine/src/v8/ScriptValueIteratorV8Wrapper.cpp b/libraries/script-engine/src/v8/ScriptValueIteratorV8Wrapper.cpp index 0a8576d60c..bd12b161d8 100644 --- a/libraries/script-engine/src/v8/ScriptValueIteratorV8Wrapper.cpp +++ b/libraries/script-engine/src/v8/ScriptValueIteratorV8Wrapper.cpp @@ -13,6 +13,7 @@ // #include "ScriptValueIteratorV8Wrapper.h" +#include "ScriptEngineLoggingV8.h" V8ScriptValueIterator::V8ScriptValueIterator(ScriptEngineV8* engine, v8::Local object) : _engine(engine) { auto isolate = _engine->getIsolate(); diff --git a/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp b/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp index 8bcb0cf3e2..fe9581507b 100644 --- a/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp +++ b/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp @@ -17,7 +17,7 @@ #include "ScriptValueIteratorV8Wrapper.h" #include "../ScriptEngineLogging.h" - +#include "ScriptEngineLoggingV8.h" void ScriptValueV8Wrapper::release() { // V8TODO: maybe add an assert to check if it happens on script engine thread? @@ -92,17 +92,17 @@ ScriptValue ScriptValueV8Wrapper::call(const ScriptValue& thisObject, const Scri v8::Local recv; if (v8This.get()->IsObject()) { recv = v8This.get(); - //qDebug() << "V8 This: " << _engine->scriptValueDebugDetailsV8(v8This); + //qCDebug(scriptengine_v8) << "V8 This: " << _engine->scriptValueDebugDetailsV8(v8This); }else{ recv = _engine->getContext()->Global(); //recv = v8::Null(isolate); - //qDebug() << "global"; + //qCDebug(scriptengine_v8) << "global"; } - //qDebug() << "V8 Call: " << *v8::String::Utf8Value(isolate, v8This.get()->TypeOf(isolate)); + //qCDebug(scriptengine_v8) << "V8 Call: " << *v8::String::Utf8Value(isolate, v8This.get()->TypeOf(isolate)); auto maybeResult = v8Function->Call(_engine->getContext(), recv, args.length(), v8Args); // V8TODO: Exceptions don't seem to actually be caught here? if (tryCatch.HasCaught()) { - qCDebug(scriptengine) << "Function call failed: \"" << _engine->formatErrorMessageFromTryCatch(tryCatch); + qCDebug(scriptengine_v8) << "Function call failed: \"" << _engine->formatErrorMessageFromTryCatch(tryCatch); } v8::Local result; Q_ASSERT(_engine == _value.getEngine()); @@ -110,7 +110,7 @@ ScriptValue ScriptValueV8Wrapper::call(const ScriptValue& thisObject, const Scri return ScriptValue(new ScriptValueV8Wrapper(_engine, V8ScriptValue(_engine, result))); } else { //V8TODO Add more details - qWarning("JS function call failed"); + qCWarning(scriptengine_v8) << "JS function call failed"; return _engine->undefinedValue(); } } @@ -135,7 +135,7 @@ ScriptValue ScriptValueV8Wrapper::call(const ScriptValue& thisObject, const Scri return ScriptValue(new ScriptValueV8Wrapper(_engine, V8ScriptValue(_engine->getContext(), result))); } else { //V8TODO Add more details - qWarning("JS function call failed"); + qCWarning(scriptengine_v8) << "JS function call failed"; return _engine->undefinedValue(); }*/ } @@ -163,7 +163,7 @@ ScriptValue ScriptValueV8Wrapper::construct(const ScriptValueList& args) { return ScriptValue(new ScriptValueV8Wrapper(_engine, V8ScriptValue(_engine, result))); } else { //V8TODO Add more details - qWarning("JS function call failed"); + qCWarning(scriptengine_v8) << "JS function call failed"; return _engine->undefinedValue(); } } @@ -205,18 +205,18 @@ ScriptValue ScriptValueV8Wrapper::data() const { } } if (createData) { - qDebug() << "ScriptValueV8Wrapper::data(): Data object doesn't exist, creating new one"; + qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::data(): Data object doesn't exist, creating new one"; // Create data object if it's non-existent or invalid data = v8::Object::New(isolate); if( !v8Object->Set(_engine->getContext(), v8::String::NewFromUtf8(isolate, "__data").ToLocalChecked(), data).FromMaybe(false)) { - qDebug() << "ScriptValueV8Wrapper::data(): Data object couldn't be created"; + qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::data(): Data object couldn't be created"; Q_ASSERT(false); } }*/ V8ScriptValue result(_engine, data); return ScriptValue(new ScriptValueV8Wrapper(_engine, std::move(result))); } else { - qDebug() << "ScriptValueV8Wrapper::data() was called on a value that is not an object"; + qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::data() was called on a value that is not an object"; Q_ASSERT(false); } //V8TODO I'm not sure how this would work in V8 @@ -290,15 +290,15 @@ ScriptValue ScriptValueV8Wrapper::property(const QString& name, const ScriptValu if (_value.constGet()->ToDetailString(_engine->getContext()).ToLocal(&parentValueString)) { QString(*v8::String::Utf8Value(isolate, parentValueString)); } - qDebug() << "Failed to get property, parent of value: " << name << ", parent type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))) << " parent value: " << parentValueQString; + qCDebug(scriptengine_v8) << "Failed to get property, parent of value: " << name << ", parent type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))) << " parent value: " << parentValueQString; } } if (name == QString("x")) { printf("x"); } //This displays too many messages during correct operation, but is useful for debugging - //qDebug() << "Failed to get property, parent of value: " << name << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); - //qDebug() << "Backtrace: " << _engine->currentContext()->backtrace(); + //qCDebug(scriptengine_v8) << "Failed to get property, parent of value: " << name << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); + //qCDebug(scriptengine_v8) << "Backtrace: " << _engine->currentContext()->backtrace(); return _engine->undefinedValue(); /*v8::Local nullValue = v8::Null(_engine->getIsolate()); V8ScriptValue nullScriptValue(_engine->getIsolate(), std::move(nullValue)); @@ -314,7 +314,7 @@ ScriptValue ScriptValueV8Wrapper::property(quint32 arrayIndex, const ScriptValue v8::HandleScope handleScope(isolate); v8::Context::Scope contextScope(_engine->getContext()); if (_value.constGet()->IsNullOrUndefined()) { - qDebug() << "Failed to get property, parent of value: " << arrayIndex << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); + qCDebug(scriptengine_v8) << "Failed to get property, parent of value: " << arrayIndex << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); return _engine->undefinedValue(); } if (_value.constGet()->IsObject()) { @@ -326,7 +326,7 @@ ScriptValue ScriptValueV8Wrapper::property(quint32 arrayIndex, const ScriptValue return ScriptValue(new ScriptValueV8Wrapper(_engine, std::move(result))); } } - qDebug() << "Failed to get property, parent of value: " << arrayIndex << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); + qCDebug(scriptengine_v8) << "Failed to get property, parent of value: " << arrayIndex << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); return _engine->undefinedValue(); } @@ -340,17 +340,17 @@ void ScriptValueV8Wrapper::setData(const ScriptValue& value) { // V8TODO Check if it uses same isolate. Would pointer check be enough? // Private properties are an experimental feature for now on V8, so we are using regular value for now if (_value.constGet()->IsNullOrUndefined()) { - qDebug() << "ScriptValueV8Wrapper::setData() was called on a value that is null or undefined"; + qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::setData() was called on a value that is null or undefined"; return; } if (_value.constGet()->IsObject()) { auto v8Object = v8::Local::Cast(_value.constGet()); if( !v8Object->Set(_engine->getContext(), v8::String::NewFromUtf8(isolate, "__data").ToLocalChecked(), unwrapped.constGet()).FromMaybe(false)) { - qDebug() << "ScriptValueV8Wrapper::data(): Data object couldn't be created"; + qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::data(): Data object couldn't be created"; Q_ASSERT(false); } } else { - qDebug() << "ScriptValueV8Wrapper::data() was called on a value that is not an object"; + qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::data() was called on a value that is not an object"; Q_ASSERT(false); } } @@ -364,7 +364,7 @@ void ScriptValueV8Wrapper::setProperty(const QString& name, const ScriptValue& v v8::Context::Scope contextScope(_engine->getContext()); V8ScriptValue unwrapped = fullUnwrap(value); if (_value.constGet()->IsNullOrUndefined()) { - qDebug() << "ScriptValueV8Wrapper::setProperty() was called on a value that is null or undefined"; + qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::setProperty() was called on a value that is null or undefined"; return; } if(_value.constGet()->IsObject()) { @@ -376,7 +376,7 @@ void ScriptValueV8Wrapper::setProperty(const QString& name, const ScriptValue& v //v8::Maybe retVal = object->Set(_engine->getContext(), key, unwrapped.constGet()); v8::Maybe retVal = object->Set(isolate->GetCurrentContext(), key, unwrapped.constGet()); if (retVal.IsJust() ? !retVal.FromJust() : true){ - qDebug(scriptengine) << "Failed to set property"; + qCDebug(scriptengine_v8) << "Failed to set property"; } } else { v8::Local details; @@ -385,8 +385,8 @@ void ScriptValueV8Wrapper::setProperty(const QString& name, const ScriptValue& v v8::String::Utf8Value utf8Value(isolate,details); detailsString = *utf8Value; } - qDebug(scriptengine) << "Failed to set property:" + name + " - parent is not an object. Parent details: " + " Type: " + QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); - qDebug(scriptengine) << _engine->currentContext()->backtrace(); + qCDebug(scriptengine_v8) << "Failed to set property:" + name + " - parent is not an object. Parent details: " + " Type: " + QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); + qCDebug(scriptengine_v8) << _engine->currentContext()->backtrace(); } //V8TODO: what about flags? //_value.setProperty(name, unwrapped, (V8ScriptValue::PropertyFlags)(int)flags); @@ -400,7 +400,7 @@ void ScriptValueV8Wrapper::setProperty(quint32 arrayIndex, const ScriptValue& va v8::Context::Scope contextScope(_engine->getContext()); V8ScriptValue unwrapped = fullUnwrap(value); if (_value.constGet()->IsNullOrUndefined()) { - qDebug() << "ScriptValueV8Wrapper::setProperty() was called on a value that is null or undefined"; + qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::setProperty() was called on a value that is null or undefined"; return; } if(_value.constGet()->IsObject()) { @@ -409,10 +409,10 @@ void ScriptValueV8Wrapper::setProperty(quint32 arrayIndex, const ScriptValue& va v8::Maybe retVal(object->Set(_engine->getContext(), arrayIndex, unwrapped.constGet())); //v8::Maybe retVal(object->Set(_value.getContext(), arrayIndex, unwrapped.constGet())); if (retVal.IsJust() ? !retVal.FromJust() : true){ - qDebug(scriptengine) << "Failed to set property"; + qCDebug(scriptengine_v8) << "Failed to set property"; } } else { - qDebug(scriptengine) << "Failed to set property: " + QString(arrayIndex) + " - parent is not an object"; + qCDebug(scriptengine_v8) << "Failed to set property: " + QString(arrayIndex) + " - parent is not an object"; } //V8TODO: what about flags? //_value.setProperty(arrayIndex, unwrapped, (V8ScriptValue::PropertyFlags)(int)flags); @@ -427,7 +427,7 @@ void ScriptValueV8Wrapper::setPrototype(const ScriptValue& prototype) { ScriptValueV8Wrapper* unwrappedPrototype = unwrap(prototype); if (unwrappedPrototype) { if(unwrappedPrototype->toV8Value().constGet()->IsNullOrUndefined() && _value.constGet()->IsNullOrUndefined()) { - qDebug(scriptengine) << "Failed to assign prototype - one of values is null or undefined"; + qCDebug(scriptengine_v8) << "Failed to assign prototype - one of values is null or undefined"; } if(unwrappedPrototype->toV8Value().constGet()->IsObject() && _value.constGet()->IsObject()) { auto object = v8::Local::Cast(_value.get()); @@ -435,10 +435,10 @@ void ScriptValueV8Wrapper::setPrototype(const ScriptValue& prototype) { v8::Maybe retVal = object->SetPrototype(_engine->getContext(), unwrappedPrototype->toV8Value().constGet()); //v8::Maybe retVal = object->SetPrototype(_value.getContext(), unwrappedPrototype->toV8Value().constGet()); if (retVal.IsJust() ? !retVal.FromJust() : true){ - qDebug(scriptengine) << "Failed to assign prototype"; + qCDebug(scriptengine_v8) << "Failed to assign prototype"; } } else { - qDebug(scriptengine) << "Failed to assign prototype - one of values is not an object"; + qCDebug(scriptengine_v8) << "Failed to assign prototype - one of values is not an object"; } } }