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

Side by Side Diff: gpu/command_buffer/tests/gl_manager.cc

Issue 634083002: gpu: Compositor management of GpuMemoryBuffer instances. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cc-pre-chromium-image-refactor
Patch Set: rebase Created 6 years, 2 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
« no previous file with comments | « gpu/command_buffer/tests/gl_manager.h ('k') | gpu/gles2_conform_support/egl/display.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "gpu/command_buffer/tests/gl_manager.h" 5 #include "gpu/command_buffer/tests/gl_manager.h"
6 6
7 #include <GLES2/gl2.h> 7 #include <GLES2/gl2.h>
8 #include <GLES2/gl2ext.h> 8 #include <GLES2/gl2ext.h>
9 #include <GLES2/gl2extchromium.h>
9 10
10 #include <vector> 11 #include <vector>
11 12
12 #include "base/at_exit.h" 13 #include "base/at_exit.h"
13 #include "base/bind.h" 14 #include "base/bind.h"
14 #include "base/memory/ref_counted_memory.h" 15 #include "base/memory/ref_counted_memory.h"
15 #include "gpu/command_buffer/client/gles2_implementation.h" 16 #include "gpu/command_buffer/client/gles2_implementation.h"
16 #include "gpu/command_buffer/client/gles2_lib.h" 17 #include "gpu/command_buffer/client/gles2_lib.h"
17 #include "gpu/command_buffer/client/transfer_buffer.h" 18 #include "gpu/command_buffer/client/transfer_buffer.h"
18 #include "gpu/command_buffer/common/constants.h" 19 #include "gpu/command_buffer/common/constants.h"
19 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 20 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
20 #include "gpu/command_buffer/service/command_buffer_service.h" 21 #include "gpu/command_buffer/service/command_buffer_service.h"
21 #include "gpu/command_buffer/service/context_group.h" 22 #include "gpu/command_buffer/service/context_group.h"
22 #include "gpu/command_buffer/service/gl_context_virtual.h" 23 #include "gpu/command_buffer/service/gl_context_virtual.h"
23 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 24 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
24 #include "gpu/command_buffer/service/gpu_scheduler.h" 25 #include "gpu/command_buffer/service/gpu_scheduler.h"
25 #include "gpu/command_buffer/service/image_manager.h" 26 #include "gpu/command_buffer/service/image_manager.h"
26 #include "gpu/command_buffer/service/mailbox_manager.h" 27 #include "gpu/command_buffer/service/mailbox_manager.h"
27 #include "gpu/command_buffer/service/memory_tracking.h" 28 #include "gpu/command_buffer/service/memory_tracking.h"
28 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
29 #include "ui/gfx/gpu_memory_buffer.h" 30 #include "ui/gfx/gpu_memory_buffer.h"
30 #include "ui/gl/gl_context.h" 31 #include "ui/gl/gl_context.h"
31 #include "ui/gl/gl_image_ref_counted_memory.h" 32 #include "ui/gl/gl_image_ref_counted_memory.h"
32 #include "ui/gl/gl_share_group.h" 33 #include "ui/gl/gl_share_group.h"
33 #include "ui/gl/gl_surface.h" 34 #include "ui/gl/gl_surface.h"
34 35
35 namespace gpu { 36 namespace gpu {
36 namespace { 37 namespace {
37 38
38 int BytesPerPixel(unsigned internalformat) { 39 size_t BytesPerPixel(gfx::GpuMemoryBuffer::Format format) {
39 switch (internalformat) { 40 switch (format) {
40 case GL_RGBA8_OES: 41 case gfx::GpuMemoryBuffer::RGBA_8888:
42 case gfx::GpuMemoryBuffer::BGRA_8888:
41 return 4; 43 return 4;
42 default: 44 case gfx::GpuMemoryBuffer::RGBX_8888:
43 NOTREACHED(); 45 NOTREACHED();
44 return 0; 46 return 0;
45 } 47 }
48
49 NOTREACHED();
50 return 0;
46 } 51 }
47 52
48 class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { 53 class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
49 public: 54 public:
50 GpuMemoryBufferImpl(base::RefCountedBytes* bytes, 55 GpuMemoryBufferImpl(base::RefCountedBytes* bytes,
51 const gfx::Size& size, 56 const gfx::Size& size,
52 unsigned internalformat) 57 gfx::GpuMemoryBuffer::Format format)
53 : bytes_(bytes), 58 : bytes_(bytes), size_(size), format_(format), mapped_(false) {}
54 size_(size), 59
55 internalformat_(internalformat), 60 static GpuMemoryBufferImpl* FromClientBuffer(ClientBuffer buffer) {
56 mapped_(false) {} 61 return reinterpret_cast<GpuMemoryBufferImpl*>(buffer);
62 }
57 63
58 // Overridden from gfx::GpuMemoryBuffer: 64 // Overridden from gfx::GpuMemoryBuffer:
59 virtual void* Map() override { 65 virtual void* Map() override {
60 mapped_ = true; 66 mapped_ = true;
61 return &bytes_->data().front(); 67 return &bytes_->data().front();
62 } 68 }
63 virtual void Unmap() override { mapped_ = false; } 69 virtual void Unmap() override { mapped_ = false; }
64 virtual bool IsMapped() const override { return mapped_; } 70 virtual bool IsMapped() const override { return mapped_; }
71 virtual Format GetFormat() const override { return format_; }
65 virtual uint32 GetStride() const override { 72 virtual uint32 GetStride() const override {
66 return size_.width() * BytesPerPixel(internalformat_); 73 return size_.width() * BytesPerPixel(format_);
67 } 74 }
68 virtual gfx::GpuMemoryBufferHandle GetHandle() const override { 75 virtual gfx::GpuMemoryBufferHandle GetHandle() const override {
69 NOTREACHED(); 76 NOTREACHED();
70 return gfx::GpuMemoryBufferHandle(); 77 return gfx::GpuMemoryBufferHandle();
71 } 78 }
79 virtual ClientBuffer AsClientBuffer() override {
80 return reinterpret_cast<ClientBuffer>(this);
81 }
82
83 base::RefCountedBytes* bytes() { return bytes_.get(); }
72 84
73 private: 85 private:
74 scoped_refptr<base::RefCountedBytes> bytes_; 86 scoped_refptr<base::RefCountedBytes> bytes_;
75 const gfx::Size size_; 87 const gfx::Size size_;
76 unsigned internalformat_; 88 gfx::GpuMemoryBuffer::Format format_;
77 bool mapped_; 89 bool mapped_;
78 }; 90 };
79 91
80 } // namespace 92 } // namespace
81 93
82 int GLManager::use_count_; 94 int GLManager::use_count_;
83 scoped_refptr<gfx::GLShareGroup>* GLManager::base_share_group_; 95 scoped_refptr<gfx::GLShareGroup>* GLManager::base_share_group_;
84 scoped_refptr<gfx::GLSurface>* GLManager::base_surface_; 96 scoped_refptr<gfx::GLSurface>* GLManager::base_surface_;
85 scoped_refptr<gfx::GLContext>* GLManager::base_context_; 97 scoped_refptr<gfx::GLContext>* GLManager::base_context_;
86 98
(...skipping 22 matching lines...) Expand all
109 delete base_surface_; 121 delete base_surface_;
110 base_surface_ = NULL; 122 base_surface_ = NULL;
111 } 123 }
112 if (base_context_) { 124 if (base_context_) {
113 delete base_context_; 125 delete base_context_;
114 base_context_ = NULL; 126 base_context_ = NULL;
115 } 127 }
116 } 128 }
117 } 129 }
118 130
131 // static
132 scoped_ptr<gfx::GpuMemoryBuffer> GLManager::CreateGpuMemoryBuffer(
133 const gfx::Size& size,
134 gfx::GpuMemoryBuffer::Format format) {
135 std::vector<unsigned char> data(size.GetArea() * BytesPerPixel(format), 0);
136 scoped_refptr<base::RefCountedBytes> bytes(new base::RefCountedBytes(data));
137 return make_scoped_ptr<gfx::GpuMemoryBuffer>(
138 new GpuMemoryBufferImpl(bytes.get(), size, format));
139 }
140
119 void GLManager::Initialize(const GLManager::Options& options) { 141 void GLManager::Initialize(const GLManager::Options& options) {
120 const int32 kCommandBufferSize = 1024 * 1024; 142 const int32 kCommandBufferSize = 1024 * 1024;
121 const size_t kStartTransferBufferSize = 4 * 1024 * 1024; 143 const size_t kStartTransferBufferSize = 4 * 1024 * 1024;
122 const size_t kMinTransferBufferSize = 1 * 256 * 1024; 144 const size_t kMinTransferBufferSize = 1 * 256 * 1024;
123 const size_t kMaxTransferBufferSize = 16 * 1024 * 1024; 145 const size_t kMaxTransferBufferSize = 16 * 1024 * 1024;
124 146
125 context_lost_allowed_ = options.context_lost_allowed; 147 context_lost_allowed_ = options.context_lost_allowed;
126 148
127 gles2::MailboxManager* mailbox_manager = NULL; 149 gles2::MailboxManager* mailbox_manager = NULL;
128 if (options.share_mailbox_manager) { 150 if (options.share_mailbox_manager) {
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 } 330 }
309 331
310 bool GLManager::GetBufferChanged(int32 transfer_buffer_id) { 332 bool GLManager::GetBufferChanged(int32 transfer_buffer_id) {
311 return gpu_scheduler_->SetGetBuffer(transfer_buffer_id); 333 return gpu_scheduler_->SetGetBuffer(transfer_buffer_id);
312 } 334 }
313 335
314 Capabilities GLManager::GetCapabilities() { 336 Capabilities GLManager::GetCapabilities() {
315 return decoder_->GetCapabilities(); 337 return decoder_->GetCapabilities();
316 } 338 }
317 339
318 gfx::GpuMemoryBuffer* GLManager::CreateGpuMemoryBuffer( 340 int32 GLManager::CreateImage(ClientBuffer buffer,
319 size_t width, 341 size_t width,
320 size_t height, 342 size_t height,
321 unsigned internalformat, 343 unsigned internalformat) {
322 unsigned usage, 344 GpuMemoryBufferImpl* gpu_memory_buffer =
323 int32* id) { 345 GpuMemoryBufferImpl::FromClientBuffer(buffer);
324 gfx::Size size(width, height);
325 346
326 *id = -1; 347 scoped_refptr<gfx::GLImageRefCountedMemory> image(
327 348 new gfx::GLImageRefCountedMemory(gfx::Size(width, height),
328 std::vector<unsigned char> data( 349 internalformat));
329 size.GetArea() * BytesPerPixel(internalformat), 0); 350 if (!image->Initialize(gpu_memory_buffer->bytes(),
330 scoped_refptr<base::RefCountedBytes> bytes(new base::RefCountedBytes(data)); 351 gpu_memory_buffer->GetFormat())) {
331 scoped_ptr<gfx::GpuMemoryBuffer> buffer( 352 return -1;
332 new GpuMemoryBufferImpl(bytes.get(), size, internalformat)); 353 }
333 354
334 static int32 next_id = 1; 355 static int32 next_id = 1;
335 int32 new_id = next_id++; 356 int32 new_id = next_id++;
336 357
337 scoped_refptr<gfx::GLImageRefCountedMemory> image(
338 new gfx::GLImageRefCountedMemory(size, internalformat));
339 if (!image->Initialize(bytes.get()))
340 return NULL;
341
342 gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager(); 358 gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager();
343 DCHECK(image_manager); 359 DCHECK(image_manager);
344 image_manager->AddImage(image.get(), new_id); 360 image_manager->AddImage(image.get(), new_id);
345 361 return new_id;
346 *id = new_id;
347 DCHECK(gpu_memory_buffers_.find(new_id) == gpu_memory_buffers_.end());
348 return gpu_memory_buffers_.add(new_id, buffer.Pass()).first->second;
349 } 362 }
350 363
351 void GLManager::DestroyGpuMemoryBuffer(int32 id) { 364 int32 GLManager::CreateGpuMemoryBufferImage(size_t width,
365 size_t height,
366 unsigned internalformat,
367 unsigned usage) {
368 DCHECK_EQ(usage, static_cast<unsigned>(GL_MAP_CHROMIUM));
369 scoped_ptr<gfx::GpuMemoryBuffer> buffer = GLManager::CreateGpuMemoryBuffer(
370 gfx::Size(width, height), gfx::GpuMemoryBuffer::RGBA_8888);
371 return CreateImage(buffer->AsClientBuffer(), width, height, internalformat);
372 }
373
374 void GLManager::DestroyImage(int32 id) {
352 gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager(); 375 gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager();
353 DCHECK(image_manager); 376 DCHECK(image_manager);
354 image_manager->RemoveImage(id); 377 image_manager->RemoveImage(id);
355
356 gpu_memory_buffers_.erase(id);
357 } 378 }
358 379
359 uint32 GLManager::InsertSyncPoint() { 380 uint32 GLManager::InsertSyncPoint() {
360 NOTIMPLEMENTED(); 381 NOTIMPLEMENTED();
361 return 0u; 382 return 0u;
362 } 383 }
363 384
364 uint32 GLManager::InsertFutureSyncPoint() { 385 uint32 GLManager::InsertFutureSyncPoint() {
365 NOTIMPLEMENTED(); 386 NOTIMPLEMENTED();
366 return 0u; 387 return 0u;
(...skipping 15 matching lines...) Expand all
382 void GLManager::SetSurfaceVisible(bool visible) { 403 void GLManager::SetSurfaceVisible(bool visible) {
383 NOTIMPLEMENTED(); 404 NOTIMPLEMENTED();
384 } 405 }
385 406
386 uint32 GLManager::CreateStreamTexture(uint32 texture_id) { 407 uint32 GLManager::CreateStreamTexture(uint32 texture_id) {
387 NOTIMPLEMENTED(); 408 NOTIMPLEMENTED();
388 return 0; 409 return 0;
389 } 410 }
390 411
391 } // namespace gpu 412 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/tests/gl_manager.h ('k') | gpu/gles2_conform_support/egl/display.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698