//
//  stats.qml
//  examples/utilities/render
//
//  Created by Zach Pomerantz on 2/8/2016
//  Copyright 2016 High Fidelity, Inc.
//
//  Distributed under the Apache License, Version 2.0.
//  See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html
//
import QtQuick 2.5
import QtQuick.Controls 1.4
import "../lib/plotperf"

Item {
    id: statsUI
    anchors.fill:parent

    Column {
        id: stats
        spacing: 8
        anchors.fill:parent

        property var config: Render.getConfig("Stats")

        function evalEvenHeight() {
            // Why do we have to do that manually ? cannot seem to find a qml / anchor / layout mode that does that ?
            return (height - spacing * (children.length - 1)) / children.length
        }

        PlotPerf {
            title: "Triangles"
            height: parent.evalEvenHeight()
            object: stats.config
            valueScale: 1000
            valueUnit: "K"
            plots: [
                {
                    prop: "frameTriangleCount",
                    label: "Triangles",
                    color: "#1AC567"
                },
                {
                    prop: "frameTriangleRate",
                    label: "rate",
                    color: "#E2334D",
                    scale: 0.001,
                    unit: "MT/s"
                }
            ]
        }
        PlotPerf {
            title: "Drawcalls"
            height: parent.evalEvenHeight()
            object: stats.config
            plots: [
                {
                    prop: "frameAPIDrawcallCount",
                    label: "API Drawcalls",
                    color: "#00B4EF"
                },
                {
                    prop: "frameDrawcallCount",
                    label: "GPU Drawcalls",
                    color: "#1AC567"
                },
                {
                    prop: "frameDrawcallRate",
                    label: "rate",
                    color: "#E2334D",
                    scale: 0.001,
                    unit: "K/s"
                }
            ]
        }

        PlotPerf {
            title: "State Changes"
            height: parent.evalEvenHeight()
            object: stats.config
            plots: [
                {
                    prop: "frameTextureCount",
                    label: "Textures",
                    color: "#00B4EF"
                },
                {
                    prop: "frameSetPipelineCount",
                    label: "Pipelines",
                    color: "#E2334D"
                },
                {
                    prop: "frameSetInputFormatCount",
                    label: "Input Formats",
                    color: "#1AC567"
                }
            ]
        }

        property var drawOpaqueConfig: Render.getConfig("RenderMainView.DrawOpaqueDeferred")
        property var drawTransparentConfig: Render.getConfig("RenderMainView.DrawTransparentDeferred")
        property var drawLightConfig: Render.getConfig("RenderMainView.DrawLight")

        PlotPerf {
            title: "Items"
            height: parent.evalEvenHeight()
            object: parent.drawOpaqueConfig

            plots: [
                {
                    object: parent.drawOpaqueConfig,
                    prop: "numDrawn",
                    label: "Opaques",
                    color: "#1AC567"
                },
                {
                    object: Render.getConfig("RenderMainView.DrawTransparentDeferred"),
                    prop: "numDrawn",
                    label: "Translucents",
                    color: "#00B4EF"
                },
                {
                    object: Render.getConfig("RenderMainView.DrawLight"),
                    prop: "numDrawn",
                    label: "Lights",
                    color: "#FED959"
                }
            ]
        }

        PlotPerf {
           title: "Timing"
           height: parent.evalEvenHeight()
           object: parent.drawOpaqueConfig
           valueUnit: "ms"
           valueScale: 1
           valueNumDigits: "2"
           plots: [
               {
                   object: Render.getConfig("RenderMainView.DrawOpaqueDeferred"),
                   prop: "cpuRunTime",
                   label: "Opaques",
                   color: "#1AC567"
               },
               {
                   object: Render.getConfig("RenderMainView.DrawTransparentDeferred"),
                   prop: "cpuRunTime",
                   label: "Translucents",
                   color: "#00B4EF"
               },
               {
                   object: Render.getConfig("RenderMainView.RenderDeferred"),
                   prop: "cpuRunTime",
                   label: "Lighting",
                   color: "#FED959"
               },
               {
                   object: Render.getConfig("RenderMainView.RenderDeferredTask"),
                   prop: "cpuRunTime",
                   label: "RenderFrame",
                   color: "#E2334D"
               }
           ]
        }
    }

}