Standalone/ (C++20, MSVC /O2 /arch:AVX2 /fp:precise, Build.ps1): copied density pipeline, op stack, cave morphology, passages, strate manager/composer, noise, DetSinCos, mesher, clipmap selection, with a UE compatibility layer (Compat/). Owner data exported once to Standalone/data/owner_world.json by a default-off explore-commandlet exporter (the only plugin-source change). 25 cm voxels. Parity: seed 0, 3,436 samples (strate edges, negative/far coords, rooms, tunnels, passages, landings): bit-identical. Viewer: full 7-level clipmap, per-level toggles 1-7, T = round winding tunnels (standalone option), N/P seed, F wireframe. Timing NOT yet a baseline: 515 s for 12,054 tiles (L0 70 s, L6 296 s); the compat TMap/TSet are vector-backed with linear lookup, which the plugin's caches do not expect. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
66 lines
2.2 KiB
C++
66 lines
2.2 KiB
C++
// Bounded, opt-in startup trace for the complete streaming path.
|
|
// The trace is deliberately independent of the shared Unreal log: callers provide an
|
|
// absolute output path and every record is one JSON object per line.
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
|
|
namespace VoxelForgeStartupTrace
|
|
{
|
|
struct VOXELFORGE_API FTileSample
|
|
{
|
|
int32 TileX = 0;
|
|
int32 TileY = 0;
|
|
int32 TileZ = 0;
|
|
int32 Level = -1;
|
|
int32 Verdict = -1; // Mixed=0, AllSolid=1, AllAir=2, -1=not classified (early path)
|
|
bool bSealedSolidProof = false;
|
|
bool bEmpty = true;
|
|
int32 Vertices = 0;
|
|
int32 Triangles = 0;
|
|
uint64 GeometryBytes = 0;
|
|
// This is worker-result -> game-thread mesh submission. Collision readiness is a later
|
|
// per-tile RMC completion event recorded separately as collision_ready.
|
|
double RequestToApplySeconds = 0.0;
|
|
double QueueWaitSeconds = 0.0;
|
|
double WorkerQueueSeconds = 0.0;
|
|
double ResultQueueSeconds = 0.0;
|
|
double GenerationSeconds = 0.0;
|
|
double ClassifySeconds = 0.0;
|
|
double MeshSeconds = 0.0;
|
|
double StreamSeconds = 0.0;
|
|
double ApplySeconds = 0.0;
|
|
};
|
|
|
|
/** Starts when -voxel.StartupTraceFile=<absolute path> is present. */
|
|
VOXELFORGE_API void BeginFromCommandLine();
|
|
|
|
VOXELFORGE_API bool IsActive();
|
|
|
|
/** FieldsJson is the contents after the type/timestamp object prefix, without braces. */
|
|
VOXELFORGE_API void RecordEvent(const TCHAR* Type, const FString& FieldsJson = FString());
|
|
|
|
VOXELFORGE_API void StageBegin(const TCHAR* Name);
|
|
VOXELFORGE_API void StageEnd(const TCHAR* Name);
|
|
|
|
VOXELFORGE_API void RecordTile(const FTileSample& Sample);
|
|
|
|
/** Writes the final bounded summary and closes the file. Safe to call more than once. */
|
|
VOXELFORGE_API void Finish(const TCHAR* Reason);
|
|
|
|
/** RAII helper for stages which have early-return failure paths. */
|
|
class VOXELFORGE_API FStageScope
|
|
{
|
|
public:
|
|
explicit FStageScope(const TCHAR* InName);
|
|
~FStageScope();
|
|
|
|
FStageScope(const FStageScope&) = delete;
|
|
FStageScope& operator=(const FStageScope&) = delete;
|
|
|
|
private:
|
|
FString Name;
|
|
bool bActive = false;
|
|
};
|
|
}
|