summaryrefslogtreecommitdiff
path: root/src/helpers/sync/SyncReleaser.hpp
blob: 0063171d59aff1fee67c2cf21636748a971f92f1 (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
#pragma once

#include <cstdint>
#include <optional>
#include <vector>
#include <functional>
#include <hyprutils/os/FileDescriptor.hpp>
#include "../memory/Memory.hpp"

/*
    A helper (inspired by KDE's KWin) that will release the timeline point in the dtor
*/

class CSyncTimeline;

class CSyncReleaser {
  public:
    CSyncReleaser(SP<CSyncTimeline> timeline, uint64_t point);
    ~CSyncReleaser();

    // drops the releaser, will never signal anymore
    void drop();

    // wait for this sync_fd to signal before releasing
    void addSyncFileFd(const Hyprutils::OS::CFileDescriptor& syncFd);

  private:
    SP<CSyncTimeline>              m_timeline;
    uint64_t                       m_point = 0;
    Hyprutils::OS::CFileDescriptor m_fd;
};