MCPcopy Create free account
hub / github.com/TheRealMJP/SHforHLSL / UpdateProfile

Function UpdateProfile

SHTest/SampleFramework12/v1.04/Graphics/Profiler.cpp:192–242  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

190}
191
192static void UpdateProfile(ProfileData& profile, uint64 profileIdx, bool drawText, uint64 gpuFrequency, const uint64* frameQueryData)
193{
194 profile.QueryFinished = false;
195
196 double time = 0.0f;
197 if(profile.CPUProfile)
198 {
199 time = double(profile.EndTime - profile.StartTime) / 1000.0;
200 }
201 else if(frameQueryData)
202 {
203 Assert_(frameQueryData != nullptr);
204
205 // Get the query data
206 uint64 startTime = frameQueryData[profileIdx * 2 + 0];
207 uint64 endTime = frameQueryData[profileIdx * 2 + 1];
208
209 if(endTime > startTime)
210 {
211 uint64 delta = endTime - startTime;
212 double frequency = double(gpuFrequency);
213 time = (delta / frequency) * 1000.0;
214 }
215 }
216
217 profile.TimeSamples[profile.CurrSample] = time;
218 profile.CurrSample = (profile.CurrSample + 1) % ProfileData::FilterSize;
219
220 double maxTime = 0.0;
221 double avgTime = 0.0;
222 uint64 avgTimeSamples = 0;
223 for(UINT i = 0; i < ProfileData::FilterSize; ++i)
224 {
225 if(profile.TimeSamples[i] <= 0.0)
226 continue;
227 maxTime = Max(profile.TimeSamples[i], maxTime);
228 avgTime += profile.TimeSamples[i];
229 ++avgTimeSamples;
230 }
231
232 if(avgTimeSamples > 0)
233 avgTime /= double(avgTimeSamples);
234
235 if(profile.Active && drawText)
236 ImGui::Text("%s: %.2fms (%.2fms max)", profile.Name, avgTime, maxTime);
237
238 profile.AverageTime = avgTime;
239 profile.MaxTime = maxTime;
240
241 profile.Active = false;
242}
243
244void Profiler::EndFrame(uint32 displayWidth, uint32 displayHeight, uint32 avgFPS, double avgFrameTime)
245{

Callers 1

EndFrameMethod · 0.85

Calls 1

MaxFunction · 0.85

Tested by

no test coverage detected