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

Side by Side Diff: mojo/services/gles2/command_buffer_impl.cc

Issue 221453007: mojo/gpu: use SharedBuffer instead of base::SharedMemory with hacks (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix missing include 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "mojo/services/gles2/command_buffer_impl.h" 5 #include "mojo/services/gles2/command_buffer_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/shared_memory.h" 8 #include "base/memory/shared_memory.h"
9 9
10 #include "gpu/command_buffer/common/constants.h" 10 #include "gpu/command_buffer/common/constants.h"
11 #include "gpu/command_buffer/service/command_buffer_service.h" 11 #include "gpu/command_buffer/service/command_buffer_service.h"
12 #include "gpu/command_buffer/service/context_group.h" 12 #include "gpu/command_buffer/service/context_group.h"
13 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 13 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
14 #include "gpu/command_buffer/service/gpu_control_service.h" 14 #include "gpu/command_buffer/service/gpu_control_service.h"
15 #include "gpu/command_buffer/service/gpu_scheduler.h" 15 #include "gpu/command_buffer/service/gpu_scheduler.h"
16 #include "gpu/command_buffer/service/image_manager.h" 16 #include "gpu/command_buffer/service/image_manager.h"
17 #include "gpu/command_buffer/service/mailbox_manager.h" 17 #include "gpu/command_buffer/service/mailbox_manager.h"
18 #include "gpu/command_buffer/service/memory_tracking.h" 18 #include "gpu/command_buffer/service/memory_tracking.h"
19 #include "mojo/public/cpp/bindings/allocation_scope.h" 19 #include "mojo/public/cpp/bindings/allocation_scope.h"
20 #include "mojo/services/gles2/command_buffer_type_conversions.h" 20 #include "mojo/services/gles2/command_buffer_type_conversions.h"
21 #include "mojo/services/gles2/mojo_buffer_backing.h"
21 #include "ui/gl/gl_context.h" 22 #include "ui/gl/gl_context.h"
22 #include "ui/gl/gl_surface.h" 23 #include "ui/gl/gl_surface.h"
23 24
24 namespace mojo { 25 namespace mojo {
25 namespace services { 26 namespace services {
26 27
27 namespace { 28 namespace {
28 29
29 class MemoryTrackerStub : public gpu::gles2::MemoryTracker { 30 class MemoryTrackerStub : public gpu::gles2::MemoryTracker {
30 public: 31 public:
(...skipping 18 matching lines...) Expand all
49 50
50 CommandBufferImpl::CommandBufferImpl(ScopedCommandBufferClientHandle client, 51 CommandBufferImpl::CommandBufferImpl(ScopedCommandBufferClientHandle client,
51 gfx::AcceleratedWidget widget, 52 gfx::AcceleratedWidget widget,
52 const gfx::Size& size) 53 const gfx::Size& size)
53 : client_(client.Pass(), this), widget_(widget), size_(size) {} 54 : client_(client.Pass(), this), widget_(widget), size_(size) {}
54 55
55 CommandBufferImpl::~CommandBufferImpl() { client_->DidDestroy(); } 56 CommandBufferImpl::~CommandBufferImpl() { client_->DidDestroy(); }
56 57
57 void CommandBufferImpl::Initialize( 58 void CommandBufferImpl::Initialize(
58 ScopedCommandBufferSyncClientHandle sync_client, 59 ScopedCommandBufferSyncClientHandle sync_client,
59 const ShmHandle& shared_state) { 60 mojo::ScopedSharedBufferHandle shared_state) {
60 sync_client_.reset(sync_client.Pass(), NULL); 61 sync_client_.reset(sync_client.Pass(), NULL);
61 sync_client_->DidInitialize(DoInitialize(shared_state)); 62 sync_client_->DidInitialize(DoInitialize(shared_state.Pass()));
62 } 63 }
63 64
64 bool CommandBufferImpl::DoInitialize(const ShmHandle& shared_state) { 65 bool CommandBufferImpl::DoInitialize(
66 mojo::ScopedSharedBufferHandle shared_state) {
65 // TODO(piman): offscreen surface. 67 // TODO(piman): offscreen surface.
66 scoped_refptr<gfx::GLSurface> surface = 68 scoped_refptr<gfx::GLSurface> surface =
67 gfx::GLSurface::CreateViewGLSurface(widget_); 69 gfx::GLSurface::CreateViewGLSurface(widget_);
68 if (!surface.get()) 70 if (!surface.get())
69 return false; 71 return false;
70 72
71 // TODO(piman): context sharing, virtual contexts, gpu preference. 73 // TODO(piman): context sharing, virtual contexts, gpu preference.
72 scoped_refptr<gfx::GLContext> context = gfx::GLContext::CreateGLContext( 74 scoped_refptr<gfx::GLContext> context = gfx::GLContext::CreateGLContext(
73 NULL, surface.get(), gfx::PreferIntegratedGpu); 75 NULL, surface.get(), gfx::PreferIntegratedGpu);
74 if (!context.get()) 76 if (!context.get())
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 command_buffer_->SetPutOffsetChangeCallback(base::Bind( 114 command_buffer_->SetPutOffsetChangeCallback(base::Bind(
113 &gpu::GpuScheduler::PutChanged, base::Unretained(scheduler_.get()))); 115 &gpu::GpuScheduler::PutChanged, base::Unretained(scheduler_.get())));
114 command_buffer_->SetGetBufferChangeCallback(base::Bind( 116 command_buffer_->SetGetBufferChangeCallback(base::Bind(
115 &gpu::GpuScheduler::SetGetBuffer, base::Unretained(scheduler_.get()))); 117 &gpu::GpuScheduler::SetGetBuffer, base::Unretained(scheduler_.get())));
116 command_buffer_->SetParseErrorCallback( 118 command_buffer_->SetParseErrorCallback(
117 base::Bind(&CommandBufferImpl::OnParseError, base::Unretained(this))); 119 base::Bind(&CommandBufferImpl::OnParseError, base::Unretained(this)));
118 120
119 // TODO(piman): other callbacks 121 // TODO(piman): other callbacks
120 122
121 const size_t kSize = sizeof(gpu::CommandBufferSharedState); 123 const size_t kSize = sizeof(gpu::CommandBufferSharedState);
122 scoped_ptr<base::SharedMemory> shared_state_shm( 124 scoped_ptr<gpu::BufferBacking> backing(
123 new base::SharedMemory(shared_state, false)); 125 gles2::MojoBufferBacking::Create(shared_state.Pass(), kSize));
124 if (!shared_state_shm->Map(kSize)) 126 if (!backing.get())
125 return false; 127 return false;
126 128
127 command_buffer_->SetSharedStateBuffer( 129 command_buffer_->SetSharedStateBuffer(backing.Pass());
128 gpu::MakeBackingFromSharedMemory(shared_state_shm.Pass(), kSize));
129 return true; 130 return true;
130 } 131 }
131 132
132 void CommandBufferImpl::SetGetBuffer(int32_t buffer) { 133 void CommandBufferImpl::SetGetBuffer(int32_t buffer) {
133 command_buffer_->SetGetBuffer(buffer); 134 command_buffer_->SetGetBuffer(buffer);
134 } 135 }
135 136
136 void CommandBufferImpl::Flush(int32_t put_offset) { 137 void CommandBufferImpl::Flush(int32_t put_offset) {
137 command_buffer_->Flush(put_offset); 138 command_buffer_->Flush(put_offset);
138 } 139 }
139 140
140 void CommandBufferImpl::MakeProgress(int32_t last_get_offset) { 141 void CommandBufferImpl::MakeProgress(int32_t last_get_offset) {
141 // TODO(piman): handle out-of-order. 142 // TODO(piman): handle out-of-order.
142 AllocationScope scope; 143 AllocationScope scope;
143 sync_client_->DidMakeProgress(command_buffer_->GetState()); 144 sync_client_->DidMakeProgress(command_buffer_->GetState());
144 } 145 }
145 146
146 void CommandBufferImpl::RegisterTransferBuffer(int32_t id, 147 void CommandBufferImpl::RegisterTransferBuffer(
147 const ShmHandle& transfer_buffer, 148 int32_t id,
148 uint32_t size) { 149 mojo::ScopedSharedBufferHandle transfer_buffer,
150 uint32_t size) {
149 // Take ownership of the memory and map it into this process. 151 // Take ownership of the memory and map it into this process.
150 // This validates the size. 152 // This validates the size.
151 scoped_ptr<base::SharedMemory> shared_memory( 153 scoped_ptr<gpu::BufferBacking> backing(
152 new base::SharedMemory(transfer_buffer, false)); 154 gles2::MojoBufferBacking::Create(transfer_buffer.Pass(), size));
153 if (!shared_memory->Map(size)) { 155 if (!backing.get()) {
154 DVLOG(0) << "Failed to map shared memory."; 156 DVLOG(0) << "Failed to map shared memory.";
155 return; 157 return;
156 } 158 }
157 159 command_buffer_->RegisterTransferBuffer(id, backing.Pass());
158 command_buffer_->RegisterTransferBuffer(
159 id, gpu::MakeBackingFromSharedMemory(shared_memory.Pass(), size));
160 } 160 }
161 161
162 void CommandBufferImpl::DestroyTransferBuffer(int32_t id) { 162 void CommandBufferImpl::DestroyTransferBuffer(int32_t id) {
163 command_buffer_->DestroyTransferBuffer(id); 163 command_buffer_->DestroyTransferBuffer(id);
164 } 164 }
165 165
166 void CommandBufferImpl::Echo(const Callback<void()>& callback) { 166 void CommandBufferImpl::Echo(const Callback<void()>& callback) {
167 callback.Run(); 167 callback.Run();
168 } 168 }
169 169
170 void CommandBufferImpl::RequestAnimationFrames() { 170 void CommandBufferImpl::RequestAnimationFrames() {
171 timer_.Start(FROM_HERE, 171 timer_.Start(FROM_HERE,
172 base::TimeDelta::FromMilliseconds(16), 172 base::TimeDelta::FromMilliseconds(16),
173 this, 173 this,
174 &CommandBufferImpl::DrawAnimationFrame); 174 &CommandBufferImpl::DrawAnimationFrame);
175 } 175 }
176 176
177 void CommandBufferImpl::CancelAnimationFrames() { timer_.Stop(); } 177 void CommandBufferImpl::CancelAnimationFrames() { timer_.Stop(); }
178 178
179 void CommandBufferImpl::OnParseError() { 179 void CommandBufferImpl::OnParseError() {
180 gpu::CommandBuffer::State state = command_buffer_->GetState(); 180 gpu::CommandBuffer::State state = command_buffer_->GetState();
181 client_->LostContext(state.context_lost_reason); 181 client_->LostContext(state.context_lost_reason);
182 } 182 }
183 183
184 void CommandBufferImpl::DrawAnimationFrame() { client_->DrawAnimationFrame(); } 184 void CommandBufferImpl::DrawAnimationFrame() { client_->DrawAnimationFrame(); }
185 185
186 } // namespace services 186 } // namespace services
187 } // namespace mojo 187 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/services/gles2/command_buffer_impl.h ('k') | mojo/services/gles2/command_buffer_type_conversions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698