Chromium Code Reviews| 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 // This file contains the implementation of the command buffer helper class. | 5 // This file contains the implementation of the command buffer helper class. |
| 6 | 6 |
| 7 #include "../client/cmd_buffer_helper.h" | 7 #include "../client/cmd_buffer_helper.h" |
| 8 #include "../common/command_buffer.h" | 8 #include "../common/command_buffer.h" |
| 9 #include "../common/trace_event.h" | 9 #include "../common/trace_event.h" |
| 10 | 10 |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 172 } | 172 } |
| 173 // Force a flush if the buffer is getting half full, or even earlier if the | 173 // Force a flush if the buffer is getting half full, or even earlier if the |
| 174 // reader is known to be idle. | 174 // reader is known to be idle. |
| 175 int32 pending = | 175 int32 pending = |
| 176 (put_ + usable_entry_count_ - last_put_sent_) % usable_entry_count_; | 176 (put_ + usable_entry_count_ - last_put_sent_) % usable_entry_count_; |
| 177 int32 limit = usable_entry_count_ / | 177 int32 limit = usable_entry_count_ / |
| 178 ((get_offset() == last_put_sent_) ? 16 : 2); | 178 ((get_offset() == last_put_sent_) ? 16 : 2); |
| 179 if (pending > limit) { | 179 if (pending > limit) { |
| 180 Flush(); | 180 Flush(); |
| 181 } else if (commands_issued_ % kCommandsPerFlushCheck == 0) { | 181 } else if (commands_issued_ % kCommandsPerFlushCheck == 0) { |
| 182 #if !defined(OS_ANDROID) | |
| 182 // Allow this command buffer to be pre-empted by another if a "reasonable" | 183 // Allow this command buffer to be pre-empted by another if a "reasonable" |
| 183 // amount of work has been done. | 184 // amount of work has been done. On highend machines, this reuces the |
|
no sievers
2011/12/15 01:34:20
typo 'reuces' :)
| |
| 185 // latency of GPU commands. However, on Android, this can cause the | |
| 186 // kernel to thrash between generating GPU commands and executing them. | |
| 184 clock_t current_time = clock(); | 187 clock_t current_time = clock(); |
| 185 if (current_time - last_flush_time_ > kFlushDelay * CLOCKS_PER_SEC) | 188 if (current_time - last_flush_time_ > kFlushDelay * CLOCKS_PER_SEC) |
| 186 Flush(); | 189 Flush(); |
| 190 #endif | |
| 187 } | 191 } |
| 188 } | 192 } |
| 189 | 193 |
| 190 CommandBufferEntry* CommandBufferHelper::GetSpace(uint32 entries) { | 194 CommandBufferEntry* CommandBufferHelper::GetSpace(uint32 entries) { |
| 191 ++commands_issued_; | 195 ++commands_issued_; |
| 192 WaitForAvailableEntries(entries); | 196 WaitForAvailableEntries(entries); |
| 193 CommandBufferEntry* space = &entries_[put_]; | 197 CommandBufferEntry* space = &entries_[put_]; |
| 194 put_ += entries; | 198 put_ += entries; |
| 195 GPU_DCHECK_LE(put_, usable_entry_count_); | 199 GPU_DCHECK_LE(put_, usable_entry_count_); |
| 196 if (put_ == usable_entry_count_) { | 200 if (put_ == usable_entry_count_) { |
| 197 cmd::Jump::Set(&entries_[put_], 0); | 201 cmd::Jump::Set(&entries_[put_], 0); |
| 198 put_ = 0; | 202 put_ = 0; |
| 199 } | 203 } |
| 200 return space; | 204 return space; |
| 201 } | 205 } |
| 202 | 206 |
| 203 error::Error CommandBufferHelper::GetError() { | 207 error::Error CommandBufferHelper::GetError() { |
| 204 CommandBuffer::State state = command_buffer_->GetState(); | 208 CommandBuffer::State state = command_buffer_->GetState(); |
| 205 return static_cast<error::Error>(state.error); | 209 return static_cast<error::Error>(state.error); |
| 206 } | 210 } |
| 207 | 211 |
| 208 } // namespace gpu | 212 } // namespace gpu |
| OLD | NEW |