Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Member Functions | Friends | List of all members
sktext::gpu::GlyphVector Class Reference

#include <GlyphVector.h>

Classes

union  Variant
 

Public Member Functions

 GlyphVector (SkStrikePromise &&strikePromise, SkSpan< Variant > glyphs)
 
SkSpan< const Glyph * > glyphs () const
 
void flatten (SkWriteBuffer &buffer) const
 
int unflattenSize () const
 
void packedGlyphIDToGlyph (StrikeCache *cache)
 

Static Public Member Functions

static GlyphVector Make (SkStrikePromise &&promise, SkSpan< const SkPackedGlyphID > glyphs, SubRunAllocator *alloc)
 
static std::optional< GlyphVectorMakeFromBuffer (SkReadBuffer &buffer, const SkStrikeClient *strikeClient, SubRunAllocator *alloc)
 
static size_t GlyphVectorSize (size_t count)
 

Friends

class GlyphVectorTestingPeer
 
class ::skgpu::graphite::Device
 
class ::skgpu::ganesh::AtlasTextOp
 

Detailed Description

Definition at line 42 of file GlyphVector.h.

Constructor & Destructor Documentation

◆ GlyphVector()

sktext::gpu::GlyphVector::GlyphVector ( SkStrikePromise &&  strikePromise,
SkSpan< Variant glyphs 
)

Definition at line 32 of file GlyphVector.cpp.

33 : fStrikePromise{std::move(strikePromise)}
34 , fGlyphs{glyphs} {
35 SkASSERT(fGlyphs.size() > 0);
36}
#define SkASSERT(cond)
Definition SkAssert.h:116
SkSpan< const Glyph * > glyphs() const

Member Function Documentation

◆ flatten()

void sktext::gpu::GlyphVector::flatten ( SkWriteBuffer buffer) const

Definition at line 84 of file GlyphVector.cpp.

84 {
85 // There should never be a glyph vector with zero glyphs.
86 SkASSERT(fGlyphs.size() != 0);
87 fStrikePromise.flatten(buffer);
88
89 // Write out the span of packedGlyphIDs.
90 buffer.write32(SkTo<int32_t>(fGlyphs.size()));
91 for (Variant variant : fGlyphs) {
92 buffer.writeUInt(variant.packedGlyphID.value());
93 }
94}
void flatten(SkWriteBuffer &buffer) const
static const uint8_t buffer[]

◆ glyphs()

SkSpan< const Glyph * > sktext::gpu::GlyphVector::glyphs ( ) const

Definition at line 96 of file GlyphVector.cpp.

96 {
97 return SkSpan(reinterpret_cast<const Glyph**>(fGlyphs.data()), fGlyphs.size());
98}

◆ GlyphVectorSize()

static size_t sktext::gpu::GlyphVector::GlyphVectorSize ( size_t  count)
inlinestatic

Definition at line 72 of file GlyphVector.h.

72 {
73 return sizeof(Variant) * count;
74 }
int count

◆ Make()

GlyphVector sktext::gpu::GlyphVector::Make ( SkStrikePromise &&  promise,
SkSpan< const SkPackedGlyphID glyphs,
SubRunAllocator alloc 
)
static

Definition at line 38 of file GlyphVector.cpp.

40 {
41 SkASSERT(packedIDs.size() > 0);
42 auto packedIDToVariant = [] (SkPackedGlyphID packedID) {
43 return Variant{packedID};
44 };
45
46 return GlyphVector{std::move(promise),
47 alloc->makePODArray<Variant>(packedIDs, packedIDToVariant)};
48}

◆ MakeFromBuffer()

std::optional< GlyphVector > sktext::gpu::GlyphVector::MakeFromBuffer ( SkReadBuffer buffer,
const SkStrikeClient strikeClient,
SubRunAllocator alloc 
)
static

Definition at line 50 of file GlyphVector.cpp.

52 {
53 std::optional<SkStrikePromise> promise =
55 if (!buffer.validate(promise.has_value())) {
56 return std::nullopt;
57 }
58
59 int32_t glyphCount = buffer.read32();
60 // Since the glyph count can never be zero. There was a buffer reading problem.
61 if (!buffer.validate(glyphCount > 0)) {
62 return std::nullopt;
63 }
64
65 // Make sure we can multiply without overflow in the check below.
66 static constexpr int kMaxCount = (int)(INT_MAX / sizeof(uint32_t));
67 if (!buffer.validate(glyphCount <= kMaxCount)) {
68 return std::nullopt;
69 }
70
71 // Check for enough bytes to populate the packedGlyphID array. If not enough something has
72 // gone wrong.
73 if (!buffer.validate(glyphCount * sizeof(uint32_t) <= buffer.available())) {
74 return std::nullopt;
75 }
76
77 Variant* variants = alloc->makePODArray<Variant>(glyphCount);
78 for (int i = 0; i < glyphCount; i++) {
79 variants[i].packedGlyphID = SkPackedGlyphID(buffer.readUInt());
80 }
81 return GlyphVector{std::move(promise.value()), SkSpan(variants, glyphCount)};
82}
Type::kYUV Type::kRGBA() int(0.7 *637)
static SkStrikeCache * GlobalStrikeCache()
static std::optional< SkStrikePromise > MakeFromBuffer(SkReadBuffer &buffer, const SkStrikeClient *client, SkStrikeCache *strikeCache)

◆ packedGlyphIDToGlyph()

void sktext::gpu::GlyphVector::packedGlyphIDToGlyph ( StrikeCache cache)

Definition at line 102 of file GlyphVector.cpp.

102 {
103 if (fTextStrike == nullptr) {
104 SkStrike* strike = fStrikePromise.strike();
105 fTextStrike = cache->findOrCreateStrike(strike->strikeSpec());
106
107 // Get all the atlas locations for each glyph.
108 for (Variant& variant : fGlyphs) {
109 variant.glyph = fTextStrike->getGlyph(variant.packedGlyphID);
110 }
111
112 // This must be pinned for the Atlas filling to work.
113 strike->verifyPinnedStrike();
114
115 // Drop the ref to the strike so that it can be purged if needed.
116 fStrikePromise.resetStrike();
117 }
118}
void verifyPinnedStrike() const
Definition SkStrike.h:125
const SkStrikeSpec & strikeSpec() const
Definition SkStrike.h:121
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir Path to the cache directory This is different from the persistent_cache_path in embedder which is used for Skia shader cache icu native lib Path to the library file that exports the ICU data vm service The hostname IP address on which the Dart VM Service should be served If not defaults to or::depending on whether ipv6 is specified vm service A custom Dart VM Service port The default is to pick a randomly available open port disable vm Disable the Dart VM Service The Dart VM Service is never available in release mode disable vm service Disable mDNS Dart VM Service publication Bind to the IPv6 localhost address for the Dart VM Service Ignored if vm service host is set endless trace Enable an endless trace buffer The default is a ring buffer This is useful when very old events need to viewed For during application launch Memory usage will continue to grow indefinitely however Start app with an specific route defined on the framework flutter assets Path to the Flutter assets directory enable service port Allow the VM service to fallback to automatic port selection if binding to a specified port fails trace Trace early application lifecycle Automatically switches to an endless trace buffer trace skia Filters out all Skia trace event categories except those that are specified in this comma separated list dump skp on shader Automatically dump the skp that triggers new shader compilations This is useful for writing custom ShaderWarmUp to reduce jank By this is not enabled to reduce the overhead purge persistent cache
Definition switches.h:191

◆ unflattenSize()

int sktext::gpu::GlyphVector::unflattenSize ( ) const
inline

Definition at line 68 of file GlyphVector.h.

68{ return GlyphVectorSize(fGlyphs.size()); }
static size_t GlyphVectorSize(size_t count)
Definition GlyphVector.h:72

Friends And Related Symbol Documentation

◆ ::skgpu::ganesh::AtlasTextOp

friend class ::skgpu::ganesh::AtlasTextOp
friend

Definition at line 79 of file GlyphVector.h.

◆ ::skgpu::graphite::Device

friend class ::skgpu::graphite::Device
friend

Definition at line 78 of file GlyphVector.h.

◆ GlyphVectorTestingPeer

friend class GlyphVectorTestingPeer
friend

Definition at line 77 of file GlyphVector.h.


The documentation for this class was generated from the following files: