#pragma once // Sistem performans metrikleri (Win32) — Kontrol Merkezi "Performans" panosunu besler. // CPU (süreç), RAM (süreç + sistem), GPU (kullanım % + VRAM) + FPS/kare-süresi geçmişi. // Ağır örnekleme ~0.5 sn'de bir yapılır (her kare değil) → ölçüm maliyeti ihmal edilir. // Tüm Win32/PDH/DXGI erişimi zarif düşer: erişilemezse ilgili alan 0 kalır. #include namespace fiko { struct SistemMetrik { static constexpr int GECMIS = 120; // ~geçmiş örnek sayısı (grafikler) float fps = 0.0f; float kareSuresiMs = 0.0f; float cpuYuzde = 0.0f; // süreç CPU kullanımı (%) float ramMB = 0.0f; // süreç çalışma kümesi (MB) float ramSistemYuzde = 0.0f; // sistem RAM doluluk (%) float ramSistemKullanilanMB = 0.0f; float ramSistemToplamMB = 0.0f; float gpuYuzde = 0.0f; // GPU kullanımı (%) — en yoğun motor float vramKullanilanMB = 0.0f; // süreç ayrılmış VRAM (MB) float vramToplamMB = 0.0f; // adaptör toplam VRAM (MB) // Sola-kaydırmalı geçmiş: en eski [0], en yeni [GECMIS-1]. Dolan bölge son // gecmisSayi örnektir (grafik yalnız onu çizer). float fpsGecmis[GECMIS] = {}; float cpuGecmis[GECMIS] = {}; float gpuGecmis[GECMIS] = {}; float kareGecmis[GECMIS] = {}; // kare süresi ms int gecmisSayi = 0; // dolan örnek sayısı (≤ GECMIS) }; // Win32 tutamaçları + PDH sorgusu sahiplenen toplayıcı. Kopyalanamaz. class SistemMetrikToplayici { public: SistemMetrikToplayici(); ~SistemMetrikToplayici(); SistemMetrikToplayici(const SistemMetrikToplayici&) = delete; SistemMetrikToplayici& operator=(const SistemMetrikToplayici&) = delete; // Her kare çağrılır: fps/kare-süresi anında güncellenir, ağır metrikler ~0.5 sn'de bir. void guncelle(float dt, float kareSuresiMs); const SistemMetrik& metrik() const { return m_; } private: void agirOrnekle(); SistemMetrik m_; float birikim_ = 0.0f; // ağır örnekleme sayacı (sn) int cekirdekSayi_ = 1; // CPU delta ölçümü için önceki süreç zamanı + duvar-saat keseri. uint64_t oncekiCpu100ns_ = 0; uint64_t oncekiDuvar100ns_ = 0; void* pdhSorgu_ = nullptr; // PDH_HQUERY (GPU kullanımı) void* pdhGpuSayac_ = nullptr; // PDH_HCOUNTER bool pdhHazir_ = false; void* dxgiAdaptor_ = nullptr; // IDXGIAdapter3* (VRAM) }; } // namespace fiko