diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-20 00:40:50 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-20 00:40:50 +0000 |
commit | 79311e89bc4fbd952d5ce872011f8360bfa5e6e6 (patch) | |
tree | 3d5225bf67189ff0e8946c36498b79136c1f2bc9 /gpu/command_buffer/service/gpu_scheduler.cc | |
parent | db021357a069782b9fa5c4be509c88e26acdd727 (diff) | |
download | chromium_src-79311e89bc4fbd952d5ce872011f8360bfa5e6e6.zip chromium_src-79311e89bc4fbd952d5ce872011f8360bfa5e6e6.tar.gz chromium_src-79311e89bc4fbd952d5ce872011f8360bfa5e6e6.tar.bz2 |
Reland 101545 - Moved code not relating to GPU scheduling out of GpuScheduler and into GpuCommandBufferStub.
Reason for revert: Compile failure on Arm.
This was mostly a refactor because the code was awkward.
I also deleted the original gles2_demo since we have the gles2 book demos now.
THings still to do are a common way of setting up the few objects involved in initializing a command buffer that is now more-or-less duplicated in the gles2 conformance tests, the gles2 demos, the command buffer stub and the in-process webgl context. I also want to completely remove the reference to the decoder from the scheduler.
I tested WebGL on both windows and mac and saw no regressions. I checked the conformance tests, the gpu tests and am running by the try bots now. The gles2 demos still work.
Review URL: http://codereview.chromium.org/7782041
Review URL: http://codereview.chromium.org/7951008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101873 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/gpu_scheduler.cc')
-rw-r--r-- | gpu/command_buffer/service/gpu_scheduler.cc | 165 |
1 files changed, 21 insertions, 144 deletions
diff --git a/gpu/command_buffer/service/gpu_scheduler.cc b/gpu/command_buffer/service/gpu_scheduler.cc index 70f84a4..a6442e9 100644 --- a/gpu/command_buffer/service/gpu_scheduler.cc +++ b/gpu/command_buffer/service/gpu_scheduler.cc @@ -19,119 +19,32 @@ using ::base::SharedMemory; namespace gpu { -GpuScheduler* GpuScheduler::Create(CommandBuffer* command_buffer, - gles2::ContextGroup* group) { - DCHECK(command_buffer); - - gles2::GLES2Decoder* decoder = gles2::GLES2Decoder::Create(group); - - GpuScheduler* scheduler = new GpuScheduler(command_buffer, - decoder, - NULL); - - decoder->set_engine(scheduler); - - if (CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableGPUServiceLogging)) { - decoder->set_debug(true); - } - - return scheduler; -} - -GpuScheduler* GpuScheduler::CreateForTests(CommandBuffer* command_buffer, - gles2::GLES2Decoder* decoder, - CommandParser* parser) { - DCHECK(command_buffer); - GpuScheduler* scheduler = new GpuScheduler(command_buffer, - decoder, - parser); - - return scheduler; -} - -GpuScheduler::~GpuScheduler() { - Destroy(); -} - -bool GpuScheduler::InitializeCommon( - const scoped_refptr<gfx::GLSurface>& surface, - const scoped_refptr<gfx::GLContext>& context, - const gfx::Size& size, - const gles2::DisallowedExtensions& disallowed_extensions, - const char* allowed_extensions, - const std::vector<int32>& attribs) { - DCHECK(context); - - if (!context->MakeCurrent(surface)) - return false; - -#if !defined(OS_MACOSX) && !defined(TOUCH_UI) - // Set up swap interval for onscreen contexts. - if (!surface->IsOffscreen()) { - if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableGpuVsync)) - context->SetSwapInterval(0); - else - context->SetSwapInterval(1); - } -#endif - +GpuScheduler::GpuScheduler(CommandBuffer* command_buffer, + gles2::GLES2Decoder* decoder, + CommandParser* parser) + : command_buffer_(command_buffer), + decoder_(decoder), + parser_(parser), + unscheduled_count_(0) { // Map the ring buffer and create the parser. - Buffer ring_buffer = command_buffer_->GetRingBuffer(); - if (ring_buffer.ptr) { - parser_.reset(new CommandParser(ring_buffer.ptr, - ring_buffer.size, - 0, - ring_buffer.size, - 0, - decoder_.get())); - } else { - parser_.reset(new CommandParser(NULL, 0, 0, 0, 0, - decoder_.get())); - } - - // Initialize the decoder with either the view or pbuffer GLContext. - // TODO(apatrick): The GpuScheduler should know nothing about the surface the - // decoder is rendering to. Get rid of the surface parameter. - if (!decoder_->Initialize(surface, - context, - size, - disallowed_extensions, - allowed_extensions, - attribs)) { - LOG(ERROR) << "GpuScheduler::InitializeCommon failed because decoder " - << "failed to initialize."; - Destroy(); - return false; - } - - return true; -} - -void GpuScheduler::DestroyCommon() { - if (decoder_.get()) { - decoder_->MakeCurrent(); - decoder_->Destroy(); - decoder_.reset(); + if (!parser) { + Buffer ring_buffer = command_buffer_->GetRingBuffer(); + if (ring_buffer.ptr) { + parser_.reset(new CommandParser(ring_buffer.ptr, + ring_buffer.size, + 0, + ring_buffer.size, + 0, + decoder_)); + } else { + parser_.reset(new CommandParser(NULL, 0, 0, 0, 0, + decoder_)); + } } - - parser_.reset(); -} - -bool GpuScheduler::SetParent(GpuScheduler* parent_scheduler, - uint32 parent_texture_id) { - if (parent_scheduler) - return decoder_->SetParent(parent_scheduler->decoder_.get(), - parent_texture_id); - else - return decoder_->SetParent(NULL, 0); } -#if defined(OS_MACOSX) -namespace { -const unsigned int kMaxOutstandingSwapBuffersCallsPerOnscreenContext = 1; +GpuScheduler::~GpuScheduler() { } -#endif void GpuScheduler::PutChanged() { TRACE_EVENT1("gpu", "GpuScheduler:PutChanged", "this", this); @@ -143,23 +56,6 @@ void GpuScheduler::PutChanged() { if (state.error != error::kNoError) return; - if (decoder_.get()) { - if (!decoder_->MakeCurrent()) { - LOG(ERROR) << "Context lost because MakeCurrent failed."; - command_buffer_->SetContextLostReason(decoder_->GetContextLostReason()); - command_buffer_->SetParseError(error::kLostContext); - return; - } - } - -#if defined(OS_MACOSX) - bool do_rate_limiting = surface_.get() != NULL; - - // Don't swamp the browser process with SwapBuffers calls it can't handle. - DCHECK(!do_rate_limiting || - swap_buffers_count_ - acknowledged_swap_buffers_count_ == 0); -#endif - error::Error error = error::kNoError; while (!parser_->IsEmpty()) { error = parser_->ProcessCommand(); @@ -226,28 +122,9 @@ int32 GpuScheduler::GetGetOffset() { return parser_->get(); } -void GpuScheduler::SetResizeCallback( - Callback1<gfx::Size>::Type* callback) { - decoder_->SetResizeCallback(callback); -} - void GpuScheduler::SetCommandProcessedCallback( Callback0::Type* callback) { command_processed_callback_.reset(callback); } -GpuScheduler::GpuScheduler(CommandBuffer* command_buffer, - gles2::GLES2Decoder* decoder, - CommandParser* parser) - : command_buffer_(command_buffer), - decoder_(decoder), - parser_(parser), - unscheduled_count_(0), -#if defined(OS_MACOSX) - swap_buffers_count_(0), - acknowledged_swap_buffers_count_(0), -#endif - method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { -} - } // namespace gpu |