OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/client/share_group.h" | 5 #include "gpu/command_buffer/client/share_group.h" |
6 | 6 |
| 7 #include <stdint.h> |
| 8 |
7 #include <stack> | 9 #include <stack> |
8 #include <vector> | 10 #include <vector> |
9 #include "base/basictypes.h" | |
10 #include "base/logging.h" | 11 #include "base/logging.h" |
11 #include "base/synchronization/lock.h" | 12 #include "base/synchronization/lock.h" |
12 #include "gpu/command_buffer/client/gles2_cmd_helper.h" | 13 #include "gpu/command_buffer/client/gles2_cmd_helper.h" |
13 #include "gpu/command_buffer/client/gles2_implementation.h" | 14 #include "gpu/command_buffer/client/gles2_implementation.h" |
14 #include "gpu/command_buffer/client/program_info_manager.h" | 15 #include "gpu/command_buffer/client/program_info_manager.h" |
15 #include "gpu/command_buffer/common/id_allocator.h" | 16 #include "gpu/command_buffer/common/id_allocator.h" |
16 | 17 |
17 namespace gpu { | 18 namespace gpu { |
18 namespace gles2 { | 19 namespace gles2 { |
19 | 20 |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 // Overridden from IdHandlerInterface. | 228 // Overridden from IdHandlerInterface. |
228 void FreeContext(GLES2Implementation* gl_impl) override { | 229 void FreeContext(GLES2Implementation* gl_impl) override { |
229 base::AutoLock auto_lock(lock_); | 230 base::AutoLock auto_lock(lock_); |
230 CollectPendingFreeIds(gl_impl); | 231 CollectPendingFreeIds(gl_impl); |
231 } | 232 } |
232 | 233 |
233 private: | 234 private: |
234 enum IdState { kIdFree, kIdPendingFree, kIdInUse }; | 235 enum IdState { kIdFree, kIdPendingFree, kIdInUse }; |
235 | 236 |
236 void CollectPendingFreeIds(GLES2Implementation* gl_impl) { | 237 void CollectPendingFreeIds(GLES2Implementation* gl_impl) { |
237 uint32 flush_generation = gl_impl->helper()->flush_generation(); | 238 uint32_t flush_generation = gl_impl->helper()->flush_generation(); |
238 ShareGroupContextData::IdHandlerData* ctxt_data = | 239 ShareGroupContextData::IdHandlerData* ctxt_data = |
239 gl_impl->share_group_context_data()->id_handler_data(id_namespace_); | 240 gl_impl->share_group_context_data()->id_handler_data(id_namespace_); |
240 | 241 |
241 if (ctxt_data->flush_generation_ != flush_generation) { | 242 if (ctxt_data->flush_generation_ != flush_generation) { |
242 ctxt_data->flush_generation_ = flush_generation; | 243 ctxt_data->flush_generation_ = flush_generation; |
243 for (uint32 ii = 0; ii < ctxt_data->freed_ids_.size(); ++ii) { | 244 for (uint32_t ii = 0; ii < ctxt_data->freed_ids_.size(); ++ii) { |
244 const GLuint id = ctxt_data->freed_ids_[ii]; | 245 const GLuint id = ctxt_data->freed_ids_[ii]; |
245 DCHECK(id_states_[id - 1] == kIdPendingFree); | 246 DCHECK(id_states_[id - 1] == kIdPendingFree); |
246 id_states_[id - 1] = kIdFree; | 247 id_states_[id - 1] = kIdFree; |
247 free_ids_.push(id); | 248 free_ids_.push(id); |
248 } | 249 } |
249 ctxt_data->freed_ids_.clear(); | 250 ctxt_data->freed_ids_.clear(); |
250 } | 251 } |
251 } | 252 } |
252 | 253 |
253 int id_namespace_; | 254 int id_namespace_; |
254 | 255 |
255 base::Lock lock_; | 256 base::Lock lock_; |
256 std::vector<uint8> id_states_; | 257 std::vector<uint8_t> id_states_; |
257 std::stack<uint32> free_ids_; | 258 std::stack<uint32_t> free_ids_; |
258 }; | 259 }; |
259 | 260 |
260 // An id handler for ids that are never reused. | 261 // An id handler for ids that are never reused. |
261 class NonReusedIdHandler : public IdHandlerInterface { | 262 class NonReusedIdHandler : public IdHandlerInterface { |
262 public: | 263 public: |
263 NonReusedIdHandler() : last_id_(0) {} | 264 NonReusedIdHandler() : last_id_(0) {} |
264 ~NonReusedIdHandler() override {} | 265 ~NonReusedIdHandler() override {} |
265 | 266 |
266 // Overridden from IdHandlerInterface. | 267 // Overridden from IdHandlerInterface. |
267 void MakeIds(GLES2Implementation* /* gl_impl */, | 268 void MakeIds(GLES2Implementation* /* gl_impl */, |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 } | 375 } |
375 | 376 |
376 void ShareGroup::set_program_info_manager(ProgramInfoManager* manager) { | 377 void ShareGroup::set_program_info_manager(ProgramInfoManager* manager) { |
377 program_info_manager_.reset(manager); | 378 program_info_manager_.reset(manager); |
378 } | 379 } |
379 | 380 |
380 ShareGroup::~ShareGroup() {} | 381 ShareGroup::~ShareGroup() {} |
381 | 382 |
382 } // namespace gles2 | 383 } // namespace gles2 |
383 } // namespace gpu | 384 } // namespace gpu |
OLD | NEW |