summaryrefslogtreecommitdiff
path: root/src/debug/HyprDebugOverlay.hpp
blob: 8899ab152389300d2c97177119f8a02a11c2325a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#pragma once

#include "../defines.hpp"
#include "../helpers/Monitor.hpp"
#include "../render/Texture.hpp"
#include <deque>
#include <cairo/cairo.h>
#include <unordered_map>

class CHyprMonitorDebugOverlay {
public:
    int draw(int offset);

    void renderData(SMonitor* pMonitor, float µs);
    void renderDataNoOverlay(SMonitor* pMonitor, float µs);
    void frameData(SMonitor* pMonitor);

private:
    std::deque<float> m_dLastFrametimes;
    std::deque<float> m_dLastRenderTimes;
    std::deque<float> m_dLastRenderTimesNoOverlay;
    std::chrono::high_resolution_clock::time_point m_tpLastFrame;
    SMonitor* m_pMonitor = nullptr;
    wlr_box m_wbLastDrawnBox;
};

class CHyprDebugOverlay {
public:

    void draw();
    void renderData(SMonitor*, float µs);
    void renderDataNoOverlay(SMonitor*, float µs);
    void frameData(SMonitor*);

private:

    std::unordered_map<SMonitor*, CHyprMonitorDebugOverlay> m_mMonitorOverlays;

    cairo_surface_t* m_pCairoSurface = nullptr;
    cairo_t* m_pCairo = nullptr;

    CTexture m_tTexture;

    friend class CHyprMonitorDebugOverlay;
};

inline std::unique_ptr<CHyprDebugOverlay> g_pDebugOverlay;