aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/TypefaceTest.cpp
diff options
context:
space:
mode:
authorGravatar bungeman <bungeman@google.com>2016-04-14 08:04:45 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-04-14 08:04:45 -0700
commit82a455f0e9a7a50a399a58be906b48c24aeec056 (patch)
tree03baf99e00b1c3f6131ba4e3e76c67afd1f75cea /tests/TypefaceTest.cpp
parentb2a4dc6a350abe3b18ecac719e499600f739a6e2 (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.cpp67
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());
+}