20 #ifndef MIR_COMPOSITOR_SWITCHING_BUNDLE_H_
21 #define MIR_COMPOSITOR_SWITCHING_BUNDLE_H_
24 #include <condition_variable>
28 #include <unordered_set>
35 class GraphicBufferAllocator;
46 const std::shared_ptr<graphics::GraphicBufferAllocator> &,
53 void client_acquire(std::function<
void(graphics::Buffer* buffer)> complete) override;
55 std::shared_ptr<graphics::Buffer>
59 void snapshot_release(std::shared_ptr<graphics::Buffer> const& released_buffer);
70 void resize(const geometry::Size &newsize) override;
74 graphics::BufferProperties bundle_properties;
75 std::shared_ptr<graphics::GraphicBufferAllocator> gralloc;
77 int drop_frames(
int max);
79 int first_free() const;
80 int next(
int slot) const;
81 int prev(
int slot) const;
82 int last_compositor() const;
84 const std::shared_ptr<graphics::Buffer> &alloc_buffer(
int slot);
85 void complete_client_acquire(std::unique_lock<std::mutex> lock);
86 bool client_buffers_available(std::unique_lock<std::mutex> const& lock);
89 std::shared_ptr<graphics::Buffer> buf;
104 mutable std::mutex guard;
105 std::condition_variable cond;
107 std::unordered_set<void const*> users;
109 bool overlapping_compositors;
114 std::function<void(graphics::Buffer* buffer)> client_acquire_todo;
120 std::ostream&
operator<<(std::ostream& os,
const SwitchingBundle& bundle);
Definition: buffer_bundle.h:33
SwitchingBundle(int nbuffers, const std::shared_ptr< graphics::GraphicBufferAllocator > &, const graphics::BufferProperties &)
Definition: switching_bundle.cpp:69
int buffers_ready_for_compositor() const override
Definition: switching_bundle.cpp:460
void client_release(graphics::Buffer *buffer)
Definition: switching_bundle.cpp:281
std::shared_ptr< graphics::Buffer > compositor_acquire(void const *user_id) override
Acquire the next buffer that's ready to display/composite.
Definition: switching_bundle.cpp:297
Definition: switching_bundle.h:43
void allow_framedropping(bool dropping_allowed)
Definition: switching_bundle.cpp:436
bool framedropping_allowed() const
Definition: switching_bundle.cpp:442
graphics::BufferProperties properties() const
Definition: switching_bundle.cpp:448
std::shared_ptr< graphics::Buffer > snapshot_acquire()
Definition: switching_bundle.cpp:379
Definition: switching_bundle.h:43
friend std::ostream & operator<<(std::ostream &os, const SwitchingBundle &bundle)
void client_acquire(std::function< void(graphics::Buffer *buffer)> complete) override
Definition: switching_bundle.cpp:208
void force_requests_to_complete()
Definition: switching_bundle.cpp:425
std::ostream & operator<<(std::ostream &os, const SwitchingBundle &bundle)
Definition: switching_bundle.cpp:466
void snapshot_release(std::shared_ptr< graphics::Buffer > const &released_buffer)
Definition: switching_bundle.cpp:407
void compositor_release(std::shared_ptr< graphics::Buffer > const &released_buffer)
Definition: switching_bundle.cpp:345
Buffer creation properties.
Definition: buffer_properties.h:48
void resize(const geometry::Size &newsize) override
Change the dimensions of the buffers contained in the bundle.
Definition: switching_bundle.cpp:454
~SwitchingBundle() noexcept
Definition: switching_bundle.cpp:93
Definition: switching_bundle.h:40