コード例 #1
0
ファイル: TimeRuler.cs プロジェクト: su636/voxeliq
        public override void Initialize()
        {
#if TRACE
            this._assetManager = (IAssetManager)this.Game.Services.GetService(typeof(IAssetManager));
            if (this._assetManager == null)
            {
                throw new NullReferenceException("Can not find asset manager component.");
            }

            this.spriteBatch = new SpriteBatch(this.Game.GraphicsDevice);
            this.texture     = new Texture2D(this.Game.GraphicsDevice, 1, 1);
            Color[] whitePixels = new Color[] { Color.White };
            texture.SetData <Color>(whitePixels);
            this.debugFont = this._assetManager.Verdana;

            // Initialize Parameters.
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; ++i)
            {
                logs[i] = new FrameLog();
            }

            sampleFrames = TargetSampleFrames = 1;

            // Time-Ruler's update method doesn't need to get called.
            this.Enabled = false;
#endif
            base.Initialize();
        }
コード例 #2
0
        /// <summary>
        /// To be called after rendering ends.
        /// </summary>
        internal void AfterRender()
        {
            if (_frameLogMode == FrameLog.Off)
            {
                return;
            }
            _frameLogMode = FrameLog.Off;

            // Write to disk
            var writer = new XmlTextWriter(_frameLogFile, new UTF8Encoding(false))
            {
                Formatting = Formatting.Indented
            };

            Profiler.LogXml.Save(writer);
            writer.Close();

            // Clean up
            Profiler.LogXml = null;
            if (Profiler.DeviceQuery != null)
            {
                Profiler.DeviceQuery.Dispose();
                Profiler.DeviceQuery = null;
            }
        }
コード例 #3
0
        public override void Initialize()
        {
#if TRACE
            debugManager =
                Game.Services.GetService(typeof(DebugManager)) as DebugManager;

            if (debugManager == null)
            {
                throw new InvalidOperationException("DebugManager is not registered.");
            }

            // Add "tr" command if DebugCommandHost is registered.
            IDebugCommandHost host =
                Game.Services.GetService(typeof(IDebugCommandHost))
                as IDebugCommandHost;

            if (host != null)
            {
                host.RegisterCommand("tr", "TimeRuler", this.CommandExecute);
                this.Visible = false;
                this.Enabled = false;
            }

            // Initialize Parameters.
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; ++i)
            {
                logs[i] = new FrameLog();
            }

            sampleFrames = TargetSampleFrames = 1;
#endif
            base.Initialize();
        }
コード例 #4
0
        public override void Initialize()
        {
#if TRACE
            debugManager =
                Game.Services.GetService(typeof(vxDebugManager)) as vxDebugManager;

            if (debugManager == null)
            {
                throw new InvalidOperationException("DebugManager is not registered.");
            }

            // Add "tr" command if DebugCommandHost is registered.
            IDebugCommandHost host =
                Game.Services.GetService(typeof(IDebugCommandHost))
                as IDebugCommandHost;
            if (host != null)
            {
                host.RegisterCommand("tr", "Toggles the time ruler to measure system performace for different code regions.", this.CommandExecute);
                this.Visible = false;
            }

            // Initialize Parameters.
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; ++i)
            {
                logs[i] = new FrameLog();
            }

            sampleFrames = TargetSampleFrames = 1;

            // Time-Ruler's update method doesn't need to get called.
            this.Enabled = false;
#endif
            base.Initialize();
        }
コード例 #5
0
ファイル: TimeRuler.cs プロジェクト: willcraftia/TestBlocks
        public void StartFrame()
        {
            // currentFrameLog の同期をとるために自身をロック。
            lock (this)
            {
                // previousFrameLog と currentFrameLog を入れ替え。
                var tempFrameLog = previousFrameLog;
                previousFrameLog = currentFrameLog;
                currentFrameLog  = tempFrameLog;

                // フレーム終了時間を取得。
                var endFrameTime = (float)stopwatch.Elapsed.TotalMilliseconds;

                for (int barIndex = 0; barIndex < previousFrameLog.Bars.Count; barIndex++)
                {
                    var previousBar = previousFrameLog.Bars[barIndex];
                    var currentBar  = currentFrameLog.Bars[barIndex];

                    currentBar.MarkerLogCount           = 0;
                    currentBar.MarkerLogIndexStackCount = 0;

                    for (int stackIndex = 0; stackIndex < previousBar.MarkerLogIndexStackCount; stackIndex++)
                    {
                        int markerIndex = previousBar.MarkerLogIndexStack[stackIndex];

                        // End が呼ばれないままの MarkerLog を終了させるため、終了時間を設定。
                        previousBar.MarkerLogs[markerIndex].EndTime = endFrameTime;

                        // 新フレームへ継続。
                        currentBar.MarkerLogIndexStack[stackIndex] = stackIndex;
                        currentBar.MarkerLogIndexStackCount++;

                        currentBar.MarkerLogs[stackIndex].Id        = previousBar.MarkerLogs[markerIndex].Id;
                        currentBar.MarkerLogs[stackIndex].BeginTime = 0;
                        currentBar.MarkerLogs[stackIndex].EndTime   = float.NaN;
                        currentBar.MarkerLogs[stackIndex].Color     = previousBar.MarkerLogs[markerIndex].Color;
                        currentBar.MarkerLogCount++;
                    }

                    // 計測の記録。
                    for (int markerIndex = 0; markerIndex < previousBar.MarkerLogCount; markerIndex++)
                    {
                        var markerId = previousBar.MarkerLogs[markerIndex].Id;
                        var marker   = markers[markerId];

                        marker.RecordFrame(previousBar.MarkerLogs[markerIndex].BeginTime, previousBar.MarkerLogs[markerIndex].EndTime);
                    }
                }

                // このフレームでの時間計測をリセット。
                stopwatch.Reset();
                stopwatch.Start();
            }
        }
コード例 #6
0
        public override void Initialize()
        {
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; i++)
            {
                logs[i] = new FrameLog(MaxBars, MaxSamples, MaxNestCalls);
            }
            sampleFrames = TargetSampleFrames = 1;
            this.Enabled = false;

            base.Initialize();
        }
コード例 #7
0
        protected void BindGrid()
        {
            int  TotalNum=0;
            DataView dv = new FrameLog().Select(txtOperateModule.Text.Trim(), txtOperateUserID.Text.Trim(),DateFromTo.FromText, DateFromTo.ToText, Pager.PageSize, Pager.CurrentPageIndex, out TotalNum);
            grdList.DataSource = dv;
            grdList.DataBind();
            FrameCommon FC = new FrameCommon();
            //���÷�ҳ��Ϣ
            FC.SetPagerInfo(Pager, TotalNum, Pager.PageSize, Pager.CurrentPageIndex);
            FC.SetPagerInfo(AspNetPager1, TotalNum, Pager.PageSize, Pager.CurrentPageIndex);

            //����һ��js����������ǿ��ִ��datagrid����ɫ�任���粻�ã���updatapanel�����ݸ��º��޷�����datagridcolor.js��ִ��
            CallJsFun("ChangeColor();");
        }
コード例 #8
0
        //--------------------//

        #region Log frame
        /// <summary>
        /// Logs a complete frame for performance profiling.
        /// </summary>
        /// <param name="path">The path of the file to store the log in.</param>
        /// <param name="logMode">Controls how the frame log is captured.</param>
        public void LogFrame(string path, FrameLog logMode = FrameLog.CpuGpu)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentNullException(nameof(path));
            }
            #endregion

            _frameLogMode = logMode;
            _frameLogFile = path;
            _renderPure();

            Log.Info("Frame-log created");
        }
コード例 #9
0
        public TimeRuler()
        {
            // Initialize Parameters.
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; ++i)
            {
                logs[i] = new FrameLog();
            }

            sampleFrames = targetSampleFrames = 1;

            width = Core.graphicsDevice.Viewport.Width - 20;

            Core.emitter.addObserver(CoreEvents.GraphicsDeviceReset, onGraphicsDeviceReset);
            onGraphicsDeviceReset();
        }
コード例 #10
0
        public TimeRuler()
        {
            // Initialize Parameters.
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; ++i)
            {
                logs[i] = new FrameLog();
            }

            sampleFrames = TargetSampleFrames = 1;

            Width = (int)(Core.GraphicsDevice.Viewport.Width * 0.8f);

            Core.Emitter.AddObserver(CoreEvents.GraphicsDeviceReset, OnGraphicsDeviceReset);
            OnGraphicsDeviceReset();
        }
コード例 #11
0
        public ProfilerManager(IUserInterface userInterface)
            : base(GearsetSettings.Instance.ProfilerConfig)
        {
            _userInterface = userInterface;
            _userInterface.CreateProfiler(Config, 0, 0, 0);
            _userInterface.LevelItemChanged += (sender, args) =>
            {
                switch (args.Name)
                {
                case "TimeRuler":
                    TimeRuler.SetLevel(args.LevelId, args.Enabled);
                    Config.TimeRulerConfig.VisibleLevelsFlags = TimeRuler.VisibleLevelsFlags;
                    break;

                case "PerformanceGraph":
                    PerformanceGraph.SetLevel(args.LevelId, args.Enabled);
                    Config.PerformanceGraphConfig.VisibleLevelsFlags = PerformanceGraph.VisibleLevelsFlags;
                    break;

                case "ProfilerSummary":
                    ProfilerSummary.SetLevel(args.LevelId, args.Enabled);
                    Config.ProfilerSummaryConfig.VisibleLevelsFlags = ProfilerSummary.VisibleLevelsFlags;
                    break;
                }
            };

            RefreshSummary = true;

            LineDrawer = new InternalLineDrawer(64);
            Children.Add(LineDrawer);

            Children.Add(_internalLabeler);
            Children.Add(TempBoxDrawer);

            _logs = new FrameLog[2];
            for (var i = 0; i < _logs.Length; ++i)
            {
                _logs[i] = new FrameLog();
            }

            CreateTimeRuler();
            CreatePerformanceGraph();
            CreateProfilerSummary();
        }
コード例 #12
0
ファイル: Profiler.cs プロジェクト: bartwe/Gearset
        public Profiler() : base(GearsetSettings.Instance.ProfilerConfig)
        {
            RefreshSummary = true;

            Children.Add(_internalLabeler);
            Children.Add(TempBoxDrawer);

            _logs = new FrameLog[2];
            for (var i = 0; i < _logs.Length; ++i)
            {
                _logs[i] = new FrameLog();
            }

            GenerateLevelNames();

            CreateTimeRuler();
            CreatePerformanceGraph();
            CreateProfilerSummary();
        }
コード例 #13
0
ファイル: TimeRuler.cs プロジェクト: DarkLotus/voxeliq
        public override void Initialize()
        {
#if TRACE
            this.spriteBatch = new SpriteBatch(this.Game.GraphicsDevice);
            this.texture     = new Texture2D(this.Game.GraphicsDevice, 1, 1);
            Color[] whitePixels = new Color[] { Color.White };
            texture.SetData <Color>(whitePixels);
            this.debugFont = AssetManager.Instance.Verdana;

            // Initialize Parameters.
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; ++i)
            {
                logs[i] = new FrameLog();
            }

            sampleFrames = TargetSampleFrames = 1;

            // Time-Ruler's update method doesn't need to get called.
            this.Enabled = false;
#endif
            base.Initialize();
        }
コード例 #14
0
ファイル: TimeRuler.cs プロジェクト: Cyberbanan/voxeliq
        public override void Initialize()
        {
#if TRACE
            this._assetManager = (IAssetManager)this.Game.Services.GetService(typeof(IAssetManager));
            if (this._assetManager == null)
                throw new NullReferenceException("Can not find asset manager component.");

            this.spriteBatch = new SpriteBatch(this.Game.GraphicsDevice);
            this.texture = new Texture2D(this.Game.GraphicsDevice, 1, 1);
            Color[] whitePixels = new Color[] { Color.White };
            texture.SetData<Color>(whitePixels);
            this.debugFont = this._assetManager.Verdana;

            // Initialize Parameters.
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; ++i)
                logs[i] = new FrameLog();

            sampleFrames = TargetSampleFrames = 1;

            // Time-Ruler's update method doesn't need to get called.
            this.Enabled = false;

#endif
            base.Initialize();
        }
コード例 #15
0
ファイル: TimeRuler.cs プロジェクト: willcraftia/TestBlocks
        public void StartFrame()
        {
            // currentFrameLog の同期をとるために自身をロック。
            lock (this)
            {
                // previousFrameLog と currentFrameLog を入れ替え。
                var tempFrameLog = previousFrameLog;
                previousFrameLog = currentFrameLog;
                currentFrameLog = tempFrameLog;

                // フレーム終了時間を取得。
                var endFrameTime = (float) stopwatch.Elapsed.TotalMilliseconds;

                for (int barIndex = 0; barIndex < previousFrameLog.Bars.Count; barIndex++)
                {
                    var previousBar = previousFrameLog.Bars[barIndex];
                    var currentBar = currentFrameLog.Bars[barIndex];

                    currentBar.MarkerLogCount = 0;
                    currentBar.MarkerLogIndexStackCount = 0;

                    for (int stackIndex = 0; stackIndex < previousBar.MarkerLogIndexStackCount; stackIndex++)
                    {
                        int markerIndex = previousBar.MarkerLogIndexStack[stackIndex];

                        // End が呼ばれないままの MarkerLog を終了させるため、終了時間を設定。
                        previousBar.MarkerLogs[markerIndex].EndTime = endFrameTime;

                        // 新フレームへ継続。
                        currentBar.MarkerLogIndexStack[stackIndex] = stackIndex;
                        currentBar.MarkerLogIndexStackCount++;

                        currentBar.MarkerLogs[stackIndex].Id = previousBar.MarkerLogs[markerIndex].Id;
                        currentBar.MarkerLogs[stackIndex].BeginTime = 0;
                        currentBar.MarkerLogs[stackIndex].EndTime = float.NaN;
                        currentBar.MarkerLogs[stackIndex].Color = previousBar.MarkerLogs[markerIndex].Color;
                        currentBar.MarkerLogCount++;
                    }

                    // 計測の記録。
                    for (int markerIndex = 0; markerIndex < previousBar.MarkerLogCount; markerIndex++)
                    {
                        var markerId = previousBar.MarkerLogs[markerIndex].Id;
                        var marker = markers[markerId];

                        marker.RecordFrame(previousBar.MarkerLogs[markerIndex].BeginTime, previousBar.MarkerLogs[markerIndex].EndTime);
                    }
                }

                // このフレームでの時間計測をリセット。
                stopwatch.Reset();
                stopwatch.Start();
            }
        }
コード例 #16
0
ファイル: TimeRuler.cs プロジェクト: knocte/voxeliq
        public override void Initialize()
        {
            #if TRACE
            this.spriteBatch = new SpriteBatch(this.Game.GraphicsDevice);
            this.texture = new Texture2D(this.Game.GraphicsDevice, 1, 1);
            Color[] whitePixels = new Color[] { Color.White };
            texture.SetData<Color>(whitePixels);
            this.debugFont = AssetManager.Instance.Verdana;

            // Initialize Parameters.
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; ++i)
                logs[i] = new FrameLog();

            sampleFrames = TargetSampleFrames = 1;

            // Time-Ruler's update method doesn't need to get called.
            this.Enabled = false;

            #endif
            base.Initialize();
        }
コード例 #17
0
        public void StartFrame()
        {
            lock (_locker)
            {
                RefreshSummary = false;

                // We skip reset frame when this method gets called multiple times.
                var count = Interlocked.Increment(ref _updateCount);
                if (Visible && (1 < count && count < MaxSampleFrames))
                {
                    return;
                }

                // Update current frame log.
                _prevLog = _logs[_frameCount++ & 0x1];
                _curLog  = _logs[_frameCount & 0x1];

                var endFrameTime = (float)_stopwatch.Elapsed.TotalMilliseconds;

                // Update marker and create a log.
                for (var levelIdx = 0; levelIdx < _prevLog.Levels.Length; ++levelIdx)
                {
                    var prevLevel = _prevLog.Levels[levelIdx];
                    var nextLevel = _curLog.Levels[levelIdx];

                    // Re-open marker that didn't get called EndMark in previous frame.
                    for (var nest = 0; nest < prevLevel.NestCount; ++nest)
                    {
                        var markerIdx = prevLevel.MarkerNests[nest];

                        prevLevel.Markers[markerIdx].EndTime = endFrameTime;

                        nextLevel.MarkerNests[nest]       = nest;
                        nextLevel.Markers[nest].MarkerId  = prevLevel.Markers[markerIdx].MarkerId;
                        nextLevel.Markers[nest].BeginTime = 0;
                        nextLevel.Markers[nest].EndTime   = -1;
                        nextLevel.Markers[nest].Color     = prevLevel.Markers[markerIdx].Color;
                    }

                    // Update marker log.
                    for (var markerIdx = 0; markerIdx < prevLevel.MarkCount; ++markerIdx)
                    {
                        var duration = prevLevel.Markers[markerIdx].EndTime - prevLevel.Markers[markerIdx].BeginTime;
                        var markerId = prevLevel.Markers[markerIdx].MarkerId;
                        var m        = _markers[markerId];

                        m.Logs[levelIdx].Color = prevLevel.Markers[markerIdx].Color;

                        if (!m.Logs[levelIdx].Initialized)
                        {
                            // First frame process.
                            m.Logs[levelIdx].Min = duration;
                            m.Logs[levelIdx].Max = duration;
                            m.Logs[levelIdx].Avg = duration;

                            m.Logs[levelIdx].Initialized = true;
                        }
                        else
                        {
                            // Process after first frame.
                            m.Logs[levelIdx].Min  = Math.Min(m.Logs[levelIdx].Min, duration);
                            m.Logs[levelIdx].Max  = Math.Min(m.Logs[levelIdx].Max, duration);
                            m.Logs[levelIdx].Avg += duration;
                            m.Logs[levelIdx].Avg *= 0.5f;

                            if (m.Logs[levelIdx].Samples++ >= LogSnapDuration)
                            {
                                RefreshSummary = true;

                                //m.Logs[levelIdx].SnapMin = m.Logs[levelIdx].Min;
                                //m.Logs[levelIdx].SnapMax = m.Logs[levelIdx].Max;
                                m.Logs[levelIdx].SnapAvg = m.Logs[levelIdx].Avg;
                                m.Logs[levelIdx].Samples = 0;
                            }
                        }
                    }

                    nextLevel.MarkCount = prevLevel.NestCount;
                    nextLevel.NestCount = prevLevel.NestCount;
                }

                // Start measuring.
                _stopwatch.Reset();
                _stopwatch.Start();
            }
        }
コード例 #18
0
        void StartFrame()
        {
            lock (this)
            {
                // 現在のフレームログの更新
                prevLog = logs[frameCount++ & 0x1];
                curLog = logs[frameCount & 0x1];

                var endFrameTime = (float) stopwatch.Elapsed.TotalMilliseconds;

                // マーカーの更新とログ生成
                for (int barIdx = 0; barIdx < prevLog.Bars.Length; ++barIdx)
                {
                    var prevBar = prevLog.Bars[barIdx];
                    var nextBar = curLog.Bars[barIdx];

                    // 前フレームでEndMarkを呼んでいないマーカーを閉じ、現フレームで
                    // 再度開く。
                    for (int nest = 0; nest < prevBar.NestCount; ++nest)
                    {
                        int markerIdx = prevBar.MarkerNests[nest];

                        prevBar.Markers[markerIdx].EndTime = endFrameTime;

                        nextBar.MarkerNests[nest] = nest;
                        nextBar.Markers[nest].MarkerId = prevBar.Markers[markerIdx].MarkerId;
                        nextBar.Markers[nest].BeginTime = 0;
                        nextBar.Markers[nest].EndTime = -1;
                        nextBar.Markers[nest].Color = prevBar.Markers[markerIdx].Color;
                    }

                    // マーカーログの更新
                    for (int markerIdx = 0; markerIdx < prevBar.MarkCount; ++markerIdx)
                    {
                        var duration = prevBar.Markers[markerIdx].EndTime - prevBar.Markers[markerIdx].BeginTime;

                        var markerId = prevBar.Markers[markerIdx].MarkerId;
                        var m = markers[markerId];

                        if (!m.Logs[barIdx].Initialized)
                        {
                            // 最初のフレームの処理
                            m.Logs[barIdx].Min = duration;
                            m.Logs[barIdx].Max = duration;
                            m.Logs[barIdx].Avg = duration;

                            m.Logs[barIdx].Initialized = true;
                        }
                        else
                        {
                            // 2フレーム目以降の処理
                            m.Logs[barIdx].Min = Math.Min(m.Logs[barIdx].Min, duration);
                            m.Logs[barIdx].Max = Math.Min(m.Logs[barIdx].Max, duration);
                            m.Logs[barIdx].Avg += duration;
                            m.Logs[barIdx].Avg *= 0.5f;

                            if (m.Logs[barIdx].Samples++ >= LogSnapDuration)
                            {
                                m.Logs[barIdx].SnapMin = m.Logs[barIdx].Min;
                                m.Logs[barIdx].SnapMax = m.Logs[barIdx].Max;
                                m.Logs[barIdx].SnapAvg = m.Logs[barIdx].Avg;
                                m.Logs[barIdx].Samples = 0;
                            }
                        }
                    }

                    nextBar.MarkCount = prevBar.NestCount;
                    nextBar.NestCount = prevBar.NestCount;
                }

                // このフレームの測定開始
                stopwatch.Reset();
                stopwatch.Start();
            }
        }
コード例 #19
0
        public void StartFrame()
        {
            lock (this)
            {
                int count = Interlocked.Increment(ref updateCount);
                if (Visible && (1 < count && count < MaxSampleFrames))
                {
                    return;
                }

                prevLog = logs[frameCount++ & 0x1];
                curLog  = logs[frameCount & 0x1];

                float endFrameTime = (float)stopwatch.Elapsed.TotalMilliseconds;

                for (int barIDx = 0; barIDx < prevLog.Bars.Length; ++barIDx)
                {
                    var prevBar = prevLog.Bars[barIDx];
                    var nextBar = curLog.Bars[barIDx];

                    // reopen not ended marks
                    for (int nest = 0; nest < prevBar.NestCount; nest++)
                    {
                        int markerIDx = prevBar.MarkerNests[nest];

                        prevBar.Markers[markerIDx].EndTime = endFrameTime;

                        nextBar.MarkerNests[nest]       = nest;
                        nextBar.Markers[nest].MarkerID  = prevBar.Markers[markerIDx].MarkerID;
                        nextBar.Markers[nest].BeginTime = 0;
                        nextBar.Markers[nest].EndTime   = -1;
                        nextBar.Markers[nest].Color     = prevBar.Markers[markerIDx].Color;
                    }

                    for (int markerIDx = 0; markerIDx < prevBar.MarkCount; markerIDx++)
                    {
                        float      duration = prevBar.Markers[markerIDx].EndTime - prevBar.Markers[markerIDx].BeginTime;
                        int        markerID = prevBar.Markers[markerIDx].MarkerID;
                        MarkerInfo m        = markers[markerID];

                        m.Logs[barIDx].Color = prevBar.Markers[markerIDx].Color;

                        if (!m.Logs[barIDx].Initialized)
                        {
                            // first frame
                            m.Logs[barIDx].Min         = duration;
                            m.Logs[barIDx].Max         = duration;
                            m.Logs[barIDx].Avg         = duration;
                            m.Logs[barIDx].Initialized = true;
                        }
                        else
                        {
                            // after the first frame
                            m.Logs[barIDx].Min  = Math.Min(m.Logs[barIDx].Min, duration);
                            m.Logs[barIDx].Max  = Math.Max(m.Logs[barIDx].Max, duration);
                            m.Logs[barIDx].Avg += duration;
                            m.Logs[barIDx].Avg *= 0.5f;

                            if (m.Logs[barIDx].Samples++ >= LogSnapDuration)
                            {
                                m.Logs[barIDx].SnapMin = m.Logs[barIDx].Min;
                                m.Logs[barIDx].SnapMax = m.Logs[barIDx].Max;
                                m.Logs[barIDx].SnapAvg = m.Logs[barIDx].Avg;
                                m.Logs[barIDx].Samples = 0;
                            }
                        }
                    }

                    nextBar.MarkCount = prevBar.NestCount;
                    nextBar.NestCount = prevBar.NestCount;
                }

                stopwatch.Restart();
            }
        }
コード例 #20
0
ファイル: TimeRuler.cs プロジェクト: yxrkt/AvatarHamsterPanic
        public void StartFrame()
        {
            #if TRACE
              lock ( this )
              {
            prevLog = logs[frameCount++ & 0x1];
            curLog = logs[frameCount & 0x1];

            float endFrameTime = (float)stopwatch.Elapsed.TotalMilliseconds;

            for ( int barIdx = 0; barIdx < prevLog.Bars.Length; ++barIdx )
            {
              MarkerCollection prevBar = prevLog.Bars[barIdx];
              MarkerCollection nextBar = curLog.Bars[barIdx];

              for ( int nest = 0; nest < prevBar.NestCount; ++nest )
              {
            int markerIdx = prevBar.MarkerNests[nest];

            prevBar.Markers[markerIdx].EndTime = endFrameTime;

            nextBar.MarkerNests[nest] = nest;
            nextBar.Markers[nest].MarkerId =
                prevBar.Markers[markerIdx].MarkerId;
            nextBar.Markers[nest].BeginTime = 0;
            nextBar.Markers[nest].EndTime = -1;
            nextBar.Markers[nest].Color = prevBar.Markers[markerIdx].Color;
              }

              for ( int markerIdx = 0; markerIdx < prevBar.MarkCount; ++markerIdx )
              {
            float duration = prevBar.Markers[markerIdx].EndTime -
                                prevBar.Markers[markerIdx].BeginTime;

            int markerId = prevBar.Markers[markerIdx].MarkerId;
            MarkerInfo m = markers[markerId];

            m.Logs[barIdx].Color = prevBar.Markers[markerIdx].Color;

            if ( !m.Logs[barIdx].Initialized )
            {
              m.Logs[barIdx].Min = duration;
              m.Logs[barIdx].Max = duration;
              m.Logs[barIdx].Avg = duration;

              m.Logs[barIdx].Initialized = true;
            }
            else
            {
              m.Logs[barIdx].Min = Math.Min( m.Logs[barIdx].Min, duration );
              m.Logs[barIdx].Max = Math.Min( m.Logs[barIdx].Max, duration );
              m.Logs[barIdx].Avg += duration;
              m.Logs[barIdx].Avg *= 0.5f;

              if ( m.Logs[barIdx].Samples++ >= LogSnapDuration )
              {
                m.Logs[barIdx].SnapMin = m.Logs[barIdx].Min;
                m.Logs[barIdx].SnapMax = m.Logs[barIdx].Max;
                m.Logs[barIdx].SnapAvg = m.Logs[barIdx].Avg;
                m.Logs[barIdx].Samples = 0;
              }
            }
              }

              nextBar.MarkCount = prevBar.NestCount;
              nextBar.NestCount = prevBar.NestCount;
            }

            stopwatch.Reset();
            stopwatch.Start();
              }
            #endif
        }
コード例 #21
0
ファイル: TimeRuler.cs プロジェクト: nagysa1313/Cannonball
        public override void Initialize()
        {
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; i++)
            {
                logs[i] = new FrameLog(MaxBars, MaxSamples, MaxNestCalls);
            }
            sampleFrames = TargetSampleFrames = 1;
            this.Enabled = false;

            base.Initialize();
        }
コード例 #22
0
ファイル: TimeRuler.cs プロジェクト: nagysa1313/Cannonball
        public void StartFrame()
        {
            lock (this)
            {
                int count = Interlocked.Increment(ref updateCount);
                if (Visible && (1 < count && count < MaxSampleFrames))
                {
                    return;
                }

                prevLog = logs[frameCount++ & 0x1];
                curLog = logs[frameCount & 0x1];

                float endFrameTime = (float)stopwatch.Elapsed.TotalMilliseconds;

                for (int barIDx = 0; barIDx < prevLog.Bars.Length; ++barIDx)
                {
                    var prevBar = prevLog.Bars[barIDx];
                    var nextBar = curLog.Bars[barIDx];

                    // reopen not ended marks
                    for (int nest = 0; nest < prevBar.NestCount; nest++)
                    {
                        int markerIDx = prevBar.MarkerNests[nest];

                        prevBar.Markers[markerIDx].EndTime = endFrameTime;

                        nextBar.MarkerNests[nest] = nest;
                        nextBar.Markers[nest].MarkerID = prevBar.Markers[markerIDx].MarkerID;
                        nextBar.Markers[nest].BeginTime = 0;
                        nextBar.Markers[nest].EndTime = -1;
                        nextBar.Markers[nest].Color = prevBar.Markers[markerIDx].Color;
                    }

                    for (int markerIDx = 0; markerIDx < prevBar.MarkCount; markerIDx++)
                    {
                        float duration = prevBar.Markers[markerIDx].EndTime - prevBar.Markers[markerIDx].BeginTime;
                        int markerID = prevBar.Markers[markerIDx].MarkerID;
                        MarkerInfo m = markers[markerID];

                        m.Logs[barIDx].Color = prevBar.Markers[markerIDx].Color;

                        if (!m.Logs[barIDx].Initialized)
                        {
                            // first frame
                            m.Logs[barIDx].Min = duration;
                            m.Logs[barIDx].Max = duration;
                            m.Logs[barIDx].Avg = duration;
                            m.Logs[barIDx].Initialized = true;
                        }
                        else
                        {
                            // after the first frame
                            m.Logs[barIDx].Min = Math.Min(m.Logs[barIDx].Min, duration);
                            m.Logs[barIDx].Max = Math.Max(m.Logs[barIDx].Max, duration);
                            m.Logs[barIDx].Avg += duration;
                            m.Logs[barIDx].Avg *= 0.5f;

                            if (m.Logs[barIDx].Samples++ >= LogSnapDuration)
                            {
                                m.Logs[barIDx].SnapMin = m.Logs[barIDx].Min;
                                m.Logs[barIDx].SnapMax = m.Logs[barIDx].Max;
                                m.Logs[barIDx].SnapAvg = m.Logs[barIDx].Avg;
                                m.Logs[barIDx].Samples = 0;
                            }
                        }
                    }

                    nextBar.MarkCount = prevBar.NestCount;
                    nextBar.NestCount = prevBar.NestCount;
                }

                stopwatch.Restart();
            }
        }
コード例 #23
0
ファイル: TimeRuler.cs プロジェクト: yxrkt/AvatarHamsterPanic
        public override void Initialize()
        {
            #if TRACE
              debugManager =
              Game.Services.GetService( typeof( DebugManager ) ) as DebugManager;

              if ( debugManager == null )
            throw new InvalidOperationException( "DebugManager is not registered." );

              IDebugCommandHost host =
                          Game.Services.GetService( typeof( IDebugCommandHost ) )
                                                              as IDebugCommandHost;

              if ( host != null )
              {
            host.RegisterCommand( "tr", "TimeRuler", this.CommandExecute );
            this.Visible = false;
            this.Enabled = false;
              }

              logs = new FrameLog[2];
              for ( int i = 0; i < logs.Length; ++i )
            logs[i] = new FrameLog();

              sampleFrames = TargetSampleFrames = 1;
            #endif
              base.Initialize();
        }
コード例 #24
0
        protected override void LoadContent()
        {
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; ++i)
            {
                logs[i] = new FrameLog();
            }

            sampleFrames = targetSampleFrames = 1;

            var vp = GraphicsDevice.Viewport;
            var layout = new Layout(new Rectangle(vp.X, vp.Y, vp.Width, vp.Height), vp.TitleSafeArea);

            width = (int) (layout.ClientArea.Width * 0.8f);

            position = layout.Place(
                new Vector2(width, BarHeight),
                0.0f,
                0.01f,
                LayoutAlignment.BottomCenter);

            base.LoadContent();
        }
コード例 #25
0
ファイル: TimeRuler.cs プロジェクト: RastaCow/Nez
		public void startFrame()
		{
			lock( this )
			{
				// We skip reset frame when this method gets called multiple times.
				var count = Interlocked.Increment( ref updateCount );
				if( enabled && ( 1 < count && count < maxSampleFrames ) )
					return;

				// Update current frame log.
				prevLog = logs[frameCount++ & 0x1];
				curLog = logs[frameCount & 0x1];

				var endFrameTime = (float)stopwatch.elapsed.TotalMilliseconds;

				// Update marker and create a log.
				for( var barIdx = 0; barIdx < prevLog.bars.Length; ++barIdx )
				{
					var prevBar = prevLog.bars[barIdx];
					var nextBar = curLog.bars[barIdx];

					// Re-open marker that didn't get called EndMark in previous frame.
					for( var nest = 0; nest < prevBar.nestCount; ++nest )
					{
						var markerIdx = prevBar.markerNests[nest];

						prevBar.markers[markerIdx].endTime = endFrameTime;

						nextBar.markerNests[nest] = nest;
						nextBar.markers[nest].markerId =
                            prevBar.markers[markerIdx].markerId;
						nextBar.markers[nest].beginTime = 0;
						nextBar.markers[nest].endTime = -1;
						nextBar.markers[nest].color = prevBar.markers[markerIdx].color;
					}

					// Update marker log.
					for( var markerIdx = 0; markerIdx < prevBar.markCount; ++markerIdx )
					{
						var duration = prevBar.markers[markerIdx].endTime -
						                                   prevBar.markers[markerIdx].beginTime;

						int markerId = prevBar.markers[markerIdx].markerId;
						MarkerInfo m = markers[markerId];

						m.logs[barIdx].color = prevBar.markers[markerIdx].color;

						if( !m.logs[barIdx].initialized )
						{
							// First frame process.
							m.logs[barIdx].min = duration;
							m.logs[barIdx].max = duration;
							m.logs[barIdx].avg = duration;

							m.logs[barIdx].initialized = true;
						}
						else
						{
							// Process after first frame.
							m.logs[barIdx].min = Math.Min( m.logs[barIdx].min, duration );
							m.logs[barIdx].max = Math.Min( m.logs[barIdx].max, duration );
							m.logs[barIdx].avg += duration;
							m.logs[barIdx].avg *= 0.5f;

							if( m.logs[barIdx].samples++ >= logSnapDuration )
							{
								m.logs[barIdx].snapMin = m.logs[barIdx].min;
								m.logs[barIdx].snapMax = m.logs[barIdx].max;
								m.logs[barIdx].snapAvg = m.logs[barIdx].avg;
								m.logs[barIdx].samples = 0;
							}
						}
					}

					nextBar.markCount = prevBar.nestCount;
					nextBar.nestCount = prevBar.nestCount;
				}

				// Start measuring.
				stopwatch.reset();
				stopwatch.start();
			}
		}
コード例 #26
0
ファイル: TimeRuler.cs プロジェクト: RastaCow/Nez
		public TimeRuler()
		{
			// Initialize Parameters.
			logs = new FrameLog[2];
			for( int i = 0; i < logs.Length; ++i )
				logs[i] = new FrameLog();

			sampleFrames = targetSampleFrames = 1;

			width = (int)( Core.graphicsDevice.Viewport.Width * 0.8f );

			Core.emitter.addObserver( CoreEvents.GraphicsDeviceReset, onGraphicsDeviceReset );
			onGraphicsDeviceReset();
		}
コード例 #27
0
ファイル: TimeRuler.cs プロジェクト: alittle1234/XNA_Project
        public override void Initialize()
        {
            #if TRACE
            debugManager =
                Game.Services.GetService(typeof(DebugManager)) as DebugManager;

            if (debugManager == null)
                throw new InvalidOperationException("DebugManager is not registered.");

            // Add "tr" command if DebugCommandHost is registered.
            IDebugCommandHost host =
                                Game.Services.GetService(typeof(IDebugCommandHost))
                                                                    as IDebugCommandHost;
            if (host != null)
            {
                host.RegisterCommand("tr", "TimeRuler", this.CommandExecute);
                this.Visible = true;
            }

            // Initialize Parameters.
            logs = new FrameLog[2];
            for (int i = 0; i < logs.Length; ++i)
                logs[i] = new FrameLog();

            sampleFrames = TargetSampleFrames = 1;

            // Time-Ruler's update method doesn't need to get called.
            this.Enabled = false;
            #endif
            base.Initialize();
        }
コード例 #28
0
 /// <summary>
 /// ����ΪEXCEl�ĵ�
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void btnDown_Click(object sender, EventArgs e)
 {
     int TotalNum = 0;
     DataView dv = new FrameLog().Select(txtOperateModule.Text.Trim(), txtOperateUserID.Text.Trim(), DateFromTo.FromText, DateFromTo.ToText, Pager.PageSize, Pager.CurrentPageIndex, out TotalNum);
     new FrameCommon().ConvertToExcelDown(dv, "aaa");
 }
コード例 #29
0
ファイル: TimeRuler.cs プロジェクト: alittle1234/XNA_Project
        public void StartFrame()
        {
            #if TRACE
            lock (this)
            {
                // We skip reset frame when this method gets called multiple times.
                int count = Interlocked.Increment(ref updateCount);
                if (Visible && (1 < count && count < MaxSampleFrames))
                    return;

                // Update current frame log.
                prevLog = logs[frameCount++ & 0x1];
                curLog = logs[frameCount & 0x1];

                float endFrameTime = (float)stopwatch.Elapsed.TotalMilliseconds;

                // Update marker and create a log.
                for (int barIdx = 0; barIdx < prevLog.Bars.Length; ++barIdx)
                {
                    MarkerCollection prevBar = prevLog.Bars[barIdx];
                    MarkerCollection nextBar = curLog.Bars[barIdx];

                    // Re-open marker that didn't get called EndMark in previous frame.
                    for (int nest = 0; nest < prevBar.NestCount; ++nest)
                    {
                        int markerIdx = prevBar.MarkerNests[nest];

                        prevBar.Markers[markerIdx].EndTime = endFrameTime;

                        nextBar.MarkerNests[nest] = nest;
                        nextBar.Markers[nest].MarkerId =
                            prevBar.Markers[markerIdx].MarkerId;
                        nextBar.Markers[nest].BeginTime = 0;
                        nextBar.Markers[nest].EndTime = -1;
                        nextBar.Markers[nest].Color = prevBar.Markers[markerIdx].Color;
                    }

                    // Update marker log.
                    for (int markerIdx = 0; markerIdx < prevBar.MarkCount; ++markerIdx)
                    {
                        float duration = prevBar.Markers[markerIdx].EndTime -
                                            prevBar.Markers[markerIdx].BeginTime;

                        int markerId = prevBar.Markers[markerIdx].MarkerId;
                        MarkerInfo m = markers[markerId];

                        m.Logs[barIdx].Color = prevBar.Markers[markerIdx].Color;

                        if (!m.Logs[barIdx].Initialized)
                        {
                            // First frame process.
                            m.Logs[barIdx].Min = duration;
                            m.Logs[barIdx].Max = duration;
                            m.Logs[barIdx].Avg = duration;

                            m.Logs[barIdx].Initialized = true;
                        }
                        else
                        {
                            // Process after first frame.
                            m.Logs[barIdx].Min = Math.Min(m.Logs[barIdx].Min, duration);
                            m.Logs[barIdx].Max = Math.Min(m.Logs[barIdx].Max, duration);
                            m.Logs[barIdx].Avg += duration;
                            m.Logs[barIdx].Avg *= 0.5f;

                            if (m.Logs[barIdx].Samples++ >= LogSnapDuration)
                            {
                                m.Logs[barIdx].SnapMin = m.Logs[barIdx].Min;
                                m.Logs[barIdx].SnapMax = m.Logs[barIdx].Max;
                                m.Logs[barIdx].SnapAvg = m.Logs[barIdx].Avg;
                                m.Logs[barIdx].Samples = 0;
                            }
                        }
                    }

                    nextBar.MarkCount = prevBar.NestCount;
                    nextBar.NestCount = prevBar.NestCount;
                }

                // Start measuring.
                stopwatch.Reset();
                stopwatch.Start();
            }
            #endif
        }
コード例 #30
0
        public void startFrame()
        {
            lock (this)
            {
                // We skip reset frame when this method gets called multiple times.
                var count = Interlocked.Increment(ref updateCount);
                if (enabled && (1 < count && count < maxSampleFrames))
                {
                    return;
                }

                // Update current frame log.
                prevLog = logs[frameCount++ & 0x1];
                curLog  = logs[frameCount & 0x1];

                var endFrameTime = (float)stopwatch.elapsed.TotalMilliseconds;

                // Update marker and create a log.
                for (var barIdx = 0; barIdx < prevLog.bars.Length; ++barIdx)
                {
                    var prevBar = prevLog.bars[barIdx];
                    var nextBar = curLog.bars[barIdx];

                    // Re-open marker that didn't get called EndMark in previous frame.
                    for (var nest = 0; nest < prevBar.nestCount; ++nest)
                    {
                        var markerIdx = prevBar.markerNests[nest];

                        prevBar.markers[markerIdx].endTime = endFrameTime;

                        nextBar.markerNests[nest]      = nest;
                        nextBar.markers[nest].markerId =
                            prevBar.markers[markerIdx].markerId;
                        nextBar.markers[nest].beginTime = 0;
                        nextBar.markers[nest].endTime   = -1;
                        nextBar.markers[nest].color     = prevBar.markers[markerIdx].color;
                    }

                    // Update marker log.
                    for (var markerIdx = 0; markerIdx < prevBar.markCount; ++markerIdx)
                    {
                        var duration = prevBar.markers[markerIdx].endTime -
                                       prevBar.markers[markerIdx].beginTime;

                        int        markerId = prevBar.markers[markerIdx].markerId;
                        MarkerInfo m        = markers[markerId];

                        m.logs[barIdx].color = prevBar.markers[markerIdx].color;

                        if (!m.logs[barIdx].initialized)
                        {
                            // First frame process.
                            m.logs[barIdx].min = duration;
                            m.logs[barIdx].max = duration;
                            m.logs[barIdx].avg = duration;

                            m.logs[barIdx].initialized = true;
                        }
                        else
                        {
                            // Process after first frame.
                            m.logs[barIdx].min  = Math.Min(m.logs[barIdx].min, duration);
                            m.logs[barIdx].max  = Math.Min(m.logs[barIdx].max, duration);
                            m.logs[barIdx].avg += duration;
                            m.logs[barIdx].avg *= 0.5f;

                            if (m.logs[barIdx].samples++ >= logSnapDuration)
                            {
                                m.logs[barIdx].snapMin = m.logs[barIdx].min;
                                m.logs[barIdx].snapMax = m.logs[barIdx].max;
                                m.logs[barIdx].snapAvg = m.logs[barIdx].avg;
                                m.logs[barIdx].samples = 0;
                            }
                        }
                    }

                    nextBar.markCount = prevBar.nestCount;
                    nextBar.nestCount = prevBar.nestCount;
                }

                // Start measuring.
                stopwatch.reset();
                stopwatch.start();
            }
        }
コード例 #31
0
        public void StartFrame()
        {
#if TRACE
            lock (this)
            {
                // We skip reset frame when this method gets called multiple times.
                int count = Interlocked.Increment(ref updateCount);
                if (Visible && (1 < count && count < MaxSampleFrames))
                {
                    return;
                }

                // Update current frame log.
                prevLog = logs[frameCount++ & 0x1];
                curLog  = logs[frameCount & 0x1];

                float endFrameTime = (float)stopwatch.Elapsed.TotalMilliseconds;

                // Update marker and create a log.
                for (int barIdx = 0; barIdx < prevLog.Bars.Length; ++barIdx)
                {
                    MarkerCollection prevBar = prevLog.Bars[barIdx];
                    MarkerCollection nextBar = curLog.Bars[barIdx];

                    // Re-open marker that didn't get called EndMark in previous frame.
                    for (int nest = 0; nest < prevBar.NestCount; ++nest)
                    {
                        int markerIdx = prevBar.MarkerNests[nest];

                        prevBar.Markers[markerIdx].EndTime = endFrameTime;

                        nextBar.MarkerNests[nest]      = nest;
                        nextBar.Markers[nest].MarkerId =
                            prevBar.Markers[markerIdx].MarkerId;
                        nextBar.Markers[nest].BeginTime = 0;
                        nextBar.Markers[nest].EndTime   = -1;
                        nextBar.Markers[nest].Color     = prevBar.Markers[markerIdx].Color;
                    }

                    // Update marker log.
                    for (int markerIdx = 0; markerIdx < prevBar.MarkCount; ++markerIdx)
                    {
                        float duration = prevBar.Markers[markerIdx].EndTime -
                                         prevBar.Markers[markerIdx].BeginTime;

                        int        markerId = prevBar.Markers[markerIdx].MarkerId;
                        MarkerInfo m        = markers[markerId];

                        m.Logs[barIdx].Color = prevBar.Markers[markerIdx].Color;

                        if (!m.Logs[barIdx].Initialized)
                        {
                            // First frame process.
                            m.Logs[barIdx].Min = duration;
                            m.Logs[barIdx].Max = duration;
                            m.Logs[barIdx].Avg = duration;

                            m.Logs[barIdx].Initialized = true;
                        }
                        else
                        {
                            // Process after first frame.
                            m.Logs[barIdx].Min  = Math.Min(m.Logs[barIdx].Min, duration);
                            m.Logs[barIdx].Max  = Math.Min(m.Logs[barIdx].Max, duration);
                            m.Logs[barIdx].Avg += duration;
                            m.Logs[barIdx].Avg *= 0.5f;

                            if (m.Logs[barIdx].Samples++ >= LogSnapDuration)
                            {
                                m.Logs[barIdx].SnapMin = m.Logs[barIdx].Min;
                                m.Logs[barIdx].SnapMax = m.Logs[barIdx].Max;
                                m.Logs[barIdx].SnapAvg = m.Logs[barIdx].Avg;
                                m.Logs[barIdx].Samples = 0;
                            }
                        }
                    }

                    nextBar.MarkCount = prevBar.NestCount;
                    nextBar.NestCount = prevBar.NestCount;
                }

                // Start measuring.
                stopwatch.Reset();
                stopwatch.Start();
            }
#endif
        }
コード例 #32
0
ファイル: TimeRuler.cs プロジェクト: himapo/ccm
        public void StartFrame()
        {
#if TRACE
            lock (this)
            {
                // Game.IsFixedTimeStepがtrueの場合、Game.Updateが複数回呼ばれることがある。
                // http://blogs.msdn.com/b/ito/archive/2007/03/08/2-update.aspx
                // このケースに対処する為に、タイムルーラーの描画が呼び出されずにStartFrameが複数回呼ばれた場合は
                // フレームリセットするのではなく、測定を継続するようになっている。
                int count = Interlocked.Increment(ref updateCount);
                if (Visible && (1 < count && count < MaxSampleFrames))
                    return;

                // 現フレームログの更新
                prevLog = logs[frameCount++ & 0x1];
                curLog = logs[frameCount & 0x1];

                float endFrameTime = (float)stopwatch.Elapsed.TotalMilliseconds;

                // マーカーの更新とログ生成
                for (int barIdx = 0; barIdx < prevLog.Bars.Length; ++barIdx)
                {
                    MarkerCollection prevBar = prevLog.Bars[barIdx];
                    MarkerCollection nextBar = curLog.Bars[barIdx];

                    // 前フレームでEndMarkを呼んでいないマーカーを閉じ、現フレームで
                    // 再度開く。
                    for (int nest = 0; nest < prevBar.NestCount; ++nest)
                    {
                        int markerIdx = prevBar.MarkerNests[nest];

                        prevBar.Markers[markerIdx].EndTime = endFrameTime;

                        nextBar.MarkerNests[nest] = nest;
                        nextBar.Markers[nest].MarkerId =
                            prevBar.Markers[markerIdx].MarkerId;
                        nextBar.Markers[nest].BeginTime = 0;
                        nextBar.Markers[nest].EndTime = -1;
                        nextBar.Markers[nest].Color = prevBar.Markers[markerIdx].Color;
                    }

                    // マーカーログの更新
                    for (int markerIdx = 0; markerIdx < prevBar.MarkCount; ++markerIdx)
                    {
                        float duration = prevBar.Markers[markerIdx].EndTime -
                                            prevBar.Markers[markerIdx].BeginTime;

                        int markerId = prevBar.Markers[markerIdx].MarkerId;
                        MarkerInfo m = markers[markerId];

                        m.Logs[barIdx].Color = prevBar.Markers[markerIdx].Color;

                        if (!m.Logs[barIdx].Initialized)
                        {
                            // 最初のフレームの処理
                            m.Logs[barIdx].Min = duration;
                            m.Logs[barIdx].Max = duration;
                            m.Logs[barIdx].Avg = duration;

                            m.Logs[barIdx].Initialized = true;
                        }
                        else
                        {
                            // 2フレーム目以降の処理
                            m.Logs[barIdx].Min = Math.Min(m.Logs[barIdx].Min, duration);
                            m.Logs[barIdx].Max = Math.Min(m.Logs[barIdx].Max, duration);
                            m.Logs[barIdx].Avg += duration;
                            m.Logs[barIdx].Avg *= 0.5f;

                            if (m.Logs[barIdx].Samples++ >= LogSnapDuration)
                            {
                                m.Logs[barIdx].SnapMin = m.Logs[barIdx].Min;
                                m.Logs[barIdx].SnapMax = m.Logs[barIdx].Max;
                                m.Logs[barIdx].SnapAvg = m.Logs[barIdx].Avg;
                                m.Logs[barIdx].Samples = 0;
                            }
                        }
                    }

                    nextBar.MarkCount = prevBar.NestCount;
                    nextBar.NestCount = prevBar.NestCount;
                }

                // このフレームの測定開始
                stopwatch.Reset();
                stopwatch.Start();
            }
#endif
        }