| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "gpu/command_buffer/service/gpu_scheduler.h" | 5 #include "gpu/command_buffer/service/gpu_scheduler.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 const uint64 kPollFencePeriod = 1; | 22 const uint64 kPollFencePeriod = 1; |
| 23 } | 23 } |
| 24 | 24 |
| 25 GpuScheduler::GpuScheduler(CommandBuffer* command_buffer, | 25 GpuScheduler::GpuScheduler(CommandBuffer* command_buffer, |
| 26 gles2::GLES2Decoder* decoder, | 26 gles2::GLES2Decoder* decoder, |
| 27 CommandParser* parser) | 27 CommandParser* parser) |
| 28 : command_buffer_(command_buffer), | 28 : command_buffer_(command_buffer), |
| 29 decoder_(decoder), | 29 decoder_(decoder), |
| 30 parser_(parser), | 30 parser_(parser), |
| 31 unscheduled_count_(0) { | 31 unscheduled_count_(0) { |
| 32 // Map the ring buffer and create the parser. |
| 33 if (!parser) { |
| 34 Buffer ring_buffer = command_buffer_->GetRingBuffer(); |
| 35 if (ring_buffer.ptr) { |
| 36 parser_.reset(new CommandParser(ring_buffer.ptr, |
| 37 ring_buffer.size, |
| 38 0, |
| 39 ring_buffer.size, |
| 40 0, |
| 41 decoder_)); |
| 42 } else { |
| 43 parser_.reset(new CommandParser(NULL, 0, 0, 0, 0, |
| 44 decoder_)); |
| 45 } |
| 46 } |
| 32 } | 47 } |
| 33 | 48 |
| 34 GpuScheduler::~GpuScheduler() { | 49 GpuScheduler::~GpuScheduler() { |
| 35 } | 50 } |
| 36 | 51 |
| 37 void GpuScheduler::PutChanged() { | 52 void GpuScheduler::PutChanged() { |
| 38 TRACE_EVENT1("gpu", "GpuScheduler:PutChanged", "this", this); | 53 TRACE_EVENT1("gpu", "GpuScheduler:PutChanged", "this", this); |
| 39 | 54 |
| 40 DCHECK(IsScheduled()); | 55 DCHECK(IsScheduled()); |
| 41 | 56 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 } | 143 } |
| 129 | 144 |
| 130 Buffer GpuScheduler::GetSharedMemoryBuffer(int32 shm_id) { | 145 Buffer GpuScheduler::GetSharedMemoryBuffer(int32 shm_id) { |
| 131 return command_buffer_->GetTransferBuffer(shm_id); | 146 return command_buffer_->GetTransferBuffer(shm_id); |
| 132 } | 147 } |
| 133 | 148 |
| 134 void GpuScheduler::set_token(int32 token) { | 149 void GpuScheduler::set_token(int32 token) { |
| 135 command_buffer_->SetToken(token); | 150 command_buffer_->SetToken(token); |
| 136 } | 151 } |
| 137 | 152 |
| 138 bool GpuScheduler::SetGetBuffer(int32 transfer_buffer_id) { | |
| 139 // NOTE: This seems kind of strange. We need to update both the parser | |
| 140 // AND the command buffer. | |
| 141 Buffer ring_buffer = command_buffer_->GetTransferBuffer(transfer_buffer_id); | |
| 142 if (!ring_buffer.ptr) { | |
| 143 return false; | |
| 144 } | |
| 145 | |
| 146 if (!parser_.get()) { | |
| 147 parser_.reset(new CommandParser(decoder_)); | |
| 148 } | |
| 149 | |
| 150 parser_->SetBuffer( | |
| 151 ring_buffer.ptr, | |
| 152 ring_buffer.size, | |
| 153 0, | |
| 154 ring_buffer.size); | |
| 155 | |
| 156 command_buffer_->SetGetBuffer(transfer_buffer_id); | |
| 157 SetGetOffset(0); | |
| 158 return true; | |
| 159 } | |
| 160 | |
| 161 bool GpuScheduler::SetGetOffset(int32 offset) { | 153 bool GpuScheduler::SetGetOffset(int32 offset) { |
| 162 if (parser_->set_get(offset)) { | 154 if (parser_->set_get(offset)) { |
| 163 command_buffer_->SetGetOffset(static_cast<int32>(parser_->get())); | 155 command_buffer_->SetGetOffset(static_cast<int32>(parser_->get())); |
| 164 return true; | 156 return true; |
| 165 } | 157 } |
| 166 return false; | 158 return false; |
| 167 } | 159 } |
| 168 | 160 |
| 169 int32 GpuScheduler::GetGetOffset() { | 161 int32 GpuScheduler::GetGetOffset() { |
| 170 return parser_->get(); | 162 return parser_->get(); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 201 unschedule_fences_.push(fence); | 193 unschedule_fences_.push(fence); |
| 202 } | 194 } |
| 203 | 195 |
| 204 GpuScheduler::UnscheduleFence::UnscheduleFence() : fence(0) { | 196 GpuScheduler::UnscheduleFence::UnscheduleFence() : fence(0) { |
| 205 } | 197 } |
| 206 | 198 |
| 207 GpuScheduler::UnscheduleFence::~UnscheduleFence() { | 199 GpuScheduler::UnscheduleFence::~UnscheduleFence() { |
| 208 } | 200 } |
| 209 | 201 |
| 210 } // namespace gpu | 202 } // namespace gpu |
| OLD | NEW |