diff options
author | bungeman <bungeman@google.com> | 2016-04-14 08:04:45 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-04-14 08:04:45 -0700 |
commit | 82a455f0e9a7a50a399a58be906b48c24aeec056 (patch) | |
tree | 03baf99e00b1c3f6131ba4e3e76c67afd1f75cea /tests/TypefaceTest.cpp | |
parent | b2a4dc6a350abe3b18ecac719e499600f739a6e2 (diff) |
Remove requestedStyle from SkTypefaceCache.
The typeface cache contains typefaces which can be compared against to
determine if an already known typeface will work instead of creating a
new typeface id. This is primarily for sharing scaler contexts. How that
typeface was requested is not relevant to this comparison, so don't cache
it. Request caching must be handled separately.
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1879423002
Review URL: https://codereview.chromium.org/1879423002
Diffstat (limited to 'tests/TypefaceTest.cpp')
-rw-r--r-- | tests/TypefaceTest.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/TypefaceTest.cpp b/tests/TypefaceTest.cpp index b3bc157eba..130cabf37a 100644 --- a/tests/TypefaceTest.cpp +++ b/tests/TypefaceTest.cpp @@ -5,7 +5,9 @@ * found in the LICENSE file. */ +#include "SkRefCnt.h" #include "SkTypeface.h" +#include "SkTypefaceCache.h" #include "Test.h" DEF_TEST(Typeface, reporter) { @@ -24,3 +26,68 @@ DEF_TEST(Typeface, reporter) { REPORTER_ASSERT(reporter, nullptr == t3.get()); #endif } + +class SkEmptyTypeface : public SkTypeface { +public: + static sk_sp<SkTypeface> Create(SkFontID id) { return sk_sp<SkTypeface>(new SkEmptyTypeface(id)); } +protected: + SkEmptyTypeface(SkFontID id) : SkTypeface(SkFontStyle(), id, true) { } + + SkStreamAsset* onOpenStream(int* ttcIndex) const override { return nullptr; } + SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&, + const SkDescriptor*) const override { + return nullptr; + } + void onFilterRec(SkScalerContextRec*) const override { } + virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics( + PerGlyphInfo, + const uint32_t*, uint32_t) const override { return nullptr; } + void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { } + virtual int onCharsToGlyphs(const void* chars, Encoding encoding, + uint16_t glyphs[], int glyphCount) const override { + SK_ABORT("unimplemented"); + return 0; + } + int onCountGlyphs() const override { return 0; }; + int onGetUPEM() const override { return 0; }; + void onGetFamilyName(SkString* familyName) const override { familyName->reset(); } + SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override { + SK_ABORT("unimplemented"); + return nullptr; + }; + int onGetTableTags(SkFontTableTag tags[]) const override { return 0; } + size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override { return 0; } +}; + +static bool count_proc(SkTypeface* face, void* ctx) { + int* count = static_cast<int*>(ctx); + *count = *count + 1; + return false; +} +static int count(skiatest::Reporter* reporter, const SkTypefaceCache& cache) { + int count = 0; + SkTypeface* none = cache.findByProcAndRef(count_proc, &count); + REPORTER_ASSERT(reporter, none == nullptr); + return count; +} + +DEF_TEST(TypefaceCache, reporter) { + sk_sp<SkTypeface> t1(SkEmptyTypeface::Create(1)); + { + SkTypefaceCache cache; + REPORTER_ASSERT(reporter, count(reporter, cache) == 0); + { + sk_sp<SkTypeface> t0(SkEmptyTypeface::Create(0)); + cache.add(t0.get()); + REPORTER_ASSERT(reporter, count(reporter, cache) == 1); + cache.add(t1.get()); + REPORTER_ASSERT(reporter, count(reporter, cache) == 2); + cache.purgeAll(); + REPORTER_ASSERT(reporter, count(reporter, cache) == 2); + } + REPORTER_ASSERT(reporter, count(reporter, cache) == 2); + cache.purgeAll(); + REPORTER_ASSERT(reporter, count(reporter, cache) == 1); + } + REPORTER_ASSERT(reporter, t1->unique()); +} |