Table of Contents

Class SyncLoadReporter

Namespace
GrindFest.Content
Assembly
GrindFest.dll

Records every synchronous asset load, so the set of assets a preload stage is missing is measured in a normal session and reported on demand by Summary().

Why this exists: the content platform's answer to "what should be resident before this action" is a scope (plan D20, section 7.2), and it deliberately has no hand-written preload list. The intended way to discover a missing scope is to look at what the session fetched synchronously: AssetLibrary.OnSyncLoad names each asset, and during boot that count must be zero. That instrument existed from the start and had no subscriber at all, which is exactly why a blocking load in skills went unnoticed.

What the numbers mean:

  • a handful of distinct addresses, once each, early in a session: a scope that should have declared them;
  • the same address repeatedly: something is re-reading after a release, i.e. a tier/lifetime mistake;
  • nothing at all: the scopes cover the session, which is the target state (P7).

A miss also records who asked for it (LastRequester), because the address list alone cannot separate "every ItemBehaviour in the scene" from "one skill that ran once", and those two need different answers: a tier/scope versus the async path.

Cost when idle: one dictionary insert per miss. There are no misses in a healthy session.

public static class SyncLoadReporter
Inheritance
object
SyncLoadReporter

Properties

Addresses

Every address, in the order it was first seen, with its load count.

Distinct

Distinct addresses fetched synchronously this session.

Total

Total synchronous loads this session.

Methods

CountOf(string)
RequesterOf(string)

Who asked for this address, or null if it was never fetched synchronously.

Reset()

Drops the record (tests, or a fresh measurement after a content reload).

Summary()

One-line-per-address summary, worst (most repeated) first, then the same misses grouped by requester, for a test run or a bug report. The first list says what has to be preloaded; the second says which context has to declare it.