| Index: gpu/command_buffer/service/gpu_scheduler.cc | 
| diff --git a/gpu/command_buffer/service/gpu_scheduler.cc b/gpu/command_buffer/service/gpu_scheduler.cc | 
| index eb1db7e3552d9dd9709c1c4b2bceb4de6cd70279..9282e730cbd563323e38e7e42a9d1b151b374387 100644 | 
| --- a/gpu/command_buffer/service/gpu_scheduler.cc | 
| +++ b/gpu/command_buffer/service/gpu_scheduler.cc | 
| @@ -24,21 +24,6 @@ GpuScheduler::GpuScheduler(CommandBuffer* command_buffer, | 
| decoder_(decoder), | 
| parser_(parser), | 
| unscheduled_count_(0) { | 
| -  // Map the ring buffer and create the parser. | 
| -  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_)); | 
| -    } | 
| -  } | 
| } | 
|  | 
| GpuScheduler::~GpuScheduler() { | 
| @@ -48,6 +33,13 @@ void GpuScheduler::PutChanged() { | 
| TRACE_EVENT1("gpu", "GpuScheduler:PutChanged", "this", this); | 
|  | 
| CommandBuffer::State state = command_buffer_->GetState(); | 
| + | 
| +  // If there is no parser, exit. | 
| +  if (!parser_.get()) { | 
| +    DCHECK_EQ(state.get_offset, state.put_offset); | 
| +    return; | 
| +  } | 
| + | 
| parser_->set_put(state.put_offset); | 
| if (state.error != error::kNoError) | 
| return; | 
| @@ -122,6 +114,26 @@ void GpuScheduler::set_token(int32 token) { | 
| command_buffer_->SetToken(token); | 
| } | 
|  | 
| +bool GpuScheduler::SetGetBuffer(int32 transfer_buffer_id) { | 
| +  Buffer ring_buffer = command_buffer_->GetTransferBuffer(transfer_buffer_id); | 
| +  if (!ring_buffer.ptr) { | 
| +    return false; | 
| +  } | 
| + | 
| +  if (!parser_.get()) { | 
| +    parser_.reset(new CommandParser(decoder_)); | 
| +  } | 
| + | 
| +  parser_->SetBuffer( | 
| +      ring_buffer.ptr, | 
| +      ring_buffer.size, | 
| +      0, | 
| +      ring_buffer.size); | 
| + | 
| +  SetGetOffset(0); | 
| +  return true; | 
| +} | 
| + | 
| bool GpuScheduler::SetGetOffset(int32 offset) { | 
| if (parser_->set_get(offset)) { | 
| command_buffer_->SetGetOffset(static_cast<int32>(parser_->get())); | 
|  |