Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Side by Side Diff: gpu/command_buffer/client/mapped_memory.cc

Issue 706173005: Enable asynchronous glReadPixels on Windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add mechanism to propagate service-side glMapBuffer errors + tests. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gpu/command_buffer/client/mapped_memory.h ('k') | gpu/command_buffer/service/feature_info.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/client/mapped_memory.h" 5 #include "gpu/command_buffer/client/mapped_memory.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 9
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "gpu/command_buffer/client/cmd_buffer_helper.h" 12 #include "gpu/command_buffer/client/cmd_buffer_helper.h"
13 13
14 namespace gpu { 14 namespace gpu {
15 15
16 MemoryChunk::MemoryChunk(int32 shm_id, 16 MemoryChunk::MemoryChunk(int32 shm_id,
17 scoped_refptr<gpu::Buffer> shm, 17 scoped_refptr<gpu::Buffer> shm,
18 CommandBufferHelper* helper, 18 CommandBufferHelper* helper,
19 const base::Closure& poll_callback) 19 const base::Closure& poll_callback)
20 : shm_id_(shm_id), 20 : shm_id_(shm_id),
21 shm_(shm), 21 shm_(shm),
22 allocator_(shm->size(), helper, poll_callback, shm->memory()) {} 22 allocator_(shm->size(), helper, poll_callback, shm->memory()) {}
23 23
24 MemoryChunk::~MemoryChunk() {} 24 MemoryChunk::~MemoryChunk() {}
25 25
26 MappedMemoryManager::MappedMemoryManager(CommandBufferHelper* helper, 26 MappedMemoryManager::MappedMemoryManager(CommandBufferHelper* helper,
27 const base::Closure& poll_callback, 27 const base::Closure& poll_callback,
28 size_t unused_memory_reclaim_limit) 28 size_t unused_memory_reclaim_limit)
29 : chunk_size_multiple_(1), 29 : chunk_size_multiple_(FencedAllocator::kAllocAlignment),
30 helper_(helper), 30 helper_(helper),
31 poll_callback_(poll_callback), 31 poll_callback_(poll_callback),
32 allocated_memory_(0), 32 allocated_memory_(0),
33 max_free_bytes_(unused_memory_reclaim_limit) { 33 max_free_bytes_(unused_memory_reclaim_limit) {
34 } 34 }
35 35
36 MappedMemoryManager::~MappedMemoryManager() { 36 MappedMemoryManager::~MappedMemoryManager() {
37 CommandBuffer* cmd_buf = helper_->command_buffer(); 37 CommandBuffer* cmd_buf = helper_->command_buffer();
38 for (MemoryChunkVector::iterator iter = chunks_.begin(); 38 for (MemoryChunkVector::iterator iter = chunks_.begin();
39 iter != chunks_.end(); ++iter) { 39 iter != chunks_.end(); ++iter) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 int32 id = -1; 89 int32 id = -1;
90 scoped_refptr<gpu::Buffer> shm = 90 scoped_refptr<gpu::Buffer> shm =
91 cmd_buf->CreateTransferBuffer(chunk_size, &id); 91 cmd_buf->CreateTransferBuffer(chunk_size, &id);
92 if (id < 0) 92 if (id < 0)
93 return NULL; 93 return NULL;
94 DCHECK(shm.get()); 94 DCHECK(shm.get());
95 MemoryChunk* mc = new MemoryChunk(id, shm, helper_, poll_callback_); 95 MemoryChunk* mc = new MemoryChunk(id, shm, helper_, poll_callback_);
96 allocated_memory_ += mc->GetSize(); 96 allocated_memory_ += mc->GetSize();
97 chunks_.push_back(mc); 97 chunks_.push_back(mc);
98 void* mem = mc->Alloc(size); 98 void* mem = mc->Alloc(size);
99 DCHECK(mem); 99 DCHECK(mem);
miu 2014/11/13 01:31:46 This DCHECK failed with my changes to the BufferTr
100 *shm_id = mc->shm_id(); 100 *shm_id = mc->shm_id();
101 *shm_offset = mc->GetOffset(mem); 101 *shm_offset = mc->GetOffset(mem);
102 return mem; 102 return mem;
103 } 103 }
104 104
105 void MappedMemoryManager::Free(void* pointer) { 105 void MappedMemoryManager::Free(void* pointer) {
106 for (size_t ii = 0; ii < chunks_.size(); ++ii) { 106 for (size_t ii = 0; ii < chunks_.size(); ++ii) {
107 MemoryChunk* chunk = chunks_[ii]; 107 MemoryChunk* chunk = chunks_[ii];
108 if (chunk->IsInChunk(pointer)) { 108 if (chunk->IsInChunk(pointer)) {
109 chunk->Free(pointer); 109 chunk->Free(pointer);
(...skipping 24 matching lines...) Expand all
134 cmd_buf->DestroyTransferBuffer(chunk->shm_id()); 134 cmd_buf->DestroyTransferBuffer(chunk->shm_id());
135 allocated_memory_ -= chunk->GetSize(); 135 allocated_memory_ -= chunk->GetSize();
136 iter = chunks_.erase(iter); 136 iter = chunks_.erase(iter);
137 } else { 137 } else {
138 ++iter; 138 ++iter;
139 } 139 }
140 } 140 }
141 } 141 }
142 142
143 } // namespace gpu 143 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/mapped_memory.h ('k') | gpu/command_buffer/service/feature_info.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698