From 5ab21588f23180a32ae75656c7890be2dd7aee24 Mon Sep 17 00:00:00 2001
From: Zach Pomerantz <zach@highfidelity.io>
Date: Mon, 14 Mar 2016 14:42:11 -0700
Subject: [PATCH 1/2] Add gpu timer to background

---
 .../render-utils/src/RenderDeferredTask.cpp    |  4 ++++
 .../render-utils/src/RenderDeferredTask.h      | 18 +++++++++++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp
index f87ca26df1..ba5b2a59d5 100755
--- a/libraries/render-utils/src/RenderDeferredTask.cpp
+++ b/libraries/render-utils/src/RenderDeferredTask.cpp
@@ -291,6 +291,7 @@ void DrawBackgroundDeferred::run(const SceneContextPointer& sceneContext, const
     RenderArgs* args = renderContext->args;
     doInBatch(args->_context, [&](gpu::Batch& batch) {
         args->_batch = &batch;
+        _gpuTimer.begin(batch);
 
         auto lightingFBO = DependencyManager::get<FramebufferCache>()->getLightingFramebuffer();
 
@@ -310,8 +311,11 @@ void DrawBackgroundDeferred::run(const SceneContextPointer& sceneContext, const
         batch.setViewTransform(viewMat);
 
         renderItems(sceneContext, renderContext, inItems);
+        _gpuTimer.end(batch);
     });
     args->_batch = nullptr;
+
+    std::static_pointer_cast<Config>(renderContext->jobConfig)->gpuTime = _gpuTimer.getAverage();
 }
 
 void Blit::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h
index bbcaec34f3..0125ef79fe 100755
--- a/libraries/render-utils/src/RenderDeferredTask.h
+++ b/libraries/render-utils/src/RenderDeferredTask.h
@@ -82,11 +82,27 @@ protected:
     static gpu::PipelinePointer _opaquePipeline; //lazy evaluation hence mutable
 };
 
+class DrawBackgroundDeferredConfig : public render::Job::Config {
+    Q_OBJECT
+    Q_PROPERTY(double gpuTime READ getGpuTime)
+public:
+    double getGpuTime() { return gpuTime; }
+
+protected:
+    friend class DrawBackgroundDeferred;
+    double gpuTime;
+};
+
 class DrawBackgroundDeferred {
 public:
+    using Config = DrawBackgroundDeferredConfig;
+    using JobModel = render::Job::ModelI<DrawBackgroundDeferred, render::ItemBounds, Config>;
+
+    void configure(const Config& config) {}
     void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext, const render::ItemBounds& inItems);
 
-    using JobModel = render::Job::ModelI<DrawBackgroundDeferred, render::ItemBounds>;
+protected:
+    gpu::RangeTimer _gpuTimer;
 };
 
 class DrawOverlay3DConfig : public render::Job::Config {

From 0ea70f234fd83ac9dfe7bd3bc327ee5e81001dcc Mon Sep 17 00:00:00 2001
From: Zach Pomerantz <zach@highfidelity.io>
Date: Mon, 14 Mar 2016 17:49:17 -0700
Subject: [PATCH 2/2] Add bg gpu timer display

---
 examples/utilities/tools/render/BG.qml     | 22 ++++++++++++++++++++++
 examples/utilities/tools/render/debugBG.js | 21 +++++++++++++++++++++
 2 files changed, 43 insertions(+)
 create mode 100644 examples/utilities/tools/render/BG.qml
 create mode 100644 examples/utilities/tools/render/debugBG.js

diff --git a/examples/utilities/tools/render/BG.qml b/examples/utilities/tools/render/BG.qml
new file mode 100644
index 0000000000..40ce5a89fe
--- /dev/null
+++ b/examples/utilities/tools/render/BG.qml
@@ -0,0 +1,22 @@
+//
+//  BG.qml
+//  examples/utilities/tools/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
+
+Item {
+    Timer {
+        running: true; repeat: true
+        onTriggered: time.text = Render.getConfig("DrawBackgroundDeferred").gpuTime
+    }
+
+    Text { id: time; font.pointSize: 20 }
+}
+
diff --git a/examples/utilities/tools/render/debugBG.js b/examples/utilities/tools/render/debugBG.js
new file mode 100644
index 0000000000..21fe024c32
--- /dev/null
+++ b/examples/utilities/tools/render/debugBG.js
@@ -0,0 +1,21 @@
+//
+//  debugBG.js
+//  examples/utilities/tools/render
+//
+//  Zach Pomerantz, created on 1/27/2016.
+//  Copyright 2016 High Fidelity, Inc.
+//
+//  Distributed under the Apache License, Version 2.0.
+//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
+//
+
+// Set up the qml ui
+var qml = Script.resolvePath('BG.qml');
+var window = new OverlayWindow({
+    title: 'Background Timer',
+    source: qml,
+    width: 300
+});
+window.setPosition(25, 50);
+window.closed.connect(function() { Script.stop(); });
+