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/callback.h" | 8 #include "base/callback.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 const uint64 kPollFencePeriod = 1; | 23 const uint64 kPollFencePeriod = 1; |
24 } | 24 } |
25 | 25 |
26 GpuScheduler::GpuScheduler(CommandBuffer* command_buffer, | 26 GpuScheduler::GpuScheduler(CommandBuffer* command_buffer, |
27 gles2::GLES2Decoder* decoder, | 27 gles2::GLES2Decoder* decoder, |
28 CommandParser* parser) | 28 CommandParser* parser) |
29 : command_buffer_(command_buffer), | 29 : command_buffer_(command_buffer), |
30 decoder_(decoder), | 30 decoder_(decoder), |
31 parser_(parser), | 31 parser_(parser), |
32 unscheduled_count_(0) { | 32 unscheduled_count_(0) { |
33 // Map the ring buffer and create the parser. | |
34 if (!parser) { | |
35 Buffer ring_buffer = command_buffer_->GetRingBuffer(); | |
36 if (ring_buffer.ptr) { | |
37 parser_.reset(new CommandParser(ring_buffer.ptr, | |
38 ring_buffer.size, | |
39 0, | |
40 ring_buffer.size, | |
41 0, | |
42 decoder_)); | |
43 } else { | |
44 parser_.reset(new CommandParser(NULL, 0, 0, 0, 0, | |
45 decoder_)); | |
46 } | |
47 } | |
48 } | 33 } |
49 | 34 |
50 GpuScheduler::~GpuScheduler() { | 35 GpuScheduler::~GpuScheduler() { |
51 } | 36 } |
52 | 37 |
53 void GpuScheduler::PutChanged() { | 38 void GpuScheduler::PutChanged() { |
54 TRACE_EVENT1("gpu", "GpuScheduler:PutChanged", "this", this); | 39 TRACE_EVENT1("gpu", "GpuScheduler:PutChanged", "this", this); |
55 | 40 |
56 DCHECK(IsScheduled()); | 41 DCHECK(IsScheduled()); |
57 | 42 |
(...skipping 85 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 shm_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(shm_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(shm_id); |
| 157 SetGetOffset(0); |
| 158 return true; |
| 159 } |
| 160 |
153 bool GpuScheduler::SetGetOffset(int32 offset) { | 161 bool GpuScheduler::SetGetOffset(int32 offset) { |
154 if (parser_->set_get(offset)) { | 162 if (parser_->set_get(offset)) { |
155 command_buffer_->SetGetOffset(static_cast<int32>(parser_->get())); | 163 command_buffer_->SetGetOffset(static_cast<int32>(parser_->get())); |
156 return true; | 164 return true; |
157 } | 165 } |
158 return false; | 166 return false; |
159 } | 167 } |
160 | 168 |
161 int32 GpuScheduler::GetGetOffset() { | 169 int32 GpuScheduler::GetGetOffset() { |
162 return parser_->get(); | 170 return parser_->get(); |
(...skipping 30 matching lines...) Expand all Loading... |
193 unschedule_fences_.push(fence); | 201 unschedule_fences_.push(fence); |
194 } | 202 } |
195 | 203 |
196 GpuScheduler::UnscheduleFence::UnscheduleFence() : fence(0) { | 204 GpuScheduler::UnscheduleFence::UnscheduleFence() : fence(0) { |
197 } | 205 } |
198 | 206 |
199 GpuScheduler::UnscheduleFence::~UnscheduleFence() { | 207 GpuScheduler::UnscheduleFence::~UnscheduleFence() { |
200 } | 208 } |
201 | 209 |
202 } // namespace gpu | 210 } // namespace gpu |
OLD | NEW |