From a5e61184bf4055f403a3b9064c24fe7bd068373f Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 29 Dec 2016 16:34:49 -0800 Subject: [PATCH 1/7] Add support for adding thread names to a trace --- libraries/shared/src/Profile.cpp | 1 + libraries/shared/src/Profile.h | 6 ++++ libraries/shared/src/Trace.cpp | 59 ++++++++++++++++++++++---------- libraries/shared/src/Trace.h | 1 + 4 files changed, 49 insertions(+), 18 deletions(-) diff --git a/libraries/shared/src/Profile.cpp b/libraries/shared/src/Profile.cpp index f23c17c6be..b4f7ed8509 100644 --- a/libraries/shared/src/Profile.cpp +++ b/libraries/shared/src/Profile.cpp @@ -10,6 +10,7 @@ Q_LOGGING_CATEGORY(trace_app, "trace.app") Q_LOGGING_CATEGORY(trace_app_detail, "trace.app.detail") +Q_LOGGING_CATEGORY(trace_metadata, "trace.metadata") Q_LOGGING_CATEGORY(trace_network, "trace.network") Q_LOGGING_CATEGORY(trace_parse, "trace.parse") Q_LOGGING_CATEGORY(trace_render, "trace.render") diff --git a/libraries/shared/src/Profile.h b/libraries/shared/src/Profile.h index da786526a7..bbba240840 100644 --- a/libraries/shared/src/Profile.h +++ b/libraries/shared/src/Profile.h @@ -16,6 +16,7 @@ // When profiling something that may happen many times per frame, use a xxx_detail category so that they may easily be filtered out of trace results Q_DECLARE_LOGGING_CATEGORY(trace_app) Q_DECLARE_LOGGING_CATEGORY(trace_app_detail) +Q_DECLARE_LOGGING_CATEGORY(trace_metadata) Q_DECLARE_LOGGING_CATEGORY(trace_network) Q_DECLARE_LOGGING_CATEGORY(trace_render) Q_DECLARE_LOGGING_CATEGORY(trace_render_detail) @@ -69,6 +70,10 @@ inline void counter(const QLoggingCategory& category, const QString& name, const } } +inline void metadata(const QString& metadataType, const QVariantMap& args) { + tracing::traceEvent(trace_metadata(), metadataType, tracing::Metadata, "", args); +} + #define PROFILE_RANGE(category, name) Duration profileRangeThis(trace_##category(), name); #define PROFILE_RANGE_EX(category, name, argbColor, payload, ...) Duration profileRangeThis(trace_##category(), name, argbColor, (uint64_t)payload, ##__VA_ARGS__); #define PROFILE_RANGE_BEGIN(category, rangeId, name, argbColor) rangeId = Duration::beginRange(trace_##category(), name, argbColor) @@ -78,6 +83,7 @@ inline void counter(const QLoggingCategory& category, const QString& name, const #define PROFILE_COUNTER_IF_CHANGED(category, name, type, value) { static type lastValue = 0; type newValue = value; if (newValue != lastValue) { counter(trace_##category(), name, { { name, newValue }}); lastValue = newValue; } } #define PROFILE_COUNTER(category, name, ...) counter(trace_##category(), name, ##__VA_ARGS__); #define PROFILE_INSTANT(category, name, ...) instant(trace_##category(), name, ##__VA_ARGS__); +#define PROFILE_SET_THREAD_NAME(threadName) metadata("thread_name", { { "name", threadName } }); #define SAMPLE_PROFILE_RANGE(chance, category, name, ...) if (randFloat() <= chance) { PROFILE_RANGE(category, name); } #define SAMPLE_PROFILE_RANGE_EX(chance, category, name, ...) if (randFloat() <= chance) { PROFILE_RANGE_EX(category, name, argbColor, payload, ##__VA_ARGS__); } diff --git a/libraries/shared/src/Trace.cpp b/libraries/shared/src/Trace.cpp index e4ad70d912..1e3d490a9c 100644 --- a/libraries/shared/src/Trace.cpp +++ b/libraries/shared/src/Trace.cpp @@ -132,6 +132,9 @@ void Tracer::serialize(const QString& originalPath) { { std::lock_guard guard(_eventsMutex); currentEvents.swap(_events); + for (auto& event : _metadataEvents) { + currentEvents.push_back(event); + } } // If the file exists and we can't remove it, fail early @@ -194,33 +197,53 @@ void Tracer::serialize(const QString& originalPath) { #endif } -void Tracer::traceEvent(const QLoggingCategory& category, - const QString& name, EventType type, - qint64 timestamp, qint64 processID, qint64 threadID, - const QString& id, - const QVariantMap& args, const QVariantMap& extra) { +void Tracer::traceEvent(const QLoggingCategory& category, + const QString& name, EventType type, + qint64 timestamp, qint64 processID, qint64 threadID, + const QString& id, + const QVariantMap& args, const QVariantMap& extra) { std::lock_guard guard(_eventsMutex); - if (!_enabled) { + + // We always want to store metadata events even if tracing is not enabled so that when + // tracing is enabled we will be able to associate that metadata with that trace. + // Metadata events should be used sparingly - as of 12/30/16 the Chrome Tracing + // spec only supports thread+process metadata, so we should only expect to see metadata + // events created when a new thread or process is created. + if (!_enabled && type != Metadata) { return; } - _events.push_back({ - id, - name, - type, - timestamp, - processID, - threadID, - category, - args, - extra - }); + if (type == Metadata) { + _metadataEvents.push_back({ + id, + name, + type, + timestamp, + processID, + threadID, + category, + args, + extra + }); + } else { + _events.push_back({ + id, + name, + type, + timestamp, + processID, + threadID, + category, + args, + extra + }); + } } void Tracer::traceEvent(const QLoggingCategory& category, const QString& name, EventType type, const QString& id, const QVariantMap& args, const QVariantMap& extra) { - if (!_enabled) { + if (!_enabled && type != Metadata) { return; } diff --git a/libraries/shared/src/Trace.h b/libraries/shared/src/Trace.h index ee4f28f0ce..93e2c6c4c2 100644 --- a/libraries/shared/src/Trace.h +++ b/libraries/shared/src/Trace.h @@ -97,6 +97,7 @@ private: bool _enabled { false }; std::list _events; + std::list _metadataEvents; std::mutex _eventsMutex; }; From f2638637f700de3684f4c7921d4bc69cf76b82e7 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 29 Dec 2016 16:41:09 -0800 Subject: [PATCH 2/7] Add thread names to traces --- interface/src/Application.cpp | 1 + .../src/display-plugins/OpenGLDisplayPlugin.cpp | 2 ++ libraries/script-engine/src/ScriptEngine.cpp | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index cfbaee7ade..d39ad337a8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -436,6 +436,7 @@ bool setupEssentials(int& argc, char** argv) { } DependencyManager::set(); + PROFILE_SET_THREAD_NAME("Main Thread"); #if defined(Q_OS_WIN) // Select appropriate audio DLL diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index 574c574f66..cf6b39812a 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -118,6 +118,8 @@ public: virtual void run() override { + PROFILE_SET_THREAD_NAME("Present Thread"); + // FIXME determine the best priority balance between this and the main thread... // It may be dependent on the display plugin being used, since VR plugins should // have higher priority on rendering (although we could say that the Oculus plugin diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 2191d45d45..7f5931b1e7 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -863,6 +863,10 @@ QScriptValue ScriptEngine::evaluate(const QString& sourceCode, const QString& fi } void ScriptEngine::run() { + auto filenameParts = _fileNameString.split("/"); + auto name = filenameParts.size() > 0 ? filenameParts[filenameParts.size() - 1] : "unknown"; + PROFILE_SET_THREAD_NAME("Script: " + name); + if (DependencyManager::get()->isStopped()) { return; // bail early - avoid setting state in init(), as evaluate() will bail too } From e181c2a16ef74484ba6c6ce9e3879f7f0982aa65 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 29 Dec 2016 16:48:00 -0800 Subject: [PATCH 3/7] Add script_udpate_rate to trace --- interface/src/Application.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d39ad337a8..4b6156adbc 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3411,6 +3411,10 @@ void Application::idle(float nsecsElapsed) { static std::once_flag once; std::call_once(once, [] { initCpuUsage(); + PROFILE_COUNTER(app, "fps", { { "fps", _frameCounter.rate() } }); + PROFILE_COUNTER(app, "downloads", { + { "current", ResourceCache::getLoadingRequests().length() }, + { "pending", ResourceCache::getPendingRequestCount() } }); vec3 kernelUserAndSystem; From 9d4fdfa38a13bd3cbdee365f1e768cc589b3296a Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 29 Dec 2016 16:48:25 -0800 Subject: [PATCH 4/7] Add Test.profileRange --- interface/src/scripting/TestScriptingInterface.cpp | 6 ++++++ interface/src/scripting/TestScriptingInterface.h | 3 +++ 2 files changed, 9 insertions(+) diff --git a/interface/src/scripting/TestScriptingInterface.cpp b/interface/src/scripting/TestScriptingInterface.cpp index 22a33ae858..a8901365e5 100644 --- a/interface/src/scripting/TestScriptingInterface.cpp +++ b/interface/src/scripting/TestScriptingInterface.cpp @@ -134,3 +134,9 @@ void TestScriptingInterface::startTraceEvent(QString name) { void TestScriptingInterface::endTraceEvent(QString name) { tracing::traceEvent(trace_test(), name, tracing::DurationEnd); } + +void TestScriptingInterface::profileRange(const QString& name, QScriptValue fn) { + PROFILE_RANGE(script, name); + fn.call(); +} + diff --git a/interface/src/scripting/TestScriptingInterface.h b/interface/src/scripting/TestScriptingInterface.h index 9539493b51..73b8f0ac93 100644 --- a/interface/src/scripting/TestScriptingInterface.h +++ b/interface/src/scripting/TestScriptingInterface.h @@ -13,6 +13,8 @@ #include #include +class QScriptValue; + class TestScriptingInterface : public QObject { Q_OBJECT @@ -69,6 +71,7 @@ public slots: void endTraceEvent(QString name); + Q_INVOKABLE void profileRange(const QString& name, QScriptValue function); private: bool waitForCondition(qint64 maxWaitMs, std::function condition); From ce9f8bed1b9f7361115bd3be06c3891fc0e7d038 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 3 Feb 2017 09:41:48 -0800 Subject: [PATCH 5/7] Remove duplicate fps/downloads PROFILE_COUNTER --- interface/src/Application.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4b6156adbc..d39ad337a8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3411,10 +3411,6 @@ void Application::idle(float nsecsElapsed) { static std::once_flag once; std::call_once(once, [] { initCpuUsage(); - PROFILE_COUNTER(app, "fps", { { "fps", _frameCounter.rate() } }); - PROFILE_COUNTER(app, "downloads", { - { "current", ResourceCache::getLoadingRequests().length() }, - { "pending", ResourceCache::getPendingRequestCount() } }); vec3 kernelUserAndSystem; From 55df6f8f76e85b3dc00eec577fffa6ac60b05ea3 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 29 Dec 2016 16:49:27 -0800 Subject: [PATCH 6/7] Add tracing to ScriptEngine and EntitiesScriptingInterface --- .../entities/src/EntityScriptingInterface.cpp | 49 +++++++++++++++++++ libraries/script-engine/src/ScriptEngine.cpp | 15 +++++- libraries/shared/src/Profile.cpp | 2 + libraries/shared/src/Profile.h | 2 + 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index edace784ad..2a8dcf5b78 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -178,6 +178,8 @@ EntityItemProperties convertLocationFromScriptSemantics(const EntityItemProperti QUuid EntityScriptingInterface::addEntity(const EntityItemProperties& properties, bool clientOnly) { + PROFILE_RANGE(script_entities, __FUNCTION__); + _activityTracking.addedEntityCount++; EntityItemProperties propertiesWithSimID = convertLocationFromScriptSemantics(properties); @@ -270,6 +272,8 @@ EntityItemProperties EntityScriptingInterface::getEntityProperties(QUuid identit } EntityItemProperties EntityScriptingInterface::getEntityProperties(QUuid identity, EntityPropertyFlags desiredProperties) { + PROFILE_RANGE(script_entities, __FUNCTION__); + EntityItemProperties results; if (_entityTree) { _entityTree->withReadLock([&] { @@ -316,6 +320,8 @@ EntityItemProperties EntityScriptingInterface::getEntityProperties(QUuid identit } QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties& scriptSideProperties) { + PROFILE_RANGE(script_entities, __FUNCTION__); + _activityTracking.editedEntityCount++; EntityItemProperties properties = scriptSideProperties; @@ -467,6 +473,8 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties& } void EntityScriptingInterface::deleteEntity(QUuid id) { + PROFILE_RANGE(script_entities, __FUNCTION__); + _activityTracking.deletedEntityCount++; EntityItemID entityID(id); @@ -522,6 +530,8 @@ void EntityScriptingInterface::setEntitiesScriptEngine(EntitiesScriptEngineProvi } void EntityScriptingInterface::callEntityMethod(QUuid id, const QString& method, const QStringList& params) { + PROFILE_RANGE(script_entities, __FUNCTION__); + std::lock_guard lock(_entitiesScriptEngineLock); if (_entitiesScriptEngine) { EntityItemID entityID{ id }; @@ -530,6 +540,8 @@ void EntityScriptingInterface::callEntityMethod(QUuid id, const QString& method, } QUuid EntityScriptingInterface::findClosestEntity(const glm::vec3& center, float radius) const { + PROFILE_RANGE(script_entities, __FUNCTION__); + EntityItemID result; if (_entityTree) { EntityItemPointer closestEntity; @@ -553,6 +565,8 @@ void EntityScriptingInterface::dumpTree() const { } QVector EntityScriptingInterface::findEntities(const glm::vec3& center, float radius) const { + PROFILE_RANGE(script_entities, __FUNCTION__); + QVector result; if (_entityTree) { QVector entities; @@ -568,6 +582,8 @@ QVector EntityScriptingInterface::findEntities(const glm::vec3& center, f } QVector EntityScriptingInterface::findEntitiesInBox(const glm::vec3& corner, const glm::vec3& dimensions) const { + PROFILE_RANGE(script_entities, __FUNCTION__); + QVector result; if (_entityTree) { QVector entities; @@ -584,6 +600,8 @@ QVector EntityScriptingInterface::findEntitiesInBox(const glm::vec3& corn } QVector EntityScriptingInterface::findEntitiesInFrustum(QVariantMap frustum) const { + PROFILE_RANGE(script_entities, __FUNCTION__); + QVector result; const QString POSITION_PROPERTY = "position"; @@ -627,6 +645,7 @@ QVector EntityScriptingInterface::findEntitiesInFrustum(QVariantMap frust RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersection(const PickRay& ray, bool precisionPicking, const QScriptValue& entityIdsToInclude, const QScriptValue& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) { + PROFILE_RANGE(script_entities, __FUNCTION__); QVector entitiesToInclude = qVectorEntityItemIDFromScriptValue(entityIdsToInclude); QVector entitiesToDiscard = qVectorEntityItemIDFromScriptValue(entityIdsToDiscard); @@ -734,6 +753,8 @@ RayToEntityIntersectionResult::RayToEntityIntersectionResult() : } QScriptValue RayToEntityIntersectionResultToScriptValue(QScriptEngine* engine, const RayToEntityIntersectionResult& value) { + PROFILE_RANGE(script_entities, __FUNCTION__); + QScriptValue obj = engine->newObject(); obj.setProperty("intersects", value.intersects); obj.setProperty("accurate", value.accurate); @@ -781,6 +802,8 @@ QScriptValue RayToEntityIntersectionResultToScriptValue(QScriptEngine* engine, c } void RayToEntityIntersectionResultFromScriptValue(const QScriptValue& object, RayToEntityIntersectionResult& value) { + PROFILE_RANGE(script_entities, __FUNCTION__); + value.intersects = object.property("intersects").toVariant().toBool(); value.accurate = object.property("accurate").toVariant().toBool(); QScriptValue entityIDValue = object.property("entityID"); @@ -818,6 +841,8 @@ void RayToEntityIntersectionResultFromScriptValue(const QScriptValue& object, Ra bool EntityScriptingInterface::setVoxels(QUuid entityID, std::function actor) { + PROFILE_RANGE(script_entities, __FUNCTION__); + if (!_entityTree) { return false; } @@ -842,6 +867,8 @@ bool EntityScriptingInterface::setVoxels(QUuid entityID, } bool EntityScriptingInterface::setPoints(QUuid entityID, std::function actor) { + PROFILE_RANGE(script_entities, __FUNCTION__); + if (!_entityTree) { return false; } @@ -881,18 +908,24 @@ bool EntityScriptingInterface::setPoints(QUuid entityID, std::function& points) { + PROFILE_RANGE(script_entities, __FUNCTION__); + EntityItemPointer entity = static_cast(_entityTree->findEntityByEntityItemID(entityID)); if (!entity) { qCDebug(entities) << "EntityScriptingInterface::setPoints no entity with ID" << entityID; @@ -924,6 +961,8 @@ bool EntityScriptingInterface::setAllPoints(QUuid entityID, const QVector(_entityTree->findEntityByEntityItemID(entityID)); if (!entity) { qCDebug(entities) << "EntityScriptingInterface::setPoints no entity with ID" << entityID; @@ -999,6 +1038,8 @@ bool EntityScriptingInterface::actionWorker(const QUuid& entityID, QUuid EntityScriptingInterface::addAction(const QString& actionTypeString, const QUuid& entityID, const QVariantMap& arguments) { + PROFILE_RANGE(script_entities, __FUNCTION__); + QUuid actionID = QUuid::createUuid(); auto actionFactory = DependencyManager::get(); bool success = false; @@ -1030,6 +1071,8 @@ QUuid EntityScriptingInterface::addAction(const QString& actionTypeString, bool EntityScriptingInterface::updateAction(const QUuid& entityID, const QUuid& actionID, const QVariantMap& arguments) { + PROFILE_RANGE(script_entities, __FUNCTION__); + return actionWorker(entityID, [&](EntitySimulationPointer simulation, EntityItemPointer entity) { bool success = entity->updateAction(simulation, actionID, arguments); if (success) { @@ -1040,6 +1083,8 @@ bool EntityScriptingInterface::updateAction(const QUuid& entityID, const QUuid& } bool EntityScriptingInterface::deleteAction(const QUuid& entityID, const QUuid& actionID) { + PROFILE_RANGE(script_entities, __FUNCTION__); + bool success = false; actionWorker(entityID, [&](EntitySimulationPointer simulation, EntityItemPointer entity) { success = entity->removeAction(simulation, actionID); @@ -1053,6 +1098,8 @@ bool EntityScriptingInterface::deleteAction(const QUuid& entityID, const QUuid& } QVector EntityScriptingInterface::getActionIDs(const QUuid& entityID) { + PROFILE_RANGE(script_entities, __FUNCTION__); + QVector result; actionWorker(entityID, [&](EntitySimulationPointer simulation, EntityItemPointer entity) { QList actionIDs = entity->getActionIDs(); @@ -1063,6 +1110,8 @@ QVector EntityScriptingInterface::getActionIDs(const QUuid& entityID) { } QVariantMap EntityScriptingInterface::getActionArguments(const QUuid& entityID, const QUuid& actionID) { + PROFILE_RANGE(script_entities, __FUNCTION__); + QVariantMap result; actionWorker(entityID, [&](EntitySimulationPointer simulation, EntityItemPointer entity) { result = entity->getActionArguments(actionID); diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 7f5931b1e7..ec83ea2ba9 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -64,6 +64,8 @@ #include "ScriptEngines.h" #include "TabletScriptingInterface.h" +#include + #include "MIDIEvent.h" static const QString SCRIPT_EXCEPTION_FORMAT = "[UncaughtException] %1 in %2:%3"; @@ -927,7 +929,10 @@ void ScriptEngine::run() { bool processedEvents = false; while (!_isFinished && clock::now() < sleepUntil) { - QCoreApplication::processEvents(); // before we sleep again, give events a chance to process + { + PROFILE_RANGE(script, "processEvents-sleep"); + QCoreApplication::processEvents(); // before we sleep again, give events a chance to process + } processedEvents = true; // If after processing events, we're past due, exit asap @@ -942,6 +947,8 @@ void ScriptEngine::run() { std::this_thread::sleep_until(smallSleepUntil); } + PROFILE_RANGE(script, "ScriptMainLoop"); + #ifdef SCRIPT_DELAY_DEBUG { auto actuallySleptUntil = clock::now(); @@ -965,6 +972,7 @@ void ScriptEngine::run() { // Only call this if we didn't processEvents as part of waiting for next frame if (!processedEvents) { + PROFILE_RANGE(script, "processEvents"); QCoreApplication::processEvents(); } @@ -989,7 +997,10 @@ void ScriptEngine::run() { float deltaTime = (float) (now - _lastUpdate) / (float) USECS_PER_SECOND; if (!_isFinished) { auto preUpdate = clock::now(); - emit update(deltaTime); + { + PROFILE_RANGE(script, "ScriptUpdate"); + emit update(deltaTime); + } auto postUpdate = clock::now(); auto elapsed = (postUpdate - preUpdate); totalUpdates += std::chrono::duration_cast(elapsed); diff --git a/libraries/shared/src/Profile.cpp b/libraries/shared/src/Profile.cpp index b4f7ed8509..7a8a8f0570 100644 --- a/libraries/shared/src/Profile.cpp +++ b/libraries/shared/src/Profile.cpp @@ -19,6 +19,8 @@ Q_LOGGING_CATEGORY(trace_render_gpu, "trace.render.gpu") Q_LOGGING_CATEGORY(trace_resource, "trace.resource") Q_LOGGING_CATEGORY(trace_resource_network, "trace.resource.network") Q_LOGGING_CATEGORY(trace_resource_parse, "trace.resource.parse") +Q_LOGGING_CATEGORY(trace_script, "trace.script") +Q_LOGGING_CATEGORY(trace_script_entities, "trace.script.entities") Q_LOGGING_CATEGORY(trace_simulation, "trace.simulation") Q_LOGGING_CATEGORY(trace_simulation_detail, "trace.simulation.detail") Q_LOGGING_CATEGORY(trace_simulation_animation, "trace.simulation.animation") diff --git a/libraries/shared/src/Profile.h b/libraries/shared/src/Profile.h index bbba240840..ee09298deb 100644 --- a/libraries/shared/src/Profile.h +++ b/libraries/shared/src/Profile.h @@ -24,6 +24,8 @@ Q_DECLARE_LOGGING_CATEGORY(trace_render_gpu) Q_DECLARE_LOGGING_CATEGORY(trace_resource) Q_DECLARE_LOGGING_CATEGORY(trace_resource_parse) Q_DECLARE_LOGGING_CATEGORY(trace_resource_network) +Q_DECLARE_LOGGING_CATEGORY(trace_script) +Q_DECLARE_LOGGING_CATEGORY(trace_script_entities) Q_DECLARE_LOGGING_CATEGORY(trace_simulation) Q_DECLARE_LOGGING_CATEGORY(trace_simulation_detail) Q_DECLARE_LOGGING_CATEGORY(trace_simulation_animation) From aba441ee14e223d5bc152f01c86adff599aa7a68 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 31 Jan 2017 13:15:45 -0800 Subject: [PATCH 7/7] Fix compilation issues --- libraries/entities/src/EntityScriptingInterface.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 2a8dcf5b78..2904a2d18f 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -27,6 +27,7 @@ #include "ZoneEntityItem.h" #include "WebEntityItem.h" #include +#include EntityScriptingInterface::EntityScriptingInterface(bool bidOnSimulationOwnership) :