mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-11 05:58:58 +08:00
Add a QML item that shows the FPS
This commit is contained in:
parent
39072a1498
commit
f86f4d184b
81
resources/qml/FPSItem.qml
Normal file
81
resources/qml/FPSItem.qml
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Window 2.2
|
||||||
|
import UM 1.3 as UM
|
||||||
|
|
||||||
|
// This is an QML item that shows the FPS and a running average of the FPS.
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
id: base
|
||||||
|
property alias backgroundColor: background.color
|
||||||
|
property alias textColor: fpsText.color
|
||||||
|
|
||||||
|
property int numMeasurementsToAverage: 3
|
||||||
|
|
||||||
|
width: fpsText.contentWidth + UM.Theme.getSize("default_margin").height
|
||||||
|
height: fpsText.contentHeight + UM.Theme.getSize("default_margin").height
|
||||||
|
|
||||||
|
Rectangle
|
||||||
|
{
|
||||||
|
id: background
|
||||||
|
|
||||||
|
// We use a trick here to figure out how often we can get a redraw triggered.
|
||||||
|
// By adding a rotating rectangle, we can increase a counter by one every time we get notified.
|
||||||
|
// After that, we trigger a timer once every second to look at that number.
|
||||||
|
property int frameCounter: 0
|
||||||
|
property int averageFrameCounter: 0
|
||||||
|
property int counter: 0
|
||||||
|
property int fps: 0
|
||||||
|
property real averageFps: 0.0
|
||||||
|
|
||||||
|
color: UM.Theme.getColor("primary")
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
height: parent.height
|
||||||
|
|
||||||
|
Rectangle
|
||||||
|
{
|
||||||
|
width: 0
|
||||||
|
height: 0
|
||||||
|
NumberAnimation on rotation
|
||||||
|
{
|
||||||
|
from: 0
|
||||||
|
to: 360
|
||||||
|
duration: 1000
|
||||||
|
loops: Animation.Infinite
|
||||||
|
}
|
||||||
|
onRotationChanged: parent.frameCounter++;
|
||||||
|
visible: false
|
||||||
|
}
|
||||||
|
|
||||||
|
Text
|
||||||
|
{
|
||||||
|
id: fpsText
|
||||||
|
anchors.fill:parent
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
color: UM.Theme.getColor("text")
|
||||||
|
font: UM.Theme.getFont("default")
|
||||||
|
text: "Ø " + parent.averageFps + " | " + parent.fps + " fps"
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer
|
||||||
|
{
|
||||||
|
interval: 1000
|
||||||
|
repeat: true
|
||||||
|
running: true
|
||||||
|
onTriggered:
|
||||||
|
{
|
||||||
|
parent.averageFrameCounter += parent.frameCounter;
|
||||||
|
parent.fps = parent.frameCounter;
|
||||||
|
parent.counter++;
|
||||||
|
parent.frameCounter = 0;
|
||||||
|
if (parent.counter >= base.numMeasurementsToAverage)
|
||||||
|
{
|
||||||
|
parent.averageFps = (parent.averageFrameCounter / parent.counter).toFixed(2)
|
||||||
|
parent.averageFrameCounter = 0;
|
||||||
|
parent.counter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user