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,
50 void client_acquire(Callback complete)
override;
52 std::shared_ptr<graphics::Buffer> compositor_acquire(
void const* user_id)
override;
53 void compositor_release(std::shared_ptr<graphics::Buffer>
const& buffer)
override;
54 std::shared_ptr<graphics::Buffer> snapshot_acquire()
override;
55 void snapshot_release(std::shared_ptr<graphics::Buffer>
const& buffer)
override;
58 void allow_framedropping(
bool dropping_allowed)
override;
60 void force_requests_to_complete()
override;
62 int buffers_ready_for_compositor(
void const* user_id)
const override;
63 int buffers_free_for_client()
const override;
64 bool framedropping_allowed()
const;
65 bool is_a_current_buffer_user(
void const* user_id)
const;
66 void drop_old_buffers()
override;
67 void drop_client_requests()
override;
75 void set_scaling_delay(
int nframes);
76 int scaling_delay()
const;
79 class LockableCallback;
86 std::unique_lock<std::mutex>& lock);
88 std::unique_lock<std::mutex>& lock, SnapshotWait wait_type);
90 std::unique_lock<std::mutex> lock);
91 void drop_frame(std::unique_lock<std::mutex>& lock, SnapshotWait wait_type);
93 mutable std::mutex guard;
95 std::vector<std::shared_ptr<graphics::Buffer>> buffers;
96 std::deque<graphics::Buffer*> ready_to_composite_queue;
97 std::deque<graphics::Buffer*> buffers_owned_by_client;
98 std::vector<graphics::Buffer*> free_buffers;
99 std::vector<graphics::Buffer*> buffers_sent_to_compositor;
100 std::vector<graphics::Buffer*> pending_snapshots;
102 std::vector<void const*> current_buffer_users;
105 std::deque<Callback> pending_client_notifications;
107 bool client_ahead_of_compositor()
const;
111 int frame_deadlines_threshold;
112 int frame_deadlines_met;
113 int scheduled_extra_frames;
115 bool frame_dropping_enabled;
116 bool current_compositor_buffer_valid;
118 bool force_new_compositor_buffer;
119 bool single_compositor;
121 std::condition_variable snapshot_released;
122 std::shared_ptr<graphics::GraphicBufferAllocator> gralloc;
124 mutable std::mutex callbacks_guard;
125 bool callbacks_allowed;
129 std::unique_ptr<FrameDroppingPolicy> framedrop_policy;
All things Mir.
Definition: atomic_callback.h:25
Definition: buffer_bundle.h:67
MultiMonitorMode
Definition: buffer_bundle.h:33
Definition: buffer_queue.h:40
Buffer creation properties.
Definition: buffer_properties.h:48
Creator of FrameDroppingPolicies.
Definition: frame_dropping_policy_factory.h:40
std::function< void(graphics::Buffer *buffer)> Callback
Definition: buffer_queue.h:43