18 #ifndef MIR_BUFFER_QUEUE_H_
19 #define MIR_BUFFER_QUEUE_H_
26 #include <condition_variable>
35 class GraphicBufferAllocator;
43 typedef std::function<void(graphics::Buffer* buffer)>
Callback;
46 std::shared_ptr<graphics::GraphicBufferAllocator>
const& alloc,
55 void snapshot_release(std::shared_ptr<graphics::Buffer>
const& buffer)
override;
69 std::unique_lock<std::mutex> lock);
71 std::unique_lock<std::mutex> lock);
72 void drop_frame(std::unique_lock<std::mutex> lock);
74 mutable std::mutex guard;
76 std::vector<std::shared_ptr<graphics::Buffer>> buffers;
77 std::deque<graphics::Buffer*> ready_to_composite_queue;
78 std::deque<graphics::Buffer*> buffers_owned_by_client;
79 std::vector<graphics::Buffer*> free_buffers;
80 std::vector<graphics::Buffer*> buffers_sent_to_compositor;
81 std::vector<graphics::Buffer*> pending_snapshots;
83 std::vector<void const*> current_buffer_users;
86 std::deque<Callback> pending_client_notifications;
89 bool frame_dropping_enabled;
91 bool force_new_compositor_buffer;
93 std::condition_variable snapshot_released;
94 std::shared_ptr<graphics::GraphicBufferAllocator> gralloc;
98 std::unique_ptr<FrameDroppingPolicy> framedrop_policy;
int buffers_free_for_client() const override
Return the number of client acquisitions that can be completed synchronously without blocking...
Definition: buffer_queue.cpp:396
All things Mir.
Definition: aging_buffer.h:24
Definition: buffer_bundle.h:33
void force_requests_to_complete() override
Definition: buffer_queue.cpp:364
void allow_framedropping(bool dropping_allowed) override
Definition: buffer_queue.cpp:352
void drop_old_buffers() override
Definition: buffer_queue.cpp:487
std::shared_ptr< graphics::Buffer > snapshot_acquire() override
Definition: buffer_queue.cpp:327
void client_acquire(Callback complete) override
Definition: buffer_queue.cpp:172
void compositor_release(std::shared_ptr< graphics::Buffer > const &buffer) override
Definition: buffer_queue.cpp:287
bool framedropping_allowed() const
Definition: buffer_queue.cpp:358
std::shared_ptr< graphics::Buffer > compositor_acquire(void const *user_id) override
Acquire the next buffer that's ready to display/composite.
Definition: buffer_queue.cpp:234
int buffers_ready_for_compositor() const override
Definition: buffer_queue.cpp:385
bool is_a_current_buffer_user(void const *user_id) const
Definition: buffer_queue.cpp:450
void client_release(graphics::Buffer *buffer) override
Definition: buffer_queue.cpp:213
graphics::BufferProperties properties() const override
Definition: buffer_queue.cpp:346
Definition: buffer_queue.h:40
Buffer creation properties.
Definition: buffer_properties.h:48
void resize(const geometry::Size &newsize) override
Definition: buffer_queue.cpp:379
BufferQueue(int nbuffers, std::shared_ptr< graphics::GraphicBufferAllocator > const &alloc, graphics::BufferProperties const &props, FrameDroppingPolicyFactory const &policy_provider)
Definition: buffer_queue.cpp:94
Creator of FrameDroppingPolicies.
Definition: frame_dropping_policy_factory.h:37
void snapshot_release(std::shared_ptr< graphics::Buffer > const &buffer) override
Definition: buffer_queue.cpp:334
std::function< void(graphics::Buffer *buffer)> Callback
Definition: buffer_queue.h:43