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

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

Issue 10197002: Make transfer buffer reallocate at default size. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 8 months 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 | Annotate | Revision Log
OLDNEW
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 // A class to Manage a growing transfer buffer. 5 // A class to Manage a growing transfer buffer.
6 6
7 #include "../client/transfer_buffer.h" 7 #include "../client/transfer_buffer.h"
8 #include "../client/cmd_buffer_helper.h" 8 #include "../client/cmd_buffer_helper.h"
9 9
10 namespace gpu { 10 namespace gpu {
11 11
12 AlignedRingBuffer::~AlignedRingBuffer() { 12 AlignedRingBuffer::~AlignedRingBuffer() {
13 } 13 }
14 14
15 TransferBuffer::TransferBuffer( 15 TransferBuffer::TransferBuffer(
16 CommandBufferHelper* helper) 16 CommandBufferHelper* helper)
17 : helper_(helper), 17 : helper_(helper),
18 result_size_(0), 18 result_size_(0),
19 default_buffer_size_(0),
19 min_buffer_size_(0), 20 min_buffer_size_(0),
20 max_buffer_size_(0), 21 max_buffer_size_(0),
21 alignment_(0), 22 alignment_(0),
22 size_to_flush_(0), 23 size_to_flush_(0),
23 bytes_since_last_flush_(0), 24 bytes_since_last_flush_(0),
24 buffer_id_(-1), 25 buffer_id_(-1),
25 result_buffer_(NULL), 26 result_buffer_(NULL),
26 result_shm_offset_(0), 27 result_shm_offset_(0),
27 usable_(true) { 28 usable_(true) {
28 } 29 }
29 30
30 TransferBuffer::~TransferBuffer() { 31 TransferBuffer::~TransferBuffer() {
31 Free(); 32 Free();
32 } 33 }
33 34
34 bool TransferBuffer::Initialize( 35 bool TransferBuffer::Initialize(
35 unsigned int starting_buffer_size, 36 unsigned int default_buffer_size,
36 unsigned int result_size, 37 unsigned int result_size,
37 unsigned int min_buffer_size, 38 unsigned int min_buffer_size,
38 unsigned int max_buffer_size, 39 unsigned int max_buffer_size,
39 unsigned int alignment, 40 unsigned int alignment,
40 unsigned int size_to_flush) { 41 unsigned int size_to_flush) {
41 result_size_ = result_size; 42 result_size_ = result_size;
43 default_buffer_size_ = default_buffer_size;
42 min_buffer_size_ = min_buffer_size; 44 min_buffer_size_ = min_buffer_size;
43 max_buffer_size_ = max_buffer_size; 45 max_buffer_size_ = max_buffer_size;
44 alignment_ = alignment; 46 alignment_ = alignment;
45 size_to_flush_ = size_to_flush; 47 size_to_flush_ = size_to_flush;
46 ReallocateRingBuffer(starting_buffer_size - result_size); 48 ReallocateRingBuffer(default_buffer_size_ - result_size);
vangelis 2012/04/23 23:46:35 Why do we subtract the result_size here?
greggman 2012/04/24 20:04:46 because the start of the buffer is reserved. I cou
47 return HaveBuffer(); 49 return HaveBuffer();
48 } 50 }
49 51
50 void TransferBuffer::Free() { 52 void TransferBuffer::Free() {
51 if (HaveBuffer()) { 53 if (HaveBuffer()) {
52 helper_->Finish(); 54 helper_->Finish();
53 helper_->command_buffer()->DestroyTransferBuffer(buffer_id_); 55 helper_->command_buffer()->DestroyTransferBuffer(buffer_id_);
54 buffer_id_ = -1; 56 buffer_id_ = -1;
55 buffer_.ptr = NULL; 57 buffer_.ptr = NULL;
56 buffer_.size = 0; 58 buffer_.size = 0;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 } 131 }
130 132
131 static unsigned int ComputePOTSize(unsigned int dimension) { 133 static unsigned int ComputePOTSize(unsigned int dimension) {
132 return (dimension == 0) ? 0 : 1 << Log2Ceiling(dimension); 134 return (dimension == 0) ? 0 : 1 << Log2Ceiling(dimension);
133 } 135 }
134 136
135 void TransferBuffer::ReallocateRingBuffer(unsigned int size) { 137 void TransferBuffer::ReallocateRingBuffer(unsigned int size) {
136 // What size buffer would we ask for if we needed a new one? 138 // What size buffer would we ask for if we needed a new one?
137 unsigned int needed_buffer_size = ComputePOTSize(size + result_size_); 139 unsigned int needed_buffer_size = ComputePOTSize(size + result_size_);
138 needed_buffer_size = std::max(needed_buffer_size, min_buffer_size_); 140 needed_buffer_size = std::max(needed_buffer_size, min_buffer_size_);
141 needed_buffer_size = std::max(needed_buffer_size, default_buffer_size_);
139 needed_buffer_size = std::min(needed_buffer_size, max_buffer_size_); 142 needed_buffer_size = std::min(needed_buffer_size, max_buffer_size_);
140 143
141 if (usable_ && (!HaveBuffer() || needed_buffer_size > buffer_.size)) { 144 if (usable_ && (!HaveBuffer() || needed_buffer_size > buffer_.size)) {
142 if (HaveBuffer()) { 145 if (HaveBuffer()) {
143 Free(); 146 Free();
144 } 147 }
145 AllocateRingBuffer(needed_buffer_size); 148 AllocateRingBuffer(needed_buffer_size);
146 } 149 }
147 } 150 }
148 151
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 Release(); 216 Release();
214 // NOTE: we allocate buffers of size 0 so that HaveBuffer will be true, so 217 // NOTE: we allocate buffers of size 0 so that HaveBuffer will be true, so
215 // that address will return a pointer just like malloc, and so that GetShmId 218 // that address will return a pointer just like malloc, and so that GetShmId
216 // will be valid. That has the side effect that we'll insert a token on free. 219 // will be valid. That has the side effect that we'll insert a token on free.
217 // We could add code skip the token for a zero size buffer but it doesn't seem 220 // We could add code skip the token for a zero size buffer but it doesn't seem
218 // worth the complication. 221 // worth the complication.
219 buffer_ = transfer_buffer_->AllocUpTo(new_size, &size_); 222 buffer_ = transfer_buffer_->AllocUpTo(new_size, &size_);
220 } 223 }
221 224
222 } // namespace gpu 225 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698