void DrawStats()
    {
        var samplesPerSecond = 1.0f / m_StatsDeltaTime.average;
        int y = 2;

        Overlay.Managed.Write(2, y++, "  tick rate: {0}", m_NetworkClient.serverTickRate);
        Overlay.Managed.Write(2, y++, "  frame timescale: {0}", m_FrameTimeScale);

        Overlay.Managed.Write(2, y++, "  sim  : {0:0.0} / {1:0.0} / {2:0.0} ({3:0.0})",
                              m_ServerSimTime.min,
                              m_ServerSimTime.min,
                              m_ServerSimTime.max,
                              m_ServerSimTime.stdDeviation);

        Overlay.Managed.Write(2, y++, "^FF0  lat  : {0:0.0} / {1:0.0} / {2:0.0}", m_Latency.min, m_Latency.average, m_Latency.max);
        Overlay.Managed.Write(2, y++, "^0FF  rtt  : {0:0.0} / {1:0.0} / {2:0.0}", m_RTT.min, m_RTT.average, m_RTT.max);
        Overlay.Managed.Write(2, y++, "^0F0  cmdq : {0:0.0} / {1:0.0} / {2:0.0}", m_CMDQ.min, m_CMDQ.average, m_CMDQ.max);
        Overlay.Managed.Write(2, y++, "^F0F  intp : {0:0.0} / {1:0.0} / {2:0.0}", m_Interp.min, m_Interp.average, m_Interp.max);


        y++;
        Overlay.Managed.Write(2, y++, "^22F  header/payload/total bps (in):");
        Overlay.Managed.Write(2, y++, "^22F   {0:00.0} / {1:00.0} / {2:00.0} ({3})", m_HeaderBitsIn.graph.average / 8.0f * samplesPerSecond,
                              (m_BytesIn.graph.average - m_HeaderBitsIn.graph.average / 8.0f) * samplesPerSecond,
                              m_BytesIn.graph.average * samplesPerSecond,
                              m_NetworkClient.clientConfig.serverUpdateRate);
        Overlay.Managed.Write(2, y++, "^F00  bps (out): {0:00.0}", m_BytesOut.graph.average * samplesPerSecond);
        Overlay.Managed.Write(2, y++, "  pps (in):  {0:00.0}", m_PackagesIn.graph.average * samplesPerSecond);
        Overlay.Managed.Write(2, y++, "  pps (out): {0:00.0}", m_PackagesOut.graph.average * samplesPerSecond);
        Overlay.Managed.Write(2, y++, "  pl% (in):  {0:00.0}", m_PackageLossPctIn.average);
        Overlay.Managed.Write(2, y++, "  pl% (out): {0:00.0}", m_PackageLossPctOut.average);

        y++;
        Overlay.Managed.Write(2, y++, "  upd_srate: {0:00.0} ({1})", m_SnapshotsIn.graph.average * samplesPerSecond, m_NetworkClient.clientConfig.serverUpdateInterval);
        Overlay.Managed.Write(2, y++, "  cmd_srate: {0:00.0} ({1})", m_CommandsOut.graph.average * samplesPerSecond, m_NetworkClient.serverTickRate);
        Overlay.Managed.Write(2, y++, "  ev (in):   {0:00.0}", m_EventsIn.graph.average * samplesPerSecond);
        Overlay.Managed.Write(2, y++, "  ev (out):  {0:00.0}", m_EventsOut.graph.average * samplesPerSecond);

        var startIndex = m_BytesIn.graph.GetData().HeadIndex;
        var graphY     = 5;

        DebugOverlay.DrawGraph(38, graphY, 60, 5, m_Latency.GetData().GetArray(), startIndex, Color.yellow, 100);
        DebugOverlay.DrawGraph(38, graphY, 60, 5, m_RTT.GetData().GetArray(), startIndex, Color.cyan, 100);
        DebugOverlay.DrawGraph(38, graphY, 60, 5, m_CMDQ.GetData().GetArray(), startIndex, Color.green, 10);
        DebugOverlay.DrawGraph(38, graphY, 60, 5, m_Interp.GetData().GetArray(), startIndex, Color.magenta, 100);
        DebugOverlay.DrawHist(38, graphY, 60, 5, m_HardCatchup.GetArray(), startIndex, Color.red, 100);

        m_2GraphData[0] = m_BytesIn.graph.GetData().GetArray();
        m_2GraphData[1] = m_BytesOut.graph.GetData().GetArray();

        graphY += 7;
        DebugOverlay.DrawGraph(38, graphY, 60, 5, m_2GraphData, startIndex, m_BytesGraphColors);

        graphY += 6;
        DebugOverlay.DrawHist(38, graphY++, 60, 1, m_SnapshotsIn.graph.GetData().GetArray(), startIndex, Color.blue, 5.0f);
        DebugOverlay.DrawHist(38, graphY++, 60, 1, m_CommandsOut.graph.GetData().GetArray(), startIndex, Color.red, 5.0f);
        DebugOverlay.DrawHist(38, graphY++, 60, 1, m_EventsIn.graph.GetData().GetArray(), startIndex, Color.yellow, 5.0f);
        DebugOverlay.DrawHist(38, graphY++, 60, 1, m_EventsOut.graph.GetData().GetArray(), startIndex, Color.green, 5.0f);
    }
    void DrawCompactStats()
    {
        var samplesPerSecond = 1.0f / m_StatsDeltaTime.average;

        Overlay.Managed.Write(-50, -4, "pps (in/out): {0} / {1}", m_PackagesIn.graph.average * samplesPerSecond, m_PackagesOut.graph.average * samplesPerSecond);
        Overlay.Managed.Write(-50, -3, "bps (in/out): {0:00.0} / {1:00.0}", m_BytesIn.graph.average * samplesPerSecond, m_BytesOut.graph.average * samplesPerSecond);
        var startIndex = m_BytesIn.graph.GetData().HeadIndex;

        DebugOverlay.DrawHist(-50, -2, 20, 2, m_BytesIn.graph.GetData().GetArray(), startIndex, Color.blue, 5.0f);
    }
Example #3
0
    void DrawFPS()
    {
        DebugOverlay.Write(0, 1, "{0} FPS ({1:##.##} ms)", Mathf.RoundToInt(1000.0f / m_FrameDurationMS), m_FrameDurationMS);
        float minDuration = float.MaxValue;
        float maxDuration = float.MinValue;
        float sum         = 0;

        for (var i = 0; i < _no_frames; i++)
        {
            var frametime = m_FrameTimes[i];
            sum += frametime;
            if (frametime < minDuration)
            {
                minDuration = frametime;
            }
            if (frametime > maxDuration)
            {
                maxDuration = frametime;
            }
        }

        DebugOverlay.Write(Color.green, 0, 2, "{0:##.##}", minDuration);
        DebugOverlay.Write(Color.grey, 6, 2, "{0:##.##}", sum / _no_frames);
        DebugOverlay.Write(Color.red, 12, 2, "{0:##.##}", maxDuration);

        DebugOverlay.Write(0, 3, "Frame #: {0}", Time.frameCount);

        DebugOverlay.Write(0, 4, m_GraphicsDeviceName);


        int y = 6;

        for (int i = 0; i < recordersList.Length; i++)
        {
            DebugOverlay.Write(0, y++, "{0:##.##}ms (*{1:##})  ({2:##.##}ms *{3:##})  {4}", recordersList[i].avgTime, recordersList[i].avgCount, recordersList[i].time, recordersList[i].count, recordersList[i].name);
        }

        if (showFPS.IntValue < 3)
        {
            return;
        }

        y++;
        // Start at framecount+1 so the one we have just recorded will be the last
        DebugOverlay.DrawHist(0, y, 20, 2, m_FrameTimes, Time.frameCount + 1, fpsColor, 20.0f);
        DebugOverlay.DrawHist(0, y + 2, 20, 2, m_TicksPerFrame, Time.frameCount + 1, histColor, 3.0f * 16.0f);

        DebugOverlay.DrawGraph(0, y + 6, 40, 2, m_FrameTimes, Time.frameCount + 1, fpsColor, 20.0f);

        if (GameWorld.s_Worlds.Count > 0)
        {
            var world = GameWorld.s_Worlds[0];
            DebugOverlay.Write(0, y + 8, "Tick: {0:##.#}", 1000.0f * world.worldTime.tickInterval);
        }
    }
    void DrawStats()
    {
        int y = 2;

        Overlay.Managed.Write(2, y++, "  tick rate: {0}", Game.serverTickRate.IntValue);
        Overlay.Managed.Write(2, y++, "  entities:  {0}", m_NetworkServer.NumEntities);

        Overlay.Managed.Write(2, y++, "  sim  : {0:0.0} / {1:0.0} / {2:0.0} ({3:0.0})",
                              m_ServerSimTime.min,
                              m_ServerSimTime.min,
                              m_ServerSimTime.max,
                              m_ServerSimTime.stdDeviation);


        int totalSnapshots = 0;

        foreach (var c in m_NetworkServer.GetConnections())
        {
            totalSnapshots += c.Value.counters.snapshotsOut;
        }
        snapsPerFrame[Time.frameCount % snapsPerFrame.Length] = (totalSnapshots - totalSnapshotsLastFrame);
        totalSnapshotsLastFrame = totalSnapshots;
        DebugOverlay.DrawHist(2, 10, 60, 5, snapsPerFrame, Time.frameCount % snapsPerFrame.Length, new Color(0.5f, 0.5f, 1.0f));

        //for(var i = 0; i < counters.)

        //DebugOverlay.Write(2, y++, "  entities: {0}", counters.numEntities);

        /*
         *
         * DebugOverlay.Write(2, y++, "^FF0  lat  : {0:0.0} / {1:0.0} / {2:0.0}", m_Latency.min, m_Latency.average, m_Latency.max);
         * DebugOverlay.Write(2, y++, "^0FF  rtt  : {0:0.0} / {1:0.0} / {2:0.0}", m_RTT.min, m_RTT.average, m_RTT.max);
         * DebugOverlay.Write(2, y++, "^0F0  cmdq : {0:0.0} / {1:0.0} / {2:0.0}", m_CMDQ.min, m_CMDQ.average, m_CMDQ.max);
         * DebugOverlay.Write(2, y++, "^F0F  intp : {0:0.0} / {1:0.0} / {2:0.0}", m_Interp.min, m_Interp.average, m_Interp.max);
         *
         * var samplesPerSecond = 1.0f / m_StatsDeltaTime.average;
         *
         * y++;
         * DebugOverlay.Write(2, y++, "^00F  bps (in):  {0:00.0} ({1})", m_BytesIn.graph.average * samplesPerSecond, m_NetworkClient.updateRate);
         * DebugOverlay.Write(2, y++, "^F00  bps (out): {0:00.0}", m_BytesOut.graph.average * samplesPerSecond);
         * DebugOverlay.Write(2, y++, "  pps (in):  {0:00.0}", m_PackagesIn.graph.average * samplesPerSecond);
         * DebugOverlay.Write(2, y++, "  pps (out): {0:00.0}", m_PackagesOut.graph.average * samplesPerSecond);
         * DebugOverlay.Write(2, y++, "  pl% (in):  {0:00.0}", m_PackageLossPctIn.average);
         * DebugOverlay.Write(2, y++, "  pl% (out): {0:00.0}", m_PackageLossPctOut.average);
         *
         * y++;
         * DebugOverlay.Write(2, y++, "  upd_srate: {0:00.0} ({1})", m_SnapshotsIn.graph.average * samplesPerSecond, m_NetworkClient.updateSendRate);
         * DebugOverlay.Write(2, y++, "  cmd_srate: {0:00.0} ({1})", m_CommandsOut.graph.average * samplesPerSecond, m_NetworkClient.commandSendRate);
         * DebugOverlay.Write(2, y++, "  ev (in):   {0:00.0}", m_EventsIn.graph.average * samplesPerSecond);
         * DebugOverlay.Write(2, y++, "  ev (out):  {0:00.0}", m_EventsOut.graph.average * samplesPerSecond);
         *
         * var startIndex = m_BytesIn.graph.GetData().HeadIndex;
         * var graphY = 5;
         *
         * DebugOverlay.DrawGraph(38, graphY, 60, 5, m_Latency.GetData().GetArray(), startIndex, Color.yellow, 100);
         * DebugOverlay.DrawGraph(38, graphY, 60, 5, m_RTT.GetData().GetArray(), startIndex, Color.cyan, 100);
         * DebugOverlay.DrawGraph(38, graphY, 60, 5, m_CMDQ.GetData().GetArray(), startIndex, Color.green, 10);
         * DebugOverlay.DrawGraph(38, graphY, 60, 5, m_Interp.GetData().GetArray(), startIndex, Color.magenta, 100);
         * DebugOverlay.DrawHist(38, graphY, 60, 5, m_HardCatchup.GetArray(), startIndex, Color.red, 100);
         *
         * m_2GraphData[0] = m_BytesIn.graph.GetData().GetArray();
         * m_2GraphData[1] = m_BytesOut.graph.GetData().GetArray();
         *
         * graphY += 7;
         * DebugOverlay.DrawGraph(38, graphY, 60, 5, m_2GraphData, startIndex, m_BytesGraphColors);
         *
         * graphY += 6;
         * DebugOverlay.DrawHist(38, graphY++, 60, 1, m_SnapshotsIn.graph.GetData().GetArray(), startIndex, Color.blue, 5.0f);
         * DebugOverlay.DrawHist(38, graphY++, 60, 1, m_CommandsOut.graph.GetData().GetArray(), startIndex, Color.red, 5.0f);
         * DebugOverlay.DrawHist(38, graphY++, 60, 1, m_EventsIn.graph.GetData().GetArray(), startIndex, Color.yellow, 5.0f);
         * DebugOverlay.DrawHist(38, graphY++, 60, 1, m_EventsOut.graph.GetData().GetArray(), startIndex, Color.green, 5.0f);
         */
    }
Example #5
0
    public void TickUpdate()
    {
        if (m_ShowStats < 1)
        {
            return;
        }

        long  ticks           = m_StopWatch.ElapsedTicks;
        float frameDurationMs = (ticks - m_LastFrameTicks) * 1000 / (float)m_StopWatchFreq;

        m_LastFrameTicks = ticks;

        DebugOverlay.SetColor(Color.yellow);
        DebugOverlay.SetOrigin(0, 0);

        DebugOverlay.Write(1, 0, "FPS:{0,6:###.##}", 1.0f / Time.deltaTime);
        fpsHistory[Time.frameCount % fpsHistory.Length] = 1.0f / Time.deltaTime;
        DebugOverlay.DrawGraph(1, 1, 9, 1.5f, fpsHistory, Time.frameCount % fpsHistory.Length, Color.green);

        DebugOverlay.Write(30, 0, "Open console (F12) and type: \"showstats\" to toggle graphs");

        if (m_ShowStats < 2)
        {
            return;
        }

        DebugOverlay.Write(0, 4, "Hello, {0,-5} world!", Time.frameCount % 100 < 50 ? "Happy" : "Evil");
        DebugOverlay.Write(0, 5, "FrameNo: {0,7}", Time.frameCount);
        DebugOverlay.Write(0, 6, "MonoHeap:{0,7} kb", (int)(UnityEngine.Profiling.Profiler.GetMonoUsedSizeLong() / 1024));

        /// Graphing difference between deltaTime and actual passed time
        float fps = Time.deltaTime * 1000.0f;
        var   idx = Time.frameCount % fpsArray[0].Length;;

        fpsArray[0][idx] = -Mathf.Min(0, frameDurationMs - fps);
        fpsArray[1][idx] = Mathf.Max(0, frameDurationMs - fps);
        float variance, mean, min, max;

        CalcStatistics(fpsArray[0], out mean, out variance, out min, out max);

        // Draw histogram over time differences
        DebugOverlay.DrawHist(20, 10, 20, 3, fpsArray, Time.frameCount, colors, max);
        DebugOverlay.SetColor(new Color(1.0f, 0.3f, 0.0f));
        DebugOverlay.Write(20, 14, "{0,4:#.###} ({1,4:##.#} +/- {2,4:#.##})", frameDurationMs - fps, mean, Mathf.Sqrt(variance));

        DebugOverlay.DrawGraph(45, 10, 40, 3, fpsArray, Time.frameCount, colors, max);

        /// Graphing frametime
        var idx2 = Time.frameCount % frameTimeArray.Length;

        frameTimeArray[idx2] = frameDurationMs;
        CalcStatistics(frameTimeArray, out mean, out variance, out min, out max);
        DebugOverlay.DrawHist(20, 15, 20, 3, frameTimeArray, Time.frameCount, Color.red, max);

        // Draw legend
        float scale = 18.0f - 3.0f / max * 16.6667f;

        DebugOverlay.DrawLine(20, scale, 40, scale, Color.black);
        DebugOverlay.Write(20, 18, "{0,5} ({1} +/- {2})", frameDurationMs, mean, Mathf.Sqrt(variance));

        DebugOverlay.DrawGraph(45, 15, 40, 3, frameTimeArray, Time.frameCount, Color.red, max);

        // Draw some lines to help visualize framerate fluctuations
        float ratio = (float)DebugOverlay.Height / DebugOverlay.Width * Screen.width / Screen.height;
        float time  = (float)Time.frameCount / 60.0f;

        for (var i = 0; i < 10; i++)
        {
            DebugOverlay.DrawLine(60, 20, 60 + Mathf.Sin(Mathf.PI * 0.2f * i + time) * 8.0f, 20 + Mathf.Cos(Mathf.PI * 0.2f * i + time) * 8.0f * ratio, Color.black);
        }
    }