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 Buffer ring_buffer = command_buffer_->GetTransferBuffer(transfer_buffer_id); | |
140 if (!ring_buffer.ptr) { | |
141 return false; | |
142 } | |
143 | |
144 if (!parser_.get()) { | |
145 parser_.reset(new CommandParser(decoder_)); | |
146 } | |
147 | |
148 parser_->SetBuffer( | |
149 ring_buffer.ptr, | |
150 ring_buffer.size, | |
151 0, | |
152 ring_buffer.size); | |
153 | |
154 SetGetOffset(0); | |
155 return true; | |
156 } | |
157 | |
158 bool GpuScheduler::SetGetOffset(int32 offset) { | 153 bool GpuScheduler::SetGetOffset(int32 offset) { |
159 if (parser_->set_get(offset)) { | 154 if (parser_->set_get(offset)) { |
160 command_buffer_->SetGetOffset(static_cast<int32>(parser_->get())); | 155 command_buffer_->SetGetOffset(static_cast<int32>(parser_->get())); |
161 return true; | 156 return true; |
162 } | 157 } |
163 return false; | 158 return false; |
164 } | 159 } |
165 | 160 |
166 int32 GpuScheduler::GetGetOffset() { | 161 int32 GpuScheduler::GetGetOffset() { |
167 return parser_->get(); | 162 return parser_->get(); |
(...skipping 30 matching lines...) Expand all Loading... |
198 unschedule_fences_.push(fence); | 193 unschedule_fences_.push(fence); |
199 } | 194 } |
200 | 195 |
201 GpuScheduler::UnscheduleFence::UnscheduleFence() : fence(0) { | 196 GpuScheduler::UnscheduleFence::UnscheduleFence() : fence(0) { |
202 } | 197 } |
203 | 198 |
204 GpuScheduler::UnscheduleFence::~UnscheduleFence() { | 199 GpuScheduler::UnscheduleFence::~UnscheduleFence() { |
205 } | 200 } |
206 | 201 |
207 } // namespace gpu | 202 } // namespace gpu |
OLD | NEW |