From db56c235473bfb03cfb619d5cd69e9a97c50df28 Mon Sep 17 00:00:00 2001
From: Strecker <101173645+StreckerMX@users.noreply.github.com>
Date: Tue, 1 Sep 2026 23:47:02 -0600
Subject: [PATCH] Prepare Frame Performance Analyzer 3.2.3
---
.zenodo.json | 2 +-
CITATION.cff | 2 +-
Directory.Build.props | 8 ++--
README.md | 10 ++++-
docs/RELEASE-README.md | 45 +++++++++++--------
docs/index.html | 2 +-
scripts/package-release.ps1 | 2 +-
.../PackagingContractTests.cs | 8 ++--
.../ReleaseInfoTests.cs | 2 +-
9 files changed, 48 insertions(+), 33 deletions(-)
diff --git a/.zenodo.json b/.zenodo.json
index f794c30..976eab1 100644
--- a/.zenodo.json
+++ b/.zenodo.json
@@ -7,7 +7,7 @@
}
],
"title": "Frame Performance Analyzer",
- "version": "3.2.0",
+ "version": "3.2.3",
"description": "Native Windows desktop application for analyzing and comparing NVIDIA FrameView captures and NVIDIA App performance-overlay logs, with interactive performance charts, Pair and Multi benchmark comparison, visible-range statistics, filtering, a benchmark library, and presentation-ready exports.",
"access_right": "open",
"license": "mit",
diff --git a/CITATION.cff b/CITATION.cff
index 3106aaf..0fbc2f1 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -2,7 +2,7 @@ cff-version: 1.2.0
message: "If you use Frame Performance Analyzer, please cite the software using these metadata."
title: "Frame Performance Analyzer"
type: software
-version: "3.2.0"
+version: "3.2.3"
license: MIT
abstract: "Native Windows desktop application for analyzing and comparing NVIDIA FrameView captures and NVIDIA App performance-overlay logs, with interactive charts, benchmark comparison, visible-range statistics, filtering, a benchmark library, and presentation-ready exports."
authors:
diff --git a/Directory.Build.props b/Directory.Build.props
index 9e55098..1250877 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -19,11 +19,11 @@
- 3.2.0
- 3.2.0.0
- 3.2.0.0
+ 3.2.3
+ 3.2.3.0
+ 3.2.3.0
false
diff --git a/README.md b/README.md
index 6c4d2a5..b63eb0c 100644
--- a/README.md
+++ b/README.md
@@ -84,7 +84,7 @@ Portable self-contained builds remain available from **[GitHub Releases](https:/
For the current stable release:
-1. Download `FramePerformanceAnalyzer-v3.2.0-win-x64.zip`.
+1. Download `FramePerformanceAnalyzer-v3.2.3-win-x64.zip`.
2. Extract the archive.
3. Run `FramePerformanceAnalyzer.exe`.
@@ -109,6 +109,12 @@ The current application has no telemetry and makes no network calls during norma
- **Interface polish.** Themed scrollbars, exact tick-aligned grid lines, fixed cursor readouts, and distinct **Reset view** / **Fit visible Y** actions keep the dense benchmark interface predictable.
- **Distribution rebranding.** The public product and downloadable files are now **Frame Performance Analyzer**, while NVIDIA FrameView terminology and stable technical identities remain compatible.
+## Maintenance fixes in 3.2.3
+
+- **Source-folder scoped benchmark selection.** Pair Base, Pair Comparison, and Multi now show only captures discovered in the active Source folder while the global Benchmark Library remains intact.
+- **Precision-safe Frame points.** Frame points now preserve the active Precision-filtered frame set instead of reintroducing excluded raw FPS spikes. Raw mode continues to expose the original frame-level values.
+- **Correct capture durations.** FrameView benchmark duration now uses the actual recorded timestamp span rather than the final absolute `TimeInSeconds` value. NVIDIA App elapsed-time logs retain their native duration semantics.
+
## Features
- **Interactive performance charts** with metric switching, a fixed cursor value readout, cursor-anchored zoom, drag pan, range selection, full-view reset, visible-Y fitting, and adaptive FPS scaling.
@@ -204,7 +210,7 @@ More technical documentation is available in [`docs/`](docs/), including archite
## Verification
-Version **3.2.0** is published on Microsoft Store and covered by the Windows/.NET 10 automated test suite, GitHub release-package validation, and Microsoft Store MSIX validation. Manual checkpoints cover normal-load performance, Precision filtering, compressed analyzed time, true frame points, Pair, Multi, the unified browser, metadata labels, zoom/pan, exact grid lines, and FrameView/NVIDIA App metrics.
+GitHub release **3.2.3** is covered by the Windows/.NET 10 automated test suite, release-package validation, and manual release-candidate testing. Version **3.2.0** remains the currently published Microsoft Store build until the Store update completes.
Each GitHub release also includes a `.sha256` file for verifying the downloadable ZIP.
diff --git a/docs/RELEASE-README.md b/docs/RELEASE-README.md
index e9d84ff..fe079ea 100644
--- a/docs/RELEASE-README.md
+++ b/docs/RELEASE-README.md
@@ -1,16 +1,28 @@
-# Frame Performance Analyzer 3.2.0
+# Frame Performance Analyzer 3.2.3
-**Release:** Precision Timeline
-**Version:** 3.2.0
-**Windows package version:** 3.2.0.0
+**Release:** Precision Timeline maintenance update
+**Version:** 3.2.3
+**Windows package version:** 3.2.3.0
-Frame Performance Analyzer is a native Windows desktop application for
-analyzing and comparing NVIDIA FrameView captures and NVIDIA App
-performance-overlay logs. Version 3.2.0 introduces the Precision Timeline
-workflow while preserving the established Pair, Multi, Library, and export
-features.
+Frame Performance Analyzer 3.2.3 is a maintenance update for the
+Precision Timeline release. It preserves the 3.2.0 feature set while
+addressing issues discovered during post-release validation.
-## What's new in 3.2.0
+## Fixes in 3.2.3
+
+- **Contextual benchmark browser scoping:** Pair Base, Pair Comparison, and
+ Multi selectors now show only captures belonging to the currently active
+ Source folder. The global Benchmark Library remains historical and is not
+ cleared when the Source folder changes.
+- **Precision Frame points:** enabling Frame points no longer reintroduces
+ abnormal raw FPS spikes while Precision filtering is active. Raw mode still
+ preserves the original frame-level values.
+- **Benchmark capture duration:** FrameView capture duration is now calculated
+ from the actual recorded timestamp span rather than treating the final
+ absolute `TimeInSeconds` value as the capture length. NVIDIA App elapsed-time
+ logs retain their existing semantics.
+
+## Precision Timeline highlights
- **Precision filtering** is one explicit binary mode. Off keeps the complete
raw capture. On applies automatic GPU gating, FPS outlier handling, fixed
@@ -29,17 +41,14 @@ features.
visible-range statistics, and direction-aware deltas.
- **Multi** compares 2–8 captures as equal peers with stable colors shared by
charts, KPI rows, cursor values, selection, and exports.
-- Pair, Comparison, Multi, and Library now use one **unified benchmark
- browser** with search, filters, full-card selection, source-folder control,
- and protection against choosing the current Base as its own Comparison.
+- Pair, Comparison, Multi, and Library use one **unified benchmark browser**
+ with search, filters, full-card selection, source-folder control, and
+ protection against choosing the current Base as its own Comparison.
- Metadata **Benchmark name** values appear together with the detected capture
name in the quick selector, so repeated captures remain distinguishable.
- The interface uses themed scrollbars, exact tick-aligned grid lines, a fixed
cursor-value readout, and distinct **Reset view** and **Fit visible Y**
actions.
-- Public branding is now **Frame Performance Analyzer**. Technical project
- names, persisted storage locations, Microsoft Store identity, and legitimate
- NVIDIA FrameView terminology remain stable for compatibility.
## Supported input
@@ -100,7 +109,7 @@ existing files.
## GitHub ZIP
-1. Unzip `FramePerformanceAnalyzer-v3.2.0-win-x64.zip`.
+1. Unzip `FramePerformanceAnalyzer-v3.2.3-win-x64.zip`.
2. Double-click `FramePerformanceAnalyzer.exe`.
The build is self-contained for Windows x64; a separate .NET runtime is not
@@ -113,7 +122,7 @@ only when it came from the official repository release.
## Microsoft Store package
The Store artifact is
-`FramePerformanceAnalyzer-Store-3.2.0.0-x64.msix`. Microsoft Store signs the
+`FramePerformanceAnalyzer-Store-3.2.3.0-x64.msix`. Microsoft Store signs the
package after certification. The physical filename and public DisplayName use
the new brand, while the Partner Center package identity intentionally remains
`Strecker.FrameViewAnalyzer`.
diff --git a/docs/index.html b/docs/index.html
index bf3899b..32785f0 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -29,7 +29,7 @@
"name": "Frame Performance Analyzer",
"applicationCategory": "UtilitiesApplication",
"operatingSystem": "Windows 10, Windows 11",
- "softwareVersion": "3.2.0",
+ "softwareVersion": "3.2.3",
"isAccessibleForFree": true,
"description": "Free and open-source Windows desktop application for analyzing and comparing NVIDIA FrameView captures and NVIDIA App performance logs.",
"url": "https://streckermx.github.io/Frame-Performance-Analyzer/",
diff --git a/scripts/package-release.ps1 b/scripts/package-release.ps1
index 80116f3..096cc32 100644
--- a/scripts/package-release.ps1
+++ b/scripts/package-release.ps1
@@ -44,7 +44,7 @@ $dotnet = (Get-Command dotnet).Source
if (-not $dotnet) { throw 'dotnet was not found on PATH.' }
# Single source of truth for the version: Directory.Build.props
-# (VersionPrefix → "3.2.0" for this release).
+# (VersionPrefix → "3.2.3" for this release).
$version = (& $dotnet msbuild $appProject -getProperty:Version).Trim()
if (-not $version) { throw 'Could not resolve the product version from the project.' }
Write-Host "==> packaging version: $version"
diff --git a/tests/FrameViewAnalyzer.App.Tests/PackagingContractTests.cs b/tests/FrameViewAnalyzer.App.Tests/PackagingContractTests.cs
index 3d4877d..0271c57 100644
--- a/tests/FrameViewAnalyzer.App.Tests/PackagingContractTests.cs
+++ b/tests/FrameViewAnalyzer.App.Tests/PackagingContractTests.cs
@@ -33,12 +33,12 @@ public void Product_and_store_versions_are_derived_from_the_release_source()
var props = XDocument.Parse(Read("Directory.Build.props"));
var version = props.Descendants("VersionPrefix").Single().Value;
- Assert.Equal("3.2.0", version);
- Assert.Equal("3.2.0.0", $"{version}.0");
+ Assert.Equal("3.2.3", version);
+ Assert.Equal("3.2.3.0", $"{version}.0");
Assert.Equal(PublicName, props.Descendants("Product").Single().Value);
Assert.Equal(PublicName, props.Descendants("AssemblyTitle").Single().Value);
- Assert.Equal("3.2.0.0", props.Descendants("AssemblyVersion").Single().Value);
- Assert.Equal("3.2.0.0", props.Descendants("FileVersion").Single().Value);
+ Assert.Equal("3.2.3.0", props.Descendants("AssemblyVersion").Single().Value);
+ Assert.Equal("3.2.3.0", props.Descendants("FileVersion").Single().Value);
}
[Fact]
diff --git a/tests/FrameViewAnalyzer.App.Tests/ReleaseInfoTests.cs b/tests/FrameViewAnalyzer.App.Tests/ReleaseInfoTests.cs
index f78cf08..bdc1395 100644
--- a/tests/FrameViewAnalyzer.App.Tests/ReleaseInfoTests.cs
+++ b/tests/FrameViewAnalyzer.App.Tests/ReleaseInfoTests.cs
@@ -10,7 +10,7 @@ public class ReleaseInfoTests
public void Informational_version_is_the_stable_semver()
{
// The single authoritative version source is Directory.Build.props.
- Assert.Equal("3.2.0", ReleaseInfo.InformationalVersion);
+ Assert.Equal("3.2.3", ReleaseInfo.InformationalVersion);
}
[Fact]