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;
75 std::unique_lock<std::mutex>& lock);
77 std::unique_lock<std::mutex>& lock, SnapshotWait wait_type);
79 std::unique_lock<std::mutex> lock);
80 void drop_frame(std::unique_lock<std::mutex>& lock, SnapshotWait wait_type);
82 mutable std::mutex guard;
83 std::unique_lock<decltype(guard)> guard_lock;
85 std::vector<std::shared_ptr<graphics::Buffer>> buffers;
86 std::deque<graphics::Buffer*> ready_to_composite_queue;
87 std::deque<graphics::Buffer*> buffers_owned_by_client;
88 std::vector<graphics::Buffer*> free_buffers;
89 std::vector<graphics::Buffer*> buffers_sent_to_compositor;
90 std::vector<graphics::Buffer*> pending_snapshots;
92 std::vector<void const*> current_buffer_users;
95 std::deque<Callback> pending_client_notifications;
98 bool frame_dropping_enabled;
100 bool force_new_compositor_buffer;
101 bool callbacks_allowed;
103 std::condition_variable snapshot_released;
104 std::shared_ptr<graphics::GraphicBufferAllocator> gralloc;
108 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:377
All things Mir.
Definition: buffer_stream.h:37
Definition: buffer_bundle.h:33
void force_requests_to_complete() override
Definition: buffer_queue.cpp:341
void allow_framedropping(bool dropping_allowed) override
Definition: buffer_queue.cpp:329
void drop_old_buffers() override
Definition: buffer_queue.cpp:538
std::shared_ptr< graphics::Buffer > snapshot_acquire() override
Definition: buffer_queue.cpp:304
void drop_client_requests() override
Definition: buffer_queue.cpp:557
void client_acquire(Callback complete) override
Definition: buffer_queue.cpp:149
void compositor_release(std::shared_ptr< graphics::Buffer > const &buffer) override
Definition: buffer_queue.cpp:264
bool framedropping_allowed() const
Definition: buffer_queue.cpp:335
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:211
bool is_a_current_buffer_user(void const *user_id) const
Definition: buffer_queue.cpp:442
void client_release(graphics::Buffer *buffer) override
Definition: buffer_queue.cpp:190
graphics::BufferProperties properties() const override
Definition: buffer_queue.cpp:323
Definition: buffer_queue.h:40
Buffer creation properties.
Definition: buffer_properties.h:48
void resize(const geometry::Size &newsize) override
Definition: buffer_queue.cpp:356
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:38
void snapshot_release(std::shared_ptr< graphics::Buffer > const &buffer) override
Definition: buffer_queue.cpp:311
std::function< void(graphics::Buffer *buffer)> Callback
Definition: buffer_queue.h:43
int buffers_ready_for_compositor(void const *user_id) const override
Definition: buffer_queue.cpp:362