#include "include/private/chromium/SkChromeRemoteGlyphCache.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkColorSpace.h"
#include "include/core/SkData.h"
#include "include/core/SkDrawable.h"
#include "include/core/SkFontMetrics.h"
#include "include/core/SkImageInfo.h"
#include "include/core/SkMatrix.h"
#include "include/core/SkPicture.h"
#include "include/core/SkRect.h"
#include "include/core/SkSize.h"
#include "include/core/SkString.h"
#include "include/core/SkSurfaceProps.h"
#include "include/core/SkTypeface.h"
#include "include/private/base/SkAssert.h"
#include "include/private/base/SkDebug.h"
#include "include/private/base/SkPoint_impl.h"
#include "include/private/base/SkTFitsIn.h"
#include "include/private/base/SkTo.h"
#include "include/private/chromium/Slug.h"
#include "src/base/SkArenaAlloc.h"
#include "src/core/SkDescriptor.h"
#include "src/core/SkDevice.h"
#include "src/core/SkFontMetricsPriv.h"
#include "src/core/SkGlyph.h"
#include "src/core/SkReadBuffer.h"
#include "src/core/SkScalerContext.h"
#include "src/core/SkStrike.h"
#include "src/core/SkStrikeCache.h"
#include "src/core/SkStrikeSpec.h"
#include "src/core/SkTHash.h"
#include "src/core/SkTraceEvent.h"
#include "src/core/SkTypeface_remote.h"
#include "src/core/SkWriteBuffer.h"
#include "src/text/GlyphRun.h"
#include "src/text/StrikeForGPU.h"
#include "src/text/gpu/SubRunAllocator.h"
#include "src/text/gpu/SubRunContainer.h"
#include "src/text/gpu/SubRunControl.h"
#include "src/text/gpu/TextBlob.h"
#include <cstring>
#include <memory>
#include <optional>
#include <unordered_map>
#include <utility>
class SkPaint;
usingnamespaceskia_private;
usingnamespacesktext;
usingnamespacesktext::gpu;
usingnamespaceskglyph;
namespace {
struct StrikeSpec { … };
class RemoteStrike final : public sktext::StrikeForGPU { … };
RemoteStrike::RemoteStrike(
const SkStrikeSpec& strikeSpec,
std::unique_ptr<SkScalerContext> context,
uint32_t discardableHandleId)
: … { … }
void RemoteStrike::writePendingGlyphs(SkWriteBuffer& buffer) { … }
void RemoteStrike::ensureScalerContext() { … }
void RemoteStrike::resetScalerContext() { … }
void RemoteStrike::setStrikeSpec(const SkStrikeSpec& strikeSpec) { … }
SkGlyphDigest RemoteStrike::digestFor(ActionType actionType, SkPackedGlyphID packedGlyphID) { … }
sktext::SkStrikePromise RemoteStrike::strikePromise() { … }
}
class SkStrikeServerImpl final : public sktext::StrikeForGPUCacheInterface { … };
SkStrikeServerImpl::SkStrikeServerImpl(SkStrikeServer::DiscardableHandleManager* dhm)
: … { … }
void SkStrikeServerImpl::setMaxEntriesInDescriptorMapForTesting(size_t count) { … }
size_t SkStrikeServerImpl::remoteStrikeMapSizeForTesting() const { … }
void SkStrikeServerImpl::writeStrikeData(std::vector<uint8_t>* memory) { … }
sk_sp<StrikeForGPU> SkStrikeServerImpl::findOrCreateScopedStrike(
const SkStrikeSpec& strikeSpec) { … }
void SkStrikeServerImpl::checkForDeletedEntries() { … }
sk_sp<RemoteStrike> SkStrikeServerImpl::getOrCreateCache(const SkStrikeSpec& strikeSpec) { … }
class GlyphTrackingDevice final : public SkNoPixelsDevice { … };
SkStrikeServer::SkStrikeServer(DiscardableHandleManager* dhm)
: … { … }
SkStrikeServer::~SkStrikeServer() = default;
std::unique_ptr<SkCanvas> SkStrikeServer::makeAnalysisCanvas(int width, int height,
const SkSurfaceProps& props,
sk_sp<SkColorSpace> colorSpace,
bool DFTSupport,
bool DFTPerspSupport) { … }
void SkStrikeServer::writeStrikeData(std::vector<uint8_t>* memory) { … }
SkStrikeServerImpl* SkStrikeServer::impl() { … }
void SkStrikeServer::setMaxEntriesInDescriptorMapForTesting(size_t count) { … }
size_t SkStrikeServer::remoteStrikeMapSizeForTesting() const { … }
class DiscardableStrikePinner : public SkStrikePinner { … };
class SkStrikeClientImpl { … };
SkStrikeClientImpl::SkStrikeClientImpl(
sk_sp<SkStrikeClient::DiscardableHandleManager>
discardableManager,
bool isLogging,
SkStrikeCache* strikeCache)
: … { … }
#define READ_FAILURE …
bool SkStrikeClientImpl::readStrikeData(const volatile void* memory, size_t memorySize) { … }
bool SkStrikeClientImpl::translateTypefaceID(SkAutoDescriptor* toChange) const { … }
sk_sp<SkTypeface> SkStrikeClientImpl::retrieveTypefaceUsingServerID(SkTypefaceID typefaceID) const { … }
sk_sp<SkTypeface> SkStrikeClientImpl::addTypeface(const SkTypefaceProxyPrototype& typefaceProto) { … }
SkStrikeClient::SkStrikeClient(sk_sp<DiscardableHandleManager> discardableManager,
bool isLogging,
SkStrikeCache* strikeCache)
: … { … }
SkStrikeClient::~SkStrikeClient() = default;
bool SkStrikeClient::readStrikeData(const volatile void* memory, size_t memorySize) { … }
sk_sp<SkTypeface> SkStrikeClient::retrieveTypefaceUsingServerIDForTest(
SkTypefaceID typefaceID) const { … }
bool SkStrikeClient::translateTypefaceID(SkAutoDescriptor* descriptor) const { … }
sk_sp<sktext::gpu::Slug> SkStrikeClient::deserializeSlugForTest(const void* data,
size_t size) const { … }