public void EndScene(object sender, EventArgs args)
        {
            if (!_statsEnabled)
            {
                return;
            }
            _renderFinished.Reset();
            try
            {
                TimeSpan guiDur = DateTime.Now - _frameRenderingStartTime;
                _totalGuiRenderDuration += guiDur;
                _guiRenderDuration      += guiDur;
                _totalFrameCount++;
                _frameCount++;
                int scanLine = _device.GetRasterStatus(0).ScanLine;
                _sumMsToVBlank += ScanlineToVblankOffset(scanLine);

                _fpsCounter++;
                TimeSpan ts   = DateTime.Now - _fpsTimer;
                float    secs = (float)ts.TotalSeconds;
                _fps = _fpsCounter / secs;

                Stats currentFrameStats = new Stats
                {
                    Fps = _fps,
                    MsFrameRenderTime = (float)guiDur.TotalMilliseconds,
                    MsToNextVBlank    = ScanlineToVblankOffset(scanLine)
                };

                if (ts.TotalSeconds >= 1.0f)
                {
                    float totalAvgGuiTime = (float)_totalGuiRenderDuration.TotalMilliseconds / _totalFrameCount;
                    float avgGuiTime      = (float)_guiRenderDuration.TotalMilliseconds / _frameCount;
                    float avgMsToVBlank   = _sumMsToVBlank / _frameCount;

                    int glitches;
                    _perfLogString = string.Format(
                        "Render: {0:0.00} fps [red], {1} frames last meas., avg GUI time {2:0.00}, last sec: {3:0.00} [blue], " +
                        "avg ms to vblank: {6:0.00} [grn]\r\nRender mode enabled: {4}\r\n{5}",
                        _fps, _fpsCounter, totalAvgGuiTime, avgGuiTime, SkinContext.RenderStrategy.Name,
                        GetPresentStats(out glitches), avgMsToVBlank);

                    currentFrameStats.Glitch = glitches;
                    _perfLogString          += "\r\n" + GetScreenInfo();
                    _perfLogString          += "\r\n" + GetRenderPipelineInfo();
                    _perfLogString          += "\r\n" + GetPlayerInfos();
                    _fpsCounter        = 0;
                    _frameCount        = 0;
                    _guiRenderDuration = TimeSpan.Zero;
                    _fpsTimer          = DateTime.Now;
                    _sumMsToVBlank     = 0;
                }

                _stats.Push(currentFrameStats);
                DrawLines();
                DrawTearingTest();
                DrawText(_perfLogString);
            }
            finally
            {
                _renderFinished.Set();
            }
        }