MCPcopy Create free account
hub / github.com/defold/defold / UpdateRenderProfile

Function UpdateRenderProfile

engine/profiler/src/profiler_render.cpp:749–807  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

747 }
748
749 void UpdateRenderProfile(HRenderProfile render_profile, const dmProfileRender::ProfilerFrame* current_frame)
750 {
751 if (render_profile->m_Mode == PROFILER_MODE_PAUSE)
752 {
753 return;
754 }
755
756 uint32_t last_thread_name = GetSelectedThread(render_profile, render_profile->m_CurrentFrame)->m_NameHash;
757 if (render_profile->m_CurrentFrame)
758 {
759 DeleteProfilerFrame(render_profile->m_CurrentFrame);
760 render_profile->m_CurrentFrame = 0;
761 }
762
763 if (!current_frame)
764 return;
765
766 render_profile->m_CurrentFrame = DuplicateProfilerFrame(current_frame);
767
768 ProfilerThread* current_thread = GetSelectedThread(render_profile, render_profile->m_CurrentFrame);
769 if (last_thread_name != current_thread->m_NameHash)
770 {
771 render_profile->m_MaxFrameTime = 0;
772 }
773
774 uint64_t this_frame_time = current_thread->m_SamplesTotalTime;
775
776 bool new_peak_frame = render_profile->m_MaxFrameTime < this_frame_time;
777 render_profile->m_MaxFrameTime = dmMath::Max(render_profile->m_MaxFrameTime, this_frame_time);
778
779 if (new_peak_frame)
780 {
781 if (render_profile->m_LastPeakFrame)
782 {
783 DeleteProfilerFrame(render_profile->m_LastPeakFrame);
784 }
785 render_profile->m_LastPeakFrame = DuplicateProfilerFrame(render_profile->m_CurrentFrame);
786 }
787
788 if (render_profile->m_Mode == PROFILER_MODE_SHOW_PEAK_FRAME)
789 {
790 render_profile->m_ActiveFrame = render_profile->m_LastPeakFrame;
791 return;
792 }
793
794 if (render_profile->m_Mode == PROFILER_MODE_RECORD)
795 {
796 ProfilerFrame* snapshot = DuplicateProfilerFrame(render_profile->m_CurrentFrame);
797
798 if (render_profile->m_RecordBuffer.Remaining() == 0)
799 {
800 render_profile->m_RecordBuffer.SetCapacity(render_profile->m_RecordBuffer.Size() + (uint32_t)render_profile->m_FPS);
801 }
802 render_profile->m_RecordBuffer.Push(snapshot);
803 render_profile->m_PlaybackFrame = (int32_t)render_profile->m_RecordBuffer.Size();
804 }
805
806 render_profile->m_ActiveFrame = 0;

Callers 2

RenderProfilerFunction · 0.85
TEST_FFunction · 0.85

Calls 8

GetSelectedThreadFunction · 0.85
DeleteProfilerFrameFunction · 0.85
DuplicateProfilerFrameFunction · 0.85
MaxFunction · 0.50
RemainingMethod · 0.45
SetCapacityMethod · 0.45
SizeMethod · 0.45
PushMethod · 0.45

Tested by 1

TEST_FFunction · 0.68