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

Unified Diff: include/core/SkTextBlob.h

Issue 581173003: Souped-up SkTextBlob (reland) (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: updated assert + extra build-time validation Created 6 years, 3 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/core/SkTextBlob.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/core/SkTextBlob.h
diff --git a/include/core/SkTextBlob.h b/include/core/SkTextBlob.h
index 8e67723494fa54c2f22b002e1c2da4f4c082827c..8ee1d1919628b10e0d3f3ca6085a02ad619a68b2 100644
--- a/include/core/SkTextBlob.h
+++ b/include/core/SkTextBlob.h
@@ -53,6 +53,8 @@ private:
kFull_Positioning = 2 // Point positioning -- two scalars per glyph.
};
+ class RunRecord;
+
class RunIterator {
public:
RunIterator(const SkTextBlob* blob);
@@ -68,21 +70,16 @@ private:
GlyphPositioning positioning() const;
private:
- const SkTextBlob* fBlob;
- int fIndex;
- };
+ const RunRecord* fCurrentRun;
+ int fRemainingRuns;
- // A run is a sequence of glyphs sharing the same font metrics and positioning mode.
- struct Run {
- uint32_t count;
- uint32_t glyphStart; // index into fGlyphBuffer
- uint32_t posStart; // index into fPosBuffer
- SkPoint offset; // run offset (unsued for fully positioned glyphs)
- SkPaint font;
- GlyphPositioning positioning;
+ SkDEBUGCODE(uint8_t* fStorageTop;)
};
- SkTextBlob(uint16_t* glyphs, SkScalar* pos, const SkTArray<Run>* runs, const SkRect& bounds);
+ SkTextBlob(int runCount, const SkRect& bounds);
+
+ virtual ~SkTextBlob();
+ virtual void internal_dispose() const SK_OVERRIDE;
static unsigned ScalarsPerGlyph(GlyphPositioning pos);
@@ -90,14 +87,14 @@ private:
friend class SkTextBlobBuilder;
friend class TextBlobTester;
- const SkAutoTMalloc<uint16_t> fGlyphBuffer;
- const SkAutoTMalloc<SkScalar> fPosBuffer;
+ const int fRunCount;
+ const SkRect fBounds;
+ mutable uint32_t fUniqueID;
- // SkTArray required here for run font destruction.
- SkAutoTDelete<const SkTArray<Run> > fRuns;
- const SkRect fBounds;
+ SkDEBUGCODE(size_t fStorageSize;)
- mutable uint32_t fUniqueID;
+ // The actual payload resides in externally-managed storage, following the object.
+ // (see the .cpp for more details)
typedef SkRefCnt INHERITED;
};
@@ -108,11 +105,7 @@ private:
*/
class SK_API SkTextBlobBuilder {
public:
- /**
- * @param runs The number of runs to be added, if known. This is a storage hint and
- * not a limit.
- */
- SkTextBlobBuilder(unsigned runs = 0);
+ SkTextBlobBuilder();
~SkTextBlobBuilder();
@@ -180,20 +173,23 @@ public:
const RunBuffer& allocRunPos(const SkPaint& font, int count, const SkRect* bounds = NULL);
private:
+ void reserve(size_t size);
void allocInternal(const SkPaint& font, SkTextBlob::GlyphPositioning positioning,
int count, SkPoint offset, const SkRect* bounds);
- void ensureRun(const SkPaint& font, SkTextBlob::GlyphPositioning positioning,
- const SkPoint& offset);
+ bool mergeRun(const SkPaint& font, SkTextBlob::GlyphPositioning positioning,
+ int count, SkPoint offset);
void updateDeferredBounds();
- SkTDArray<uint16_t> fGlyphBuffer;
- SkTDArray<SkScalar> fPosBuffer;
- SkTArray<SkTextBlob::Run>* fRuns;
+ SkAutoTMalloc<uint8_t> fStorage;
+ size_t fStorageSize;
+ size_t fStorageUsed;
- SkRect fBounds;
- bool fDeferredBounds;
+ SkRect fBounds;
+ int fRunCount;
+ bool fDeferredBounds;
+ size_t fLastRun; // index into fStorage
- RunBuffer fCurrentRunBuffer;
+ RunBuffer fCurrentRunBuffer;
};
#endif // SkTextBlob_DEFINED
« no previous file with comments | « no previous file | src/core/SkTextBlob.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698