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

Side by Side Diff: gpu/ipc/client/gpu_memory_buffer_impl_surface_texture.cc

Issue 2353453002: ui: Remove SurfaceTexture GpuMemoryBuffer type. (Closed)
Patch Set: ui: Remove SurfaceTexture GpuMemoryBuffer type. Created 4 years, 3 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
OLDNEW
(Empty)
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 "gpu/ipc/client/gpu_memory_buffer_impl_surface_texture.h"
6
7 #include "base/logging.h"
8 #include "base/memory/ptr_util.h"
9 #include "base/trace_event/trace_event.h"
10 #include "gpu/ipc/common/android/surface_texture_manager.h"
11 #include "gpu/ipc/common/gpu_memory_buffer_support.h"
12 #include "ui/gfx/buffer_format_util.h"
13 #include "ui/gl/android/surface_texture.h"
14 #include "ui/gl/gl_bindings.h"
15
16 namespace gpu {
17 namespace {
18
19 int WindowFormat(gfx::BufferFormat format) {
20 switch (format) {
21 case gfx::BufferFormat::RGBA_8888:
22 return WINDOW_FORMAT_RGBA_8888;
23 case gfx::BufferFormat::ATC:
24 case gfx::BufferFormat::ATCIA:
25 case gfx::BufferFormat::DXT1:
26 case gfx::BufferFormat::DXT5:
27 case gfx::BufferFormat::ETC1:
28 case gfx::BufferFormat::R_8:
29 case gfx::BufferFormat::BGR_565:
30 case gfx::BufferFormat::RGBA_4444:
31 case gfx::BufferFormat::RGBX_8888:
32 case gfx::BufferFormat::BGRX_8888:
33 case gfx::BufferFormat::BGRA_8888:
34 case gfx::BufferFormat::YVU_420:
35 case gfx::BufferFormat::YUV_420_BIPLANAR:
36 case gfx::BufferFormat::UYVY_422:
37 NOTREACHED();
38 return 0;
39 }
40
41 NOTREACHED();
42 return 0;
43 }
44
45 void FreeSurfaceTextureForTesting(
46 scoped_refptr<gl::SurfaceTexture> surface_texture,
47 gfx::GpuMemoryBufferId id) {
48 gpu::SurfaceTextureManager::GetInstance()->UnregisterSurfaceTexture(id.id, 0);
49 }
50
51 } // namespace
52
53 GpuMemoryBufferImplSurfaceTexture::GpuMemoryBufferImplSurfaceTexture(
54 gfx::GpuMemoryBufferId id,
55 const gfx::Size& size,
56 gfx::BufferFormat format,
57 const DestructionCallback& callback,
58 ANativeWindow* native_window)
59 : GpuMemoryBufferImpl(id, size, format, callback),
60 native_window_(native_window) {}
61
62 GpuMemoryBufferImplSurfaceTexture::~GpuMemoryBufferImplSurfaceTexture() {
63 ANativeWindow_release(native_window_);
64 }
65
66 // static
67 std::unique_ptr<GpuMemoryBufferImplSurfaceTexture>
68 GpuMemoryBufferImplSurfaceTexture::CreateFromHandle(
69 const gfx::GpuMemoryBufferHandle& handle,
70 const gfx::Size& size,
71 gfx::BufferFormat format,
72 gfx::BufferUsage usage,
73 const DestructionCallback& callback) {
74 ANativeWindow* native_window =
75 gpu::SurfaceTextureManager::GetInstance()
76 ->AcquireNativeWidgetForSurfaceTexture(handle.id.id);
77 if (!native_window)
78 return nullptr;
79
80 ANativeWindow_setBuffersGeometry(native_window, size.width(), size.height(),
81 WindowFormat(format));
82
83 return base::WrapUnique(new GpuMemoryBufferImplSurfaceTexture(
84 handle.id, size, format, callback, native_window));
85 }
86
87 // static
88 bool GpuMemoryBufferImplSurfaceTexture::IsConfigurationSupported(
89 gfx::BufferFormat format,
90 gfx::BufferUsage usage) {
91 return gpu::IsNativeGpuMemoryBufferConfigurationSupported(format, usage);
92 }
93
94 // static
95 base::Closure GpuMemoryBufferImplSurfaceTexture::AllocateForTesting(
96 const gfx::Size& size,
97 gfx::BufferFormat format,
98 gfx::BufferUsage usage,
99 gfx::GpuMemoryBufferHandle* handle) {
100 scoped_refptr<gl::SurfaceTexture> surface_texture =
101 gl::SurfaceTexture::Create(0);
102 DCHECK(surface_texture);
103 const gfx::GpuMemoryBufferId kBufferId(1);
104 gpu::SurfaceTextureManager::GetInstance()->RegisterSurfaceTexture(
105 kBufferId.id, 0, surface_texture.get());
106 handle->type = gfx::SURFACE_TEXTURE_BUFFER;
107 handle->id = kBufferId;
108 return base::Bind(&FreeSurfaceTextureForTesting, surface_texture, kBufferId);
109 }
110
111 bool GpuMemoryBufferImplSurfaceTexture::Map() {
112 TRACE_EVENT0("gpu", "GpuMemoryBufferImplSurfaceTexture::Map");
113 DCHECK(!mapped_);
114 DCHECK(native_window_);
115 if (ANativeWindow_lock(native_window_, &buffer_, NULL)) {
116 DPLOG(ERROR) << "ANativeWindow_lock failed";
117 return false;
118 }
119 DCHECK_LE(size_.width(), buffer_.stride);
120 mapped_ = true;
121 return true;
122 }
123
124 void* GpuMemoryBufferImplSurfaceTexture::memory(size_t plane) {
125 TRACE_EVENT0("gpu", "GpuMemoryBufferImplSurfaceTexture::memory");
126 DCHECK(mapped_);
127 DCHECK_EQ(0u, plane);
128 return buffer_.bits;
129 }
130
131 void GpuMemoryBufferImplSurfaceTexture::Unmap() {
132 TRACE_EVENT0("gpu", "GpuMemoryBufferImplSurfaceTexture::Unmap");
133 DCHECK(mapped_);
134 ANativeWindow_unlockAndPost(native_window_);
135 mapped_ = false;
136 }
137
138 int GpuMemoryBufferImplSurfaceTexture::stride(size_t plane) const {
139 DCHECK(mapped_);
140 DCHECK_EQ(0u, plane);
141 return gfx::RowSizeForBufferFormat(buffer_.stride, format_, 0);
142 }
143
144 gfx::GpuMemoryBufferHandle GpuMemoryBufferImplSurfaceTexture::GetHandle()
145 const {
146 gfx::GpuMemoryBufferHandle handle;
147 handle.type = gfx::SURFACE_TEXTURE_BUFFER;
148 handle.id = id_;
149 return handle;
150 }
151
152 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698