Console.hx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package arm.plugin;
  2. import kha.Image;
  3. import kha.Scheduler;
  4. import zui.Zui;
  5. import zui.Id;
  6. class Console {
  7. static var first = true;
  8. static var lastTime = 0.0;
  9. static var frameTime = 0.0;
  10. static var totalTime = 0.0;
  11. static var frames = 0;
  12. static var frameTimeAvg = 0.0;
  13. static var graph:Image = null;
  14. static var graphA:Image = null;
  15. static var graphB:Image = null;
  16. static var lrow = [1/2, 1/2];
  17. static var haxeTrace:Dynamic->haxe.PosInfos->Void = null;
  18. static var lastTraces:Array<String> = [''];
  19. static function consoleTrace(v:Dynamic, ?inf:haxe.PosInfos) {
  20. lastTraces.unshift(Std.string(v));
  21. if (lastTraces.length > 10) lastTraces.pop();
  22. haxeTrace(v, inf);
  23. }
  24. static function updateGraph() {
  25. if (graph == null) {
  26. graphA = Image.createRenderTarget(280, 33);
  27. graphB = Image.createRenderTarget(280, 33);
  28. graph = graphA;
  29. }
  30. else graph = graph == graphA ? graphB : graphA;
  31. var graphPrev = graph == graphA ? graphB : graphA;
  32. graph.g2.begin(true, 0x00000000);
  33. graph.g2.color = 0xffffffff;
  34. graph.g2.drawImage(graphPrev, -3, 0);
  35. var avg = Math.round(frameTimeAvg * 1000);
  36. var miss = avg > 16.7 ? (avg - 16.7) / 16.7 : 0.0;
  37. graph.g2.color = kha.Color.fromFloats(miss, 1 - miss, 0, 1.0);
  38. graph.g2.fillRect(280 - 3, 33 - avg, 3, avg);
  39. graph.g2.color = 0xff000000;
  40. graph.g2.fillRect(280 - 3, 33 - 17, 3, 1);
  41. graph.g2.end();
  42. }
  43. public static function render(ui:Zui) {
  44. if (first) {
  45. iron.App.notifyOnRender2D(tick);
  46. first = false;
  47. if (haxeTrace == null) {
  48. haxeTrace = haxe.Log.trace;
  49. haxe.Log.trace = consoleTrace;
  50. }
  51. }
  52. var avg = Math.round(frameTimeAvg * 10000) / 10;
  53. var fpsAvg = avg > 0 ? Math.round(1000 / avg) : 0;
  54. if (ui.panel(Id.handle({selected: false}), 'Performance')) {
  55. if (graph != null) ui.image(graph);
  56. ui.indent();
  57. ui.row(lrow);
  58. ui.text('Frame');
  59. ui.text('$avg ms / $fpsAvg fps', Align.Right);
  60. ui.unindent();
  61. }
  62. // if (ui.panel(Id.handle({selected: false}), 'Render Targets')) {
  63. // ui.indent();
  64. // #if (kha_opengl || kha_webgl)
  65. // ui.imageInvertY = true;
  66. // #end
  67. // for (rt in iron.RenderPath.active.renderTargets) {
  68. // ui.text(rt.raw.name);
  69. // if (rt.image != null && !rt.is3D) {
  70. // ui.image(rt.image);
  71. // }
  72. // }
  73. // #if (kha_opengl || kha_webgl)
  74. // ui.imageInvertY = false;
  75. // #end
  76. // ui.unindent();
  77. // }
  78. // if (ui.panel(Id.handle({selected: false}), 'Cached Materials')) {
  79. // ui.indent();
  80. // for (c in iron.data.Data.cachedMaterials) {
  81. // ui.text(c.name);
  82. // }
  83. // ui.unindent();
  84. // }
  85. // if (ui.panel(Id.handle({selected: false}), 'Cached Shaders')) {
  86. // ui.indent();
  87. // for (c in iron.data.Data.cachedShaders) {
  88. // ui.text(c.name);
  89. // }
  90. // ui.unindent();
  91. // }
  92. #if js
  93. if (ui.panel(Id.handle({selected: false}), 'Script')) {
  94. ui.indent();
  95. ui.row([8/10, 2/10]);
  96. var t = ui.textInput(Id.handle());
  97. if (ui.button("Run")) {
  98. try { trace("> " + t); js.Lib.eval(t); }
  99. catch(e:Dynamic) { trace(e); }
  100. }
  101. for (t in lastTraces) ui.text(t);
  102. ui.unindent();
  103. }
  104. #end
  105. }
  106. static function tick(g:kha.graphics2.Graphics) {
  107. totalTime += frameTime;
  108. frames++;
  109. if (totalTime > 1.0) {
  110. arm.ui.UITrait.inst.hwnd.redraws = 1;
  111. frameTimeAvg = totalTime / frames;
  112. totalTime = 0;
  113. frames = 0;
  114. g.end();
  115. updateGraph();
  116. g.begin(false);
  117. }
  118. frameTime = Scheduler.realTime() - lastTime;
  119. lastTime = Scheduler.realTime();
  120. }
  121. }