~hikiko/mir/mir.unity8-desktop-session

« back to all changes in this revision

Viewing changes to src/platform/graphics/android/server_render_window.cpp

  • Committer: Package Import Robot
  • Author(s): Ubuntu daily release, Daniel van Vugt, Ubuntu daily release
  • Date: 2014-01-08 02:04:38 UTC
  • mfrom: (1.1.54)
  • Revision ID: package-import@ubuntu.com-20140108020438-ikbu7qqm9v2l026y
Tags: 0.1.3+14.04.20140108-0ubuntu1
[ Daniel van Vugt ]
* Preparing for release 0.1.3

[ Ubuntu daily release ]
* Automatic snapshot from revision 1170

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright © 2013 Canonical Ltd.
 
3
 *
 
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.
 
7
 *
 
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.
 
12
 *
 
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/>.
 
15
 *
 
16
 * Authored by:
 
17
 *   Kevin DuBois <kevin.dubois@canonical.com>
 
18
 */
 
19
 
 
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"
 
24
#include "buffer.h"
 
25
#include "android_format_conversion-inl.h"
 
26
#include "interpreter_resource_cache.h"
 
27
 
 
28
#include <system/window.h>
 
29
#include <boost/throw_exception.hpp>
 
30
#include <stdexcept>
 
31
 
 
32
namespace mg=mir::graphics;
 
33
namespace mga=mir::graphics::android;
 
34
namespace geom=mir::geometry;
 
35
 
 
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()))
 
42
{
 
43
}
 
44
 
 
45
mg::NativeBuffer* mga::ServerRenderWindow::driver_requests_buffer()
 
46
{
 
47
    auto buffer = fb_bundle->buffer_for_render();
 
48
    auto handle = buffer->native_buffer_handle();
 
49
    resource_cache->store_buffer(buffer, handle);
 
50
    return handle.get();
 
51
}
 
52
 
 
53
void mga::ServerRenderWindow::driver_returns_buffer(ANativeWindowBuffer* buffer, int fence_fd)
 
54
{
 
55
    resource_cache->update_native_fence(buffer, fence_fd);
 
56
    resource_cache->retrieve_buffer(buffer);
 
57
}
 
58
 
 
59
void mga::ServerRenderWindow::dispatch_driver_request_format(int request_format)
 
60
{
 
61
    format = request_format;
 
62
}
 
63
 
 
64
int mga::ServerRenderWindow::driver_requests_info(int key) const
 
65
{
 
66
    geom::Size size;
 
67
    switch(key)
 
68
    {
 
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:
 
78
            return format;
 
79
        case NATIVE_WINDOW_TRANSFORM_HINT:
 
80
            return 0;
 
81
        case NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS:
 
82
            return 1;
 
83
        default:
 
84
            BOOST_THROW_EXCEPTION(std::runtime_error("driver requests info we dont provide. key: " + key));
 
85
    }
 
86
}
 
87
 
 
88
void mga::ServerRenderWindow::sync_to_display(bool sync)
 
89
{
 
90
    fb_bundle->wait_for_consumed_buffer(sync);
 
91
}