From 3cf2eeb4d57e977a417c394d273255c82cc50321 Mon Sep 17 00:00:00 2001 From: samcake Date: Wed, 30 Mar 2016 13:58:32 -0700 Subject: [PATCH] IMproving the perfplot qml and adding 2 more info --- .../utilities/render/plotperf/PlotPerf.qml | 75 ++++++--- examples/utilities/render/stats.qml | 158 +++++++++++++++--- 2 files changed, 184 insertions(+), 49 deletions(-) diff --git a/examples/utilities/render/plotperf/PlotPerf.qml b/examples/utilities/render/plotperf/PlotPerf.qml index 7141ea77d0..179707c0f1 100644 --- a/examples/utilities/render/plotperf/PlotPerf.qml +++ b/examples/utilities/render/plotperf/PlotPerf.qml @@ -15,40 +15,64 @@ Item { id: root width: parent.width height: 100 + + // The title of the graph property string title - property var config - property string parameters - // THis is my hack to get the name of the first property and assign it to a trigger var in order to get + // THe object used as the default source object for the prop plots + property var object + + // THis is my hack to get a property and assign it to a trigger var in order to get // a signal called whenever the value changed - property var trigger: config[parameters.split(":")[3].split("-")[0]] + property var trigger + + // Plots is an array of plot descriptor + // a default plot descriptor expects the following object: + // prop: [ { + // object: {} // Optional: this is the object from which the prop will be fetched, + // if nothing than the object from root is used + // prop:"bufferCPUCount", // Needed the name of the property from the object to feed the plot + // label: "CPU", // Optional: Label as displayed on the plot + // color: "#00B4EF" // Optional: Color of the curve + // unit: "km/h" // Optional: Unit added to the value displayed, if nothing then the default unit is used + // scale: 1 // Optional: Extra scaling used to represent the value, this scale is combined with the global scale. + // }, + property var plots + + // Default value scale used to define the max value of the chart + property var valueScale: 1 + + // Default value unit appended to the value displayed + property var valueUnit: "" + + // Default number of digits displayed + property var valueNumDigits: 0 + - property var inputs: parameters.split(":") - property var valueScale: +inputs[0] - property var valueUnit: inputs[1] - property var valueNumDigits: inputs[2] - property var input_VALUE_OFFSET: 3 property var valueMax : 1 property var _values : new Array() property var tick : 0 function createValues() { - if (inputs.length > input_VALUE_OFFSET) { - for (var i = input_VALUE_OFFSET; i < inputs.length; i++) { - var varProps = inputs[i].split("-") - _values.push( { - value: varProps[0], - valueMax: 1, - numSamplesConstantMax: 0, - valueHistory: new Array(), - label: varProps[1], - color: varProps[2], - scale: (varProps.length > 3 ? varProps[3] : 1), - unit: (varProps.length > 4 ? varProps[4] : valueUnit) - }) - } - } + print("trigger is: " + JSON.stringify(trigger)) + if (Array.isArray(plots)) { + for (var i =0; i < plots.length; i++) { + var plot = plots[i]; + print(" a pnew Plot:" + JSON.stringify(plot)); + _values.push( { + object: (plot["object"] !== undefined ? plot["object"] : root.object), + value: plot["prop"], + valueMax: 1, + numSamplesConstantMax: 0, + valueHistory: new Array(), + label: (plot["label"] !== undefined ? plot["label"] : ""), + color: (plot["color"] !== undefined ? plot["color"] : "white"), + scale: (plot["scale"] !== undefined ? plot["scale"] : 1), + unit: (plot["unit"] !== undefined ? plot["unit"] : valueUnit) + }) + } + } print("in creator" + JSON.stringify(_values)); } @@ -69,7 +93,8 @@ Item { var currentValueMax = 0 for (var i = 0; i < _values.length; i++) { - var currentVal = config[_values[i].value] * _values[i].scale; + var currentVal = _values[i].object[_values[i].value] * _values[i].scale; + _values[i].valueHistory.push(currentVal) _values[i].numSamplesConstantMax++; diff --git a/examples/utilities/render/stats.qml b/examples/utilities/render/stats.qml index ae5b433678..6326910220 100644 --- a/examples/utilities/render/stats.qml +++ b/examples/utilities/render/stats.qml @@ -30,51 +30,161 @@ Item { PlotPerf { title: "Num Buffers" - config: stats.config height: parent.evalEvenHeight() - parameters: "1::0:bufferCPUCount-CPU-#00B4EF:bufferGPUCount-GPU-#1AC567" + object: stats.config + trigger: stats.config["bufferCPUCount"] + plots: [ + { + prop: "bufferCPUCount", + label: "CPU", + color: "#00B4EF" + }, + { + prop: "bufferGPUCount", + label: "GPU", + color: "#1AC567" + } + ] } PlotPerf { title: "gpu::Buffer Memory" - config: stats.config height: parent.evalEvenHeight() - parameters: "1048576:Mb:1:bufferCPUMemoryUsage-CPU-#00B4EF:bufferGPUMemoryUsage-GPU-#1AC567" + object: stats.config + trigger: stats.config["bufferCPUMemoryUsage"] + valueScale: 1048576 + valueUnit: "Mb" + valueNumDigits: "1" + plots: [ + { + prop: "bufferCPUMemoryUsage", + label: "CPU", + color: "#00B4EF" + }, + { + prop: "bufferGPUMemoryUsage", + label: "GPU", + color: "#1AC567" + } + ] } - PlotPerf { title: "Num Textures" - config: stats.config height: parent.evalEvenHeight() - parameters: "1::0:textureCPUCount-CPU-#00B4EF:textureGPUCount-GPU-#1AC567:frameTextureCount-Frame-#E2334D" + object: stats.config + trigger: stats.config["textureCPUCount"] + plots: [ + { + prop: "textureCPUCount", + label: "CPU", + color: "#00B4EF" + }, + { + prop: "textureGPUCount", + label: "GPU", + color: "#1AC567" + }, + { + prop: "frameTextureCount", + label: "Frame", + color: "#E2334D" + } + ] } PlotPerf { title: "gpu::Texture Memory" - config: stats.config height: parent.evalEvenHeight() - parameters: "1048576:Mb:1:textureCPUMemoryUsage-CPU-#00B4EF:textureGPUMemoryUsage-GPU-#1AC567" + object: stats.config + trigger: stats.config["textureCPUMemoryUsage"] + valueScale: 1048576 + valueUnit: "Mb" + valueNumDigits: "1" + plots: [ + { + prop: "textureCPUMemoryUsage", + label: "CPU", + color: "#00B4EF" + }, + { + prop: "textureGPUMemoryUsage", + label: "GPU", + color: "#1AC567" + } + ] + } + + PlotPerf { + title: "Triangles" + height: parent.evalEvenHeight() + object: stats.config + trigger: stats.config["frameTriangleCount"] + valueScale: 1000 + valueUnit: "K" + plots: [ + { + prop: "frameTriangleCount", + label: "Frame", + color: "#E2334D" + }, + { + prop: "frameTriangleRate", + label: "rate", + color: "#1AC567", + scale: 0.001, + unit: "MT/s" + } + ] } PlotPerf { title: "Drawcalls" - config: stats.config height: parent.evalEvenHeight() - parameters: "1::0:frameDrawcallCount-frame-#E2334D:frameDrawcallRate-rate-#1AC567-0.001-K/s" + object: stats.config + trigger: stats.config["frameDrawcallCount"] + plots: [ + { + prop: "frameDrawcallCount", + label: "Frame", + color: "#E2334D" + }, + { + prop: "frameDrawcallRate", + label: "rate", + color: "#1AC567", + scale: 0.001, + unit: "K/s" + } + ] } - PlotPerf { - title: "Triangles" - config: stats.config - height: parent.evalEvenHeight() - parameters: "1000:K:0:frameTriangleCount-frame-#E2334D:frameTriangleRate-rate-#1AC567-0.001-MT/s" - } - - property var deferredTaskConfig: Render.getConfig("RenderDeferredTask") - property var drawLightConfig: deferredTaskConfig.getConfig("DrawLight") + + property var drawOpaqueConfig: Render.getConfig("DrawOpaqueDeferred") + property var drawTransparentConfig: Render.getConfig("DrawTransparentDeferred") + property var drawLightConfig: Render.getConfig("DrawLight") PlotPerf { - title: "Lights" - config: parent.drawLightConfig + title: "Items" height: parent.evalEvenHeight() - parameters: "1::0:numDrawn-frame-#E2334D" - } + object: parent.drawOpaqueConfig + trigger: Render.getConfig("DrawOpaqueDeferred")["numDrawn"] + plots: [ + { + object: Render.getConfig("DrawOpaqueDeferred"), + prop: "numDrawn", + label: "Opaques", + color: "#1AC567" + }, + { + object: Render.getConfig("DrawTransparentDeferred"), + prop: "numDrawn", + label: "Translucents", + color: "#00B4EF" + }, + { + object: Render.getConfig("DrawLight"), + prop: "numDrawn", + label: "Lights", + color: "#E2334D" + } + ] + } } }