Tidy up frame rate display in video examples

* Use a Column element to position QML and video frame rate counters.
* When using small-screen layouts, hide frame rate counters when dialogs
  or menus are displayed.
* Do not display instantaneous frame rate.  If changes in this rate
  trigger a repaint, then the rate itself is changed.  If the repaint
  occurs in less time than the QElapsedTimer resolution, the displayed
  instantaneous rate is always zero.
* Add a label, so it is clear which is the QML repaint rate, and which
  is the video frame rate.

Change-Id: Ie58ab162ab44bd7f1c4b297eed929b9baa73552c
Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com>
This commit is contained in:
Gareth Stockwell
2012-02-06 15:40:49 +00:00
committed by Qt by Nokia
parent b6f54c8833
commit c1ec175b24
7 changed files with 112 additions and 54 deletions

View File

@@ -55,7 +55,7 @@ Rectangle {
border.width: 1
border.color: "yellow"
width: 3.5 * root.textSize
width: 5.5 * root.textSize
height: 3.0 * root.textSize
color: "black"
opacity: 0.5
@@ -74,20 +74,22 @@ Rectangle {
samplingInterval: root.enabled ? root.samplingInterval : 0
onAverageFrequencyChanged: {
if (root.logging) trace()
instantaneousFrequencyText.text = monitor.instantaneousFrequency.toFixed(2)
averageFrequencyText.text = monitor.averageFrequency.toFixed(2)
}
}
Text {
id: instantaneousFrequencyText
id: labelText
anchors {
right: parent.right
left: parent.left
top: parent.top
margins: 10
}
color: root.textColor
font.pixelSize: root.textSize
font.pixelSize: 0.6 * root.textSize
text: root.label
width: root.width - 2*anchors.margins
elide: Text.ElideRight
}
Text {

View File

@@ -46,65 +46,96 @@ Rectangle {
property bool logging: true
property bool displayed: true
property bool videoActive
property int samplingInterval: 500
property color textColor: "yellow"
property int textSize: 28
property int margins: 5
property bool enabled: true
color: "transparent"
// This should ensure that the monitor is on top of all other content
z: 999
Loader {
id: videoFrameRateItemLoader
function init() {
source = "../frequencymonitor/FrequencyItem.qml"
item.label = "videoFrameRate"
item.parent = root
item.anchors.left = root.left
item.anchors.top = root.top
item.anchors.margins = root.margins
item.logging = root.logging
item.displayed = root.displayed
videoFrameRateActiveConnections.target = item
}
Connections {
id: videoFrameRateActiveConnections
ignoreUnknownSignals: true
onActiveChanged: root.videoActive = videoFrameRateActiveConnections.target.active
Column {
id: column
anchors {
fill: root
margins: 10
}
spacing: 10
}
Loader {
id: qmlFrameRateItemLoader
function init() {
source = "../frequencymonitor/FrequencyItem.qml"
item.label = "qmlFrameRate"
item.parent = root
item.anchors.left = root.left
item.anchors.bottom = root.bottom
item.anchors.margins = root.margins
item.logging = root.logging
item.displayed = root.displayed
}
QtObject {
id: d
property Item qmlFrameRateItem: null
property Item videoFrameRateItem: null
}
Connections {
id: videoFrameRateActiveConnections
ignoreUnknownSignals: true
onActiveChanged: root.videoActive = videoFrameRateActiveConnections.target.active
}
states: [
State {
name: "hidden"
PropertyChanges {
target: root
opacity: 0
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "opacity"
easing.type: Easing.OutQuart
duration: 500
}
}
]
state: enabled ? "baseState" : "hidden"
function createQmlFrameRateItem() {
var component = Qt.createComponent("../frequencymonitor/FrequencyItem.qml")
if (component.status == Component.Ready)
d.qmlFrameRateItem = component.createObject(column, { label: "QML frame rate",
displayed: root.displayed,
logging: root.logging
})
}
function createVideoFrameRateItem() {
var component = Qt.createComponent("../frequencymonitor/FrequencyItem.qml")
if (component.status == Component.Ready)
d.videoFrameRateItem = component.createObject(column, { label: "Video frame rate",
displayed: root.displayed,
logging: root.logging
})
videoFrameRateActiveConnections.target = d.videoFrameRateItem
}
function init() {
videoFrameRateItemLoader.init()
qmlFrameRateItemLoader.init()
createQmlFrameRateItem()
createVideoFrameRateItem()
}
function videoFramePainted() {
videoFrameRateItemLoader.item.notify()
if (d.videoFrameRateItem)
d.videoFrameRateItem.notify()
}
function qmlFramePainted() {
qmlFrameRateItemLoader.item.notify()
if (d.qmlFrameRateItem)
d.qmlFrameRateItem.notify()
}
onVideoActiveChanged: {
videoFrameRateItemLoader.item.active = root.videoActive
if (d.videoFrameRateItem)
d.videoFrameRateItem.active = root.videoActive
}
}