Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / ui / ozone / platform / dri / dri_surface.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/ozone/platform/dri/dri_surface.h"
6
7 #include <errno.h>
8 #include <sys/mman.h>
9 #include <sys/types.h>
10 #include <xf86drm.h>
11
12 #include "base/logging.h"
13 #include "third_party/skia/include/core/SkCanvas.h"
14 #include "ui/gfx/geometry/rect.h"
15 #include "ui/gfx/skia_util.h"
16 #include "ui/ozone/platform/dri/dri_buffer.h"
17 #include "ui/ozone/platform/dri/dri_wrapper.h"
18
19 namespace ui {
20
21 DriSurface::DriSurface(
22     DriWrapper* dri, const gfx::Size& size)
23     : dri_(dri),
24       bitmaps_(),
25       front_buffer_(0),
26       size_(size) {
27 }
28
29 DriSurface::~DriSurface() {
30 }
31
32 bool DriSurface::Initialize() {
33   for (size_t i = 0; i < arraysize(bitmaps_); ++i) {
34     bitmaps_[i].reset(CreateBuffer());
35     // TODO(dnicoara) Should select the configuration based on what the
36     // underlying system supports.
37     SkImageInfo info = SkImageInfo::Make(size_.width(),
38                                          size_.height(),
39                                          kPMColor_SkColorType,
40                                          kPremul_SkAlphaType);
41     if (!bitmaps_[i]->Initialize(info)) {
42       return false;
43     }
44   }
45
46   return true;
47 }
48
49 uint32_t DriSurface::GetFramebufferId() const {
50   CHECK(backbuffer());
51   return backbuffer()->framebuffer();
52 }
53
54 uint32_t DriSurface::GetHandle() const {
55   CHECK(backbuffer());
56   return backbuffer()->handle();
57 }
58
59 // This call is made after the hardware just started displaying our back buffer.
60 // We need to update our pointer reference and synchronize the two buffers.
61 void DriSurface::SwapBuffers() {
62   CHECK(frontbuffer());
63   CHECK(backbuffer());
64
65   // Update our front buffer pointer.
66   front_buffer_ ^= 1;
67 }
68
69 SkCanvas* DriSurface::GetDrawableForWidget() {
70   CHECK(backbuffer());
71   return backbuffer()->canvas();
72 }
73
74 DriBuffer* DriSurface::CreateBuffer() { return new DriBuffer(dri_); }
75
76 }  // namespace ui