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

Side by Side Diff: src/gpu/GrBufferAllocPool.cpp

Issue 1103423004: Remove unneeded features from GrBufferAllocPool (Closed) Base URL: https://skia.googlesource.com/skia.git@remtarget
Patch Set: Created 5 years, 7 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
« no previous file with comments | « src/gpu/GrBufferAllocPool.h ('k') | src/gpu/GrContext.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2010 Google Inc. 3 * Copyright 2010 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "GrBufferAllocPool.h" 10 #include "GrBufferAllocPool.h"
(...skipping 19 matching lines...) Expand all
30 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), \ 30 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), \
31 "GrBufferAllocPool Unmapping Buffer", \ 31 "GrBufferAllocPool Unmapping Buffer", \
32 TRACE_EVENT_SCOPE_THREAD, \ 32 TRACE_EVENT_SCOPE_THREAD, \
33 "percent_unwritten", \ 33 "percent_unwritten", \
34 (float)((block).fBytesFree) / (block).fBuffer->gpuMemor ySize()); \ 34 (float)((block).fBytesFree) / (block).fBuffer->gpuMemor ySize()); \
35 (block).fBuffer->unmap(); \ 35 (block).fBuffer->unmap(); \
36 } while (false) 36 } while (false)
37 37
38 GrBufferAllocPool::GrBufferAllocPool(GrGpu* gpu, 38 GrBufferAllocPool::GrBufferAllocPool(GrGpu* gpu,
39 BufferType bufferType, 39 BufferType bufferType,
40 bool frequentResetHint,
41 size_t blockSize, 40 size_t blockSize,
42 int preallocBufferCnt) : 41 int preallocBufferCnt) :
43 fBlocks(SkTMax(8, 2*preallocBufferCnt)) { 42 fBlocks(SkTMax(8, 2*preallocBufferCnt)) {
44 43
45 SkASSERT(gpu); 44 fGpu = SkRef(gpu);
46 fGpu = gpu;
47 fGpu->ref();
48 fGpuIsReffed = true;
49 45
50 fBufferType = bufferType; 46 fBufferType = bufferType;
51 fFrequentResetHint = frequentResetHint;
52 fBufferPtr = NULL; 47 fBufferPtr = NULL;
53 fMinBlockSize = SkTMax(GrBufferAllocPool_MIN_BLOCK_SIZE, blockSize); 48 fMinBlockSize = SkTMax(GrBufferAllocPool_MIN_BLOCK_SIZE, blockSize);
54 49
55 fBytesInUse = 0; 50 fBytesInUse = 0;
56 51
57 fPreallocBuffersInUse = 0; 52 fPreallocBuffersInUse = 0;
58 fPreallocBufferStartIdx = 0; 53 fPreallocBufferStartIdx = 0;
59 for (int i = 0; i < preallocBufferCnt; ++i) { 54 for (int i = 0; i < preallocBufferCnt; ++i) {
60 GrGeometryBuffer* buffer = this->createBuffer(fMinBlockSize); 55 GrGeometryBuffer* buffer = this->createBuffer(fMinBlockSize);
61 if (buffer) { 56 if (buffer) {
62 *fPreallocBuffers.append() = buffer; 57 *fPreallocBuffers.append() = buffer;
63 } 58 }
64 } 59 }
65 } 60 }
66 61
67 GrBufferAllocPool::~GrBufferAllocPool() { 62 GrBufferAllocPool::~GrBufferAllocPool() {
68 VALIDATE(); 63 VALIDATE();
69 if (fBlocks.count()) { 64 if (fBlocks.count()) {
70 GrGeometryBuffer* buffer = fBlocks.back().fBuffer; 65 GrGeometryBuffer* buffer = fBlocks.back().fBuffer;
71 if (buffer->isMapped()) { 66 if (buffer->isMapped()) {
72 UNMAP_BUFFER(fBlocks.back()); 67 UNMAP_BUFFER(fBlocks.back());
73 } 68 }
74 } 69 }
75 while (!fBlocks.empty()) { 70 while (!fBlocks.empty()) {
76 destroyBlock(); 71 destroyBlock();
77 } 72 }
78 fPreallocBuffers.unrefAll(); 73 fPreallocBuffers.unrefAll();
79 releaseGpuRef(); 74 fGpu->unref();
80 }
81
82 void GrBufferAllocPool::releaseGpuRef() {
83 if (fGpuIsReffed) {
84 fGpu->unref();
85 fGpuIsReffed = false;
86 }
87 } 75 }
88 76
89 void GrBufferAllocPool::reset() { 77 void GrBufferAllocPool::reset() {
90 VALIDATE(); 78 VALIDATE();
91 fBytesInUse = 0; 79 fBytesInUse = 0;
92 if (fBlocks.count()) { 80 if (fBlocks.count()) {
93 GrGeometryBuffer* buffer = fBlocks.back().fBuffer; 81 GrGeometryBuffer* buffer = fBlocks.back().fBuffer;
94 if (buffer->isMapped()) { 82 if (buffer->isMapped()) {
95 UNMAP_BUFFER(fBlocks.back()); 83 UNMAP_BUFFER(fBlocks.back());
96 } 84 }
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 UNMAP_BUFFER(prev); 298 UNMAP_BUFFER(prev);
311 } else { 299 } else {
312 this->flushCpuData(prev, prev.fBuffer->gpuMemorySize() - prev.fBytes Free); 300 this->flushCpuData(prev, prev.fBuffer->gpuMemorySize() - prev.fBytes Free);
313 } 301 }
314 fBufferPtr = NULL; 302 fBufferPtr = NULL;
315 } 303 }
316 304
317 SkASSERT(NULL == fBufferPtr); 305 SkASSERT(NULL == fBufferPtr);
318 306
319 // If the buffer is CPU-backed we map it because it is free to do so and sav es a copy. 307 // If the buffer is CPU-backed we map it because it is free to do so and sav es a copy.
320 // Otherwise when buffer mapping is supported: 308 // Otherwise when buffer mapping is supported we map if the buffer size is g reater than the
321 // a) If the frequently reset hint is set we only map when the requeste d size meets a 309 // threshold.
322 // threshold (since we don't expect it is likely that we will see more vertex data)
323 // b) If the hint is not set we map if the buffer size is greater than the threshold.
324 bool attemptMap = block.fBuffer->isCPUBacked(); 310 bool attemptMap = block.fBuffer->isCPUBacked();
325 if (!attemptMap && GrDrawTargetCaps::kNone_MapFlags != fGpu->caps()->mapBuff erFlags()) { 311 if (!attemptMap && GrDrawTargetCaps::kNone_MapFlags != fGpu->caps()->mapBuff erFlags()) {
326 if (fFrequentResetHint) { 312 attemptMap = size > GR_GEOM_BUFFER_MAP_THRESHOLD;
327 attemptMap = requestSize > GR_GEOM_BUFFER_MAP_THRESHOLD;
328 } else {
329 attemptMap = size > GR_GEOM_BUFFER_MAP_THRESHOLD;
330 }
331 } 313 }
332 314
333 if (attemptMap) { 315 if (attemptMap) {
334 fBufferPtr = block.fBuffer->map(); 316 fBufferPtr = block.fBuffer->map();
335 } 317 }
336 318
337 if (NULL == fBufferPtr) { 319 if (NULL == fBufferPtr) {
338 fBufferPtr = fCpuData.reset(size); 320 fBufferPtr = fCpuData.reset(size);
339 } 321 }
340 322
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 return fGpu->createIndexBuffer(size, true); 370 return fGpu->createIndexBuffer(size, true);
389 } else { 371 } else {
390 SkASSERT(kVertex_BufferType == fBufferType); 372 SkASSERT(kVertex_BufferType == fBufferType);
391 return fGpu->createVertexBuffer(size, true); 373 return fGpu->createVertexBuffer(size, true);
392 } 374 }
393 } 375 }
394 376
395 //////////////////////////////////////////////////////////////////////////////// 377 ////////////////////////////////////////////////////////////////////////////////
396 378
397 GrVertexBufferAllocPool::GrVertexBufferAllocPool(GrGpu* gpu, 379 GrVertexBufferAllocPool::GrVertexBufferAllocPool(GrGpu* gpu,
398 bool frequentResetHint,
399 size_t bufferSize, 380 size_t bufferSize,
400 int preallocBufferCnt) 381 int preallocBufferCnt)
401 : GrBufferAllocPool(gpu, 382 : GrBufferAllocPool(gpu,
402 kVertex_BufferType, 383 kVertex_BufferType,
403 frequentResetHint,
404 bufferSize, 384 bufferSize,
405 preallocBufferCnt) { 385 preallocBufferCnt) {
406 } 386 }
407 387
408 void* GrVertexBufferAllocPool::makeSpace(size_t vertexSize, 388 void* GrVertexBufferAllocPool::makeSpace(size_t vertexSize,
409 int vertexCount, 389 int vertexCount,
410 const GrVertexBuffer** buffer, 390 const GrVertexBuffer** buffer,
411 int* startVertex) { 391 int* startVertex) {
412 392
413 SkASSERT(vertexCount >= 0); 393 SkASSERT(vertexCount >= 0);
(...skipping 17 matching lines...) Expand all
431 return static_cast<int>(INHERITED::preallocatedBufferSize() / vertexSize); 411 return static_cast<int>(INHERITED::preallocatedBufferSize() / vertexSize);
432 } 412 }
433 413
434 int GrVertexBufferAllocPool::currentBufferVertices(size_t vertexSize) const { 414 int GrVertexBufferAllocPool::currentBufferVertices(size_t vertexSize) const {
435 return currentBufferItems(vertexSize); 415 return currentBufferItems(vertexSize);
436 } 416 }
437 417
438 //////////////////////////////////////////////////////////////////////////////// 418 ////////////////////////////////////////////////////////////////////////////////
439 419
440 GrIndexBufferAllocPool::GrIndexBufferAllocPool(GrGpu* gpu, 420 GrIndexBufferAllocPool::GrIndexBufferAllocPool(GrGpu* gpu,
441 bool frequentResetHint,
442 size_t bufferSize, 421 size_t bufferSize,
443 int preallocBufferCnt) 422 int preallocBufferCnt)
444 : GrBufferAllocPool(gpu, 423 : GrBufferAllocPool(gpu,
445 kIndex_BufferType, 424 kIndex_BufferType,
446 frequentResetHint,
447 bufferSize, 425 bufferSize,
448 preallocBufferCnt) { 426 preallocBufferCnt) {
449 } 427 }
450 428
451 void* GrIndexBufferAllocPool::makeSpace(int indexCount, 429 void* GrIndexBufferAllocPool::makeSpace(int indexCount,
452 const GrIndexBuffer** buffer, 430 const GrIndexBuffer** buffer,
453 int* startIndex) { 431 int* startIndex) {
454 432
455 SkASSERT(indexCount >= 0); 433 SkASSERT(indexCount >= 0);
456 SkASSERT(buffer); 434 SkASSERT(buffer);
(...skipping 12 matching lines...) Expand all
469 return ptr; 447 return ptr;
470 } 448 }
471 449
472 int GrIndexBufferAllocPool::preallocatedBufferIndices() const { 450 int GrIndexBufferAllocPool::preallocatedBufferIndices() const {
473 return static_cast<int>(INHERITED::preallocatedBufferSize() / sizeof(uint16_ t)); 451 return static_cast<int>(INHERITED::preallocatedBufferSize() / sizeof(uint16_ t));
474 } 452 }
475 453
476 int GrIndexBufferAllocPool::currentBufferIndices() const { 454 int GrIndexBufferAllocPool::currentBufferIndices() const {
477 return currentBufferItems(sizeof(uint16_t)); 455 return currentBufferItems(sizeof(uint16_t));
478 } 456 }
OLDNEW
« no previous file with comments | « src/gpu/GrBufferAllocPool.h ('k') | src/gpu/GrContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698