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 } | |
47 } | 32 } |
48 | 33 |
49 GpuScheduler::~GpuScheduler() { | 34 GpuScheduler::~GpuScheduler() { |
50 } | 35 } |
51 | 36 |
52 void GpuScheduler::PutChanged() { | 37 void GpuScheduler::PutChanged() { |
53 TRACE_EVENT1("gpu", "GpuScheduler:PutChanged", "this", this); | 38 TRACE_EVENT1("gpu", "GpuScheduler:PutChanged", "this", this); |
54 | 39 |
55 DCHECK(IsScheduled()); | 40 DCHECK(IsScheduled()); |
56 | 41 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 } | 128 } |
144 | 129 |
145 Buffer GpuScheduler::GetSharedMemoryBuffer(int32 shm_id) { | 130 Buffer GpuScheduler::GetSharedMemoryBuffer(int32 shm_id) { |
146 return command_buffer_->GetTransferBuffer(shm_id); | 131 return command_buffer_->GetTransferBuffer(shm_id); |
147 } | 132 } |
148 | 133 |
149 void GpuScheduler::set_token(int32 token) { | 134 void GpuScheduler::set_token(int32 token) { |
150 command_buffer_->SetToken(token); | 135 command_buffer_->SetToken(token); |
151 } | 136 } |
152 | 137 |
| 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 |
153 bool GpuScheduler::SetGetOffset(int32 offset) { | 158 bool GpuScheduler::SetGetOffset(int32 offset) { |
154 if (parser_->set_get(offset)) { | 159 if (parser_->set_get(offset)) { |
155 command_buffer_->SetGetOffset(static_cast<int32>(parser_->get())); | 160 command_buffer_->SetGetOffset(static_cast<int32>(parser_->get())); |
156 return true; | 161 return true; |
157 } | 162 } |
158 return false; | 163 return false; |
159 } | 164 } |
160 | 165 |
161 int32 GpuScheduler::GetGetOffset() { | 166 int32 GpuScheduler::GetGetOffset() { |
162 return parser_->get(); | 167 return parser_->get(); |
(...skipping 30 matching lines...) Expand all Loading... |
193 unschedule_fences_.push(fence); | 198 unschedule_fences_.push(fence); |
194 } | 199 } |
195 | 200 |
196 GpuScheduler::UnscheduleFence::UnscheduleFence() : fence(0) { | 201 GpuScheduler::UnscheduleFence::UnscheduleFence() : fence(0) { |
197 } | 202 } |
198 | 203 |
199 GpuScheduler::UnscheduleFence::~UnscheduleFence() { | 204 GpuScheduler::UnscheduleFence::~UnscheduleFence() { |
200 } | 205 } |
201 | 206 |
202 } // namespace gpu | 207 } // namespace gpu |
OLD | NEW |