From f50b2fab2bf7cae4551fd6fc720205d997b2b06f Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 23 Apr 2018 22:38:50 -0700 Subject: [PATCH] Exposing timing and regulated radiuses --- interface/src/workload/GameWorkload.cpp | 16 +++- interface/src/workload/GameWorkload.h | 58 +++++++------ .../utilities/workload/workloadInspector.qml | 86 ++++++++++++++++++- 3 files changed, 129 insertions(+), 31 deletions(-) diff --git a/interface/src/workload/GameWorkload.cpp b/interface/src/workload/GameWorkload.cpp index 70b17485c2..1f07d2e734 100644 --- a/interface/src/workload/GameWorkload.cpp +++ b/interface/src/workload/GameWorkload.cpp @@ -38,7 +38,13 @@ void ControlViews::run(const workload::WorkloadContextPointer& runContext, const if (_data.regulateViewRanges && inTimings.size()) { regulateViews(outViews, inTimings); + + auto config = std::static_pointer_cast(runContext->jobConfig); + config->dataExport = _dataExport; + config->emitDirty(); } + + } glm::vec2 Regulator::run(const Timing_ns& regulationDuration, const Timing_ns& measured, const glm::vec2& current) { @@ -64,9 +70,13 @@ void ControlViews::regulateViews(workload::Views& outViews, const workload::Timi } auto loopDuration = std::chrono::nanoseconds{ std::chrono::milliseconds(16) }; - regionBackFronts[workload::Region::R1] = regionRegulators[workload::Region::R1].run(loopDuration, timings[0], regionBackFronts[workload::Region::R1]); - regionBackFronts[workload::Region::R2] = regionRegulators[workload::Region::R2].run(loopDuration, timings[0], regionBackFronts[workload::Region::R2]); - regionBackFronts[workload::Region::R3] = regionRegulators[workload::Region::R3].run(loopDuration, timings[1], regionBackFronts[workload::Region::R3]); + _dataExport.ranges[workload::Region::R1] = regionBackFronts[workload::Region::R1] = regionRegulators[workload::Region::R1].run(loopDuration, timings[0], regionBackFronts[workload::Region::R1]); + _dataExport.ranges[workload::Region::R2] = regionBackFronts[workload::Region::R2] = regionRegulators[workload::Region::R2].run(loopDuration, timings[0], regionBackFronts[workload::Region::R2]); + _dataExport.ranges[workload::Region::R3] = regionBackFronts[workload::Region::R3] = regionRegulators[workload::Region::R3].run(loopDuration, timings[1], regionBackFronts[workload::Region::R3]); + + _dataExport.timings[workload::Region::R1] = std::chrono::duration(timings[0]).count(); + _dataExport.timings[workload::Region::R2] = _dataExport.timings[workload::Region::R1]; + _dataExport.timings[workload::Region::R3] = std::chrono::duration(timings[1]).count(); int i = 0; for (auto& outView : outViews) { diff --git a/interface/src/workload/GameWorkload.h b/interface/src/workload/GameWorkload.h index 702e0029d0..6a297964cf 100644 --- a/interface/src/workload/GameWorkload.h +++ b/interface/src/workload/GameWorkload.h @@ -47,18 +47,18 @@ class ControlViewsConfig : public workload::Job::Config { Q_OBJECT Q_PROPERTY(bool regulateViewRanges READ regulateViewRanges WRITE setRegulateViewRanges NOTIFY dirty) - Q_PROPERTY(float r1Timing READ r1Timing) - Q_PROPERTY(float r2Timing READ r2Timing) - Q_PROPERTY(float r3Timing READ r3Timing) + Q_PROPERTY(float r1Timing READ r1Timing NOTIFY dirty) + Q_PROPERTY(float r2Timing READ r2Timing NOTIFY dirty) + Q_PROPERTY(float r3Timing READ r3Timing NOTIFY dirty) - Q_PROPERTY(float r1RangeBack READ r1RangeBack) - Q_PROPERTY(float r2RangeBack READ r2RangeBack) - Q_PROPERTY(float r3RangeBack READ r3RangeBack) - - Q_PROPERTY(float r1RangeFront READ r1RangeFront) - Q_PROPERTY(float r2RangeFront READ r2RangeFront) - Q_PROPERTY(float r3RangeFront READ r3RangeFront) + Q_PROPERTY(float r1RangeBack READ r1RangeBack NOTIFY dirty) + Q_PROPERTY(float r2RangeBack READ r2RangeBack NOTIFY dirty) + Q_PROPERTY(float r3RangeBack READ r3RangeBack NOTIFY dirty) + Q_PROPERTY(float r1RangeFront READ r1RangeFront NOTIFY dirty) + Q_PROPERTY(float r2RangeFront READ r2RangeFront NOTIFY dirty) + Q_PROPERTY(float r3RangeFront READ r3RangeFront NOTIFY dirty) +/* Q_PROPERTY(float r1MinRangeBack READ r1MinRangeBack WRITE setR1MinRangeBack NOTIFY dirty) Q_PROPERTY(float r2MinRangeBack READ r2MinRangeBack WRITE setR2MinRangeBack NOTIFY dirty) Q_PROPERTY(float r3MinRangeBack READ r3MinRangeBack WRITE setR3MinRangeBack NOTIFY dirty) @@ -89,33 +89,36 @@ class ControlViewsConfig : public workload::Job::Config { Q_PROPERTY(float r1SpeedUpFront READ r1SpeedUpFront WRITE setR1SpeedUpFront NOTIFY dirty) Q_PROPERTY(float r2SpeedUpFront READ r2SpeedUpFront WRITE setR2SpeedUpFront NOTIFY dirty) - Q_PROPERTY(float r3SpeedUpFront READ r3SpeedUpFront WRITE setR3SpeedUpFront NOTIFY dirty) + Q_PROPERTY(float r3SpeedUpFront READ r3SpeedUpFront WRITE setR3SpeedUpFront NOTIFY dirty)*/ public: bool regulateViewRanges() const { return data.regulateViewRanges; } void setRegulateViewRanges(bool use) { data.regulateViewRanges = use; emit dirty(); } - float r1Timing() const { return data.r1Timing; } - float r2Timing() const { return data.r2Timing; } - float r3Timing() const { return data.r3Timing; } + float r1Timing() const { return dataExport.timings[workload::Region::R1]; } + float r2Timing() const { return dataExport.timings[workload::Region::R2]; } + float r3Timing() const { return dataExport.timings[workload::Region::R3]; } - float r1RangeBack() const { return data.r1RangeBack; } - float r2RangeBack() const { return data.r2RangeBack; } - float r3RangeBack() const { return data.r3RangeBack; } + float r1RangeBack() const { return dataExport.ranges[workload::Region::R1].x; } + float r2RangeBack() const { return dataExport.ranges[workload::Region::R2].x; } + float r3RangeBack() const { return dataExport.ranges[workload::Region::R3].x; } - float r1RangeFront() const { return data.r1RangeFront; } - float r2RangeFront() const { return data.r2RangeFront; } - float r3RangeFront() const { return data.r3RangeFront; } + float r1RangeFront() const { return dataExport.ranges[workload::Region::R1].y; } + float r2RangeFront() const { return dataExport.ranges[workload::Region::R2].y; } + float r3RangeFront() const { return dataExport.ranges[workload::Region::R3].y; } struct Data { - float r1Timing - float r2Timing - float r3Timing - bool regulateViewRanges{ true }; - } data; + + struct DataExport { + static const int SIZE{ workload::Region::NUM_VIEW_REGIONS }; + float timings[SIZE]; + glm::vec2 ranges[SIZE]; + } dataExport; + + void emitDirty() { emit dirty(); } signals: void dirty(); }; @@ -149,13 +152,14 @@ public: void configure(const Config& config); void run(const workload::WorkloadContextPointer& runContext, const Input& inputs, Output& outputs); - std::array regionBackFronts; - std::array regionRegulators; + std::array regionBackFronts; + std::array regionRegulators; void regulateViews(workload::Views& views, const workload::Timings& timings); protected: Config::Data _data; + Config::DataExport _dataExport; }; #endif // hifi_GameWorkload_h diff --git a/scripts/developer/utilities/workload/workloadInspector.qml b/scripts/developer/utilities/workload/workloadInspector.qml index 885d8ddb66..03bf5f640a 100644 --- a/scripts/developer/utilities/workload/workloadInspector.qml +++ b/scripts/developer/utilities/workload/workloadInspector.qml @@ -15,6 +15,7 @@ import "qrc:///qml/styles-uit" import "qrc:///qml/controls-uit" as HifiControls import "../render/configSlider" import "../lib/jet/qml" as Jet +import "../lib/plotperf" Rectangle { @@ -66,6 +67,7 @@ Rectangle { } Column { + id: stats spacing: 5 anchors.left: parent.left anchors.right: parent.right @@ -119,6 +121,7 @@ Rectangle { } RowLayout { + visible: !Workload.getConfig("controlViews")["regulateViewRanges"] anchors.left: parent.left anchors.right: parent.right Column { @@ -176,6 +179,86 @@ Rectangle { } } } + RowLayout { + visible: Workload.getConfig("controlViews")["regulateViewRanges"] + anchors.left: parent.left + anchors.right: parent.right + Column { + anchors.left: parent.left + anchors.right: parent.horizontalCenter + HifiControls.Label { + text: "Back [m]" + anchors.horizontalCenter: parent.horizontalCenter + } + Repeater { + model: [ + "R1:r1RangeBack:50.0:0.0", + "R2:r2RangeBack:50.0:0.0", + "R3:r3RangeBack:50.0:0.0" + ] + ConfigSlider { + label: qsTr(modelData.split(":")[0]) + config: Workload.getConfig("controlViews") + property: modelData.split(":")[1] + max: modelData.split(":")[2] + min: modelData.split(":")[3] + integral: true + + labelAreaWidthScale: 0.4 + anchors.left: parent.left + anchors.right: parent.right + } + } + } + Column { + anchors.left: parent.horizontalCenter + anchors.right: parent.right + HifiControls.Label { + text: "Front [m]" + anchors.horizontalCenter: parent.horizontalCenter + } + Repeater { + model: [ + "r1RangeFront:300:1.0", + "r2RangeFront:300:1.0", + "r3RangeFront:300:1.0" + ] + ConfigSlider { + showLabel: false + config: Workload.getConfig("controlViews") + property: modelData.split(":")[0] + max: modelData.split(":")[1] + min: modelData.split(":")[2] + integral: true + + labelAreaWidthScale: 0.3 + anchors.left: parent.left + anchors.right: parent.right + } + } + } + } + property var controlViews: Workload.getConfig("controlViews") + + PlotPerf { + title: "Timings" + height: 100 + object: stats.controlViews + valueScale: 1.0 + valueUnit: "ms" + plots: [ + { + prop: "r2Timing", + label: "Physics + Collisions", + color: "#1AC567" + }, + { + prop: "r3Timing", + label: "Kinematic + Update", + color: "#1A67C5" + } + ] + } Separator {} HifiControls.Label { text: "Numbers:"; @@ -188,7 +271,8 @@ Rectangle { } HifiControls.Label { text: "R3= " + Workload.getConfig("regionState")["numR3"]; - } + } + Separator {} HifiControls.Label { text: "Display"