Skip to content

StutterShark

StutterShark runtime, resolver, and test binary notes are consolidated here from the 2026-05-19 snapshot.

2026-05-19 application notes

StutterShark.exe

What this program actually does

StutterShark.exe is the Platform Seat Service daemon on a GeForce NOW gameseat. It runs as Windows service StutterSharkService, hosts four in-process plugins, and monitors realtime stutter and deadzone for the active game session. It initializes NVML/NVAPI, subscribes to SSLM session lifecycle via MessageBus, fetches CSR config from GSConfigurator, publishes GPU perf counters, and emits telemetry on schema gfn-team.open.stuttershark:14.

Log banner in this snapshot: Platform Seat Service v0.13.10.


Architecture / control flow (recovered symbols)

main / ServiceHost (CServiceBase@systemservicebase@nv)
  └─ PlatformSeatService::OnStart
        ├─ PlatformSeatService::InitializeTas / InitializeCsr
        ├─ PlatformSeatService::MbListenThread  → MessageBus peer PlatformSeatService:StutterShark
        ├─ GSConfigClient → PssConfigData, SeatConfig
        ├─ SslmSubscriptionTracker / SslmObserver
        ├─ CPUID::Manager (NvpBridge channel)
        └─ PlatformSeatService::LoadPlugins
              ├─ StutterSharkPlugin      (ETW stutter detection, stack dumps)
              ├─ UmdPerfCounterPlugin    (NVAPI/NVML GPU counters → Kratos)
              ├─ VcpuBoostControllerPlugin (vCPU clock boost via CPUID)
              └─ GpuControllerPlugin     (TGP/GPC capping, frame-time compositor)

Plugin base: BasePlugin state machine (Uninitialized → Initializing → Initialized → Starting → Started → Stopping → Terminated).

Build tree: C:\builds\gfn-foundations\stuttershark\ (ServiceLib.cpp, plugin sources under Plugins\).

PDB: C:\builds\gfn-foundations\stuttershark\out\x64-windows-release\Service\StutterShark.pdb


RTTI / telemetry types (deep extract sample)

Class / field typeRole
BasePlugin, CServiceBase@systemservicebase@nvService + plugin framework
GSConfigClient@gsprerequisites, Connector@tas@gs@gfn@nvConfig + TAS telemetry
AppSensorMessage_*, AppServiceApi_SopsAppliedEventMessageBus session/SOPS events
*@Fields@StutterSharkSchemaTelemetry fields (stutter counts, GPU cap stats, callstack sampling flags)
BaseGpuController, GpuControllerSummarizedDataPointGPU controller plugin internals

External interfaces

InterfaceRole
Windows Service StutterSharkServiceInstalled via StutterShark.exe --install; auto-start + failure restart (sc failure) per install log
MessageBusPeers PlatformSeatService:StutterShark, PlatformSeatService:StutterSharkTelemetry; config C:\asgard\services\gsp\MessageBus\x64\messagebus.conf (string)
GSConfiguratorFetches PssConfigData, SeatConfig (Services=["StutterSharkService"])
SSLM (NGS:SSLM)Subscribes for session state; waits for session-finished notification before tearing down bus
NVML / NVAPIGPU enumeration, perf counters, controller policies
ETW / TDH / dbghelpStutter trace sessions, callstack capture
NvpBridge kernel driverInstalled via devcon + nvpbridge.inf; CPUID trusted channel
Perf countersUmdPerfCounterPlugin.man, NvpBridge\nvpbridge.man via lodctr
Logslogs/StutterShark/PlatformSeatService.log

CLI strings (not service path): --stutter-min-threshold, --per-stutter-detail; description: "Realtime stutter and deadzone monitor and dumping service. CLI mode: Ctrl-C to kill".


Plugin lifecycle (strings + logs)

ComponentEvidence
serviceLibRunPluginsInPrewarmCSR Run Plugins in Prewarm true at 18:43:16
StutterShark plugin CSRDetection Disabled false, Detection Threshold 100 ms
VcpuBoostController CSRDisabled false, ForceDefaultFreq true
Background callstack samplingDisabled true
Dynamic GPU CapDisabled false, GPU Controller Prewarm Throttle GPU true
Session gateBlockUntilFirstSessionEvent — waited 326000 ms for SOPS before starting plugins

Session start (18:48:43–44): StutterShark, UmdPerfCounter, GpuController reach Started; VcpuBoostController early-stopped (Clock control feature support query failed).


Runtime timeline (from logs/StutterShark/PlatformSeatService.log)

Time (local)Event
18:43:16.442Service v0.13.10; MessageBus join PlatformSeatService:StutterShark
18:43:16.476–489NVML + NVAPI init; 1 GPU on vGPU (00000000:0c:00.0)
18:43:16.512–534GSConfigurator configs fetched
18:43:16.535CSR plugin configs applied
18:43:16.585SSLM subscription cancelled (NGS not yet on bus)
18:43:22.405SSLM subscribed after NGS:SSLM joined
18:48:41.854SopsAppliedEvent: 1920×1080@60, cmsId [REDACTED_CMS_ID], instance [REDACTED_POOL]
18:48:44.551StutterShark Service started; NvpBridge perf counters initialized
18:48:58+Target process tracking (conhost.exe, seelen-ui.exe); repeated Empty stutter detect event passed in

Failure modes (log + strings)

String / log lineMeaning
Plugin is hung, skipping state changePlugin state transition timeout
Timeout waiting for SSLM session finished notificationSSLM cleanup may be incomplete
Empty stutter detect event passed inStutter detector received invalid event (observed repeatedly post-session)
TGP limit setting failed / GPC clock setting failedGpuController policy apply failed on vGPU seat
Register Fan Cooler callback failed error NVAPI_TIMEOUTUmdPerfCounter NVAPI callback registration failure
CPUID Interface state control support query failedCPUID channel teardown error

Relationships

ComponentInteraction
StutterSharkResolve.exeOffline stack/symbol resolver for captured traces (bundled, not invoked in this session)
StutterSharkTest.exeUnit/integration tests for same plugin stack
GSConfiguratorPluginConfig authority for CSR/PSS
Morph, GfnSdkServiceSibling seat services; all subscribe to SSLM after NGS joins
SmithyControllerObserves bus peers PlatformSeatService:StutterShark, StutterSharkTelemetry
services/StutterShark/DLL/Ships dbghelp_new.dll, msdia140.dll, symsrv.dll, srcsrv.dll for symbol resolution

Not verified

  • Exact MessageBus protobuf types for AppSensorMessage dispatch handlers.
  • Whether CLI mode is used on production seats (service path confirmed in logs).
  • Full list of ETW providers enabled by TraceSession.
  • Anti-cheat process dump feature (-- string mentions anti-cheat process name) — not observed in logs.

Evidence

  • readpe, strings, r2 on services/StutterShark/StutterShark.exe
  • logs/StutterShark/PlatformSeatService.log
  • logs/startup/stuttersharkSoftwareInstall.log
  • logs/GSP/GSConfiguratorPluginCurrent.log, logs/SmithyV2/SmithyController/.../SmithyControllerPlugin.log

StutterSharkResolve.exe

What this program actually does

StutterSharkResolve.exe is an offline post-processing CLI shipped with StutterShark. It resolves call stacks and symbols from stutter-capture artifacts produced by StutterSharkPlugin / TraceSession, using dbghelp (preferring bundled dbghelp_new.dll), DIA (msdia140.dll), and a custom StutterStackWalker. It emits CSV summaries (frames_data.csv, stutters_data.csv) from serialized trace payloads.

It is not a Windows service. Install log copies it beside StutterShark.exe; no runtime log references it in this snapshot.


Architecture / control flow (recovered symbols)

main (CLI11 App@CLI)
  └─ StutterSharkResolve.cpp
        ├─ TraceSession / TraceConsumer
        ├─ StutterStackWalker (extends StackWalkerCustom)
        │     ├─ StackWalkerInternal::LoadModuleWithPdbInfo
        │     ├─ StackWalkerInternal::LoadPdbIntoDia
        │     └─ StackWalkerCustom::ShowCallstack
        └─ DeserializeImageAndStacks / DeserializeSystemWideStacks
              → CSV writers (frames_data.csv, stutters_data.csv)

RTTI classes: StutterStackWalker, StackWalkerCustom, TraceConsumer, App@CLI.

Source paths (strings):

  • C:\builds\gfn-foundations\stuttershark\Service\StutterSharkResolve.cpp
  • C:\builds\gfn-foundations\stuttershark\Plugins\StutterSharkPlugin\TraceSession.cpp
  • C:\builds\gfn-foundations\stuttershark\Plugins\StutterSharkPlugin\StackWalker.cpp

PDB: C:\builds\gfn-foundations\stuttershark\out\x64-windows-release\Service\StutterSharkResolve.pdb


Symbol resolution stack (strings)

StepString evidence
Load dbghelp### Load SYSTEM32 dbghelp_new.dll, ## Load dbghelp.dll failed
SymInitSymInit: Symbol-SearchPath: '%s', symOptions: %d
DIA pathUsing DIA for module: {}, Base: {:#x}..., Loading PDB into DIA has failed
Stack walkStackWalk64, StackWalk64-Endless-Callstack!
UndecorateUnDecorateSymbolName, `<unresolved symbol>`
Env_NT_SYMBOL_PATH

Output artifacts:

  • callstack_folded_process_*, callstack_folded_frame_* (folded stack text)
  • frames_data.csv — columns include TimestampUTC,FrameIndex,TimestampSecond,DurationMs,SystemCpuUsage,WorkloadCpuUsage
  • stutters_data.csv — includes file I/O stats columns (FileTotalRead, FileP95Read, …)

External interfaces

InterfaceRole
CLIUsage string present; CLI11 help/error types in RTTI
Local DLLsExpects dbghelp_new.dll, DIA stack under services/StutterShark/DLL/
InputSerialized image/stack blobs from trace session ([{}] processes captured for system-wide callstacks)
OutputCSV files in working directory (inferred from string filenames)

No MessageBus, SCM, or network surface in imports.


PE / imports (readpe + r2)

PropertyValue
Size1,356,288 bytes
ArchPE32+ x64 console
Compile2026-04-22 02:36:25 UTC
LinkerMSVC 14.35
ImportsKERNEL32 (thread/debug APIs: OpenThread, SuspendThread, GetThreadContext, ReadProcessMemory), pdh.dll, ADVAPI32 (GetUserNameA), ole32, OLEAUT32 (DIA/COM)

Relationships

ComponentInteraction
StutterShark.exeProduces trace/callstack capture data consumed by this tool
StutterShark/DLL/dbghelp_new.dllPreferred dbghelp implementation
StutterShark/DLL/msdia140.dllPDB load via DIA
StutterShark/DLL/symsrv.dll, srcsrv.dllSymbol server/source indexing (bundled; usage inferred from deployment)

Not verified

  • Exact CLI flags and required input file layout (only Usage string recovered).
  • Whether seat automation invokes this binary post-session or only engineers run it manually.
  • Whether pdh.dll import is used on all code paths or dead import from shared build.

Evidence

  • readpe, strings, r2 on services/StutterShark/StutterSharkResolve.exe
  • logs/startup/stuttersharkSoftwareInstall.log (binary deployed)
  • Shared plugin strings in StutterShark.exe (StutterStackWalker::*, CSV column names)

StutterSharkTest.exe

What this program actually does

StutterSharkTest.exe is the automated test harness for the StutterShark / Platform Seat Service codebase. It links the production plugin implementations (StutterSharkPlugin, GpuControllerPlugin, VcpuBoostControllerPlugin, UmdPerfCounterPlugin) with Google Test / Google Mock and exercises service startup, CSR parsing, detection logic, GPU controllers, CPUID channel, MessageBus helpers, and CLI config clients.

It is not deployed as a seat service and produces no logs in this snapshot.


Test modules (source path strings)

Source fileFocus
Tests/TestPlatformSeatService.cppPlatformSeatService GameSeat mode happy-path start/stop, CLI mode happy-path start/stop
Tests/TestDetection.cppStutter detection
Tests/TestGpuController.cppGpuControllerPluginImpl compaction, SOPS, frame-time CSV dump
Tests/TestVcpuBoostController.cppvCPU boost controller
Tests/TestCPUIDChannel.cppCPUID channel / TestPlugin1/2/3 registration
Tests/TestCsrParsingHelper.cppCSR config parsing
Tests/TestPubSub.cppPub/sub messaging
Tests/TestRollingWindowStrategy.cppRolling window strategy
Tests/TestFrameWindow.cppFrame window utilities
Tests/TestFrameDataCompositor.cppFrame data compositor
Tests/TestMbHelper.cppMessageBus helper
Tests/CliMode/TestJsonGSConfigClient.cppCLI JSON GSConfig client
Tests/Mocks.hBaseGpuController@TestGpuController@Mocks, MockMessageBus, MockBusMessage

Framework strings: gtest/gtest-matchers.h, gmock/gmock-spec-builders.h, gmock/gmock-actions.h, Catch/Clara types also present in RTTI (mixed test deps in binary).

PDB: C:\builds\gfn-foundations\stuttershark\out\x64-windows-release\Tests\StutterSharkTest.pdb


RTTI / types (deep extract sample)

ClassRole
TestPlatformSeatServiceEnd-to-end service tests
BaseGpuController@TestGpuController@MocksMock GPU controller
MockMessageBus, MockBusMessageBus isolation
*@Fields@StutterSharkSchemaSame telemetry schema types as production EXE
AppCpuStarvingStuttersCount/Pct@Fields@StutterSharkSchemaStutter metric field tests

Production plugin class names in strings: StutterSharkPlugin, GpuControllerPlugin, VcpuBoostControllerPlugin.


Assertions recovered (strings)

Examples embedded as test expectations:

  • service.mEnabledPlugins.size() == 0== 3 after plugin load
  • plugin->getState() == PluginState::STARTED
  • plugin->mPluginErrored == true/false with mLastErrorMessage substring checks for NVML/NVAPI init failures
  • GpuControllerPluginImpl - DumpFrametimesToCsv - With Data (and Disabled/Empty/Invalid Directory variants)

PE / imports (readpe + r2)

PropertyValue
Size6,737,920 bytes (largest StutterShark binary — includes gtest/gmock + plugins)
ArchPE32+ x64 console
Compile2026-04-22 02:36:57 UTC
Entry0x140427238; main @ 0x14045bb90
Key importsSame monitoring stack as StutterShark.exe: ETW (ADVAPI32), nvml.dll, pdh.dll, dbghelp.dll, tdh.dll, plus PssCaptureSnapshot / PssQuerySnapshot / PssWalkSnapshot for process snapshot tests

Relationships

ComponentInteraction
StutterShark.exeTests the same PlatformSeatService + plugin code paths
StutterSharkResolve.exeShares TraceSession / stack types; no direct test reference in strings
Build treeC:\builds\gfn-foundations\stuttershark\Tests\

Not verified

  • Test runner CLI flags (filter/suite selection).
  • CI invocation path (not referenced in Asgard seat logs).
  • Code coverage of StutterSharkResolve.exe (no strings linking resolve tool tests).

Evidence

  • readpe, strings, r2 on services/StutterShark/StutterSharkTest.exe
  • logs/startup/stuttersharkSoftwareInstall.log (binary deployed to seat)
  • Parity strings with StutterShark.exe plugin implementations

admindesk.top — Reversed & documented from Asgard rig backups and GCIS plugin binaries.