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

Unified Diff: src/gpu/GrAtlasTextContext.h

Issue 1065773005: Fix for segfault on destruction of BitmapTextBlob (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/gpu/GrAtlasTextContext.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrAtlasTextContext.h
diff --git a/src/gpu/GrAtlasTextContext.h b/src/gpu/GrAtlasTextContext.h
index ebd94f9b3d330bdfe55b27dcb11592f69f7d4404..1a24e809a34b10cc4a04ae89dbc8efe3eb49dea0 100644
--- a/src/gpu/GrAtlasTextContext.h
+++ b/src/gpu/GrAtlasTextContext.h
@@ -94,6 +94,8 @@ private:
, fInitialized(false)
, fDrawAsPaths(false) {
fVertexBounds.setLargestInverted();
+ // To ensure we always have one subrun, we push back a fresh run here
+ fSubRunInfo.push_back();
}
struct SubRunInfo {
SubRunInfo()
@@ -110,7 +112,6 @@ private:
// TODO we could have a descriptor cache, it would reduce the size of these blobs
// significantly, and then the subrun could just have a refed pointer to the
// correct descriptor.
- SkAutoTDelete<SkAutoDescriptor> fOverrideDescriptor; // df properties
GrBatchAtlas::BulkUseTokenUpdater fBulkUseToken;
uint64_t fAtlasGeneration;
size_t fVertexStartIndex;
@@ -123,63 +124,24 @@ private:
bool fUseLCDText; // df property
};
- class SubRunInfoArray {
- public:
- SubRunInfoArray()
- : fSubRunCount(0)
- , fSubRunAllocation(kMinSubRuns) {
- SK_COMPILE_ASSERT(kMinSubRuns > 0, insufficient_subrun_allocation);
- // We always seed with one here, so we can assume a valid subrun during
- // push_back
- fPtr = reinterpret_cast<SubRunInfo*>(fSubRunStorage.get());
- SkNEW_PLACEMENT(&fPtr[fSubRunCount++], SubRunInfo);
- }
- ~SubRunInfoArray() {
- for (int i = 0; i < fSubRunCount; i++) {
- fPtr[i].~SubRunInfo();
- }
- }
-
- int count() const { return fSubRunCount; }
- SubRunInfo& back() { return fPtr[fSubRunCount - 1]; }
- SubRunInfo& push_back() {
- if (fSubRunCount >= fSubRunAllocation) {
- fSubRunAllocation = fSubRunAllocation << 1;
- fSubRunStorage.realloc(fSubRunAllocation * sizeof(SubRunInfo));
- fPtr = reinterpret_cast<SubRunInfo*>(fSubRunStorage.get());
- }
- SkNEW_PLACEMENT(&fPtr[fSubRunCount], SubRunInfo);
-
- // Forward glyph / vertex information to seed the new sub run
- SubRunInfo& newSubRun = fPtr[fSubRunCount];
- SubRunInfo& prevSubRun = fPtr[fSubRunCount - 1];
- newSubRun.fGlyphStartIndex = prevSubRun.fGlyphEndIndex;
- newSubRun.fGlyphEndIndex = prevSubRun.fGlyphEndIndex;
-
- newSubRun.fVertexStartIndex = prevSubRun.fVertexEndIndex;
- newSubRun.fVertexEndIndex = prevSubRun.fVertexEndIndex;
- return fPtr[fSubRunCount++];
- }
- SubRunInfo& operator[](int index) {
- return fPtr[index];
- }
- const SubRunInfo& operator[](int index) const {
- return fPtr[index];
- }
-
- private:
- static const int kMinSubRuns = 1;
- static const int kMinSubRunStorage = kMinSubRuns * sizeof(SubRunInfo);
- SubRunInfo* fPtr;
- SkAutoSTMalloc<kMinSubRunStorage, unsigned char> fSubRunStorage;
- int fSubRunCount;
- int fSubRunAllocation;
- };
+ SubRunInfo& push_back() {
+ // Forward glyph / vertex information to seed the new sub run
+ SubRunInfo& prevSubRun = fSubRunInfo.back();
+ SubRunInfo& newSubRun = fSubRunInfo.push_back();
+ newSubRun.fGlyphStartIndex = prevSubRun.fGlyphEndIndex;
+ newSubRun.fGlyphEndIndex = prevSubRun.fGlyphEndIndex;
+
+ newSubRun.fVertexStartIndex = prevSubRun.fVertexEndIndex;
+ newSubRun.fVertexEndIndex = prevSubRun.fVertexEndIndex;
+ return newSubRun;
+ }
+ static const int kMinSubRuns = 1;
SkAutoTUnref<GrBatchTextStrike> fStrike;
SkAutoTUnref<SkTypeface> fTypeface;
SkRect fVertexBounds;
- SubRunInfoArray fSubRunInfo;
+ SkSTArray<kMinSubRuns, SubRunInfo> fSubRunInfo;
SkAutoDescriptor fDescriptor;
+ SkAutoTDelete<SkAutoDescriptor> fOverrideDescriptor; // df properties
GrColor fColor;
bool fInitialized;
bool fDrawAsPaths;
« no previous file with comments | « no previous file | src/gpu/GrAtlasTextContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698