From 5b6f6ab84ff4b12db8729e47ca0cf4b9f19826e1 Mon Sep 17 00:00:00 2001 From: Sam Cake Date: Tue, 20 Jun 2017 00:25:51 -0700 Subject: [PATCH 1/7] Trying to fix the getCOnfig from QML... --- libraries/render/src/task/Config.h | 28 +++++++++++++++++-- .../developer/utilities/render/statsGPU.qml | 23 ++++++++------- .../utilities/render/textureMonitor.qml | 3 +- 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/libraries/render/src/task/Config.h b/libraries/render/src/task/Config.h index 40a3abbd18..9f0b222c20 100644 --- a/libraries/render/src/task/Config.h +++ b/libraries/render/src/task/Config.h @@ -124,6 +124,11 @@ signals: void dirtyEnabled(); }; +class TConfigProxy { +public: + using Config = JobConfig; +}; + class TaskConfig : public JobConfig { Q_OBJECT public: @@ -134,12 +139,29 @@ public: TaskConfig() = default ; TaskConfig(bool enabled) : JobConfig(enabled) {} + // getter for qml integration, prefer the templated getter - Q_INVOKABLE QObject* getConfig(const QString& name) { return QObject::findChild(name); } + Q_INVOKABLE QObject* getConfig(const QString& name) { return getConfig(name.toStdString()); } // getter for cpp (strictly typed), prefer this getter template typename T::Config* getConfig(std::string job = "") const { - QString name = job.empty() ? QString() : QString(job.c_str()); // an empty string is not a null string - return findChild(name); + const TaskConfig* root = this; + QString path = (job.empty() ? QString() : QString(job.c_str())); // an empty string is not a null string + auto tokens = path.split('.', QString::SkipEmptyParts); + + if (tokens.empty()) { + tokens.push_back(QString()); + } else { + while (tokens.size() > 1) { + auto name = tokens.front(); + tokens.pop_front(); + root = QObject::findChild(name); + if (!root) { + return nullptr; + } + } + } + + return root->findChild(tokens.front()); } void connectChildConfig(QConfigPointer childConfig, const std::string& name); diff --git a/scripts/developer/utilities/render/statsGPU.qml b/scripts/developer/utilities/render/statsGPU.qml index b3f5ec6e45..219f5e03fc 100644 --- a/scripts/developer/utilities/render/statsGPU.qml +++ b/scripts/developer/utilities/render/statsGPU.qml @@ -22,8 +22,7 @@ Item { anchors.fill:parent property var mainViewTask: Render.getConfig("RenderMainView"); - property var config: mainViewTask.getConfig("Stats") - + function evalEvenHeight() { // Why do we have to do that manually ? cannot seem to find a qml / anchor / layout mode that does that ? return (height - spacing * (children.length - 1)) / children.length @@ -39,31 +38,31 @@ Item { valueNumDigits: "4" plots: [ { - object: mainViewTask.getConfig("OpaqueRangeTimer"), + object: Render.getConfig("RenderMainView.OpaqueRangeTimer"), prop: "gpuRunTime", label: "Opaque", color: "#FFFFFF" }, { - object: mainViewTask.getConfig("LinearDepth"), + object: Render.getConfig("RenderMainView.LinearDepth"), prop: "gpuRunTime", label: "LinearDepth", color: "#00FF00" },{ - object: mainViewTask.getConfig("SurfaceGeometry"), + object: Render.getConfig("RenderMainView.SurfaceGeometry"), prop: "gpuRunTime", label: "SurfaceGeometry", color: "#00FFFF" }, { - object: mainViewTask.getConfig("RenderDeferred"), + object: Render.getConfig("RenderMainView.RenderDeferred"), prop: "gpuRunTime", label: "DeferredLighting", color: "#FF00FF" } , { - object: mainViewTask.getConfig("ToneAndPostRangeTimer"), + object: Render.getConfig("RenderMainView.ToneAndPostRangeTimer"), prop: "gpuRunTime", label: "tone and post", color: "#FF0000" @@ -79,31 +78,31 @@ Item { valueNumDigits: "3" plots: [ { - object: mainViewTask.getConfig("OpaqueRangeTimer"), + object: Render.getConfig("RenderMainView.OpaqueRangeTimer"), prop: "batchRunTime", label: "Opaque", color: "#FFFFFF" }, { - object: mainViewTask.getConfig("LinearDepth"), + object: Render.getConfig("RenderMainView.LinearDepth"), prop: "batchRunTime", label: "LinearDepth", color: "#00FF00" },{ - object: mainViewTask.getConfig("SurfaceGeometry"), + object: Render.getConfig("RenderMainView.SurfaceGeometry"), prop: "batchRunTime", label: "SurfaceGeometry", color: "#00FFFF" }, { - object: mainViewTask.getConfig("RenderDeferred"), + object: Render.getConfig("RenderMainView.RenderDeferred"), prop: "batchRunTime", label: "DeferredLighting", color: "#FF00FF" } , { - object: mainViewTask.getConfig("ToneAndPostRangeTimer"), + object: Render.getConfig("RenderMainView.ToneAndPostRangeTimer"), prop: "batchRunTime", label: "tone and post", color: "#FF0000" diff --git a/scripts/developer/utilities/render/textureMonitor.qml b/scripts/developer/utilities/render/textureMonitor.qml index 1a6dffab23..97cc577ff9 100644 --- a/scripts/developer/utilities/render/textureMonitor.qml +++ b/scripts/developer/utilities/render/textureMonitor.qml @@ -22,8 +22,7 @@ Item { spacing: 8 anchors.fill:parent - property var mainViewTask: Render.getConfig("RenderMainView"); - property var config: mainViewTask.getConfig("Stats") + property var config: Render.getConfig("Stats") function evalEvenHeight() { // Why do we have to do that manually ? cannot seem to find a qml / anchor / layout mode that does that ? From d853a76376cf4f538a28088523bbb9ab650cbdd1 Mon Sep 17 00:00:00 2001 From: samcake Date: Tue, 20 Jun 2017 17:23:44 -0700 Subject: [PATCH 2/7] Fixing the scripts and investigating the scripting --- interface/src/Application.cpp | 2 +- libraries/render/src/render/EngineStats.cpp | 2 + libraries/script-engine/src/ScriptEngine.cpp | 1 + .../utilities/lib/plotperf/PlotPerf.qml | 10 +- .../utilities/render/ambientOcclusionPass.qml | 13 +-- .../render/debugAmbientOcclusionPass.js | 2 +- .../utilities/render/debugDeferredLighting.js | 2 +- .../utilities/render/lightClustering.js | 2 +- .../utilities/render/lightClustering.qml | 47 ++++---- .../developer/utilities/render/renderStats.js | 4 +- scripts/developer/utilities/render/stats.qml | 106 ++---------------- .../developer/utilities/render/statsGPU.qml | 4 +- 12 files changed, 56 insertions(+), 139 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2142886d7a..364c8e3f95 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1874,7 +1874,7 @@ void Application::initializeGL() { render::CullFunctor cullFunctor = LODManager::shouldRender; static const QString RENDER_FORWARD = "HIFI_RENDER_FORWARD"; bool isDeferred = !QProcessEnvironment::systemEnvironment().contains(RENDER_FORWARD); - _renderEngine->addJob("SecondaryCameraFrame", cullFunctor); + // _renderEngine->addJob("SecondaryCameraFrame", cullFunctor); _renderEngine->addJob("RenderMainView", cullFunctor, isDeferred); _renderEngine->load(); _renderEngine->registerScene(_main3DScene); diff --git a/libraries/render/src/render/EngineStats.cpp b/libraries/render/src/render/EngineStats.cpp index ae1467ac0f..9e45be5dbd 100644 --- a/libraries/render/src/render/EngineStats.cpp +++ b/libraries/render/src/render/EngineStats.cpp @@ -63,4 +63,6 @@ void EngineStats::run(const RenderContextPointer& renderContext) { config->frameSetPipelineCount = _gpuStats._PSNumSetPipelines; config->frameSetInputFormatCount = _gpuStats._ISNumFormatChanges; + + config->emitDirty(); } diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 61bf601019..9763f0d715 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1006,6 +1006,7 @@ void ScriptEngine::run() { emit runningStateChanged(); { + PROFILE_RANGE(script, _fileNameString); evaluate(_scriptContents, _fileNameString); maybeEmitUncaughtException(__FUNCTION__); } diff --git a/scripts/developer/utilities/lib/plotperf/PlotPerf.qml b/scripts/developer/utilities/lib/plotperf/PlotPerf.qml index 13d9053adf..c454901a36 100644 --- a/scripts/developer/utilities/lib/plotperf/PlotPerf.qml +++ b/scripts/developer/utilities/lib/plotperf/PlotPerf.qml @@ -49,11 +49,15 @@ Item { property var valueMax : 1 - property var _values : new Array() + property var _values property var tick : 0 function createValues() { + if (!_values) { + _values = new Array(); + } for (var i =0; i < plots.length; i++) { + var plot = plots[i]; var object = plot["object"] || root.object; var value = plot["prop"]; @@ -80,6 +84,7 @@ Item { Component.onCompleted: { createValues(); + console.log("PlotPerf plot values is", JSON.stringify(_values)); } function resetMax() { for (var i = 0; i < _values.length; i++) { @@ -93,7 +98,7 @@ Item { var VALUE_HISTORY_SIZE = 100; tick++; - + var currentValueMax = 0 for (var i = 0; i < _values.length; i++) { @@ -128,7 +133,6 @@ Item { if ((valueMax < currentValueMax) || (tick % VALUE_HISTORY_SIZE == 0)) { valueMax = currentValueMax; } - mycanvas.requestPaint() } diff --git a/scripts/developer/utilities/render/ambientOcclusionPass.qml b/scripts/developer/utilities/render/ambientOcclusionPass.qml index 86f55ef6aa..08334cf2aa 100644 --- a/scripts/developer/utilities/render/ambientOcclusionPass.qml +++ b/scripts/developer/utilities/render/ambientOcclusionPass.qml @@ -13,7 +13,6 @@ import "configSlider" import "../lib/plotperf" Column { - property var mainViewTask: Render.getConfig("RenderMainView") spacing: 8 Column { id: surfaceGeometry @@ -33,7 +32,7 @@ Column { ConfigSlider { label: qsTr(modelData.split(":")[0]) integral: (modelData.split(":")[3] == 'true') - config: mainViewTask.getConfig("AmbientOcclusion") + config: Render.getConfig("RenderMainView.AmbientOcclusion") property: modelData.split(":")[1] max: modelData.split(":")[2] min: 0.0 @@ -51,8 +50,8 @@ Column { ] CheckBox { text: qsTr(modelData.split(":")[0]) - checked: mainViewTask.getConfig("AmbientOcclusion")[modelData.split(":")[1]] - onCheckedChanged: { mainViewTask.getConfig("AmbientOcclusion")[modelData.split(":")[1]] = checked } + checked: Render.getConfig("RenderMainView.AmbientOcclusion")[modelData.split(":")[1]] + onCheckedChanged: { Render.getConfig("RenderMainView.AmbientOcclusion")[modelData.split(":")[1]] = checked } } } } @@ -63,8 +62,8 @@ Column { ] CheckBox { text: qsTr(modelData.split(":")[0]) - checked: mainViewTask.getConfig("DebugAmbientOcclusion")[modelData.split(":")[1]] - onCheckedChanged: { mainViewTask.getConfig("DebugAmbientOcclusion")[modelData.split(":")[1]] = checked } + checked: Render.getConfig("RenderMainView.DebugAmbientOcclusion")[modelData.split(":")[1]] + onCheckedChanged: { Render.getConfig("RenderMainView.DebugAmbientOcclusion")[modelData.split(":")[1]] = checked } } } } @@ -73,7 +72,7 @@ Column { PlotPerf { title: "Timing" height: 50 - object: mainViewTask.getConfig("AmbientOcclusion") + object: Render.getConfig("RenderMainView.AmbientOcclusion") valueUnit: "ms" valueScale: 1 valueNumDigits: "3" diff --git a/scripts/developer/utilities/render/debugAmbientOcclusionPass.js b/scripts/developer/utilities/render/debugAmbientOcclusionPass.js index e93d153486..f70b3a5cc9 100644 --- a/scripts/developer/utilities/render/debugAmbientOcclusionPass.js +++ b/scripts/developer/utilities/render/debugAmbientOcclusionPass.js @@ -13,7 +13,7 @@ var qml = Script.resolvePath('ambientOcclusionPass.qml'); var window = new OverlayWindow({ title: 'Ambient Occlusion Pass', source: qml, - width: 400, height: 250, + width: 400, height: 300, }); window.setPosition(Window.innerWidth - 420, 50 + 550 + 50); window.closed.connect(function() { Script.stop(); }); diff --git a/scripts/developer/utilities/render/debugDeferredLighting.js b/scripts/developer/utilities/render/debugDeferredLighting.js index bffa3a2e15..2a9b1a1067 100644 --- a/scripts/developer/utilities/render/debugDeferredLighting.js +++ b/scripts/developer/utilities/render/debugDeferredLighting.js @@ -13,7 +13,7 @@ var qml = Script.resolvePath('deferredLighting.qml'); var window = new OverlayWindow({ title: 'Lighting', source: qml, - width: 400, height:350, + width: 400, height:400, }); window.setPosition(Window.innerWidth - 420, 50); window.closed.connect(function() { Script.stop(); }); diff --git a/scripts/developer/utilities/render/lightClustering.js b/scripts/developer/utilities/render/lightClustering.js index 7fb9416d40..f81110b16e 100644 --- a/scripts/developer/utilities/render/lightClustering.js +++ b/scripts/developer/utilities/render/lightClustering.js @@ -15,7 +15,7 @@ var window = new OverlayWindow({ title: 'Light Clustering', source: qml, width: 400, - height: 300 + height: 400 }); window.setPosition(Window.innerWidth - 420, 50 + 250 + 50 + 250 + 50 ); window.closed.connect(function() { Script.stop(); }); \ No newline at end of file diff --git a/scripts/developer/utilities/render/lightClustering.qml b/scripts/developer/utilities/render/lightClustering.qml index 930fd79db3..69cf1a6064 100644 --- a/scripts/developer/utilities/render/lightClustering.qml +++ b/scripts/developer/utilities/render/lightClustering.qml @@ -17,19 +17,18 @@ Column { Column { id: lightClustering spacing: 10 - property var mainViewTask: Render.getConfig("RenderMainView"); Column{ PlotPerf { title: "Light CLustering Timing" height: 50 - object: mainViewTask.getConfig("LightClustering") + object: Render.getConfig("RenderMainView.LightClustering") valueUnit: "ms" valueScale: 1 valueNumDigits: "4" plots: [ { - object: mainViewTask.getConfig("LightClustering"), + object: Render.getConfig("RenderMainView.LightClustering"), prop: "cpuRunTime", label: "time", scale: 1, @@ -41,19 +40,19 @@ Column { PlotPerf { title: "Lights" height: 50 - object: mainViewTask.getConfig("LightClustering") + object: Render.getConfig("RenderMainView.LightClustering") valueUnit: "" valueScale: 1 valueNumDigits: "0" plots: [ { - object: mainViewTask.getConfig("LightClustering"), + object: Render.getConfig("RenderMainView.LightClustering"), prop: "numClusteredLights", label: "visible", color: "#D959FE" }, { - object: mainViewTask.getConfig("LightClustering"), + object: Render.getConfig("RenderMainView.LightClustering"), prop: "numInputLights", label: "input", color: "#FED959" @@ -64,25 +63,25 @@ Column { PlotPerf { title: "Scene Lights" height: 80 - object: mainViewTask.getConfig("LightClustering") + object: Render.getConfig("RenderMainView.LightClustering") valueUnit: "" valueScale: 1 valueNumDigits: "0" plots: [ { - object: mainViewTask.getConfig("LightClustering"), + object: Render.getConfig("RenderMainView.LightClustering"), prop: "numSceneLights", label: "current", color: "#00B4EF" }, { - object: mainViewTask.getConfig("LightClustering"), + object: Render.getConfig("RenderMainView.LightClustering"), prop: "numFreeSceneLights", label: "free", color: "#1AC567" }, { - object: mainViewTask.getConfig("LightClustering"), + object: Render.getConfig("RenderMainView.LightClustering"), prop: "numAllocatedSceneLights", label: "allocated", color: "#9495FF" @@ -93,7 +92,7 @@ Column { ConfigSlider { label: qsTr("Range Near [m]") integral: false - config: mainViewTask.getConfig("LightClustering") + config: Render.getConfig("RenderMainView.LightClustering") property: "rangeNear" max: 20.0 min: 0.1 @@ -101,7 +100,7 @@ Column { ConfigSlider { label: qsTr("Range Far [m]") integral: false - config: mainViewTask.getConfig("LightClustering") + config: Render.getConfig("RenderMainView.LightClustering") property: "rangeFar" max: 500.0 min: 100.0 @@ -109,7 +108,7 @@ Column { ConfigSlider { label: qsTr("Grid X") integral: true - config: mainViewTask.getConfig("LightClustering") + config: Render.getConfig("RenderMainView.LightClustering") property: "dimX" max: 32 min: 1 @@ -117,7 +116,7 @@ Column { ConfigSlider { label: qsTr("Grid Y") integral: true - config: mainViewTask.getConfig("LightClustering") + config: Render.getConfig("RenderMainView.LightClustering") property: "dimY" max: 32 min: 1 @@ -125,33 +124,33 @@ Column { ConfigSlider { label: qsTr("Grid Z") integral: true - config: mainViewTask.getConfig("LightClustering") + config: Render.getConfig("RenderMainView.LightClustering") property: "dimZ" max: 31 min: 1 } CheckBox { text: "Freeze" - checked: mainViewTask.getConfig("LightClustering")["freeze"] - onCheckedChanged: { mainViewTask.getConfig("LightClustering")["freeze"] = checked } + checked: Render.getConfig("RenderMainView.LightClustering")["freeze"] + onCheckedChanged: { Render.getConfig("RenderMainView.LightClustering")["freeze"] = checked } } CheckBox { text: "Draw Grid" - checked: mainViewTask.getConfig("DebugLightClusters")["doDrawGrid"] - onCheckedChanged: { mainViewTask.getConfig("DebugLightClusters")["doDrawGrid"] = checked } + checked: Render.getConfig("RenderMainView.DebugLightClusters")["doDrawGrid"] + onCheckedChanged: { Render.getConfig("RenderMainView.DebugLightClusters")["doDrawGrid"] = checked } } CheckBox { text: "Draw Cluster From Depth" - checked: mainViewTask.getConfig("DebugLightClusters")["doDrawClusterFromDepth"] - onCheckedChanged: { mainViewTask.getConfig("DebugLightClusters")["doDrawClusterFromDepth"] = checked } + checked: Render.getConfig("RenderMainView.DebugLightClusters")["doDrawClusterFromDepth"] + onCheckedChanged: { Render.getConfig("RenderMainView.DebugLightClusters")["doDrawClusterFromDepth"] = checked } } CheckBox { text: "Draw Content" - checked: mainViewTask.getConfig("DebugLightClusters")["doDrawContent"] - onCheckedChanged: { mainViewTask.getConfig("DebugLightClusters")["doDrawContent"] = checked } + checked: Render.getConfig("RenderMainView.DebugLightClusters")["doDrawContent"] + onCheckedChanged: { Render.getConfig("RenderMainView.DebugLightClusters")["doDrawContent"] = checked } } Label { - text: "Num Cluster Items = " + mainViewTask.getConfig("LightClustering")["numClusteredLightReferences"].toFixed(0) + text: "Num Cluster Items = " + Render.getConfig("RenderMainView.LightClustering")["numClusteredLightReferences"].toFixed(0) } } diff --git a/scripts/developer/utilities/render/renderStats.js b/scripts/developer/utilities/render/renderStats.js index d2904c06ba..965431ab3b 100644 --- a/scripts/developer/utilities/render/renderStats.js +++ b/scripts/developer/utilities/render/renderStats.js @@ -14,8 +14,8 @@ var qml = Script.resolvePath('stats.qml'); var window = new OverlayWindow({ title: 'Render Stats', source: qml, - width: 320, - height: 720 + width: 400, + height: 400 }); window.setPosition(500, 50); window.closed.connect(function() { Script.stop(); }); \ No newline at end of file diff --git a/scripts/developer/utilities/render/stats.qml b/scripts/developer/utilities/render/stats.qml index 064045e8f5..25c108884a 100644 --- a/scripts/developer/utilities/render/stats.qml +++ b/scripts/developer/utilities/render/stats.qml @@ -21,99 +21,13 @@ Item { spacing: 8 anchors.fill:parent - property var mainViewTask: Render.getConfig("RenderMainView"); - property var config: mainViewTask.getConfig("Stats") + property var config: Render.getConfig("Stats") function evalEvenHeight() { // Why do we have to do that manually ? cannot seem to find a qml / anchor / layout mode that does that ? return (height - spacing * (children.length - 1)) / children.length } - PlotPerf { - title: "Num Buffers" - height: parent.evalEvenHeight() - object: stats.config - plots: [ - { - prop: "bufferCPUCount", - label: "CPU", - color: "#00B4EF" - }, - { - prop: "bufferGPUCount", - label: "GPU", - color: "#1AC567" - } - ] - } - PlotPerf { - title: "gpu::Buffer Memory" - height: parent.evalEvenHeight() - object: stats.config - valueScale: 1048576 - valueUnit: "Mb" - valueNumDigits: "1" - plots: [ - { - prop: "bufferCPUMemoryUsage", - label: "CPU", - color: "#00B4EF" - }, - { - prop: "bufferGPUMemoryUsage", - label: "GPU", - color: "#1AC567" - } - ] - } - PlotPerf { - title: "Num Textures" - height: parent.evalEvenHeight() - object: stats.config - plots: [ - { - prop: "textureCPUCount", - label: "CPU", - color: "#00B4EF" - }, - { - prop: "textureGPUCount", - label: "GPU", - color: "#1AC567" - }, - { - prop: "texturePendingGPUTransferCount", - label: "Transfer", - color: "#9495FF" - } - ] - } - PlotPerf { - title: "gpu::Texture Memory" - height: parent.evalEvenHeight() - object: stats.config - valueScale: 1048576 - valueUnit: "Mb" - valueNumDigits: "1" - plots: [ - { - prop: "textureCPUMemoryUsage", - label: "CPU", - color: "#00B4EF" - }, - { - prop: "textureGPUMemoryUsage", - label: "GPU", - color: "#1AC567" - }, - { - prop: "textureGPUVirtualMemoryUsage", - label: "GPU Virtual", - color: "#9495FF" - } - ] - } - PlotPerf { title: "Triangles" height: parent.evalEvenHeight() @@ -183,9 +97,9 @@ Item { ] } - property var drawOpaqueConfig: mainViewTask.getConfig("DrawOpaqueDeferred") - property var drawTransparentConfig: mainViewTask.getConfig("DrawTransparentDeferred") - property var drawLightConfig: mainViewTask.getConfig("DrawLight") + property var drawOpaqueConfig: Render.getConfig("RenderMainView.DrawOpaqueDeferred") + property var drawTransparentConfig: Render.getConfig("RenderMainView.DrawTransparentDeferred") + property var drawLightConfig: Render.getConfig("RenderMainView.DrawLight") PlotPerf { title: "Items" @@ -200,13 +114,13 @@ Item { color: "#1AC567" }, { - object: mainViewTask.getConfig("DrawTransparentDeferred"), + object: Render.getConfig("RenderMainView.DrawTransparentDeferred"), prop: "numDrawn", label: "Translucents", color: "#00B4EF" }, { - object: mainViewTask.getConfig("DrawLight"), + object: Render.getConfig("RenderMainView.DrawLight"), prop: "numDrawn", label: "Lights", color: "#FED959" @@ -223,25 +137,25 @@ Item { valueNumDigits: "2" plots: [ { - object: mainViewTask.getConfig("DrawOpaqueDeferred"), + object: Render.getConfig("RenderMainView.DrawOpaqueDeferred"), prop: "cpuRunTime", label: "Opaques", color: "#1AC567" }, { - object: mainViewTask.getConfig("DrawTransparentDeferred"), + object: Render.getConfig("RenderMainView.DrawTransparentDeferred"), prop: "cpuRunTime", label: "Translucents", color: "#00B4EF" }, { - object: mainViewTask.getConfig("RenderDeferred"), + object: Render.getConfig("RenderMainView.RenderDeferred"), prop: "cpuRunTime", label: "Lighting", color: "#FED959" }, { - object: mainViewTask.getConfig("RenderDeferredTask"), + object: Render.getConfig("RenderMainView.RenderDeferredTask"), prop: "cpuRunTime", label: "RenderFrame", color: "#E2334D" diff --git a/scripts/developer/utilities/render/statsGPU.qml b/scripts/developer/utilities/render/statsGPU.qml index 219f5e03fc..6b80f00af3 100644 --- a/scripts/developer/utilities/render/statsGPU.qml +++ b/scripts/developer/utilities/render/statsGPU.qml @@ -20,9 +20,7 @@ Item { id: stats spacing: 8 anchors.fill:parent - - property var mainViewTask: Render.getConfig("RenderMainView"); - + function evalEvenHeight() { // Why do we have to do that manually ? cannot seem to find a qml / anchor / layout mode that does that ? return (height - spacing * (children.length - 1)) / children.length From c35be446e6ab5cff27d673ca2a2e9d4731f99d19 Mon Sep 17 00:00:00 2001 From: Sam Cake Date: Wed, 21 Jun 2017 00:06:45 -0700 Subject: [PATCH 3/7] adding profiling on the script engine call back to timer event --- interface/src/Application.cpp | 2 +- libraries/render/src/render/EngineStats.cpp | 2 -- libraries/script-engine/src/ScriptEngine.cpp | 1 + 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 334d80c57c..e9135fb09c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1874,7 +1874,7 @@ void Application::initializeGL() { render::CullFunctor cullFunctor = LODManager::shouldRender; static const QString RENDER_FORWARD = "HIFI_RENDER_FORWARD"; bool isDeferred = !QProcessEnvironment::systemEnvironment().contains(RENDER_FORWARD); - // _renderEngine->addJob("SecondaryCameraFrame", cullFunctor); + _renderEngine->addJob("SecondaryCameraFrame", cullFunctor); _renderEngine->addJob("RenderMainView", cullFunctor, isDeferred); _renderEngine->load(); _renderEngine->registerScene(_main3DScene); diff --git a/libraries/render/src/render/EngineStats.cpp b/libraries/render/src/render/EngineStats.cpp index 9e45be5dbd..ae1467ac0f 100644 --- a/libraries/render/src/render/EngineStats.cpp +++ b/libraries/render/src/render/EngineStats.cpp @@ -63,6 +63,4 @@ void EngineStats::run(const RenderContextPointer& renderContext) { config->frameSetPipelineCount = _gpuStats._PSNumSetPipelines; config->frameSetInputFormatCount = _gpuStats._ISNumFormatChanges; - - config->emitDirty(); } diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 5c4c2c849b..67b16df1ce 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1284,6 +1284,7 @@ void ScriptEngine::timerFired() { // call the associated JS function, if it exists if (timerData.function.isValid()) { + PROFILE_RANGE(script, __FUNCTION__); auto preTimer = p_high_resolution_clock::now(); callWithEnvironment(timerData.definingEntityIdentifier, timerData.definingSandboxURL, timerData.function, timerData.function, QScriptValueList()); auto postTimer = p_high_resolution_clock::now(); From a78018345b722bf5102d7f3c4201645a3c1a2f91 Mon Sep 17 00:00:00 2001 From: Sam Cake Date: Wed, 21 Jun 2017 00:15:29 -0700 Subject: [PATCH 4/7] Fixing the last scripts maybe --- .../developer/utilities/render/culling.qml | 19 +++++----- .../utilities/render/subsurfaceScattering.qml | 35 +++++++++---------- .../utilities/render/surfaceGeometryPass.qml | 15 ++++---- 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/scripts/developer/utilities/render/culling.qml b/scripts/developer/utilities/render/culling.qml index 3c3c0f67d9..2ce3cc1dea 100644 --- a/scripts/developer/utilities/render/culling.qml +++ b/scripts/developer/utilities/render/culling.qml @@ -14,9 +14,8 @@ import "configSlider" Column { id: root spacing: 8 - property var mainViewTask: Render.getConfig("RenderMainView"); - property var sceneOctree: mainViewTask.getConfig("DrawSceneOctree"); - property var itemSelection: mainViewTask.getConfig("DrawItemSelection"); + property var sceneOctree: Render.getConfig("RenderMainView.DrawSceneOctree"); + property var itemSelection: Render.getConfig("RenderMainView.DrawItemSelection"); Component.onCompleted: { sceneOctree.enabled = true; @@ -31,8 +30,8 @@ Column { Component.onDestruction: { sceneOctree.enabled = false; itemSelection.enabled = false; - mainViewTask.getConfig("FetchSceneSelection").freezeFrustum = false; - mainViewTask.getConfig("CullSceneSelection").freezeFrustum = false; + Render.getConfig("RenderMainView.FetchSceneSelection").freezeFrustum = false; + Render.getConfig("RenderMainView.CullSceneSelection").freezeFrustum = false; } GroupBox { @@ -46,8 +45,8 @@ Column { text: "Freeze Culling Frustum" checked: false onCheckedChanged: { - mainViewTask.getConfig("FetchSceneSelection").freezeFrustum = checked; - mainViewTask.getConfig("CullSceneSelection").freezeFrustum = checked; + Render.getConfig("RenderMainView.FetchSceneSelection").freezeFrustum = checked; + Render.getConfig("RenderMainView.CullSceneSelection").freezeFrustum = checked; } } Label { @@ -99,12 +98,12 @@ Column { Column{ Repeater { - model: [ "Opaque:DrawOpaqueDeferred", "Transparent:DrawTransparentDeferred", "Light:DrawLight", - "Opaque Overlays:DrawOverlay3DOpaque", "Transparent Overlays:DrawOverlay3DTransparent" ] + model: [ "Opaque:RenderMainView.DrawOpaqueDeferred", "Transparent:RenderMainView.DrawTransparentDeferred", "Light:RenderMainView.DrawLight", + "Opaque Overlays:RenderMainView.DrawOverlay3DOpaque", "Transparent Overlays:RenderMainView.DrawOverlay3DTransparent" ] ConfigSlider { label: qsTr(modelData.split(":")[0]) integral: true - config: mainViewTask.getConfig(modelData.split(":")[1]) + config: Render.getConfig(modelData.split(":")[1]) property: "maxDrawn" max: config.numDrawn min: -1 diff --git a/scripts/developer/utilities/render/subsurfaceScattering.qml b/scripts/developer/utilities/render/subsurfaceScattering.qml index 53bca7f2b8..ec7367217e 100644 --- a/scripts/developer/utilities/render/subsurfaceScattering.qml +++ b/scripts/developer/utilities/render/subsurfaceScattering.qml @@ -16,29 +16,28 @@ Column { Column { id: scattering spacing: 10 - property var mainViewTask: Render.getConfig("RenderMainView"); - Column{ + Column{ CheckBox { text: "Scattering" - checked: mainViewTask.getConfig("Scattering").enableScattering - onCheckedChanged: { mainViewTask.getConfig("Scattering").enableScattering = checked } + checked: Render.getConfig("RenderMainView.Scattering").enableScattering + onCheckedChanged: { Render.getConfig("RenderMainView.Scattering").enableScattering = checked } } CheckBox { text: "Show Scattering BRDF" - checked: mainViewTask.getConfig("Scattering").showScatteringBRDF - onCheckedChanged: { mainViewTask.getConfig("Scattering").showScatteringBRDF = checked } + checked: Render.getConfig("RenderMainView.Scattering").showScatteringBRDF + onCheckedChanged: { Render.getConfig("RenderMainView.Scattering").showScatteringBRDF = checked } } CheckBox { text: "Show Curvature" - checked: mainViewTask.getConfig("Scattering").showCurvature - onCheckedChanged: { mainViewTask.getConfig("Scattering").showCurvature = checked } + checked: Render.getConfig("RenderMainView.Scattering").showCurvature + onCheckedChanged: { Render.getConfig("RenderMainView.Scattering").showCurvature = checked } } CheckBox { text: "Show Diffused Normal" - checked: mainViewTask.getConfig("Scattering").showDiffusedNormal - onCheckedChanged: { mainViewTask.getConfig("Scattering").showDiffusedNormal = checked } + checked: Render.getConfig("RenderMainView.Scattering").showDiffusedNormal + onCheckedChanged: { Render.getConfig("RenderMainView.Scattering").showDiffusedNormal = checked } } Repeater { model: [ "Scattering Bent Red:Scattering:bentRed:2.0", @@ -59,23 +58,23 @@ Column { } CheckBox { text: "Scattering Profile" - checked: mainViewTask.getConfig("DebugScattering").showProfile - onCheckedChanged: { mainViewTask.getConfig("DebugScattering").showProfile = checked } + checked: Render.getConfig("RenderMainView.DebugScattering").showProfile + onCheckedChanged: { Render.getConfig("RenderMainView.DebugScattering").showProfile = checked } } CheckBox { text: "Scattering Table" - checked: mainViewTask.getConfig("DebugScattering").showLUT - onCheckedChanged: { mainViewTask.getConfig("DebugScattering").showLUT = checked } + checked: Render.getConfig("RenderMainView.DebugScattering").showLUT + onCheckedChanged: { Render.getConfig("RenderMainView.DebugScattering").showLUT = checked } } CheckBox { text: "Cursor Pixel" - checked: mainViewTask.getConfig("DebugScattering").showCursorPixel - onCheckedChanged: { mainViewTask.getConfig("DebugScattering").showCursorPixel = checked } + checked: Render.getConfig("RenderMainView.DebugScattering").showCursorPixel + onCheckedChanged: { Render.getConfig("RenderMainView.DebugScattering").showCursorPixel = checked } } CheckBox { text: "Skin Specular Beckmann" - checked: mainViewTask.getConfig("DebugScattering").showSpecularTable - onCheckedChanged: { mainViewTask.getConfig("DebugScattering").showSpecularTable = checked } + checked: Render.getConfig("RenderMainView.DebugScattering").showSpecularTable + onCheckedChanged: { Render.getConfig("RenderMainView.DebugScattering").showSpecularTable = checked } } } } diff --git a/scripts/developer/utilities/render/surfaceGeometryPass.qml b/scripts/developer/utilities/render/surfaceGeometryPass.qml index 7e70dceef1..ba1db66d16 100644 --- a/scripts/developer/utilities/render/surfaceGeometryPass.qml +++ b/scripts/developer/utilities/render/surfaceGeometryPass.qml @@ -16,13 +16,12 @@ Column { Column { id: surfaceGeometry spacing: 10 - property var mainViewTask: Render.getConfig("RenderMainView"); Column{ ConfigSlider { label: qsTr("Depth Threshold [cm]") integral: false - config: mainViewTask.getConfig("SurfaceGeometry") + config: Render.getConfig("RenderMainView.SurfaceGeometry") property: "depthThreshold" max: 5.0 min: 0.0 @@ -35,7 +34,7 @@ Column { ConfigSlider { label: qsTr(modelData.split(":")[0]) integral: (modelData.split(":")[3] == 'true') - config: mainViewTask.getConfig("SurfaceGeometry") + config: Render.getConfig("RenderMainView.SurfaceGeometry") property: modelData.split(":")[1] max: modelData.split(":")[2] min: 0.0 @@ -43,18 +42,18 @@ Column { } CheckBox { text: "Half Resolution" - checked: mainViewTask.getConfig("SurfaceGeometry")["resolutionLevel"] - onCheckedChanged: { mainViewTask.getConfig("SurfaceGeometry")["resolutionLevel"] = checked } + checked: Render.getConfig("RenderMainView.SurfaceGeometry")["resolutionLevel"] + onCheckedChanged: { Render.getConfig("RenderMainView.SurfaceGeometry")["resolutionLevel"] = checked } } Repeater { - model: [ "Diffusion Scale:SurfaceGeometry:diffuseFilterScale:2.0", - "Diffusion Depth Threshold:SurfaceGeometry:diffuseDepthThreshold:1.0" + model: [ "Diffusion Scale:RenderMainView.SurfaceGeometry:diffuseFilterScale:2.0", + "Diffusion Depth Threshold:RenderMainView.SurfaceGeometry:diffuseDepthThreshold:1.0" ] ConfigSlider { label: qsTr(modelData.split(":")[0]) integral: false - config: mainViewTask.getConfig(modelData.split(":")[1]) + config: Render.getConfig(modelData.split(":")[1]) property: modelData.split(":")[2] max: modelData.split(":")[3] min: 0.0 From 1e168a5f6de9eb89d2daee1e3b8eb37ab11ec4b0 Mon Sep 17 00:00:00 2001 From: Sam Cake Date: Wed, 21 Jun 2017 00:23:24 -0700 Subject: [PATCH 5/7] Remove extra logging --- scripts/developer/utilities/lib/plotperf/PlotPerf.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/developer/utilities/lib/plotperf/PlotPerf.qml b/scripts/developer/utilities/lib/plotperf/PlotPerf.qml index c454901a36..916c9cae55 100644 --- a/scripts/developer/utilities/lib/plotperf/PlotPerf.qml +++ b/scripts/developer/utilities/lib/plotperf/PlotPerf.qml @@ -84,7 +84,6 @@ Item { Component.onCompleted: { createValues(); - console.log("PlotPerf plot values is", JSON.stringify(_values)); } function resetMax() { for (var i = 0; i < _values.length; i++) { From 484aeed589f5348cb75119a767b3df99124b3ae4 Mon Sep 17 00:00:00 2001 From: Sam Cake Date: Wed, 21 Jun 2017 00:36:03 -0700 Subject: [PATCH 6/7] More comments on the getCOnfig call --- libraries/render/src/task/Config.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libraries/render/src/task/Config.h b/libraries/render/src/task/Config.h index 9f0b222c20..608afdce3c 100644 --- a/libraries/render/src/task/Config.h +++ b/libraries/render/src/task/Config.h @@ -140,6 +140,14 @@ public: TaskConfig(bool enabled) : JobConfig(enabled) {} + + // Get a sub job config through task.getConfig(path) + // where path can be: + // - the name of the job and then the first one found will be returned traversing the Render engine graph + // - .[.] + // Allowing to first look for the parent_name job (from the Render root) and then search from there for the + // optional sub_parent_names and finally from there looking for the job_name (assuming every job in the path were found) + // // getter for qml integration, prefer the templated getter Q_INVOKABLE QObject* getConfig(const QString& name) { return getConfig(name.toStdString()); } // getter for cpp (strictly typed), prefer this getter From 09529f6592b3e58228ede39b666ae47a40068fef Mon Sep 17 00:00:00 2001 From: Sam Cake Date: Wed, 21 Jun 2017 00:54:04 -0700 Subject: [PATCH 7/7] One more refinemnt of the comment --- libraries/render/src/task/Config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/render/src/task/Config.h b/libraries/render/src/task/Config.h index 608afdce3c..7632d4e85d 100644 --- a/libraries/render/src/task/Config.h +++ b/libraries/render/src/task/Config.h @@ -143,9 +143,9 @@ public: // Get a sub job config through task.getConfig(path) // where path can be: - // - the name of the job and then the first one found will be returned traversing the Render engine graph + // - search for the first job named job_name traversing the the sub graph of task and jobs (from this task as root) // - .[.] - // Allowing to first look for the parent_name job (from the Render root) and then search from there for the + // Allowing to first look for the parent_name job (from this task as root) and then search from there for the // optional sub_parent_names and finally from there looking for the job_name (assuming every job in the path were found) // // getter for qml integration, prefer the templated getter