51
53
std::shared_ptr<mc::SwitchingBundle> switching_bundle;
52
std::atomic<bool> client_thread_done;
54
std::mutex acquire_mutex; // must live longer than our callback/lambda
56
mg::Buffer* client_acquire_blocking(
57
std::shared_ptr<mc::SwitchingBundle> const& switching_bundle)
59
std::condition_variable cv;
60
bool acquired = false;
63
switching_bundle->client_acquire(
64
[&](mg::Buffer* new_buffer)
66
std::unique_lock<decltype(acquire_mutex)> lock(acquire_mutex);
73
std::unique_lock<decltype(acquire_mutex)> lock(acquire_mutex);
75
cv.wait(lock, [&]{ return acquired; });
55
auto client_acquire_blocking(std::shared_ptr<mc::SwitchingBundle> const& switching_bundle)
59
std::condition_variable cv;
63
switching_bundle->client_acquire(
64
[&](mg::Buffer* new_buffer)
66
std::unique_lock<decltype(mutex)> lock(mutex);
73
std::unique_lock<decltype(mutex)> lock(mutex);
75
cv.wait(lock, [&]{ return done; });
81
83
TEST_F(SwapperSwappingStress, swapper)
83
client_thread_done = false;
85
std::atomic_bool done(false);
85
87
auto f = std::async(std::launch::async,
88
90
for(auto i=0u; i < 400; i++)
91
93
std::this_thread::yield();
92
94
switching_bundle->client_release(b);
94
client_thread_done = true;
97
99
auto g = std::async(std::launch::async,
100
102
unsigned long count = 0;
101
while(!client_thread_done)
103
105
auto b = switching_bundle->compositor_acquire(++count);
104
106
std::this_thread::yield();
126
128
TEST_F(SwapperSwappingStress, different_swapper_types)
128
client_thread_done = false;
130
std::atomic_bool done(false);
130
132
auto f = std::async(std::launch::async,
133
135
for(auto i=0u; i < 400; i++)
136
138
std::this_thread::yield();
137
139
switching_bundle->client_release(b);
139
client_thread_done = true;
142
144
auto g = std::async(std::launch::async,
145
147
unsigned long count = 0;
146
while(!client_thread_done)
148
150
auto b = switching_bundle->compositor_acquire(++count);
149
151
std::this_thread::yield();