mirror of
https://github.com/overte-org/overte.git
synced 2025-04-07 10:52:23 +02:00
221 lines
6.3 KiB
QML
221 lines
6.3 KiB
QML
import QtQuick 2.5
|
|
import QtQuick.Controls 1.4
|
|
import Qt.labs.settings 1.0
|
|
|
|
Rectangle {
|
|
id: root
|
|
width: parent ? parent.width : 100
|
|
height: parent ? parent.height : 100
|
|
|
|
signal sendToScript(var message);
|
|
property var values: [];
|
|
property alias destination: addressLine.text
|
|
readonly property string nullDestination: "169.254.0.1"
|
|
property bool running: false
|
|
|
|
function statusReport() {
|
|
console.log("PERF status connected: " + AddressManager.isConnected);
|
|
}
|
|
|
|
Timer {
|
|
id: readyStateTimer
|
|
interval: 500
|
|
repeat: true
|
|
running: false
|
|
onTriggered: {
|
|
if (!root.running) {
|
|
stop();
|
|
return;
|
|
}
|
|
|
|
if (AddressManager.isConnected) {
|
|
console.log("PERF already connected, disconnecting");
|
|
AddressManager.handleLookupString(root.nullDestination);
|
|
return;
|
|
}
|
|
|
|
stop();
|
|
console.log("PERF disconnected, moving to target " + root.destination);
|
|
AddressManager.handleLookupString(root.destination);
|
|
|
|
// If we've arrived, start running the test
|
|
console.log("PERF starting timers and frame timing");
|
|
FrameTimings.start();
|
|
rotationTimer.start();
|
|
stopTimer.start();
|
|
}
|
|
}
|
|
|
|
|
|
function startTest() {
|
|
console.log("PERF startTest()");
|
|
if (!root.running) {
|
|
root.running = true
|
|
readyStateTimer.start();
|
|
}
|
|
}
|
|
|
|
function stopTest() {
|
|
console.log("PERF stopTest()");
|
|
if (root.running) {
|
|
root.running = false;
|
|
stopTimer.stop();
|
|
rotationTimer.stop();
|
|
FrameTimings.finish();
|
|
root.values = FrameTimings.getValues();
|
|
AddressManager.handleLookupString(root.nullDestination);
|
|
resultGraph.requestPaint();
|
|
console.log("PERF Value Count: " + root.values.length);
|
|
console.log("PERF Max: " + FrameTimings.max);
|
|
console.log("PERF Min: " + FrameTimings.min);
|
|
console.log("PERF Avg: " + FrameTimings.mean);
|
|
console.log("PERF StdDev: " + FrameTimings.standardDeviation);
|
|
}
|
|
}
|
|
|
|
function yaw(a) {
|
|
var y = -Math.sin( a / 2.0 );
|
|
var w = Math.cos( a / 2.0 );
|
|
var l = Math.sqrt((y * y) + (w * w));
|
|
return Qt.quaternion(w / l, 0, y / l, 0);
|
|
}
|
|
|
|
function rotate() {
|
|
MyAvatar.setOrientationVar(yaw(Date.now() / 1000));
|
|
}
|
|
|
|
|
|
Timer {
|
|
id: stopTimer
|
|
interval: 30 * 1000
|
|
repeat: false
|
|
running: false
|
|
onTriggered: stopTest();
|
|
}
|
|
|
|
Timer {
|
|
id: rotationTimer
|
|
interval: 100
|
|
repeat: true
|
|
running: false
|
|
onTriggered: rotate();
|
|
}
|
|
|
|
Row {
|
|
id: row
|
|
anchors { left: parent.left; right: parent.right; top: parent.top; margins: 16 }
|
|
spacing: 8
|
|
Button {
|
|
text: root.running ? "Stop" : "Run"
|
|
onClicked: root.running ? stopTest() : startTest();
|
|
}
|
|
Button {
|
|
text: "Disconnect"
|
|
onClicked: AddressManager.handleLookupString(root.nullDestination);
|
|
}
|
|
Button {
|
|
text: "Connect"
|
|
onClicked: AddressManager.handleLookupString(root.destination);
|
|
}
|
|
Button {
|
|
text: "Status"
|
|
onClicked: statusReport();
|
|
}
|
|
}
|
|
|
|
TextField {
|
|
id: addressLine
|
|
anchors {
|
|
left: parent.left; right: parent.right;
|
|
top: row.bottom; margins: 16;
|
|
}
|
|
text: "Playa"
|
|
onTextChanged: console.log("PERF new target " + text);
|
|
}
|
|
|
|
Settings {
|
|
category: "Qml.Performance.RenderTest"
|
|
property alias destination: addressLine.text
|
|
}
|
|
|
|
|
|
// Rectangle {
|
|
// anchors { left: parent.left; right: parent.right; top: row.bottom; topMargin: 8; bottom: parent.bottom; }
|
|
// //anchors.fill: parent
|
|
// color: "#7fff0000"
|
|
// }
|
|
|
|
// Return the maximum value from a set of values
|
|
function vv(i, max) {
|
|
var perValue = values.length / max;
|
|
var start = Math.floor(perValue * i);
|
|
var end = Math.min(values.length, Math.floor(start + perValue));
|
|
var result = 0;
|
|
for (var j = start; j <= end; ++j) {
|
|
result = Math.max(result, values[j]);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
Canvas {
|
|
id: resultGraph
|
|
anchors { left: parent.left; right: parent.right; top: addressLine.bottom; margins: 16; bottom: parent.bottom; }
|
|
property real maxValue: 200;
|
|
property real perFrame: 10000;
|
|
property real k1: (5 / maxValue) * height;
|
|
property real k2: (10 / maxValue) * height;
|
|
property real k3: (100 / maxValue) * height;
|
|
|
|
onPaint: {
|
|
var ctx = getContext("2d");
|
|
if (values.length === 0) {
|
|
ctx.fillStyle = Qt.rgba(1, 0, 0, 1);
|
|
ctx.fillRect(0, 0, width, height);
|
|
return;
|
|
}
|
|
|
|
|
|
//ctx.setTransform(1, 0, 0, -1, 0, 0);
|
|
ctx.fillStyle = Qt.rgba(0, 0, 0, 1);
|
|
ctx.fillRect(0, 0, width, height);
|
|
|
|
ctx.strokeStyle= "gray";
|
|
ctx.lineWidth="1";
|
|
ctx.beginPath();
|
|
for (var i = 0; i < width; ++i) {
|
|
var value = vv(i, width); //values[Math.min(i, values.length - 1)];
|
|
value /= 10000;
|
|
value /= maxValue;
|
|
ctx.moveTo(i, height);
|
|
ctx.lineTo(i, height - (height * value));
|
|
}
|
|
ctx.stroke();
|
|
|
|
ctx.strokeStyle= "green";
|
|
ctx.lineWidth="2";
|
|
ctx.beginPath();
|
|
var lineHeight = height - k1;
|
|
ctx.moveTo(0, lineHeight);
|
|
ctx.lineTo(width, lineHeight);
|
|
ctx.stroke();
|
|
|
|
ctx.strokeStyle= "yellow";
|
|
ctx.lineWidth="2";
|
|
ctx.beginPath();
|
|
lineHeight = height - k2;
|
|
ctx.moveTo(0, lineHeight);
|
|
ctx.lineTo(width, lineHeight);
|
|
ctx.stroke();
|
|
|
|
ctx.strokeStyle= "red";
|
|
ctx.lineWidth="2";
|
|
ctx.beginPath();
|
|
lineHeight = height - k3;
|
|
ctx.moveTo(0, lineHeight);
|
|
ctx.lineTo(width, lineHeight);
|
|
ctx.stroke();
|
|
|
|
}
|
|
}
|
|
}
|
|
|