MCPcopy Create free account
hub / github.com/GameTechDev/PresentMon / GetPresentProcessInfo

Function GetPresentProcessInfo

PresentMon/OutputThread.cpp:315–360  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

313}
314
315static bool GetPresentProcessInfo(
316 std::shared_ptr<PresentEvent> const& presentEvent,
317 bool create,
318 ProcessInfo** outProcessInfo,
319 SwapChainData** outChain,
320 uint64_t* outPresentTime)
321{
322 ProcessInfo* processInfo;
323 auto ii = gProcesses.find(presentEvent->ProcessId);
324 if (ii != gProcesses.end()) {
325 processInfo = &ii->second;
326 } else {
327 if (!create) {
328 *outProcessInfo = nullptr;
329 *outChain = nullptr;
330 *outPresentTime = presentEvent->PresentStartTime;
331 return false;
332 }
333
334 ProcessInfo info;
335 QueryProcessName(presentEvent->ProcessId, &info);
336 info.mOutputCsv = nullptr;
337 info.mIsTargetProcess = IsTargetProcess(presentEvent->ProcessId, info.mModuleName);
338 if (info.mIsTargetProcess) {
339 gTargetProcessCount += 1;
340 }
341
342 processInfo = &gProcesses.emplace(presentEvent->ProcessId, info).first->second;
343 }
344
345 if (!processInfo->mIsTargetProcess) {
346 return true;
347 }
348
349 auto chain = &processInfo->mSwapChain[presentEvent->SwapChainAddress];
350 if (!chain->mUnifiedSwapChain.swapChain.lastPresent.has_value()) {
351 using namespace pmon::util::metrics;
352 chain->mUnifiedSwapChain.SeedFromFirstPresent(FrameData::CopyFrameData(presentEvent));
353 return true;
354 }
355
356 *outProcessInfo = processInfo;
357 *outChain = chain;
358 *outPresentTime = chain->mUnifiedSwapChain.GetLastPresentQpc();
359 return false;
360}
361
362static void ProcessRecordingToggle(
363 bool* isRecording)

Callers 1

ProcessEventsFunction · 0.85

Calls 5

QueryProcessNameFunction · 0.85
IsTargetProcessFunction · 0.85
SeedFromFirstPresentMethod · 0.80
GetLastPresentQpcMethod · 0.80
endMethod · 0.45

Tested by

no test coverage detected