// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved. #if USE_PROFILER using FlaxEngine; using FlaxEngine.GUI; namespace FlaxEditor.Windows.Profiler { /// /// The physics simulation profiling mode. /// /// internal sealed class Physics : ProfilerMode { private readonly SingleChart _activeBodiesChart; private readonly SingleChart _activeJointsChart; private readonly SingleChart _dynamicBodiesChart; private readonly SingleChart _staticBodiesChart; private readonly SingleChart _newPairsChart; private readonly SingleChart _newTouchesChart; public Physics() : base("Physics") { // Layout var panel = new Panel(ScrollBars.Vertical) { AnchorPreset = AnchorPresets.StretchAll, Offsets = Margin.Zero, Parent = this, }; var layout = new VerticalPanel { AnchorPreset = AnchorPresets.HorizontalStretchTop, Offsets = Margin.Zero, IsScrollable = true, Parent = panel, }; // Charts _activeBodiesChart = new SingleChart { Title = "Active Bodies", Parent = layout, }; _activeBodiesChart.SelectedSampleChanged += OnSelectedSampleChanged; _activeJointsChart = new SingleChart { Title = "Active Joints", Parent = layout, }; _activeJointsChart.SelectedSampleChanged += OnSelectedSampleChanged; _dynamicBodiesChart = new SingleChart { Title = "Dynamic Bodies", Parent = layout, }; _dynamicBodiesChart.SelectedSampleChanged += OnSelectedSampleChanged; _staticBodiesChart = new SingleChart { Title = "Static Bodies", Parent = layout, }; _staticBodiesChart.SelectedSampleChanged += OnSelectedSampleChanged; _newPairsChart = new SingleChart { Title = "New Pairs", Parent = layout, }; _newPairsChart.SelectedSampleChanged += OnSelectedSampleChanged; _newTouchesChart = new SingleChart { Title = "New Touches", Parent = layout, }; _newTouchesChart.SelectedSampleChanged += OnSelectedSampleChanged; } /// public override void Clear() { _activeBodiesChart.Clear(); _activeJointsChart.Clear(); _dynamicBodiesChart.Clear(); _staticBodiesChart.Clear(); _newPairsChart.Clear(); _newTouchesChart.Clear(); } /// public override void Update(ref SharedUpdateData sharedData) { PhysicsStatistics statistics = FlaxEngine.Physics.DefaultScene.Statistics; _activeBodiesChart.AddSample(statistics.ActiveDynamicBodies + statistics.ActiveKinematicBodies); _activeJointsChart.AddSample(statistics.ActiveJoints); _dynamicBodiesChart.AddSample(statistics.DynamicBodies + statistics.KinematicBodies); _staticBodiesChart.AddSample(statistics.StaticBodies); _newPairsChart.AddSample(statistics.NewPairs); _newTouchesChart.AddSample(statistics.NewTouches); } /// public override void UpdateView(int selectedFrame, bool showOnlyLastUpdateEvents) { _activeBodiesChart.SelectedSampleIndex = selectedFrame; _activeJointsChart.SelectedSampleIndex = selectedFrame; _dynamicBodiesChart.SelectedSampleIndex = selectedFrame; _staticBodiesChart.SelectedSampleIndex = selectedFrame; _newPairsChart.SelectedSampleIndex = selectedFrame; _newTouchesChart.SelectedSampleIndex = selectedFrame; } } } #endif