Files
MapLibreParticleLab/include/mbgl/particle/renderer_debug_counters.hpp
tei 70f112ea27
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
fix: close STEP-085 V4 renderer efficiency
2026-09-19 22:16:36 +09:00

69 lines
2.4 KiB
C++

#pragma once
#include <atomic>
#include <cstddef>
#include <cstdint>
namespace mbgl::particle {
// Debug/Validation-only cumulative renderer observability. These atomics are
// intentionally not connected to Host APIs and compile to no-ops in release.
enum class RendererDebugCounter : uint8_t {
WeatherColorNeedsRepaint,
ParticleNeedsRepaint,
WeatherColorUpdate,
ParticleUpdate,
ParticleSimulationAdvance,
WeatherColorDrawableRebuild,
ParticleDrawableRebuild,
FieldTextureUpload,
GpuResourceCreate,
GpuResourceRelease,
TrailTargetCreateOrResize,
V4ProjectionMaterialize,
FieldWindowRevision,
Count,
};
#ifndef NDEBUG
struct RendererDebugCounterSnapshot {
uint64_t weatherColorNeedsRepaint = 0;
uint64_t particleNeedsRepaint = 0;
uint64_t weatherColorUpdate = 0;
uint64_t particleUpdate = 0;
uint64_t particleSimulationAdvance = 0;
uint64_t weatherColorDrawableRebuild = 0;
uint64_t particleDrawableRebuild = 0;
uint64_t fieldTextureUpload = 0;
uint64_t gpuResourceCreate = 0;
uint64_t gpuResourceRelease = 0;
uint64_t trailTargetCreateOrResize = 0;
uint64_t v4ProjectionMaterialize = 0;
uint64_t fieldWindowRevision = 0;
};
inline std::atomic_uint64_t* rendererDebugCounterStorage() {
static std::atomic_uint64_t counters[static_cast<size_t>(RendererDebugCounter::Count)]{};
return counters;
}
inline void incrementRendererDebugCounter(const RendererDebugCounter counter) {
rendererDebugCounterStorage()[static_cast<size_t>(counter)].fetch_add(1, std::memory_order_relaxed);
}
inline RendererDebugCounterSnapshot rendererDebugCounterSnapshot() {
const auto* values = rendererDebugCounterStorage();
return {values[0].load(std::memory_order_relaxed), values[1].load(std::memory_order_relaxed),
values[2].load(std::memory_order_relaxed), values[3].load(std::memory_order_relaxed),
values[4].load(std::memory_order_relaxed), values[5].load(std::memory_order_relaxed),
values[6].load(std::memory_order_relaxed), values[7].load(std::memory_order_relaxed),
values[8].load(std::memory_order_relaxed), values[9].load(std::memory_order_relaxed),
values[10].load(std::memory_order_relaxed), values[11].load(std::memory_order_relaxed),
values[12].load(std::memory_order_relaxed)};
}
#else
inline void incrementRendererDebugCounter(RendererDebugCounter) {}
#endif
} // namespace mbgl::particle