Skip to content

Commit 882ee56

Browse files
Feature/provider updates (#646)
Adding an additional flip frame type event to the Intel app provider and increasing the robustness of the PresentMonProvider_FlipFrameType path.
1 parent 670f800 commit 882ee56

13 files changed

Lines changed: 560 additions & 42 deletions

IntelPresentMon/CommonUtilities/mc/MetricsCalculator.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2025 Intel Corporation
1+
// Copyright (C) 2026 Intel Corporation
22
// SPDX-License-Identifier: MIT
33
#include "MetricsCalculator.h"
44
#include "MetricsCalculatorInternal.h"
@@ -119,6 +119,7 @@ namespace pmon::util::metrics
119119
auto metrics = ComputeFrameMetrics(
120120
qpc,
121121
present,
122+
chainState.lastDisplayedScreenTime,
122123
screenTime,
123124
nextScreenTime,
124125
isDisplayed,
@@ -162,6 +163,7 @@ namespace pmon::util::metrics
162163
auto metrics = ComputeFrameMetrics(
163164
qpc,
164165
present,
166+
chainState.lastDisplayedScreenTime,
165167
screenTime,
166168
nextScreenTime,
167169
isDisplayedInstance,
@@ -183,6 +185,10 @@ namespace pmon::util::metrics
183185
const bool shouldUpdateSwapChain = (nextDisplayed != nullptr);
184186

185187
for (size_t displayIndex = indexing.startIndex; displayIndex < indexing.endIndex; ++displayIndex) {
188+
const uint64_t previousDisplayedScreenTime =
189+
displayIndex > 0
190+
? present.displayed[displayIndex - 1].second
191+
: chainState.lastDisplayedScreenTime;
186192
uint64_t screenTime = present.displayed[displayIndex].second;
187193
uint64_t nextScreenTime = 0;
188194

@@ -207,6 +213,7 @@ namespace pmon::util::metrics
207213
auto metrics = ComputeFrameMetrics(
208214
qpc,
209215
present,
216+
previousDisplayedScreenTime,
210217
screenTime,
211218
nextScreenTime,
212219
isDisplayedInstance,
@@ -235,6 +242,7 @@ namespace pmon::util::metrics
235242
ComputedMetrics ComputeFrameMetrics(
236243
const QpcConverter& qpc,
237244
const FrameData& present,
245+
uint64_t previousDisplayedScreenTime,
238246
uint64_t screenTime,
239247
uint64_t nextScreenTime,
240248
bool isDisplayed,
@@ -258,6 +266,7 @@ namespace pmon::util::metrics
258266
qpc,
259267
present,
260268
chain,
269+
previousDisplayedScreenTime,
261270
isDisplayed,
262271
screenTime,
263272
nextScreenTime,

IntelPresentMon/CommonUtilities/mc/MetricsCalculator.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2025 Intel Corporation
1+
// Copyright (C) 2026 Intel Corporation
22
// SPDX-License-Identifier: MIT
33
#pragma once
44
#include <cstdint>
@@ -50,6 +50,7 @@ namespace pmon::util::metrics
5050
ComputedMetrics ComputeFrameMetrics(
5151
const QpcConverter& qpc,
5252
const FrameData& present,
53+
uint64_t previousDisplayedScreenTime,
5354
uint64_t screenTime,
5455
uint64_t nextScreenTime,
5556
bool isDisplayed,

IntelPresentMon/CommonUtilities/mc/MetricsCalculatorDisplay.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2025 Intel Corporation
1+
// Copyright (C) 2026 Intel Corporation
22
// SPDX-License-Identifier: MIT
33
#include "MetricsCalculator.h"
44
#include "MetricsCalculatorInternal.h"
@@ -26,12 +26,12 @@ namespace pmon::util::metrics
2626
// Helper dedicated to computing msBetweenDisplayChange, matching legacy ReportMetricsHelper behavior.
2727
double ComputeMsBetweenDisplayChange(
2828
const QpcConverter& qpc,
29-
const SwapChainCoreState& chain,
29+
uint64_t previousDisplayedScreenTime,
3030
bool isDisplayed,
3131
uint64_t screenTime)
3232
{
3333
return isDisplayed
34-
? qpc.DeltaUnsignedMilliSeconds(chain.lastDisplayedScreenTime, screenTime)
34+
? qpc.DeltaUnsignedMilliSeconds(previousDisplayedScreenTime, screenTime)
3535
: 0.0;
3636
}
3737

@@ -194,13 +194,14 @@ namespace pmon::util::metrics
194194
const QpcConverter& qpc,
195195
const FrameData& present,
196196
const SwapChainCoreState& swapChain,
197+
uint64_t previousDisplayedScreenTime,
197198
bool isDisplayed,
198199
uint64_t screenTime,
199200
uint64_t nextScreenTime,
200201
FrameMetrics& metrics)
201202
{
202203
metrics.msUntilDisplayed = ComputeMsUntilDisplayed(qpc, present, isDisplayed, screenTime);
203-
metrics.msBetweenDisplayChange = ComputeMsBetweenDisplayChange(qpc, swapChain, isDisplayed, screenTime);
204+
metrics.msBetweenDisplayChange = ComputeMsBetweenDisplayChange(qpc, previousDisplayedScreenTime, isDisplayed, screenTime);
204205
metrics.msDisplayedTime = ComputeMsDisplayedTime(qpc, isDisplayed, screenTime, nextScreenTime);
205206
metrics.msFlipDelay = ComputeMsFlipDelay(qpc, present, isDisplayed);
206207
metrics.msDisplayLatency = ComputeMsDisplayLatency(qpc, swapChain, present, isDisplayed, screenTime);

IntelPresentMon/CommonUtilities/mc/MetricsCalculatorInternal.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2025 Intel Corporation
1+
// Copyright (C) 2026 Intel Corporation
22
// SPDX-License-Identifier: MIT
33
#pragma once
44

@@ -17,6 +17,7 @@ namespace pmon::util::metrics
1717
const QpcConverter& qpc,
1818
const FrameData& present,
1919
const SwapChainCoreState& swapChain,
20+
uint64_t previousDisplayedScreenTime,
2021
bool isDisplayed,
2122
uint64_t screenTime,
2223
uint64_t nextScreenTime,

0 commit comments

Comments
 (0)