summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/gpu_scheduler.cc
diff options
context:
space:
mode:
authorapatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-20 00:40:50 +0000
committerapatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-20 00:40:50 +0000
commit79311e89bc4fbd952d5ce872011f8360bfa5e6e6 (patch)
tree3d5225bf67189ff0e8946c36498b79136c1f2bc9 /gpu/command_buffer/service/gpu_scheduler.cc
parentdb021357a069782b9fa5c4be509c88e26acdd727 (diff)
downloadchromium_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.cc165
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