mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 19:59:28 +02:00
Exposing timing and regulated radiuses
This commit is contained in:
parent
f686ef1f25
commit
f50b2fab2b
3 changed files with 129 additions and 31 deletions
|
@ -38,7 +38,13 @@ void ControlViews::run(const workload::WorkloadContextPointer& runContext, const
|
||||||
|
|
||||||
if (_data.regulateViewRanges && inTimings.size()) {
|
if (_data.regulateViewRanges && inTimings.size()) {
|
||||||
regulateViews(outViews, inTimings);
|
regulateViews(outViews, inTimings);
|
||||||
|
|
||||||
|
auto config = std::static_pointer_cast<Config>(runContext->jobConfig);
|
||||||
|
config->dataExport = _dataExport;
|
||||||
|
config->emitDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::vec2 Regulator::run(const Timing_ns& regulationDuration, const Timing_ns& measured, const glm::vec2& current) {
|
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) };
|
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]);
|
_dataExport.ranges[workload::Region::R1] = 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]);
|
_dataExport.ranges[workload::Region::R2] = 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::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<float, std::milli>(timings[0]).count();
|
||||||
|
_dataExport.timings[workload::Region::R2] = _dataExport.timings[workload::Region::R1];
|
||||||
|
_dataExport.timings[workload::Region::R3] = std::chrono::duration<float, std::milli>(timings[1]).count();
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (auto& outView : outViews) {
|
for (auto& outView : outViews) {
|
||||||
|
|
|
@ -47,18 +47,18 @@ class ControlViewsConfig : public workload::Job::Config {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(bool regulateViewRanges READ regulateViewRanges WRITE setRegulateViewRanges NOTIFY dirty)
|
Q_PROPERTY(bool regulateViewRanges READ regulateViewRanges WRITE setRegulateViewRanges NOTIFY dirty)
|
||||||
|
|
||||||
Q_PROPERTY(float r1Timing READ r1Timing)
|
Q_PROPERTY(float r1Timing READ r1Timing NOTIFY dirty)
|
||||||
Q_PROPERTY(float r2Timing READ r2Timing)
|
Q_PROPERTY(float r2Timing READ r2Timing NOTIFY dirty)
|
||||||
Q_PROPERTY(float r3Timing READ r3Timing)
|
Q_PROPERTY(float r3Timing READ r3Timing NOTIFY dirty)
|
||||||
|
|
||||||
Q_PROPERTY(float r1RangeBack READ r1RangeBack)
|
Q_PROPERTY(float r1RangeBack READ r1RangeBack NOTIFY dirty)
|
||||||
Q_PROPERTY(float r2RangeBack READ r2RangeBack)
|
Q_PROPERTY(float r2RangeBack READ r2RangeBack NOTIFY dirty)
|
||||||
Q_PROPERTY(float r3RangeBack READ r3RangeBack)
|
Q_PROPERTY(float r3RangeBack READ r3RangeBack NOTIFY dirty)
|
||||||
|
|
||||||
Q_PROPERTY(float r1RangeFront READ r1RangeFront)
|
|
||||||
Q_PROPERTY(float r2RangeFront READ r2RangeFront)
|
|
||||||
Q_PROPERTY(float r3RangeFront READ r3RangeFront)
|
|
||||||
|
|
||||||
|
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 r1MinRangeBack READ r1MinRangeBack WRITE setR1MinRangeBack NOTIFY dirty)
|
||||||
Q_PROPERTY(float r2MinRangeBack READ r2MinRangeBack WRITE setR2MinRangeBack NOTIFY dirty)
|
Q_PROPERTY(float r2MinRangeBack READ r2MinRangeBack WRITE setR2MinRangeBack NOTIFY dirty)
|
||||||
Q_PROPERTY(float r3MinRangeBack READ r3MinRangeBack WRITE setR3MinRangeBack 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 r1SpeedUpFront READ r1SpeedUpFront WRITE setR1SpeedUpFront NOTIFY dirty)
|
||||||
Q_PROPERTY(float r2SpeedUpFront READ r2SpeedUpFront WRITE setR2SpeedUpFront 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:
|
public:
|
||||||
|
|
||||||
bool regulateViewRanges() const { return data.regulateViewRanges; }
|
bool regulateViewRanges() const { return data.regulateViewRanges; }
|
||||||
void setRegulateViewRanges(bool use) { data.regulateViewRanges = use; emit dirty(); }
|
void setRegulateViewRanges(bool use) { data.regulateViewRanges = use; emit dirty(); }
|
||||||
|
|
||||||
float r1Timing() const { return data.r1Timing; }
|
float r1Timing() const { return dataExport.timings[workload::Region::R1]; }
|
||||||
float r2Timing() const { return data.r2Timing; }
|
float r2Timing() const { return dataExport.timings[workload::Region::R2]; }
|
||||||
float r3Timing() const { return data.r3Timing; }
|
float r3Timing() const { return dataExport.timings[workload::Region::R3]; }
|
||||||
|
|
||||||
float r1RangeBack() const { return data.r1RangeBack; }
|
float r1RangeBack() const { return dataExport.ranges[workload::Region::R1].x; }
|
||||||
float r2RangeBack() const { return data.r2RangeBack; }
|
float r2RangeBack() const { return dataExport.ranges[workload::Region::R2].x; }
|
||||||
float r3RangeBack() const { return data.r3RangeBack; }
|
float r3RangeBack() const { return dataExport.ranges[workload::Region::R3].x; }
|
||||||
|
|
||||||
float r1RangeFront() const { return data.r1RangeFront; }
|
float r1RangeFront() const { return dataExport.ranges[workload::Region::R1].y; }
|
||||||
float r2RangeFront() const { return data.r2RangeFront; }
|
float r2RangeFront() const { return dataExport.ranges[workload::Region::R2].y; }
|
||||||
float r3RangeFront() const { return data.r3RangeFront; }
|
float r3RangeFront() const { return dataExport.ranges[workload::Region::R3].y; }
|
||||||
|
|
||||||
struct Data {
|
struct Data {
|
||||||
float r1Timing
|
|
||||||
float r2Timing
|
|
||||||
float r3Timing
|
|
||||||
|
|
||||||
bool regulateViewRanges{ true };
|
bool regulateViewRanges{ true };
|
||||||
|
|
||||||
} data;
|
} 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:
|
signals:
|
||||||
void dirty();
|
void dirty();
|
||||||
};
|
};
|
||||||
|
@ -149,13 +152,14 @@ public:
|
||||||
void configure(const Config& config);
|
void configure(const Config& config);
|
||||||
void run(const workload::WorkloadContextPointer& runContext, const Input& inputs, Output& outputs);
|
void run(const workload::WorkloadContextPointer& runContext, const Input& inputs, Output& outputs);
|
||||||
|
|
||||||
std::array<glm::vec2, workload::Region::NUM_VIEW_REGIONS + 1> regionBackFronts;
|
std::array<glm::vec2, workload::Region::NUM_VIEW_REGIONS> regionBackFronts;
|
||||||
std::array<Regulator, workload::Region::NUM_VIEW_REGIONS + 1> regionRegulators;
|
std::array<Regulator, workload::Region::NUM_VIEW_REGIONS> regionRegulators;
|
||||||
|
|
||||||
void regulateViews(workload::Views& views, const workload::Timings& timings);
|
void regulateViews(workload::Views& views, const workload::Timings& timings);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Config::Data _data;
|
Config::Data _data;
|
||||||
|
Config::DataExport _dataExport;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_GameWorkload_h
|
#endif // hifi_GameWorkload_h
|
||||||
|
|
|
@ -15,6 +15,7 @@ import "qrc:///qml/styles-uit"
|
||||||
import "qrc:///qml/controls-uit" as HifiControls
|
import "qrc:///qml/controls-uit" as HifiControls
|
||||||
import "../render/configSlider"
|
import "../render/configSlider"
|
||||||
import "../lib/jet/qml" as Jet
|
import "../lib/jet/qml" as Jet
|
||||||
|
import "../lib/plotperf"
|
||||||
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
@ -66,6 +67,7 @@ Rectangle {
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
|
id: stats
|
||||||
spacing: 5
|
spacing: 5
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
|
@ -119,6 +121,7 @@ Rectangle {
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
visible: !Workload.getConfig("controlViews")["regulateViewRanges"]
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
Column {
|
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 {}
|
Separator {}
|
||||||
HifiControls.Label {
|
HifiControls.Label {
|
||||||
text: "Numbers:";
|
text: "Numbers:";
|
||||||
|
@ -188,7 +271,8 @@ Rectangle {
|
||||||
}
|
}
|
||||||
HifiControls.Label {
|
HifiControls.Label {
|
||||||
text: "R3= " + Workload.getConfig("regionState")["numR3"];
|
text: "R3= " + Workload.getConfig("regionState")["numR3"];
|
||||||
}
|
}
|
||||||
|
|
||||||
Separator {}
|
Separator {}
|
||||||
HifiControls.Label {
|
HifiControls.Label {
|
||||||
text: "Display"
|
text: "Display"
|
||||||
|
|
Loading…
Reference in a new issue