diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index 35af6590be..fc5753cc23 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -85,8 +85,7 @@ namespace OpenRa.Game PlaySound("intro.aud", false); skipMakeAnims = false; - - sw = new Stopwatch(); + PerfHistory.items["render"].hasNormalTick = false; } static void LoadMapBuildings( IniFile mapfile ) @@ -148,8 +147,6 @@ namespace OpenRa.Game public static double TickTime = 0.0; public static double OreTime = 0.0; - public static Stopwatch sw; - public static void Tick() { int t = Environment.TickCount; @@ -158,7 +155,6 @@ namespace OpenRa.Game { using (new PerfSample("tick_time")) { - sw.Reset(); lastTime += timestep; if (orderManager.Tick()) @@ -178,18 +174,20 @@ namespace OpenRa.Game foreach (var player in players.Values) player.Tick(); } - - TickTime = sw.ElapsedTime(); } PerfHistory.Tick(); } - sw.Reset(); - ++RenderFrame; - viewport.cursor = controller.ChooseCursor(); - viewport.DrawRegions(); - RenderTime = sw.ElapsedTime(); + using (new PerfSample("render")) + { + + ++RenderFrame; + viewport.cursor = controller.ChooseCursor(); + viewport.DrawRegions(); + } + + PerfHistory.items["render"].Tick(); } public static bool IsCellBuildable(int2 a, UnitMovementType umt) diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index 9bc853aca5..d3c51dea07 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -52,64 +52,63 @@ namespace OpenRa.Game.Graphics spriteRenderer.DrawSprite(image.a, loc, image.c); } - } - - public void Draw() + } + + public void Draw() { - terrainRenderer.Draw( Game.viewport ); - - var rect = new RectangleF((region.Position + Game.viewport.Location).ToPointF(), - region.Size.ToSizeF()); - - foreach (Actor a in Game.world.Actors.OrderBy( u => u.CenterLocation.Y )) - DrawSpriteList(rect, a.Render()); - - foreach (var a in Game.world.Actors - .Where(u => u.traits.Contains()) - .Select(u => u.traits.Get())) - DrawSpriteList(rect, a.RenderRoof(a.self)); /* RUDE HACK */ - - foreach (IEffect e in Game.world.Effects) - DrawSpriteList(rect, e.Render()); - - uiOverlay.Draw(); - - spriteRenderer.Flush(); - - var selbox = Game.controller.SelectionBox; - if (selbox != null) - { - var a = selbox.Value.First; - var b = new float2(selbox.Value.Second.X - a.X, 0); - var c = new float2(0, selbox.Value.Second.Y - a.Y); - - lineRenderer.DrawLine(a, a + b, Color.White, Color.White); - lineRenderer.DrawLine(a + b, a + b + c, Color.White, Color.White); - lineRenderer.DrawLine(a + b + c, a + c, Color.White, Color.White); - lineRenderer.DrawLine(a, a + c, Color.White, Color.White); - - foreach (var u in Game.SelectUnitsInBox(selbox.Value.First, selbox.Value.Second)) - DrawSelectionBox(u, Color.Yellow, false); - } - - var uog = Game.controller.orderGenerator as UnitOrderGenerator; - if (uog != null) - foreach( var a in uog.selection ) - DrawSelectionBox(a, Color.White, true); - - lineRenderer.Flush(); - - renderer.DrawText(string.Format("RenderFrame {0} ({2:F1} ms)\nTick {1} ({3:F1} ms)\nOre ({4:F1} ms)\n$ {5}\nPower {7}\nTiles Expanded {6:F0}", - Game.RenderFrame, Game.orderManager.FrameNumber, - Game.RenderTime * 1000, - Game.TickTime * 1000, - Game.OreTime * 1000, - Game.LocalPlayer.Cash, - PerfHistory.items[ "nodes_expanded" ].LastValue, - Game.LocalPlayer.GetTotalPower() + terrainRenderer.Draw(Game.viewport); + + var rect = new RectangleF((region.Position + Game.viewport.Location).ToPointF(), + region.Size.ToSizeF()); + + foreach (Actor a in Game.world.Actors.OrderBy(u => u.CenterLocation.Y)) + DrawSpriteList(rect, a.Render()); + + foreach (var a in Game.world.Actors + .Where(u => u.traits.Contains()) + .Select(u => u.traits.Get())) + DrawSpriteList(rect, a.RenderRoof(a.self)); /* RUDE HACK */ + + foreach (IEffect e in Game.world.Effects) + DrawSpriteList(rect, e.Render()); + + uiOverlay.Draw(); + + spriteRenderer.Flush(); + + var selbox = Game.controller.SelectionBox; + if (selbox != null) + { + var a = selbox.Value.First; + var b = new float2(selbox.Value.Second.X - a.X, 0); + var c = new float2(0, selbox.Value.Second.Y - a.Y); + + lineRenderer.DrawLine(a, a + b, Color.White, Color.White); + lineRenderer.DrawLine(a + b, a + b + c, Color.White, Color.White); + lineRenderer.DrawLine(a + b + c, a + c, Color.White, Color.White); + lineRenderer.DrawLine(a, a + c, Color.White, Color.White); + + foreach (var u in Game.SelectUnitsInBox(selbox.Value.First, selbox.Value.Second)) + DrawSelectionBox(u, Color.Yellow, false); + } + + var uog = Game.controller.orderGenerator as UnitOrderGenerator; + if (uog != null) + foreach (var a in uog.selection) + DrawSelectionBox(a, Color.White, true); + + lineRenderer.Flush(); + + renderer.DrawText(string.Format("RenderFrame {0} ({2:F1} ms)\nTick {1} ({3:F1} ms)\n$ {4}\nPower {5}", + Game.RenderFrame, + Game.orderManager.FrameNumber, + PerfHistory.items["render"].LastValue, + PerfHistory.items["tick_time"].LastValue, + Game.LocalPlayer.Cash, + Game.LocalPlayer.GetTotalPower() ), new int2(5, 5), Color.White); - PerfHistory.Render(renderer, lineRenderer); + PerfHistory.Render(renderer, lineRenderer); } void DrawSelectionBox(Actor selectedUnit, Color c, bool drawHealthBar) diff --git a/OpenRa.Game/Support/PerfHistory.cs b/OpenRa.Game/Support/PerfHistory.cs index 60954912e1..bad5cd80c0 100644 --- a/OpenRa.Game/Support/PerfHistory.cs +++ b/OpenRa.Game/Support/PerfHistory.cs @@ -29,7 +29,8 @@ namespace OpenRa.Game.Support public static void Tick() { foreach (var item in items.Values) - item.Tick(); + if (item.hasNormalTick) + item.Tick(); } public static void Render(Renderer r, LineRenderer lr) @@ -65,6 +66,7 @@ namespace OpenRa.Game.Support public double[] samples = new double[100]; public double val = 0.0; int head = 1, tail = 0; + public bool hasNormalTick = true; public PerfItem(string name, Color c) {