armory/Sources/armory/trait/internal/Console.hx

127 lines
3.9 KiB
Haxe
Raw Normal View History

2016-07-21 17:45:39 +02:00
package armory.trait.internal;
import iron.Trait;
#if WITH_PROFILE
2016-07-22 23:25:07 +02:00
import kha.Scheduler;
2016-08-25 00:26:01 +02:00
import iron.data.RenderPath;
import iron.object.CameraObject;
2016-07-21 17:45:39 +02:00
import zui.Zui;
import zui.Id;
#end
class Console extends Trait {
#if (!WITH_PROFILE)
public function new() { super(); }
#else
var ui:Zui;
var path:RenderPath;
2016-07-22 23:25:07 +02:00
var lastTime = 0.0;
var frameTime = 0.0;
var totalTime = 0.0;
var frames = 0;
var frameTimeAvg = 0.0;
2016-08-07 23:12:14 +02:00
var frameTimeAvgMin = 0.0;
var frameTimeAvgMax = 0.0;
2016-07-22 23:25:07 +02:00
var renderTime = 0.0;
var renderTimeAvg = 0.0;
var updateTime = 0.0;
var updateTimeAvg = 0.0;
var physTime = 0.0;
var physTimeAvg = 0.0;
2016-07-21 17:45:39 +02:00
public function new() {
super();
var font = kha.Assets.fonts.droid_sans;
2016-07-22 23:25:07 +02:00
ui = new Zui(font, 17, 16, 0, 1.0, 2.0);
2016-07-21 17:45:39 +02:00
notifyOnAdd(add);
notifyOnRender2D(render2D);
2016-07-22 23:25:07 +02:00
notifyOnUpdate(update);
2016-07-21 17:45:39 +02:00
}
function add() {
2016-08-25 00:26:01 +02:00
path = cast(object, CameraObject).renderPath;
2016-07-21 17:45:39 +02:00
}
function render2D(g:kha.graphics2.Graphics) {
g.end();
ui.begin(g);
2016-07-22 23:25:07 +02:00
if (ui.window(Id.window(), 0, 0, 185, iron.App.h)) {
if (ui.node(Id.node(), "Profile (ms)", 0, true)) {
2016-08-07 23:12:14 +02:00
var avg = Math.round(frameTimeAvg * 10000) / 10;
var avgMin = Math.round(frameTimeAvgMin * 10000) / 10;
var avgMax = Math.round(frameTimeAvgMax * 10000) / 10;
ui.text('frame: $avg ($avgMin/$avgMax)');
2016-07-22 23:25:07 +02:00
var gpuTime = frameTimeAvg - renderTimeAvg - updateTimeAvg;
if (gpuTime < renderTimeAvg) gpuTime = renderTimeAvg;
ui.text("gpu: " + Math.round(gpuTime * 10000) / 10);
ui.text("render: " + Math.round(renderTimeAvg * 10000) / 10);
ui.text("update: " + Math.round(updateTimeAvg * 10000) / 10);
ui.indent();
ui.text("phys: " + Math.round(physTimeAvg * 10000) / 10);
ui.text("anim: 0.0");
ui.unindent();
}
ui.separator();
2016-07-31 20:17:11 +02:00
if (ui.node(Id.node(), "Render Path", 0, false)) {
2016-07-22 23:25:07 +02:00
ui.text("draw calls: " + RenderPath.drawCalls);
2016-08-25 00:26:01 +02:00
ui.text("render targets: " + path.data.pipeline.data.render_targets.length);
2016-07-22 23:25:07 +02:00
for (i in 0...path.passNames.length) {
path.passEnabled[i] = ui.check(Id.nest(Id.check(), i), path.passNames[i], path.passEnabled[i]);
}
}
2016-07-31 20:17:11 +02:00
ui.separator();
if (ui.node(Id.node(), "Inspector", 0, false)) {
2016-08-29 09:56:34 +02:00
for (o in iron.Scene.active.meshes) {
2016-08-23 22:55:46 +02:00
ui.text(o.name + " (" + Std.int(o.transform.absx() * 100) / 100 + ", " + Std.int(o.transform.absy() * 100) / 100 + ", " + Std.int(o.transform.absz() * 100) / 100 + ")");
2016-07-31 20:17:11 +02:00
}
}
2016-07-21 17:45:39 +02:00
}
ui.end();
g.begin(false);
2016-07-22 23:25:07 +02:00
#if WITH_PROFILE
totalTime += frameTime;
renderTime += iron.App.renderTime;
frames++;
if (totalTime > 1.0) {
2016-08-07 23:12:14 +02:00
var t = totalTime / frames;
// Second frame
if (frameTimeAvg > 0) {
if (t < frameTimeAvgMin || frameTimeAvgMin == 0) frameTimeAvgMin = t;
if (t > frameTimeAvgMax || frameTimeAvgMax == 0) frameTimeAvgMax = t;
}
frameTimeAvg = t;
2016-07-22 23:25:07 +02:00
renderTimeAvg = renderTime / frames;
updateTimeAvg = updateTime / frames;
physTimeAvg = physTime / frames;
2016-08-07 23:12:14 +02:00
2016-07-22 23:25:07 +02:00
totalTime = 0;
renderTime = 0;
updateTime = 0;
physTime = 0;
frames = 0;
}
frameTime = Scheduler.realTime() - lastTime;
lastTime = Scheduler.realTime();
2016-08-04 22:38:56 +02:00
#end
}
function update() {
#if WITH_PROFILE
updateTime += iron.App.updateTime;
2016-08-11 22:24:45 +02:00
#if WITH_PHYSICS
2016-08-04 22:38:56 +02:00
physTime += PhysicsWorld.physTime;
2016-08-11 22:24:45 +02:00
#end
2016-07-22 23:25:07 +02:00
#end
}
2016-07-21 17:45:39 +02:00
#end
}