Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1483)

Side by Side Diff: ui/ozone/platform/dri/dri_surface.cc

Issue 249413003: ozone: dri: Composite to intermediate surface & copy (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: split drisurfaceadapter definitions Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/ozone/platform/dri/dri_surface.h" 5 #include "ui/ozone/platform/dri/dri_surface.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <sys/mman.h> 8 #include <sys/mman.h>
9 #include <sys/types.h> 9 #include <sys/types.h>
10 #include <xf86drm.h> 10 #include <xf86drm.h>
11 11
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "third_party/skia/include/core/SkCanvas.h" 13 #include "third_party/skia/include/core/SkCanvas.h"
14 #include "ui/gfx/geometry/rect.h" 14 #include "ui/gfx/geometry/rect.h"
15 #include "ui/gfx/skia_util.h" 15 #include "ui/gfx/skia_util.h"
16 #include "ui/ozone/platform/dri/dri_buffer.h" 16 #include "ui/ozone/platform/dri/dri_buffer.h"
17 #include "ui/ozone/platform/dri/dri_wrapper.h" 17 #include "ui/ozone/platform/dri/dri_wrapper.h"
18 18
19 namespace ui { 19 namespace ui {
20 20
21 namespace {
22
23 // TODO(dnicoara) Remove this once Skia implements this between 2 SkCanvases.
24 void CopyRect(DriBuffer* dst, DriBuffer* src, const gfx::Rect& damage) {
25 SkImageInfo src_info, dst_info;
26 size_t src_stride, dst_stride;
27 uint8_t* src_pixels = static_cast<uint8_t*>(
28 const_cast<void*>(src->canvas()->peekPixels(&src_info, &src_stride)));
29 uint8_t* dst_pixels = static_cast<uint8_t*>(
30 const_cast<void*>(dst->canvas()->peekPixels(&dst_info, &dst_stride)));
31
32 // The 2 buffers should have the same properties.
33 DCHECK(src_info == dst_info);
34 DCHECK(src_stride == dst_stride);
35
36 int bpp = src_info.bytesPerPixel();
37 for (int height = damage.y(); height < damage.y() + damage.height(); ++height)
38 memcpy(dst_pixels + height * dst_stride + damage.x() * bpp,
39 src_pixels + height * src_stride + damage.x() * bpp,
40 damage.width() * bpp);
41 }
42
43 } // namespace
44
45 DriSurface::DriSurface( 21 DriSurface::DriSurface(
46 DriWrapper* dri, const gfx::Size& size) 22 DriWrapper* dri, const gfx::Size& size)
47 : dri_(dri), 23 : dri_(dri),
48 bitmaps_(), 24 bitmaps_(),
49 front_buffer_(0), 25 front_buffer_(0),
50 size_(size) { 26 size_(size) {
51 } 27 }
52 28
53 DriSurface::~DriSurface() { 29 DriSurface::~DriSurface() {
54 } 30 }
(...skipping 26 matching lines...) Expand all
81 } 57 }
82 58
83 // This call is made after the hardware just started displaying our back buffer. 59 // This call is made after the hardware just started displaying our back buffer.
84 // We need to update our pointer reference and synchronize the two buffers. 60 // We need to update our pointer reference and synchronize the two buffers.
85 void DriSurface::SwapBuffers() { 61 void DriSurface::SwapBuffers() {
86 CHECK(frontbuffer()); 62 CHECK(frontbuffer());
87 CHECK(backbuffer()); 63 CHECK(backbuffer());
88 64
89 // Update our front buffer pointer. 65 // Update our front buffer pointer.
90 front_buffer_ ^= 1; 66 front_buffer_ ^= 1;
91
92 SkIRect device_damage;
93 frontbuffer()->canvas()->getClipDeviceBounds(&device_damage);
94 CopyRect(backbuffer(), frontbuffer(), gfx::SkIRectToRect(device_damage));
95 } 67 }
96 68
97 SkCanvas* DriSurface::GetDrawableForWidget() { 69 SkCanvas* DriSurface::GetDrawableForWidget() {
98 CHECK(backbuffer()); 70 CHECK(backbuffer());
99 return backbuffer()->canvas(); 71 return backbuffer()->canvas();
100 } 72 }
101 73
102 DriBuffer* DriSurface::CreateBuffer() { return new DriBuffer(dri_); } 74 DriBuffer* DriSurface::CreateBuffer() { return new DriBuffer(dri_); }
103 75
104 } // namespace ui 76 } // namespace ui
OLDNEW
« no previous file with comments | « ui/ozone/platform/caca/caca_surface_factory.cc ('k') | ui/ozone/platform/dri/dri_surface_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698