2
* Copyright © 2013 Canonical Ltd.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU Lesser General Public License version 3,
6
* as published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
* Kevin DuBois <kevin.dubois@canonical.com>
20
#include "mir/graphics/buffer.h"
21
#include "mir/graphics/android/sync_fence.h"
22
#include "server_render_window.h"
23
#include "framebuffer_bundle.h"
25
#include "android_format_conversion-inl.h"
26
#include "interpreter_resource_cache.h"
28
#include <system/window.h>
29
#include <boost/throw_exception.hpp>
32
namespace mg=mir::graphics;
33
namespace mga=mir::graphics::android;
34
namespace geom=mir::geometry;
36
mga::ServerRenderWindow::ServerRenderWindow(
37
std::shared_ptr<mga::FramebufferBundle> const& fb_bundle,
38
std::shared_ptr<InterpreterResourceCache> const& cache)
39
: fb_bundle(fb_bundle),
40
resource_cache(cache),
41
format(mga::to_android_format(fb_bundle->fb_format()))
45
mg::NativeBuffer* mga::ServerRenderWindow::driver_requests_buffer()
47
auto buffer = fb_bundle->buffer_for_render();
48
auto handle = buffer->native_buffer_handle();
49
resource_cache->store_buffer(buffer, handle);
53
void mga::ServerRenderWindow::driver_returns_buffer(ANativeWindowBuffer* buffer, int fence_fd)
55
resource_cache->update_native_fence(buffer, fence_fd);
56
resource_cache->retrieve_buffer(buffer);
59
void mga::ServerRenderWindow::dispatch_driver_request_format(int request_format)
61
format = request_format;
64
int mga::ServerRenderWindow::driver_requests_info(int key) const
69
case NATIVE_WINDOW_DEFAULT_WIDTH:
70
case NATIVE_WINDOW_WIDTH:
71
size = fb_bundle->fb_size();
72
return size.width.as_uint32_t();
73
case NATIVE_WINDOW_DEFAULT_HEIGHT:
74
case NATIVE_WINDOW_HEIGHT:
75
size = fb_bundle->fb_size();
76
return size.height.as_uint32_t();
77
case NATIVE_WINDOW_FORMAT:
79
case NATIVE_WINDOW_TRANSFORM_HINT:
81
case NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS:
84
BOOST_THROW_EXCEPTION(std::runtime_error("driver requests info we dont provide. key: " + key));
88
void mga::ServerRenderWindow::sync_to_display(bool sync)
90
fb_bundle->wait_for_consumed_buffer(sync);