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(); }
/// <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; } }
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(); }
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(); }
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(); } }
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(); }
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();"); }
//--------------------// #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"); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); } }
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(); }
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(); } }
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(); } }
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(); } }
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 }
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(); }
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(); }
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(); } }
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(); }
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(); }
/// <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"); }
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 }
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(); } }
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 }
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 }