8#if defined(SK_BUILD_FOR_WIN)
25 : fFontFileStream(SkRefComPtr(fontFileStream))
27 , fLockedMemory(nullptr)
28 , fFragmentLock(nullptr) {
33 fFontFileStream->ReleaseFileFragment(fFragmentLock);
43 if (fPos +
size > fileSize) {
44 size_t skipped = fileSize - fPos;
55 hr = fFontFileStream->ReadFileFragment(&
start, fPos,
size, &fragmentLock);
58 fFontFileStream->ReleaseFileFragment(fragmentLock);
65 if (fPos +
size <= fileSize) {
70 size_t read = fileSize - fPos;
71 hr = fFontFileStream->ReadFileFragment(&
start, fPos,
read, &fragmentLock);
74 fFontFileStream->ReleaseFileFragment(fragmentLock);
110 std::unique_ptr<SkDWriteFontFileStream> that(this->
duplicate());
112 return that.release();
116 UINT64 realFileSize = 0;
117 fFontFileStream->GetFileSize(&realFileSize);
118 if (!SkTFitsIn<size_t>(realFileSize)) {
121 return static_cast<size_t>(realFileSize);
126 return fLockedMemory;
130 HRNM(fFontFileStream->GetFileSize(&fileSize),
"Could not get file size");
131 HRNM(fFontFileStream->ReadFileFragment(&fLockedMemory, 0, fileSize, &fFragmentLock),
132 "Could not lock file fragment.");
133 return fLockedMemory;
143 if (
nullptr == *streamFontFileStream) {
144 return E_OUTOFMEMORY;
150 : fRefCount(1), fStream(
stream) {
154 if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileStream)) {
159 *ppvObject =
nullptr;
160 return E_NOINTERFACE;
165 return InterlockedIncrement(&fRefCount);
169 ULONG newCount = InterlockedDecrement(&fRefCount);
177 void const** fragmentStart,
180 void** fragmentContext)
185 if (fileOffset > fileSize || fragmentSize > fileSize - fileOffset) {
186 *fragmentStart =
nullptr;
187 *fragmentContext =
nullptr;
191 if (!SkTFitsIn<size_t>(fileOffset + fragmentSize)) {
195 const void*
data = fStream->getMemoryBase();
197 *fragmentStart =
static_cast<BYTE const*
>(
data) +
static_cast<size_t>(fileOffset);
198 *fragmentContext =
nullptr;
204 *fragmentStart =
nullptr;
205 *fragmentContext =
nullptr;
207 if (!fStream->seek(
static_cast<size_t>(fileOffset))) {
211 if (fStream->read(streamData.get(),
static_cast<size_t>(fragmentSize)) != fragmentSize) {
215 *fragmentStart = streamData.get();
216 *fragmentContext = streamData.release();
221SK_STDMETHODIMP_(
void) SkDWriteFontFileStreamWrapper::ReleaseFileFragment(
void* fragmentContext) {
226 *fileSize = fStream->getLength();
SK_API void sk_free(void *)
#define SK_STDMETHODIMP_(type)
static HRESULT Create(SkStreamAsset *stream, SkDWriteFontFileStreamWrapper **streamFontFileStream)
SK_STDMETHODIMP GetFileSize(UINT64 *fileSize) override
SK_STDMETHODIMP ReadFileFragment(void const **fragmentStart, UINT64 fileOffset, UINT64 fragmentSize, void **fragmentContext) override
SK_STDMETHODIMP QueryInterface(REFIID iid, void **ppvObject) override
SK_STDMETHODIMP GetLastWriteTime(UINT64 *lastWriteTime) override
bool isAtEnd() const override
size_t read(void *buffer, size_t size) override
bool move(long offset) override
SkDWriteFontFileStream(IDWriteFontFileStream *fontFileStream)
size_t getLength() const override
bool seek(size_t position) override
const void * getMemoryBase() override
~SkDWriteFontFileStream() override
size_t getPosition() const override
std::unique_ptr< SkDWriteFontFileStream > duplicate() const
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 buffer
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
std::shared_ptr< const fml::Mapping > data