69 lines
2.4 KiB
C++
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
|