blob: b5871ded255822f0b246240c1fb78d164ecca41a [file] [log] [blame]
Mike Kleina8a51ce2018-01-09 12:34:11 -05001/*
2 * Copyright 2018 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
Mike Kleina8a51ce2018-01-09 12:34:11 -05008#include "SkTypeface_remote.h"
Mike Kleinfc6cf922018-05-23 00:16:47 +00009#include "SkPaint.h"
Khushald4160832018-05-23 18:16:00 -070010#include "SkRemoteGlyphCache.h"
11#include "SkStrikeCache.h"
12#include "SkTraceEvent.h"
Khushal38a08432018-05-02 10:29:37 -070013
14SkScalerContextProxy::SkScalerContextProxy(sk_sp<SkTypeface> tf,
15 const SkScalerContextEffects& effects,
16 const SkDescriptor* desc,
Khushald4160832018-05-23 18:16:00 -070017 sk_sp<SkStrikeClient::DiscardableHandleManager> manager)
Herb Derbyfeb9fa92018-06-01 16:47:21 -040018 : SkScalerContext{std::move(tf), effects, desc}
19 , fDiscardableManager{std::move(manager)} {}
Herb Derby97be88f2018-03-21 16:23:49 -040020
21unsigned SkScalerContextProxy::generateGlyphCount() {
22 SK_ABORT("Should never be called.");
23 return 0;
24}
25
26uint16_t SkScalerContextProxy::generateCharToGlyph(SkUnichar) {
27 SK_ABORT("Should never be called.");
28 return 0;
29}
30
31void SkScalerContextProxy::generateAdvance(SkGlyph* glyph) {
32 this->generateMetrics(glyph);
33}
Mike Kleina8a51ce2018-01-09 12:34:11 -050034
35void SkScalerContextProxy::generateMetrics(SkGlyph* glyph) {
Khushald4160832018-05-23 18:16:00 -070036 TRACE_EVENT1("skia", "generateMetrics", "rec", TRACE_STR_COPY(this->getRec().dump().c_str()));
Herb Derbyfeb9fa92018-06-01 16:47:21 -040037 if (this->getProxyTypeface()->isLogging()) {
38 SkDebugf("GlyphCacheMiss generateMetrics: %s\n", this->getRec().dump().c_str());
39 }
Khushald4160832018-05-23 18:16:00 -070040
41 fDiscardableManager->NotifyCacheMiss(SkStrikeClient::CacheMissType::kGlyphMetrics);
42 glyph->zeroMetrics();
Mike Kleina8a51ce2018-01-09 12:34:11 -050043}
44
45void SkScalerContextProxy::generateImage(const SkGlyph& glyph) {
Khushald4160832018-05-23 18:16:00 -070046 TRACE_EVENT1("skia", "generateImage", "rec", TRACE_STR_COPY(this->getRec().dump().c_str()));
Herb Derbyfeb9fa92018-06-01 16:47:21 -040047 if (this->getProxyTypeface()->isLogging()) {
48 SkDebugf("GlyphCacheMiss generateImage: %s\n", this->getRec().dump().c_str());
49 }
Khushald4160832018-05-23 18:16:00 -070050
51 fDiscardableManager->NotifyCacheMiss(SkStrikeClient::CacheMissType::kGlyphImage);
Mike Kleina8a51ce2018-01-09 12:34:11 -050052}
53
Ben Wagner5ddb3082018-03-29 11:18:06 -040054bool SkScalerContextProxy::generatePath(SkGlyphID glyphID, SkPath* path) {
Khushald4160832018-05-23 18:16:00 -070055 TRACE_EVENT1("skia", "generatePath", "rec", TRACE_STR_COPY(this->getRec().dump().c_str()));
Herb Derbyfeb9fa92018-06-01 16:47:21 -040056 if (this->getProxyTypeface()->isLogging()) {
57 SkDebugf("GlyphCacheMiss generatePath: %s\n", this->getRec().dump().c_str());
58 }
Khushald4160832018-05-23 18:16:00 -070059
60 fDiscardableManager->NotifyCacheMiss(SkStrikeClient::CacheMissType::kGlyphPath);
Khushal2d2fedd2018-05-16 16:07:24 -070061 return false;
Mike Kleina8a51ce2018-01-09 12:34:11 -050062}
63
64void SkScalerContextProxy::generateFontMetrics(SkPaint::FontMetrics* metrics) {
Khushald4160832018-05-23 18:16:00 -070065 TRACE_EVENT1(
66 "skia", "generateFontMetrics", "rec", TRACE_STR_COPY(this->getRec().dump().c_str()));
Herb Derbyfeb9fa92018-06-01 16:47:21 -040067 if (this->getProxyTypeface()->isLogging()) {
68 SkDebugf("GlyphCacheMiss generateFontMetrics: %s\n", this->getRec().dump().c_str());
69 SkDEBUGCODE(SkStrikeCache::Dump());
70 }
Mike Kleina8a51ce2018-01-09 12:34:11 -050071
Khushald4160832018-05-23 18:16:00 -070072 fDiscardableManager->NotifyCacheMiss(SkStrikeClient::CacheMissType::kFontMetrics);
73 sk_bzero(metrics, sizeof(*metrics));
Mike Kleina8a51ce2018-01-09 12:34:11 -050074}
Herb Derbyfeb9fa92018-06-01 16:47:21 -040075
76SkTypefaceProxy* SkScalerContextProxy::getProxyTypeface() const {
77 return (SkTypefaceProxy*)this->getTypeface();
78}