~chasedouglas/+junk/client-lib

« back to all changes in this revision

Viewing changes to src/compositor/buffer_bundle.cpp

  • Committer: Alan Griffiths
  • Date: 2012-07-06 16:48:49 UTC
  • mfrom: (28.4.63 add-bm-client)
  • Revision ID: alan@octopull.co.uk-20120706164849-4g2i72hplzgbvuwa
Refine interfaces surrounding the BufferBundle

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 * Authored by:
17
17
 * Kevin DuBois <kevin.dubois@canonical.com>
18
18
 */
19
 
#include <mir/compositor/buffer_manager_client.h>
 
19
#include "mir/compositor/buffer_bundle.h"
 
20
 
 
21
#include <algorithm>
 
22
#include <mutex>
20
23
 
21
24
namespace mc = mir::compositor;
22
25
 
23
 
mc::BufferManagerClient::BufferManagerClient()
24
 
{
 
26
mc::BufferBundle::BufferBundle()
 
27
{
 
28
}
 
29
 
 
30
mc::BufferBundle::~BufferBundle()
 
31
{
 
32
}
 
33
 
 
34
void mc::BufferBundle::set_swap_pattern(mc::BufferSwapper *)
 
35
{
 
36
}
 
37
 
 
38
void mc::BufferBundle::add_buffer(std::shared_ptr<Buffer> buffer)
 
39
{
 
40
 
 
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;
 
45
 
 
46
    buffer_list.push_back(buffer);
 
47
}
 
48
 
 
49
int mc::BufferBundle::remove_all_buffers()
 
50
{
 
51
    std::lock_guard<std::mutex> lg(buffer_list_guard);
 
52
 
 
53
    int size = buffer_list.size();
 
54
    buffer_list.clear();
 
55
 
 
56
    return size;
 
57
}
 
58
 
 
59
void mc::BufferBundle::lock_back_buffer()
 
60
{
 
61
    compositor_buffer->lock();
 
62
}
 
63
 
 
64
void mc::BufferBundle::unlock_back_buffer()
 
65
{
 
66
    compositor_buffer->unlock();
 
67
}
 
68
 
 
69
std::shared_ptr<mc::Buffer> mc::BufferBundle::back_buffer()
 
70
{
 
71
    return compositor_buffer;
 
72
}
 
73
 
 
74
void mc::BufferBundle::queue_client_buffer(std::shared_ptr<mc::Buffer> buffer)
 
75
{
 
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);
 
79
 
 
80
    buffer->unlock();
 
81
 
 
82
    std::swap(compositor_buffer, client_buffer);
 
83
    std::swap(compositor_buffer, buffer);
 
84
}
 
85
 
 
86
std::shared_ptr<mc::Buffer> mc::BufferBundle::dequeue_client_buffer()
 
87
{
 
88
    // TODO: This is a very dumb strategy for locking
 
89
    std::lock_guard<mc::Buffer> lg_client_buffer(*client_buffer);
 
90
 
 
91
    client_buffer->lock();
 
92
    return client_buffer;
25
93
}
26
94
 
27
95