summaryrefslogtreecommitdiffstats
path: root/examples/multimedia/video/qmlvideo/performancemonitor/PerformanceItem.qml
blob: 5b501b104e1c98004fbcdde80d7e3d741d4a9880 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick

Rectangle {
    id: root
    property bool logging: true
    property bool displayed: true
    property bool videoActive
    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

    Column {
        id: column
        anchors {
            fill: root
            margins: 10
        }
        spacing: 10
    }

    QtObject {
        id: d
        property Item qmlFrameRateItem: null
        property Item videoFrameRateItem: null
    }

    Connections {
        id: videoFrameRateActiveConnections
        ignoreUnknownSignals: true
        function onActiveChanged() { root.videoActive = videoFrameRateActiveConnections.target.active }
    }

    states: [
        State {
            name: "hidden"
            PropertyChanges {
                root.opacity: 0
            }
        }
    ]

    transitions: [
        Transition {
            from: "*"
            to: "*"
            NumberAnimation {
                properties: "opacity"
                easing.type: Easing.OutQuart
                duration: 500
            }
        }
    ]

    state: enabled ? "baseState" : "hidden"

    function createQmlFrameRateItem() {
        let component = Qt.createComponent("frequencymonitor", "FrequencyItem")
        if (component.status === Component.Ready)
            d.qmlFrameRateItem = component.createObject(column, { label: qsTr("QML frame rate"),
                                                                  displayed: root.displayed,
                                                                  logging: root.logging
                                                                });
    }

    function createVideoFrameRateItem() {
        let component = Qt.createComponent("frequencymonitor", "FrequencyItem")
        if (component.status === Component.Ready)
            d.videoFrameRateItem = component.createObject(column, { label: qsTr("Video frame rate"),
                                                                    displayed: root.displayed,
                                                                    logging: root.logging
                                                                  });
        videoFrameRateActiveConnections.target = d.videoFrameRateItem
    }


    function init() {
        createQmlFrameRateItem()
        createVideoFrameRateItem()
    }

    function videoFramePainted() {
        d.videoFrameRateItem?.notify()
    }

    function qmlFramePainted() {
        d.qmlFrameRateItem?.notify()
    }

    onVideoActiveChanged: {
        if (d.videoFrameRateItem)
            d.videoFrameRateItem.active = root.videoActive
    }
}