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

Side by Side Diff: components/view_manager/gles2/command_buffer_driver.cc

Issue 1231263003: Share SyncPointManager between ipc and in-process (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove forward decl/includes Created 5 years, 5 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
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 "components/view_manager/gles2/command_buffer_driver.h" 5 #include "components/view_manager/gles2/command_buffer_driver.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/memory/shared_memory.h" 9 #include "base/memory/shared_memory.h"
10 #include "components/view_manager/gles2/command_buffer_type_conversions.h" 10 #include "components/view_manager/gles2/command_buffer_type_conversions.h"
11 #include "components/view_manager/gles2/gpu_state.h"
11 #include "components/view_manager/gles2/mojo_buffer_backing.h" 12 #include "components/view_manager/gles2/mojo_buffer_backing.h"
12 #include "gpu/command_buffer/common/constants.h" 13 #include "gpu/command_buffer/common/constants.h"
13 #include "gpu/command_buffer/common/value_state.h" 14 #include "gpu/command_buffer/common/value_state.h"
14 #include "gpu/command_buffer/service/command_buffer_service.h" 15 #include "gpu/command_buffer/service/command_buffer_service.h"
15 #include "gpu/command_buffer/service/context_group.h" 16 #include "gpu/command_buffer/service/context_group.h"
16 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 17 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
17 #include "gpu/command_buffer/service/gpu_scheduler.h" 18 #include "gpu/command_buffer/service/gpu_scheduler.h"
18 #include "gpu/command_buffer/service/image_factory.h" 19 #include "gpu/command_buffer/service/image_factory.h"
19 #include "gpu/command_buffer/service/image_manager.h" 20 #include "gpu/command_buffer/service/image_manager.h"
20 #include "gpu/command_buffer/service/mailbox_manager.h" 21 #include "gpu/command_buffer/service/mailbox_manager.h"
(...skipping 27 matching lines...) Expand all
48 ~MemoryTrackerStub() override {} 49 ~MemoryTrackerStub() override {}
49 50
50 DISALLOW_COPY_AND_ASSIGN(MemoryTrackerStub); 51 DISALLOW_COPY_AND_ASSIGN(MemoryTrackerStub);
51 }; 52 };
52 53
53 } // anonymous namespace 54 } // anonymous namespace
54 55
55 CommandBufferDriver::Client::~Client() { 56 CommandBufferDriver::Client::~Client() {
56 } 57 }
57 58
58 CommandBufferDriver::CommandBufferDriver( 59 CommandBufferDriver::CommandBufferDriver(scoped_refptr<GpuState> gpu_state)
59 gfx::GLShareGroup* share_group,
60 gpu::gles2::MailboxManager* mailbox_manager,
61 gpu::SyncPointManager* sync_point_manager)
62 : CommandBufferDriver(gfx::kNullAcceleratedWidget, 60 : CommandBufferDriver(gfx::kNullAcceleratedWidget,
63 share_group, 61 gpu_state,
64 mailbox_manager, 62 base::Callback<void(CommandBufferDriver*)>()) {}
65 sync_point_manager,
66 base::Callback<void(CommandBufferDriver*)>()) {
67 }
68 63
69 CommandBufferDriver::CommandBufferDriver( 64 CommandBufferDriver::CommandBufferDriver(
70 gfx::AcceleratedWidget widget, 65 gfx::AcceleratedWidget widget,
71 gfx::GLShareGroup* share_group, 66 scoped_refptr<GpuState> gpu_state,
72 gpu::gles2::MailboxManager* mailbox_manager,
73 gpu::SyncPointManager* sync_point_manager,
74 const base::Callback<void(CommandBufferDriver*)>& destruct_callback) 67 const base::Callback<void(CommandBufferDriver*)>& destruct_callback)
75 : client_(nullptr), 68 : client_(nullptr),
76 widget_(widget), 69 widget_(widget),
77 share_group_(share_group), 70 gpu_state_(gpu_state),
78 mailbox_manager_(mailbox_manager),
79 sync_point_manager_(sync_point_manager),
80 destruct_callback_(destruct_callback), 71 destruct_callback_(destruct_callback),
81 weak_factory_(this) { 72 weak_factory_(this) {
82 } 73 }
83 74
84 CommandBufferDriver::~CommandBufferDriver() { 75 CommandBufferDriver::~CommandBufferDriver() {
85 DestroyDecoder(); 76 DestroyDecoder();
86 if (!destruct_callback_.is_null()) 77 if (!destruct_callback_.is_null())
87 destruct_callback_.Run(this); 78 destruct_callback_.Run(this);
88 } 79 }
89 80
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 vsync_provider->GetVSyncParameters( 116 vsync_provider->GetVSyncParameters(
126 base::Bind(&CommandBufferDriver::OnUpdateVSyncParameters, 117 base::Bind(&CommandBufferDriver::OnUpdateVSyncParameters,
127 weak_factory_.GetWeakPtr())); 118 weak_factory_.GetWeakPtr()));
128 } 119 }
129 } 120 }
130 121
131 if (!surface_.get()) 122 if (!surface_.get())
132 return false; 123 return false;
133 124
134 // TODO(piman): virtual contexts, gpu preference. 125 // TODO(piman): virtual contexts, gpu preference.
135 context_ = gfx::GLContext::CreateGLContext(share_group_.get(), surface_.get(), 126 context_ = gfx::GLContext::CreateGLContext(
136 gfx::PreferIntegratedGpu); 127 gpu_state_->share_group(), surface_.get(), gfx::PreferIntegratedGpu);
137 if (!context_.get()) 128 if (!context_.get())
138 return false; 129 return false;
139 130
140 if (!context_->MakeCurrent(surface_.get())) 131 if (!context_->MakeCurrent(surface_.get()))
141 return false; 132 return false;
142 133
143 // TODO(piman): ShaderTranslatorCache is currently per-ContextGroup but 134 // TODO(piman): ShaderTranslatorCache is currently per-ContextGroup but
144 // only needs to be per-thread. 135 // only needs to be per-thread.
145 bool bind_generates_resource = false; 136 bool bind_generates_resource = false;
146 scoped_refptr<gpu::gles2::ContextGroup> context_group = 137 scoped_refptr<gpu::gles2::ContextGroup> context_group =
147 new gpu::gles2::ContextGroup( 138 new gpu::gles2::ContextGroup(
148 mailbox_manager_.get(), new MemoryTrackerStub, 139 gpu_state_->mailbox_manager(), new MemoryTrackerStub,
149 new gpu::gles2::ShaderTranslatorCache, nullptr, nullptr, nullptr, 140 new gpu::gles2::ShaderTranslatorCache, nullptr, nullptr, nullptr,
150 bind_generates_resource); 141 bind_generates_resource);
151 142
152 command_buffer_.reset( 143 command_buffer_.reset(
153 new gpu::CommandBufferService(context_group->transfer_buffer_manager())); 144 new gpu::CommandBufferService(context_group->transfer_buffer_manager()));
154 bool result = command_buffer_->Initialize(); 145 bool result = command_buffer_->Initialize();
155 DCHECK(result); 146 DCHECK(result);
156 147
157 decoder_.reset(::gpu::gles2::GLES2Decoder::Create(context_group.get())); 148 decoder_.reset(::gpu::gles2::GLES2Decoder::Create(context_group.get()));
158 scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), decoder_.get(), 149 scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), decoder_.get(),
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 OnContextLost(state.context_lost_reason); 321 OnContextLost(state.context_lost_reason);
331 } 322 }
332 323
333 void CommandBufferDriver::OnResize(gfx::Size size, float scale_factor) { 324 void CommandBufferDriver::OnResize(gfx::Size size, float scale_factor) {
334 surface_->Resize(size); 325 surface_->Resize(size);
335 } 326 }
336 327
337 bool CommandBufferDriver::OnWaitSyncPoint(uint32_t sync_point) { 328 bool CommandBufferDriver::OnWaitSyncPoint(uint32_t sync_point) {
338 if (!sync_point) 329 if (!sync_point)
339 return true; 330 return true;
340 if (sync_point_manager_->IsSyncPointRetired(sync_point)) 331 if (gpu_state_->sync_point_manager()->IsSyncPointRetired(sync_point))
341 return true; 332 return true;
342 scheduler_->SetScheduled(false); 333 scheduler_->SetScheduled(false);
343 sync_point_manager_->AddSyncPointCallback( 334 gpu_state_->sync_point_manager()->AddSyncPointCallback(
344 sync_point, base::Bind(&CommandBufferDriver::OnSyncPointRetired, 335 sync_point, base::Bind(&CommandBufferDriver::OnSyncPointRetired,
345 weak_factory_.GetWeakPtr())); 336 weak_factory_.GetWeakPtr()));
346 return scheduler_->IsScheduled(); 337 return scheduler_->IsScheduled();
347 } 338 }
348 339
349 void CommandBufferDriver::OnSyncPointRetired() { 340 void CommandBufferDriver::OnSyncPointRetired() {
350 scheduler_->SetScheduled(true); 341 scheduler_->SetScheduled(true);
351 } 342 }
352 343
353 void CommandBufferDriver::OnContextLost(uint32_t reason) { 344 void CommandBufferDriver::OnContextLost(uint32_t reason) {
354 loss_observer_->DidLoseContext(reason); 345 loss_observer_->DidLoseContext(reason);
355 client_->DidLoseContext(); 346 client_->DidLoseContext();
356 } 347 }
357 348
358 void CommandBufferDriver::OnUpdateVSyncParameters( 349 void CommandBufferDriver::OnUpdateVSyncParameters(
359 const base::TimeTicks timebase, 350 const base::TimeTicks timebase,
360 const base::TimeDelta interval) { 351 const base::TimeDelta interval) {
361 client_->UpdateVSyncParameters(timebase, interval); 352 client_->UpdateVSyncParameters(timebase, interval);
362 } 353 }
363 354
364 void CommandBufferDriver::DestroyDecoder() { 355 void CommandBufferDriver::DestroyDecoder() {
365 if (decoder_) { 356 if (decoder_) {
366 bool have_context = decoder_->MakeCurrent(); 357 bool have_context = decoder_->MakeCurrent();
367 decoder_->Destroy(have_context); 358 decoder_->Destroy(have_context);
368 decoder_.reset(); 359 decoder_.reset();
369 } 360 }
370 } 361 }
371 362
372 } // namespace gles2 363 } // namespace gles2
OLDNEW
« no previous file with comments | « components/view_manager/gles2/command_buffer_driver.h ('k') | components/view_manager/gles2/command_buffer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698