17
17
* Kevin DuBois <kevin.dubois@canonical.com>
19
#include <mir/compositor/buffer_manager_client.h>
19
#include "mir/compositor/buffer_bundle.h"
21
24
namespace mc = mir::compositor;
23
mc::BufferManagerClient::BufferManagerClient()
26
mc::BufferBundle::BufferBundle()
30
mc::BufferBundle::~BufferBundle()
34
void mc::BufferBundle::set_swap_pattern(mc::BufferSwapper *)
38
void mc::BufferBundle::add_buffer(std::shared_ptr<Buffer> buffer)
41
std::lock_guard<std::mutex> lg(buffer_list_guard);
42
std::lock_guard<std::mutex> lg_back_buffer(back_buffer_guard);
43
compositor_buffer = client_buffer;
44
client_buffer = buffer;
46
buffer_list.push_back(buffer);
49
int mc::BufferBundle::remove_all_buffers()
51
std::lock_guard<std::mutex> lg(buffer_list_guard);
53
int size = buffer_list.size();
59
void mc::BufferBundle::lock_back_buffer()
61
compositor_buffer->lock();
64
void mc::BufferBundle::unlock_back_buffer()
66
compositor_buffer->unlock();
69
std::shared_ptr<mc::Buffer> mc::BufferBundle::back_buffer()
71
return compositor_buffer;
74
void mc::BufferBundle::queue_client_buffer(std::shared_ptr<mc::Buffer> buffer)
76
// TODO: This is a very dumb strategy for locking
77
std::lock_guard<mc::Buffer> lg_compositor_buffer(*compositor_buffer);
78
std::lock_guard<mc::Buffer> lg_client_buffer(*client_buffer);
82
std::swap(compositor_buffer, client_buffer);
83
std::swap(compositor_buffer, buffer);
86
std::shared_ptr<mc::Buffer> mc::BufferBundle::dequeue_client_buffer()
88
// TODO: This is a very dumb strategy for locking
89
std::lock_guard<mc::Buffer> lg_client_buffer(*client_buffer);
91
client_buffer->lock();