aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrResourceProvider.cpp
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-09-21 13:46:28 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-21 18:33:23 +0000
commit65e706379657d64371012c2e95ccf1354d741145 (patch)
treef8ebde9cb13b844bc6d852fb54823c92e6aed1a9 /src/gpu/GrResourceProvider.cpp
parentebf648e57afa0484b4665b2c945331e1af0dfb83 (diff)
Don't call GrBuffer::map() in createPatternedIndexBuffer.
TSAN doesn't seem to be understanding that the memory coming back from GrBuffer::map() is a new allocation. Using AnnotateNewMemory() to tell TSAN didn't seem to help. This also appears to fix a memory leak if buffer->updateData() fails when useTempData was true. Not sure if that ever really happens? Bug: skia:7058 Change-Id: I0a2786fa2c59e14c322ec5acc8cd26436c5a9477 Reviewed-on: https://skia-review.googlesource.com/49743 Commit-Queue: Mike Klein <mtklein@chromium.org> Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/GrResourceProvider.cpp')
-rw-r--r--src/gpu/GrResourceProvider.cpp20
1 files changed, 7 insertions, 13 deletions
diff --git a/src/gpu/GrResourceProvider.cpp b/src/gpu/GrResourceProvider.cpp
index 7f098e4075..7e7fef4661 100644
--- a/src/gpu/GrResourceProvider.cpp
+++ b/src/gpu/GrResourceProvider.cpp
@@ -321,11 +321,8 @@ const GrBuffer* GrResourceProvider::createPatternedIndexBuffer(const uint16_t* p
if (!buffer) {
return nullptr;
}
- uint16_t* data = (uint16_t*) buffer->map();
- bool useTempData = (nullptr == data);
- if (useTempData) {
- data = new uint16_t[reps * patternSize];
- }
+
+ SkAutoTArray<uint16_t> data(reps * patternSize);
for (int i = 0; i < reps; ++i) {
int baseIdx = i * patternSize;
uint16_t baseVert = (uint16_t)(i * vertCount);
@@ -333,15 +330,12 @@ const GrBuffer* GrResourceProvider::createPatternedIndexBuffer(const uint16_t* p
data[baseIdx+j] = baseVert + pattern[j];
}
}
- if (useTempData) {
- if (!buffer->updateData(data, bufferSize)) {
- buffer->unref();
- return nullptr;
- }
- delete[] data;
- } else {
- buffer->unmap();
+
+ if (!buffer->updateData(data.get(), bufferSize)) {
+ buffer->unref();
+ return nullptr;
}
+
this->assignUniqueKeyToResource(key, buffer);
return buffer;
}