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

Side by Side Diff: content/common/gpu/gpu_command_buffer_stub.cc

Issue 1365563002: Make channel preemption not require view contexts for hookup (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@wakeup_gpu
Patch Set: fix build and broken rebase Created 5 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
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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/hash.h" 8 #include "base/hash.h"
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/memory/shared_memory.h" 10 #include "base/memory/shared_memory.h"
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 const gfx::GLSurfaceHandle& handle, 180 const gfx::GLSurfaceHandle& handle,
181 gpu::gles2::MailboxManager* mailbox_manager, 181 gpu::gles2::MailboxManager* mailbox_manager,
182 gpu::gles2::SubscriptionRefSet* subscription_ref_set, 182 gpu::gles2::SubscriptionRefSet* subscription_ref_set,
183 gpu::ValueStateMap* pending_valuebuffer_state, 183 gpu::ValueStateMap* pending_valuebuffer_state,
184 const gfx::Size& size, 184 const gfx::Size& size,
185 const gpu::gles2::DisallowedFeatures& disallowed_features, 185 const gpu::gles2::DisallowedFeatures& disallowed_features,
186 const std::vector<int32>& attribs, 186 const std::vector<int32>& attribs,
187 gfx::GpuPreference gpu_preference, 187 gfx::GpuPreference gpu_preference,
188 int32 stream_id, 188 int32 stream_id,
189 int32 route_id, 189 int32 route_id,
190 int32 surface_id, 190 bool offscreen,
191 GpuWatchdog* watchdog, 191 GpuWatchdog* watchdog,
192 bool software,
193 const GURL& active_url) 192 const GURL& active_url)
194 : channel_(channel), 193 : channel_(channel),
195 task_runner_(task_runner), 194 task_runner_(task_runner),
196 initialized_(false), 195 initialized_(false),
197 handle_(handle), 196 handle_(handle),
198 initial_size_(size), 197 initial_size_(size),
199 disallowed_features_(disallowed_features), 198 disallowed_features_(disallowed_features),
200 requested_attribs_(attribs), 199 requested_attribs_(attribs),
201 gpu_preference_(gpu_preference), 200 gpu_preference_(gpu_preference),
202 use_virtualized_gl_context_(false), 201 use_virtualized_gl_context_(false),
203 command_buffer_id_(GetCommandBufferID(channel->client_id(), route_id)), 202 command_buffer_id_(GetCommandBufferID(channel->client_id(), route_id)),
204 stream_id_(stream_id), 203 stream_id_(stream_id),
205 route_id_(route_id), 204 route_id_(route_id),
206 surface_id_(surface_id), 205 offscreen_(offscreen),
207 software_(software),
208 last_flush_count_(0), 206 last_flush_count_(0),
209 last_memory_allocation_valid_(false), 207 last_memory_allocation_valid_(false),
210 watchdog_(watchdog), 208 watchdog_(watchdog),
211 waiting_for_sync_point_(false), 209 waiting_for_sync_point_(false),
212 previous_processed_num_(0), 210 previous_processed_num_(0),
213 active_url_(active_url), 211 active_url_(active_url),
214 total_gpu_memory_(0) { 212 total_gpu_memory_(0) {
215 active_url_hash_ = base::Hash(active_url.possibly_invalid_spec()); 213 active_url_hash_ = base::Hash(active_url.possibly_invalid_spec());
216 FastSetActiveURL(active_url_, active_url_hash_); 214 FastSetActiveURL(active_url_, active_url_hash_);
217 215
(...skipping 18 matching lines...) Expand all
236 // performance regressions when enabling FCM. 234 // performance regressions when enabling FCM.
237 // http://crbug.com/180463 235 // http://crbug.com/180463
238 #if defined(OS_MACOSX) 236 #if defined(OS_MACOSX)
239 if (gpu_preference_ == gfx::PreferIntegratedGpu) 237 if (gpu_preference_ == gfx::PreferIntegratedGpu)
240 use_virtualized_gl_context_ = true; 238 use_virtualized_gl_context_ = true;
241 #endif 239 #endif
242 240
243 use_virtualized_gl_context_ |= 241 use_virtualized_gl_context_ |=
244 context_group_->feature_info()->UseVirtualizedGLContexts(); 242 context_group_->feature_info()->UseVirtualizedGLContexts();
245 243
246 bool is_offscreen = surface_id_ == 0; 244 if (offscreen && initial_size_.IsEmpty()) {
247 if (is_offscreen && initial_size_.IsEmpty()) {
248 // If we're an offscreen surface with zero width and/or height, set to a 245 // If we're an offscreen surface with zero width and/or height, set to a
249 // non-zero size so that we have a complete framebuffer for operations like 246 // non-zero size so that we have a complete framebuffer for operations like
250 // glClear. 247 // glClear.
251 initial_size_ = gfx::Size(1, 1); 248 initial_size_ = gfx::Size(1, 1);
252 } 249 }
253 } 250 }
254 251
255 GpuCommandBufferStub::~GpuCommandBufferStub() { 252 GpuCommandBufferStub::~GpuCommandBufferStub() {
256 Destroy(); 253 Destroy();
257 } 254 }
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 Send(wait_for_get_offset_->reply.release()); 466 Send(wait_for_get_offset_->reply.release());
470 wait_for_get_offset_.reset(); 467 wait_for_get_offset_.reset();
471 } 468 }
472 469
473 if (initialized_) { 470 if (initialized_) {
474 GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager(); 471 GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager();
475 if (handle_.is_null() && !active_url_.is_empty()) { 472 if (handle_.is_null() && !active_url_.is_empty()) {
476 gpu_channel_manager->Send( 473 gpu_channel_manager->Send(
477 new GpuHostMsg_DidDestroyOffscreenContext(active_url_)); 474 new GpuHostMsg_DidDestroyOffscreenContext(active_url_));
478 } 475 }
479 gpu_channel_manager->Send(
480 new GpuHostMsg_DestroyCommandBuffer(surface_id()));
481 } 476 }
482 477
483 memory_manager_client_state_.reset(); 478 memory_manager_client_state_.reset();
484 479
485 while (!sync_points_.empty()) 480 while (!sync_points_.empty())
486 OnRetireSyncPoint(sync_points_.front()); 481 OnRetireSyncPoint(sync_points_.front());
487 482
488 if (decoder_) 483 if (decoder_)
489 decoder_->set_engine(NULL); 484 decoder_->set_engine(NULL);
490 485
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 channel_->GetSyncPointClientState(), 547 channel_->GetSyncPointClientState(),
553 gpu::CommandBufferNamespace::GPU_IO, 548 gpu::CommandBufferNamespace::GPU_IO,
554 command_buffer_id_); 549 command_buffer_id_);
555 550
556 if (preemption_flag_.get()) 551 if (preemption_flag_.get())
557 scheduler_->SetPreemptByFlag(preemption_flag_); 552 scheduler_->SetPreemptByFlag(preemption_flag_);
558 553
559 decoder_->set_engine(scheduler_.get()); 554 decoder_->set_engine(scheduler_.get());
560 555
561 if (!handle_.is_null()) { 556 if (!handle_.is_null()) {
562 #if defined(OS_MACOSX) || defined(UI_COMPOSITOR_IMAGE_TRANSPORT)
563 if (software_) {
564 LOG(ERROR) << "No software support.";
565 OnInitializeFailed(reply_message);
566 return;
567 }
568 #endif
569
570 surface_ = ImageTransportSurface::CreateSurface( 557 surface_ = ImageTransportSurface::CreateSurface(
571 channel_->gpu_channel_manager(), 558 channel_->gpu_channel_manager(),
572 this, 559 this,
573 handle_); 560 handle_);
574 } else { 561 } else {
575 surface_ = manager->GetDefaultOffscreenSurface(); 562 surface_ = manager->GetDefaultOffscreenSurface();
576 } 563 }
577 564
578 if (!surface_.get()) { 565 if (!surface_.get()) {
579 DLOG(ERROR) << "Failed to create surface."; 566 DLOG(ERROR) << "Failed to create surface.";
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 if (!context->GetTotalGpuMemory(&total_gpu_memory_)) 623 if (!context->GetTotalGpuMemory(&total_gpu_memory_))
637 total_gpu_memory_ = 0; 624 total_gpu_memory_ = 0;
638 625
639 if (!context_group_->has_program_cache() && 626 if (!context_group_->has_program_cache() &&
640 !context_group_->feature_info()->workarounds().disable_program_cache) { 627 !context_group_->feature_info()->workarounds().disable_program_cache) {
641 context_group_->set_program_cache( 628 context_group_->set_program_cache(
642 channel_->gpu_channel_manager()->program_cache()); 629 channel_->gpu_channel_manager()->program_cache());
643 } 630 }
644 631
645 // Initialize the decoder with either the view or pbuffer GLContext. 632 // Initialize the decoder with either the view or pbuffer GLContext.
646 if (!decoder_->Initialize(surface_, 633 if (!decoder_->Initialize(surface_, context, offscreen_, initial_size_,
647 context, 634 disallowed_features_, requested_attribs_)) {
648 !surface_id(),
649 initial_size_,
650 disallowed_features_,
651 requested_attribs_)) {
652 DLOG(ERROR) << "Failed to initialize decoder."; 635 DLOG(ERROR) << "Failed to initialize decoder.";
653 OnInitializeFailed(reply_message); 636 OnInitializeFailed(reply_message);
654 return; 637 return;
655 } 638 }
656 639
657 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 640 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
658 switches::kEnableGPUServiceLogging)) { 641 switches::kEnableGPUServiceLogging)) {
659 decoder_->set_log_commands(true); 642 decoder_->set_log_commands(true);
660 } 643 }
661 644
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 } 1021 }
1039 1022
1040 1023
1041 void GpuCommandBufferStub::OnSetClientHasMemoryAllocationChangedCallback( 1024 void GpuCommandBufferStub::OnSetClientHasMemoryAllocationChangedCallback(
1042 bool has_callback) { 1025 bool has_callback) {
1043 TRACE_EVENT0( 1026 TRACE_EVENT0(
1044 "gpu", 1027 "gpu",
1045 "GpuCommandBufferStub::OnSetClientHasMemoryAllocationChangedCallback"); 1028 "GpuCommandBufferStub::OnSetClientHasMemoryAllocationChangedCallback");
1046 if (has_callback) { 1029 if (has_callback) {
1047 if (!memory_manager_client_state_) { 1030 if (!memory_manager_client_state_) {
1048 memory_manager_client_state_.reset(GetMemoryManager()->CreateClientState( 1031 memory_manager_client_state_.reset(
1049 this, surface_id_ != 0, true)); 1032 GetMemoryManager()->CreateClientState(this, !offscreen_, true));
1050 } 1033 }
1051 } else { 1034 } else {
1052 memory_manager_client_state_.reset(); 1035 memory_manager_client_state_.reset();
1053 } 1036 }
1054 } 1037 }
1055 1038
1056 void GpuCommandBufferStub::OnCreateImage(int32 id, 1039 void GpuCommandBufferStub::OnCreateImage(int32 id,
1057 gfx::GpuMemoryBufferHandle handle, 1040 gfx::GpuMemoryBufferHandle handle,
1058 gfx::Size size, 1041 gfx::Size size,
1059 gfx::BufferFormat format, 1042 gfx::BufferFormat format,
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1240 result)); 1223 result));
1241 } 1224 }
1242 1225
1243 void GpuCommandBufferStub::SendUpdateVSyncParameters(base::TimeTicks timebase, 1226 void GpuCommandBufferStub::SendUpdateVSyncParameters(base::TimeTicks timebase,
1244 base::TimeDelta interval) { 1227 base::TimeDelta interval) {
1245 Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase, 1228 Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase,
1246 interval)); 1229 interval));
1247 } 1230 }
1248 1231
1249 } // namespace content 1232 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698