[graphite] More testing infrastructure

With this CL we can run as:

     dm --src gm skp tests --config grmtl -v --nocpu --nogpu

and not get all the non-Graphite unit tests.

Bug: skia:12466
Change-Id: Ib3f04f315fe4b5731a54e4c72979a0c1e00baf24
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/457898
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
This commit is contained in:
Robert Phillips 2021-10-13 10:37:36 -04:00 committed by SkCQ
parent 76f61debc6
commit 297d096cfb
19 changed files with 361 additions and 256 deletions

View File

@ -115,6 +115,7 @@ static DEFINE_bool2(veryVerbose, V, false, "tell individual tests to be verbose.
static DEFINE_bool(cpu, true, "Run CPU-bound work?"); static DEFINE_bool(cpu, true, "Run CPU-bound work?");
static DEFINE_bool(gpu, true, "Run GPU-bound work?"); static DEFINE_bool(gpu, true, "Run GPU-bound work?");
static DEFINE_bool(graphite, true, "Run Graphite work?");
static DEFINE_bool(dryRun, false, static DEFINE_bool(dryRun, false,
"just print the tests that would be run, without actually running them."); "just print the tests that would be run, without actually running them.");
@ -944,9 +945,7 @@ static Sink* create_sink(const GrContextOptions& grCtxOptions, const SkCommandLi
"GM tests will be skipped.\n", gpuConfig->getTag().c_str()); "GM tests will be skipped.\n", gpuConfig->getTag().c_str());
return nullptr; return nullptr;
} }
if (gpuConfig->getUseGraphite()) { if (gpuConfig->getTestThreading()) {
return new GraphiteSink();
} else if (gpuConfig->getTestThreading()) {
SkASSERT(!gpuConfig->getTestPersistentCache()); SkASSERT(!gpuConfig->getTestPersistentCache());
return new GPUThreadTestingSink(gpuConfig, grCtxOptions); return new GPUThreadTestingSink(gpuConfig, grCtxOptions);
} else if (gpuConfig->getTestPersistentCache()) { } else if (gpuConfig->getTestPersistentCache()) {
@ -962,6 +961,13 @@ static Sink* create_sink(const GrContextOptions& grCtxOptions, const SkCommandLi
} }
} }
} }
#ifdef SK_GRAPHITE_ENABLED
if (FLAGS_graphite) {
if (const SkCommandLineConfigGraphite *graphiteConfig = config->asConfigGraphite()) {
return new GraphiteSink(graphiteConfig);
}
}
#endif
if (const SkCommandLineConfigSvg* svgConfig = config->asConfigSvg()) { if (const SkCommandLineConfigSvg* svgConfig = config->asConfigSvg()) {
int pageIndex = svgConfig->getPageIndex(); int pageIndex = svgConfig->getPageIndex();
return new SVGSink(pageIndex); return new SVGSink(pageIndex);
@ -1432,7 +1438,9 @@ static void gather_tests() {
} }
if (test.needsGpu && FLAGS_gpu) { if (test.needsGpu && FLAGS_gpu) {
gSerialTests->push_back(test); gSerialTests->push_back(test);
} else if (!test.needsGpu && FLAGS_cpu) { } else if (test.fNeedsGraphite && FLAGS_graphite) {
gSerialTests->push_back(test);
} else if (!test.needsGpu && !test.fNeedsGraphite && FLAGS_cpu) {
gParallelTests->push_back(test); gParallelTests->push_back(test);
} }
} }

View File

@ -2117,8 +2117,6 @@ Result RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString*) co
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
GraphiteSink::GraphiteSink() {}
#ifdef SK_GRAPHITE_ENABLED #ifdef SK_GRAPHITE_ENABLED
namespace { namespace {
@ -2142,18 +2140,25 @@ void precompile(skgpu::Context* context) {
} // anonymous namespace } // anonymous namespace
GraphiteSink::GraphiteSink(const SkCommandLineConfigGraphite* config)
: fContextType(config->getContextType())
, fColorType(config->getColorType())
, fAlphaType(config->getAlphaType())
, fTestPrecompile(config->getTestPrecompile()) {
}
Result GraphiteSink::draw(const Src& src, Result GraphiteSink::draw(const Src& src,
SkBitmap* dst, SkBitmap* dst,
SkWStream* dstStream, SkWStream* dstStream,
SkString* log) const { SkString* log) const {
using ContextType = skiatest::graphite::ContextFactory::ContextType; SkImageInfo ii = SkImageInfo::Make(src.size(), fColorType, fAlphaType);
SkImageInfo ii = SkImageInfo::Make(src.size(), kRGBA_8888_SkColorType, kPremul_SkAlphaType);
skiatest::graphite::ContextFactory factory; skiatest::graphite::ContextFactory factory;
auto [_, context] = factory.getContextInfo(ContextType::kMetal); auto [_, context] = factory.getContextInfo(fContextType);
precompile(context.get()); if (fTestPrecompile) {
precompile(context.get());
}
sk_sp<SkSurface> surface = MakeGraphite(std::move(context), ii); sk_sp<SkSurface> surface = MakeGraphite(std::move(context), ii);
if (!surface) { if (!surface) {
@ -2172,10 +2177,6 @@ Result GraphiteSink::draw(const Src& src,
return Result::Ok(); return Result::Ok();
} }
#else
Result GraphiteSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const {
return Result::Fatal("Graphite not enabled.");
}
#endif #endif
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

View File

@ -579,15 +579,27 @@ private:
int fPageIndex; int fPageIndex;
}; };
#ifdef SK_GRAPHITE_ENABLED
class GraphiteSink : public Sink { class GraphiteSink : public Sink {
public: public:
GraphiteSink(); using ContextType = skiatest::graphite::ContextFactory::ContextType;
GraphiteSink(const SkCommandLineConfigGraphite*);
Result draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; Result draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
const char* fileExtension() const override { return "png"; } const char* fileExtension() const override { return "png"; }
SinkFlags flags() const override { return SinkFlags{ SinkFlags::kGPU, SinkFlags::kDirect }; } SinkFlags flags() const override { return SinkFlags{ SinkFlags::kGPU, SinkFlags::kDirect }; }
private:
ContextType fContextType;
SkColorType fColorType;
SkAlphaType fAlphaType;
bool fTestPrecompile;
}; };
#endif
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
class Via : public Sink { class Via : public Sink {

View File

@ -36,20 +36,9 @@ struct GrContextOptions;
#define TestCanvasWidth 1000 #define TestCanvasWidth 1000
#define TestCanvasHeight 600 #define TestCanvasHeight 600
#if !defined(SK_BUILD_FOR_UNIX)
#undef DEF_TEST
#define DEF_TEST(name, reporter) \
static void test_##name(skiatest::Reporter* reporter, const GrContextOptions&); \
skiatest::TestRegistry name##TestRegistry(skiatest::Test(#name, false, test_##name)); \
void test_##name(skiatest::Reporter* reporter, const GrContextOptions&) { \
/* SkDebugf("Disabled:"#name "\n"); */ \
} \
void disabled_##name(skiatest::Reporter* reporter, const GrContextOptions&)
#endif
using namespace skia::text; using namespace skia::text;
DEF_TEST(SkText_FontResolution1, reporter) { UNIX_ONLY_TEST(SkText_FontResolution1, reporter) {
TrivialFontChain* fontChain = new TrivialFontChain("Roboto", 40.0f, SkFontStyle::Normal()); TrivialFontChain* fontChain = new TrivialFontChain("Roboto", 40.0f, SkFontStyle::Normal());
if (fontChain->empty()) return; if (fontChain->empty()) return;
@ -69,7 +58,7 @@ DEF_TEST(SkText_FontResolution1, reporter) {
REPORTER_ASSERT(reporter, resolvedFonts.front().style == SkFontStyle::Normal()); REPORTER_ASSERT(reporter, resolvedFonts.front().style == SkFontStyle::Normal());
} }
DEF_TEST(SkText_FontResolution3, reporter) { UNIX_ONLY_TEST(SkText_FontResolution3, reporter) {
MultipleFontChain* fontChain = new MultipleFontChain({ "Roboto", "Noto Color Emoji", "Noto Serif CJK JP" }, 40.0f, SkFontStyle::Normal()); MultipleFontChain* fontChain = new MultipleFontChain({ "Roboto", "Noto Color Emoji", "Noto Serif CJK JP" }, 40.0f, SkFontStyle::Normal());
if (fontChain->count() < 3) return; if (fontChain->count() < 3) return;

View File

@ -36,17 +36,6 @@ struct GrContextOptions;
#define TestCanvasWidth 1000 #define TestCanvasWidth 1000
#define TestCanvasHeight 600 #define TestCanvasHeight 600
#if !defined(SK_BUILD_FOR_UNIX)
#undef DEF_TEST
#define DEF_TEST(name, reporter) \
static void test_##name(skiatest::Reporter* reporter, const GrContextOptions&); \
skiatest::TestRegistry name##TestRegistry(skiatest::Test(#name, false, test_##name)); \
void test_##name(skiatest::Reporter* reporter, const GrContextOptions&) { \
/* SkDebugf("Disabled:"#name "\n"); */ \
} \
void disabled_##name(skiatest::Reporter* reporter, const GrContextOptions&)
#endif
using namespace skia::text; using namespace skia::text;
struct TestLine { struct TestLine {
@ -102,7 +91,7 @@ public:
std::vector<TestRun> fTestRuns; std::vector<TestRun> fTestRuns;
}; };
DEF_TEST(SkText_SelectableText_Bounds, reporter) { UNIX_ONLY_TEST(SkText_SelectableText_Bounds, reporter) {
sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal()); sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal());
if (fontChain->empty()) return; if (fontChain->empty()) return;
@ -150,7 +139,7 @@ DEF_TEST(SkText_SelectableText_Bounds, reporter) {
} }
} }
DEF_TEST(SkText_SelectableText_Navigation_FirstLast, reporter) { UNIX_ONLY_TEST(SkText_SelectableText_Navigation_FirstLast, reporter) {
sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal()); sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal());
if (fontChain->empty()) return; if (fontChain->empty()) return;
@ -192,7 +181,7 @@ DEF_TEST(SkText_SelectableText_Navigation_FirstLast, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(lastPosition.fBoundaries.height(), lastLine.bounds.height())); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(lastPosition.fBoundaries.height(), lastLine.bounds.height()));
} }
DEF_TEST(SkText_SelectableText_ScanRightByGraphemeClusters, reporter) { UNIX_ONLY_TEST(SkText_SelectableText_ScanRightByGraphemeClusters, reporter) {
sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal()); sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal());
if (fontChain->empty()) return; if (fontChain->empty()) return;
@ -233,7 +222,7 @@ DEF_TEST(SkText_SelectableText_ScanRightByGraphemeClusters, reporter) {
} }
} }
DEF_TEST(SkText_SelectableText_ScanLeftByGraphemeClusters, reporter) { UNIX_ONLY_TEST(SkText_SelectableText_ScanLeftByGraphemeClusters, reporter) {
sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal()); sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal());
if (fontChain->empty()) return; if (fontChain->empty()) return;
@ -274,7 +263,7 @@ DEF_TEST(SkText_SelectableText_ScanLeftByGraphemeClusters, reporter) {
} }
} }
DEF_TEST(SkText_SelectableText_Navigation_UpDown, reporter) { UNIX_ONLY_TEST(SkText_SelectableText_Navigation_UpDown, reporter) {
sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal()); sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal());
if (fontChain->empty()) return; if (fontChain->empty()) return;
@ -309,4 +298,3 @@ DEF_TEST(SkText_SelectableText_Navigation_UpDown, reporter) {
position = down; position = down;
} }
} }

View File

@ -36,20 +36,9 @@ struct GrContextOptions;
#define TestCanvasWidth 1000 #define TestCanvasWidth 1000
#define TestCanvasHeight 600 #define TestCanvasHeight 600
#if !defined(SK_BUILD_FOR_UNIX)
#undef DEF_TEST
#define DEF_TEST(name, reporter) \
static void test_##name(skiatest::Reporter* reporter, const GrContextOptions&); \
skiatest::TestRegistry name##TestRegistry(skiatest::Test(#name, false, test_##name)); \
void test_##name(skiatest::Reporter* reporter, const GrContextOptions&) { \
/* SkDebugf("Disabled:"#name "\n"); */ \
} \
void disabled_##name(skiatest::Reporter* reporter, const GrContextOptions&)
#endif
using namespace skia::text; using namespace skia::text;
DEF_TEST(SkText_ShapedText_LTR, reporter) { UNIX_ONLY_TEST(SkText_ShapedText_LTR, reporter) {
TrivialFontChain* fontChain = new TrivialFontChain("Roboto", 40.0f, SkFontStyle::Normal()); TrivialFontChain* fontChain = new TrivialFontChain("Roboto", 40.0f, SkFontStyle::Normal());
if (fontChain->empty()) return; if (fontChain->empty()) return;
@ -68,7 +57,7 @@ DEF_TEST(SkText_ShapedText_LTR, reporter) {
REPORTER_ASSERT(reporter, logicalRuns[1].getTextRange() == TextRange(newLine, newLine + 1)); REPORTER_ASSERT(reporter, logicalRuns[1].getTextRange() == TextRange(newLine, newLine + 1));
} }
DEF_TEST(SkText_ShapedText_RTL, reporter) { UNIX_ONLY_TEST(SkText_ShapedText_RTL, reporter) {
sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal()); sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal());
if (fontChain->empty()) return; if (fontChain->empty()) return;

View File

@ -35,17 +35,6 @@ struct GrContextOptions;
#define TestCanvasWidth 1000 #define TestCanvasWidth 1000
#define TestCanvasHeight 600 #define TestCanvasHeight 600
#if !defined(SK_BUILD_FOR_UNIX)
#undef DEF_TEST
#define DEF_TEST(name, reporter) \
static void test_##name(skiatest::Reporter* reporter, const GrContextOptions&); \
skiatest::TestRegistry name##TestRegistry(skiatest::Test(#name, false, test_##name)); \
void test_##name(skiatest::Reporter* reporter, const GrContextOptions&) { \
/* SkDebugf("Disabled:"#name "\n"); */ \
} \
void disabled_##name(skiatest::Reporter* reporter, const GrContextOptions&)
#endif
using namespace skia::text; using namespace skia::text;
namespace { namespace {
@ -62,7 +51,7 @@ namespace {
} }
} }
DEF_TEST(SkText_UnicodeText_Flags, reporter) { UNIX_ONLY_TEST(SkText_UnicodeText_Flags, reporter) {
REPORTER_ASSERT(reporter, true); REPORTER_ASSERT(reporter, true);
// 01234567890 1234567890 // 01234567890 1234567890
std::u16string utf16(u"Hello word\nHello world"); std::u16string utf16(u"Hello word\nHello world");

View File

@ -36,16 +36,6 @@ struct GrContextOptions;
#define TestCanvasWidth 1000 #define TestCanvasWidth 1000
#define TestCanvasHeight 600 #define TestCanvasHeight 600
#if !defined(SK_BUILD_FOR_UNIX)
#undef DEF_TEST
#define DEF_TEST(name, reporter) \
static void test_##name(skiatest::Reporter* reporter, const GrContextOptions&); \
skiatest::TestRegistry name##TestRegistry(skiatest::Test(#name, false, test_##name)); \
void test_##name(skiatest::Reporter* reporter, const GrContextOptions&) { \
/* SkDebugf("Disabled:"#name "\n"); */ \
} \
void disabled_##name(skiatest::Reporter* reporter, const GrContextOptions&)
#endif
using namespace skia::text; using namespace skia::text;
struct TestLine { struct TestLine {
@ -100,7 +90,7 @@ public:
}; };
DEF_TEST(SkText_WrappedText_Spaces, reporter) { UNIX_ONLY_TEST(SkText_WrappedText_Spaces, reporter) {
sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal()); sk_sp<TrivialFontChain> fontChain = sk_make_sp<TrivialFontChain>("Roboto", 40.0f, SkFontStyle::Normal());
if (fontChain->empty()) return; if (fontChain->empty()) return;

View File

@ -327,6 +327,8 @@ metal_tests_sources = [
graphite_tests_sources = [ graphite_tests_sources = [
"$_tests/graphite/CapsTest.cpp", "$_tests/graphite/CapsTest.cpp",
"$_tests/graphite/MaskTest.cpp",
"$_tests/graphite/RectTest.cpp",
"$_tests/graphite/ShapeTest.cpp", "$_tests/graphite/ShapeTest.cpp",
] ]
@ -394,10 +396,6 @@ pathops_tests_sources = [
"$_tests/PathOpsTightBoundsTest.cpp", "$_tests/PathOpsTightBoundsTest.cpp",
"$_tests/PathOpsTypesTest.cpp", "$_tests/PathOpsTypesTest.cpp",
"$_tests/WangsFormulaTest.cpp", "$_tests/WangsFormulaTest.cpp",
# graphite
"$_tests/graphite/MaskTest.cpp",
"$_tests/graphite/RectTest.cpp",
] ]
skgpu_v1_tests_sources = [ skgpu_v1_tests_sources = [

View File

@ -49,12 +49,6 @@ struct GrContextOptions;
#define TestCanvasWidth 1000 #define TestCanvasWidth 1000
#define TestCanvasHeight 600 #define TestCanvasHeight 600
#define DEF_TEST_DISABLED(name, reporter) \
static void test_##name(skiatest::Reporter* reporter, const GrContextOptions&); \
skiatest::TestRegistry name##TestRegistry(skiatest::Test(#name, false, test_##name)); \
void test_##name(skiatest::Reporter* reporter, const GrContextOptions&) { /* SkDebugf("Disabled:"#name "\n"); */ } \
void disabled_##name(skiatest::Reporter* reporter, const GrContextOptions&)
using namespace skia::textlayout; using namespace skia::textlayout;
namespace { namespace {
@ -201,7 +195,7 @@ private:
} // namespace } // namespace
DEF_TEST(SkParagraph_SimpleParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_SimpleParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
const char* text = "Hello World Text Dialog"; const char* text = "Hello World Text Dialog";
@ -239,7 +233,7 @@ DEF_TEST(SkParagraph_SimpleParagraph, reporter) {
} }
} }
DEF_TEST(SkParagraph_InlinePlaceholderParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_InlinePlaceholderParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_InlinePlaceholderParagraph.png"); TestCanvas canvas("SkParagraph_InlinePlaceholderParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -338,7 +332,7 @@ DEF_TEST(SkParagraph_InlinePlaceholderParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[6].rect.bottom(), 50, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[6].rect.bottom(), 50, EPSILON100));
} }
DEF_TEST(SkParagraph_InlinePlaceholderBaselineParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_InlinePlaceholderBaselineParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_InlinePlaceholderBaselineParagraph.png"); TestCanvas canvas("SkParagraph_InlinePlaceholderBaselineParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -394,7 +388,7 @@ DEF_TEST(SkParagraph_InlinePlaceholderBaselineParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 44.694f, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 44.694f, EPSILON100));
} }
DEF_TEST(SkParagraph_InlinePlaceholderAboveBaselineParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_InlinePlaceholderAboveBaselineParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_InlinePlaceholderAboveBaselineParagraph.png"); TestCanvas canvas("SkParagraph_InlinePlaceholderAboveBaselineParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -450,7 +444,7 @@ DEF_TEST(SkParagraph_InlinePlaceholderAboveBaselineParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 56, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 56, EPSILON100));
} }
DEF_TEST(SkParagraph_InlinePlaceholderBelowBaselineParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_InlinePlaceholderBelowBaselineParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_InlinePlaceholderBelowBaselineParagraph.png"); TestCanvas canvas("SkParagraph_InlinePlaceholderBelowBaselineParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -506,7 +500,7 @@ DEF_TEST(SkParagraph_InlinePlaceholderBelowBaselineParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 30.347f, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 30.347f, EPSILON100));
} }
DEF_TEST(SkParagraph_InlinePlaceholderBottomParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_InlinePlaceholderBottomParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_InlinePlaceholderBottomParagraph.png"); TestCanvas canvas("SkParagraph_InlinePlaceholderBottomParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -560,7 +554,7 @@ DEF_TEST(SkParagraph_InlinePlaceholderBottomParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 50, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 50, EPSILON100));
} }
DEF_TEST(SkParagraph_InlinePlaceholderTopParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_InlinePlaceholderTopParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_InlinePlaceholderTopParagraph.png"); TestCanvas canvas("SkParagraph_InlinePlaceholderTopParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -614,7 +608,7 @@ DEF_TEST(SkParagraph_InlinePlaceholderTopParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 30.468f, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 30.468f, EPSILON100));
} }
DEF_TEST(SkParagraph_InlinePlaceholderMiddleParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_InlinePlaceholderMiddleParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_InlinePlaceholderMiddleParagraph.png"); TestCanvas canvas("SkParagraph_InlinePlaceholderMiddleParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -668,7 +662,7 @@ DEF_TEST(SkParagraph_InlinePlaceholderMiddleParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 40.234f, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 40.234f, EPSILON100));
} }
DEF_TEST(SkParagraph_InlinePlaceholderIdeographicBaselineParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_InlinePlaceholderIdeographicBaselineParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_InlinePlaceholderIdeographicBaselineParagraph.png"); TestCanvas canvas("SkParagraph_InlinePlaceholderIdeographicBaselineParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -721,7 +715,7 @@ DEF_TEST(SkParagraph_InlinePlaceholderIdeographicBaselineParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 42.065f, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 42.065f, EPSILON100));
} }
DEF_TEST(SkParagraph_InlinePlaceholderBreakParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_InlinePlaceholderBreakParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_InlinePlaceholderBreakParagraph.png"); TestCanvas canvas("SkParagraph_InlinePlaceholderBreakParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -856,7 +850,7 @@ DEF_TEST(SkParagraph_InlinePlaceholderBreakParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[17].rect.bottom(), 113.5f, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[17].rect.bottom(), 113.5f, EPSILON100));
} }
DEF_TEST(SkParagraph_InlinePlaceholderGetRectsParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_InlinePlaceholderGetRectsParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_InlinePlaceholderGetRectsParagraph.png"); TestCanvas canvas("SkParagraph_InlinePlaceholderGetRectsParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -984,7 +978,7 @@ DEF_TEST(SkParagraph_InlinePlaceholderGetRectsParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[2].rect.bottom(), 120, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[2].rect.bottom(), 120, EPSILON100));
} }
DEF_TEST(SkParagraph_SimpleRedParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_SimpleRedParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
const char* text = "I am RED"; const char* text = "I am RED";
@ -1023,7 +1017,7 @@ DEF_TEST(SkParagraph_SimpleRedParagraph, reporter) {
} }
// Checked: DIFF+ (Space between 1 & 2 style blocks) // Checked: DIFF+ (Space between 1 & 2 style blocks)
DEF_TEST(SkParagraph_RainbowParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_RainbowParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
TestCanvas canvas("SkParagraph_RainbowParagraph.png"); TestCanvas canvas("SkParagraph_RainbowParagraph.png");
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -1146,7 +1140,7 @@ DEF_TEST(SkParagraph_RainbowParagraph, reporter) {
REPORTER_ASSERT(reporter, index == 5); REPORTER_ASSERT(reporter, index == 5);
} }
DEF_TEST(SkParagraph_DefaultStyleParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_DefaultStyleParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_DefaultStyleParagraph.png"); TestCanvas canvas("SkParagraph_DefaultStyleParagraph.png");
@ -1185,7 +1179,7 @@ DEF_TEST(SkParagraph_DefaultStyleParagraph, reporter) {
REPORTER_ASSERT(reporter, index == 1); REPORTER_ASSERT(reporter, index == 1);
} }
DEF_TEST(SkParagraph_BoldParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_BoldParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_BoldParagraph.png"); TestCanvas canvas("SkParagraph_BoldParagraph.png");
@ -1231,7 +1225,7 @@ DEF_TEST(SkParagraph_BoldParagraph, reporter) {
REPORTER_ASSERT(reporter, index == 1); REPORTER_ASSERT(reporter, index == 1);
} }
DEF_TEST(SkParagraph_HeightOverrideParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_HeightOverrideParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_HeightOverrideParagraph.png"); TestCanvas canvas("SkParagraph_HeightOverrideParagraph.png");
@ -1286,7 +1280,7 @@ DEF_TEST(SkParagraph_HeightOverrideParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[1].rect.bottom(), 165.495f, EPSILON5)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[1].rect.bottom(), 165.495f, EPSILON5));
} }
DEF_TEST(SkParagraph_BasicHalfLeading, reporter) { UNIX_ONLY_TEST(SkParagraph_BasicHalfLeading, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) { if (!fontCollection->fontsFound()) {
@ -1347,7 +1341,7 @@ DEF_TEST(SkParagraph_BasicHalfLeading, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[1].rect.right(), 43.843f, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[1].rect.right(), 43.843f, EPSILON100));
} }
DEF_TEST(SkParagraph_NearZeroHeightMixedDistribution, reporter) { UNIX_ONLY_TEST(SkParagraph_NearZeroHeightMixedDistribution, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) { if (!fontCollection->fontsFound()) {
@ -1440,7 +1434,7 @@ DEF_TEST(SkParagraph_NearZeroHeightMixedDistribution, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.left(), 0, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.left(), 0, EPSILON100));
} }
DEF_TEST(SkParagraph_StrutHalfLeading, reporter) { UNIX_ONLY_TEST(SkParagraph_StrutHalfLeading, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) { if (!fontCollection->fontsFound()) {
@ -1507,7 +1501,7 @@ DEF_TEST(SkParagraph_StrutHalfLeading, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[1].rect.left(), 0, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[1].rect.left(), 0, EPSILON100));
} }
DEF_TEST(SkParagraph_TrimLeadingDistribution, reporter) { UNIX_ONLY_TEST(SkParagraph_TrimLeadingDistribution, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) { if (!fontCollection->fontsFound()) {
@ -1573,7 +1567,7 @@ DEF_TEST(SkParagraph_TrimLeadingDistribution, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[1].rect.right(), 43.843f, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[1].rect.right(), 43.843f, EPSILON100));
} }
DEF_TEST(SkParagraph_LeftAlignParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_LeftAlignParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_LeftAlignParagraph.png"); TestCanvas canvas("SkParagraph_LeftAlignParagraph.png");
@ -1657,7 +1651,7 @@ DEF_TEST(SkParagraph_LeftAlignParagraph, reporter) {
REPORTER_ASSERT(reporter, impl->getGlyphPositionAtCoordinate(2000, 35).position == 134); REPORTER_ASSERT(reporter, impl->getGlyphPositionAtCoordinate(2000, 35).position == 134);
} }
DEF_TEST(SkParagraph_RightAlignParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_RightAlignParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_RightAlignParagraph.png"); TestCanvas canvas("SkParagraph_RightAlignParagraph.png");
@ -1744,7 +1738,7 @@ DEF_TEST(SkParagraph_RightAlignParagraph, reporter) {
paragraph_style.getTextAlign() == impl->paragraphStyle().getTextAlign()); paragraph_style.getTextAlign() == impl->paragraphStyle().getTextAlign());
} }
DEF_TEST(SkParagraph_CenterAlignParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_CenterAlignParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_CenterAlignParagraph.png"); TestCanvas canvas("SkParagraph_CenterAlignParagraph.png");
@ -1831,7 +1825,7 @@ DEF_TEST(SkParagraph_CenterAlignParagraph, reporter) {
paragraph_style.getTextAlign() == impl->paragraphStyle().getTextAlign()); paragraph_style.getTextAlign() == impl->paragraphStyle().getTextAlign());
} }
DEF_TEST(SkParagraph_JustifyAlignParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_JustifyAlignParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_JustifyAlignParagraph.png"); TestCanvas canvas("SkParagraph_JustifyAlignParagraph.png");
@ -1919,7 +1913,7 @@ DEF_TEST(SkParagraph_JustifyAlignParagraph, reporter) {
} }
// Checked: DIFF (ghost spaces as a separate box in TxtLib) // Checked: DIFF (ghost spaces as a separate box in TxtLib)
DEF_TEST(SkParagraph_JustifyRTL, reporter) { UNIX_ONLY_TEST(SkParagraph_JustifyRTL, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(true); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(true);
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_JustifyRTL.png"); TestCanvas canvas("SkParagraph_JustifyRTL.png");
@ -1983,7 +1977,7 @@ DEF_TEST(SkParagraph_JustifyRTL, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 156, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 156, EPSILON100));
} }
DEF_TEST_DISABLED(SkParagraph_JustifyRTLNewLine, reporter) { UNIX_ONLY_TEST(SkParagraph_JustifyRTLNewLine, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(true); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(true);
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_JustifyRTLNewLine.png"); TestCanvas canvas("SkParagraph_JustifyRTLNewLine.png");
@ -2052,7 +2046,7 @@ DEF_TEST_DISABLED(SkParagraph_JustifyRTLNewLine, reporter) {
} }
} }
DEF_TEST_DISABLED(SkParagraph_LeadingSpaceRTL, reporter) { UNIX_ONLY_TEST(SkParagraph_LeadingSpaceRTL, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(true); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(true);
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_LeadingSpaceRTL.png"); TestCanvas canvas("SkParagraph_LeadingSpaceRTL.png");
@ -2095,7 +2089,7 @@ DEF_TEST_DISABLED(SkParagraph_LeadingSpaceRTL, reporter) {
REPORTER_ASSERT(reporter, boxes.size() == 2ull); REPORTER_ASSERT(reporter, boxes.size() == 2ull);
} }
DEF_TEST(SkParagraph_DecorationsParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_DecorationsParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_DecorationsParagraph.png"); TestCanvas canvas("SkParagraph_DecorationsParagraph.png");
@ -2216,7 +2210,7 @@ DEF_TEST(SkParagraph_DecorationsParagraph, reporter) {
// TODO: Add test for wavy decorations. // TODO: Add test for wavy decorations.
DEF_TEST(SkParagraph_ItalicsParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_ItalicsParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_ItalicsParagraph.png"); TestCanvas canvas("SkParagraph_ItalicsParagraph.png");
@ -2280,7 +2274,7 @@ DEF_TEST(SkParagraph_ItalicsParagraph, reporter) {
}); });
} }
DEF_TEST(SkParagraph_ChineseParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_ChineseParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_ChineseParagraph.png"); TestCanvas canvas("SkParagraph_ChineseParagraph.png");
@ -2329,7 +2323,7 @@ DEF_TEST(SkParagraph_ChineseParagraph, reporter) {
} }
// Checked: disabled for TxtLib // Checked: disabled for TxtLib
DEF_TEST(SkParagraph_ArabicParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_ArabicParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_ArabicParagraph.png"); TestCanvas canvas("SkParagraph_ArabicParagraph.png");
@ -2374,7 +2368,7 @@ DEF_TEST(SkParagraph_ArabicParagraph, reporter) {
} }
// Checked: DIFF (2 boxes and each space is a word) // Checked: DIFF (2 boxes and each space is a word)
DEF_TEST(SkParagraph_ArabicRectsParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_ArabicRectsParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -2425,7 +2419,7 @@ DEF_TEST(SkParagraph_ArabicRectsParagraph, reporter) {
// This test shows now 2 boxes for [36:40) range: // This test shows now 2 boxes for [36:40) range:
// [36:38) for arabic text and [38:39) for the last space // [36:38) for arabic text and [38:39) for the last space
// that has default paragraph direction (LTR) and is placed at the end of the paragraph // that has default paragraph direction (LTR) and is placed at the end of the paragraph
DEF_TEST(SkParagraph_ArabicRectsLTRLeftAlignParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_ArabicRectsLTRLeftAlignParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -2473,7 +2467,7 @@ DEF_TEST(SkParagraph_ArabicRectsLTRLeftAlignParagraph, reporter) {
} }
// Checked DIFF+ // Checked DIFF+
DEF_TEST(SkParagraph_ArabicRectsLTRRightAlignParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_ArabicRectsLTRRightAlignParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -2520,7 +2514,7 @@ DEF_TEST(SkParagraph_ArabicRectsLTRRightAlignParagraph, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 44, EPSILON100)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(boxes[0].rect.bottom(), 44, EPSILON100));
} }
DEF_TEST(SkParagraph_GetGlyphPositionAtCoordinateParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_GetGlyphPositionAtCoordinateParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetGlyphPositionAtCoordinateParagraph.png"); TestCanvas canvas("SkParagraph_GetGlyphPositionAtCoordinateParagraph.png");
@ -2584,7 +2578,7 @@ DEF_TEST(SkParagraph_GetGlyphPositionAtCoordinateParagraph, reporter) {
REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(85, 10000).position == 75); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(85, 10000).position == 75);
} }
DEF_TEST(SkParagraph_GetRectsForRangeParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeParagraph.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeParagraph.png");
@ -2680,7 +2674,7 @@ DEF_TEST(SkParagraph_GetRectsForRangeParagraph, reporter) {
} }
} }
DEF_TEST(SkParagraph_GetRectsForRangeTight, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeTight, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeTight.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeTight.png");
@ -2752,7 +2746,7 @@ DEF_TEST(SkParagraph_GetRectsForRangeTight, reporter) {
} }
// Checked: DIFF+ // Checked: DIFF+
DEF_TEST(SkParagraph_GetRectsForRangeIncludeLineSpacingMiddle, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeIncludeLineSpacingMiddle, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeIncludeLineSpacingMiddle.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeIncludeLineSpacingMiddle.png");
@ -2874,7 +2868,7 @@ DEF_TEST(SkParagraph_GetRectsForRangeIncludeLineSpacingMiddle, reporter) {
} }
// Checked: NO DIFF+ // Checked: NO DIFF+
DEF_TEST(SkParagraph_GetRectsForRangeIncludeLineSpacingTop, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeIncludeLineSpacingTop, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeIncludeLineSpacingTop.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeIncludeLineSpacingTop.png");
@ -2996,7 +2990,7 @@ DEF_TEST(SkParagraph_GetRectsForRangeIncludeLineSpacingTop, reporter) {
} }
// Checked: NO DIFF+ // Checked: NO DIFF+
DEF_TEST(SkParagraph_GetRectsForRangeIncludeLineSpacingBottom, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeIncludeLineSpacingBottom, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeIncludeLineSpacingBottom.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeIncludeLineSpacingBottom.png");
@ -3119,7 +3113,7 @@ DEF_TEST(SkParagraph_GetRectsForRangeIncludeLineSpacingBottom, reporter) {
// This is the test I cannot accommodate // This is the test I cannot accommodate
// Any text range gets a smallest glyph rectangle // Any text range gets a smallest glyph rectangle
DEF_TEST_DISABLED(SkParagraph_GetRectsForRangeIncludeCombiningCharacter, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeIncludeCombiningCharacter, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeIncludeCombiningCharacter.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeIncludeCombiningCharacter.png");
@ -3182,7 +3176,7 @@ DEF_TEST_DISABLED(SkParagraph_GetRectsForRangeIncludeCombiningCharacter, reporte
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_GetRectsForRangeCenterParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeCenterParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeCenterParagraph.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeCenterParagraph.png");
@ -3280,7 +3274,7 @@ DEF_TEST(SkParagraph_GetRectsForRangeCenterParagraph, reporter) {
} }
// Checked DIFF+ // Checked DIFF+
DEF_TEST(SkParagraph_GetRectsForRangeCenterParagraphNewlineCentered, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeCenterParagraphNewlineCentered, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeCenterParagraphNewlineCentered.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeCenterParagraphNewlineCentered.png");
@ -3342,7 +3336,7 @@ DEF_TEST(SkParagraph_GetRectsForRangeCenterParagraphNewlineCentered, reporter) {
} }
// Checked NO DIFF // Checked NO DIFF
DEF_TEST(SkParagraph_GetRectsForRangeCenterMultiLineParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeCenterMultiLineParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeCenterMultiLineParagraph.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeCenterMultiLineParagraph.png");
@ -3444,7 +3438,7 @@ DEF_TEST(SkParagraph_GetRectsForRangeCenterMultiLineParagraph, reporter) {
} }
// Checked: DIFF (line height rounding error) // Checked: DIFF (line height rounding error)
DEF_TEST(SkParagraph_GetRectsForRangeStrut, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeStrut, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeStrut.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeStrut.png");
@ -3491,7 +3485,7 @@ DEF_TEST(SkParagraph_GetRectsForRangeStrut, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_GetRectsForRangeStrutFallback, reporter) { UNIX_ONLY_TEST(SkParagraph_GetRectsForRangeStrutFallback, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeStrutFallback.png"); TestCanvas canvas("SkParagraph_GetRectsForRangeStrutFallback.png");
@ -3531,7 +3525,7 @@ DEF_TEST(SkParagraph_GetRectsForRangeStrutFallback, reporter) {
} }
// Checked: DIFF (small in numbers) // Checked: DIFF (small in numbers)
DEF_TEST(SkParagraph_GetWordBoundaryParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_GetWordBoundaryParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetWordBoundaryParagraph.png"); TestCanvas canvas("SkParagraph_GetWordBoundaryParagraph.png");
@ -3607,7 +3601,7 @@ DEF_TEST(SkParagraph_GetWordBoundaryParagraph, reporter) {
} }
// Checked: DIFF (unclear) // Checked: DIFF (unclear)
DEF_TEST(SkParagraph_SpacingParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_SpacingParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_SpacingParagraph.png"); TestCanvas canvas("SkParagraph_SpacingParagraph.png");
@ -3690,7 +3684,7 @@ DEF_TEST(SkParagraph_SpacingParagraph, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_LongWordParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_LongWordParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_LongWordParagraph.png"); TestCanvas canvas("SkParagraph_LongWordParagraph.png");
@ -3733,7 +3727,7 @@ DEF_TEST(SkParagraph_LongWordParagraph, reporter) {
} }
// Checked: DIFF? // Checked: DIFF?
DEF_TEST(SkParagraph_KernScaleParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_KernScaleParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_KernScaleParagraph.png"); TestCanvas canvas("SkParagraph_KernScaleParagraph.png");
@ -3779,7 +3773,7 @@ DEF_TEST(SkParagraph_KernScaleParagraph, reporter) {
} }
// Checked: DIFF+ // Checked: DIFF+
DEF_TEST(SkParagraph_NewlineParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_NewlineParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_NewlineParagraph.png"); TestCanvas canvas("SkParagraph_NewlineParagraph.png");
@ -3820,7 +3814,7 @@ DEF_TEST(SkParagraph_NewlineParagraph, reporter) {
} }
// TODO: Fix underline // TODO: Fix underline
DEF_TEST(SkParagraph_EmojiParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_EmojiParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_EmojiParagraph.png"); TestCanvas canvas("SkParagraph_EmojiParagraph.png");
@ -3864,7 +3858,7 @@ DEF_TEST(SkParagraph_EmojiParagraph, reporter) {
} }
// Checked: DIFF+ // Checked: DIFF+
DEF_TEST(SkParagraph_EmojiMultiLineRectsParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_EmojiMultiLineRectsParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_EmojiMultiLineRectsParagraph.png"); TestCanvas canvas("SkParagraph_EmojiMultiLineRectsParagraph.png");
@ -3925,7 +3919,7 @@ DEF_TEST(SkParagraph_EmojiMultiLineRectsParagraph, reporter) {
} }
// Checked: DIFF (line breaking) // Checked: DIFF (line breaking)
DEF_TEST(SkParagraph_RepeatLayoutParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_RepeatLayoutParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_RepeatLayoutParagraph.png"); TestCanvas canvas("SkParagraph_RepeatLayoutParagraph.png");
@ -3965,7 +3959,7 @@ DEF_TEST(SkParagraph_RepeatLayoutParagraph, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_Ellipsize, reporter) { UNIX_ONLY_TEST(SkParagraph_Ellipsize, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_Ellipsize.png"); TestCanvas canvas("SkParagraph_Ellipsize.png");
@ -4005,7 +3999,7 @@ DEF_TEST(SkParagraph_Ellipsize, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_UnderlineShiftParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_UnderlineShiftParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_UnderlineShiftParagraph.png"); TestCanvas canvas("SkParagraph_UnderlineShiftParagraph.png");
@ -4074,7 +4068,7 @@ DEF_TEST(SkParagraph_UnderlineShiftParagraph, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_SimpleShadow, reporter) { UNIX_ONLY_TEST(SkParagraph_SimpleShadow, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_SimpleShadow.png"); TestCanvas canvas("SkParagraph_SimpleShadow.png");
@ -4112,7 +4106,7 @@ DEF_TEST(SkParagraph_SimpleShadow, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_ComplexShadow, reporter) { UNIX_ONLY_TEST(SkParagraph_ComplexShadow, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_ComplexShadow.png"); TestCanvas canvas("SkParagraph_ComplexShadow.png");
@ -4182,7 +4176,7 @@ DEF_TEST(SkParagraph_ComplexShadow, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_BaselineParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_BaselineParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_BaselineParagraph.png"); TestCanvas canvas("SkParagraph_BaselineParagraph.png");
@ -4229,7 +4223,7 @@ DEF_TEST(SkParagraph_BaselineParagraph, reporter) {
} }
// Checked: NO DIFF (number of runs only) // Checked: NO DIFF (number of runs only)
DEF_TEST(SkParagraph_FontFallbackParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_FontFallbackParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_FontFallbackParagraph.png"); TestCanvas canvas("SkParagraph_FontFallbackParagraph.png");
@ -4319,7 +4313,7 @@ DEF_TEST(SkParagraph_FontFallbackParagraph, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_StrutParagraph1, reporter) { UNIX_ONLY_TEST(SkParagraph_StrutParagraph1, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_StrutParagraph1.png"); TestCanvas canvas("SkParagraph_StrutParagraph1.png");
@ -4424,7 +4418,7 @@ DEF_TEST(SkParagraph_StrutParagraph1, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_StrutParagraph2, reporter) { UNIX_ONLY_TEST(SkParagraph_StrutParagraph2, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_StrutParagraph2.png"); TestCanvas canvas("SkParagraph_StrutParagraph2.png");
@ -4531,7 +4525,7 @@ DEF_TEST(SkParagraph_StrutParagraph2, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_StrutParagraph3, reporter) { UNIX_ONLY_TEST(SkParagraph_StrutParagraph3, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_StrutParagraph3.png"); TestCanvas canvas("SkParagraph_StrutParagraph3.png");
@ -4639,7 +4633,7 @@ DEF_TEST(SkParagraph_StrutParagraph3, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_StrutForceParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_StrutForceParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_StrutForceParagraph.png"); TestCanvas canvas("SkParagraph_StrutForceParagraph.png");
@ -4738,7 +4732,7 @@ DEF_TEST(SkParagraph_StrutForceParagraph, reporter) {
} }
// Checked: NO DIFF // Checked: NO DIFF
DEF_TEST(SkParagraph_StrutDefaultParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_StrutDefaultParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_StrutDefaultParagraph.png"); TestCanvas canvas("SkParagraph_StrutDefaultParagraph.png");
@ -4801,7 +4795,7 @@ DEF_TEST(SkParagraph_StrutDefaultParagraph, reporter) {
} }
} }
DEF_TEST(SkParagraph_FontFeaturesParagraph, reporter) { UNIX_ONLY_TEST(SkParagraph_FontFeaturesParagraph, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_FontFeaturesParagraph.png"); TestCanvas canvas("SkParagraph_FontFeaturesParagraph.png");
@ -4852,7 +4846,7 @@ DEF_TEST(SkParagraph_FontFeaturesParagraph, reporter) {
} }
// Not in Minikin // Not in Minikin
DEF_TEST(SkParagraph_WhitespacesInMultipleFonts, reporter) { UNIX_ONLY_TEST(SkParagraph_WhitespacesInMultipleFonts, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
const char* text = "English English 字典 字典 😀😃😄 😀😃😄"; const char* text = "English English 字典 字典 😀😃😄 😀😃😄";
@ -4884,7 +4878,7 @@ DEF_TEST(SkParagraph_WhitespacesInMultipleFonts, reporter) {
} }
// Disable until I sort out fonts // Disable until I sort out fonts
DEF_TEST_DISABLED(SkParagraph_JSON1, reporter) { UNIX_ONLY_TEST(SkParagraph_JSON1, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
const char* text = "👨‍👩‍👧‍👦"; const char* text = "👨‍👩‍👧‍👦";
@ -4923,7 +4917,7 @@ DEF_TEST_DISABLED(SkParagraph_JSON1, reporter) {
} }
// Disable until I sort out fonts // Disable until I sort out fonts
DEF_TEST_DISABLED(SkParagraph_JSON2, reporter) { UNIX_ONLY_TEST(SkParagraph_JSON2, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
const char* text = "p〠q"; const char* text = "p〠q";
@ -4966,7 +4960,7 @@ DEF_TEST_DISABLED(SkParagraph_JSON2, reporter) {
REPORTER_ASSERT(reporter, cluster <= 2); REPORTER_ASSERT(reporter, cluster <= 2);
} }
DEF_TEST(SkParagraph_CacheText, reporter) { UNIX_ONLY_TEST(SkParagraph_CacheText, reporter) {
ParagraphCache cache; ParagraphCache cache;
cache.turnOn(true); cache.turnOn(true);
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
@ -5001,7 +4995,7 @@ DEF_TEST(SkParagraph_CacheText, reporter) {
test("text3", 2, false); test("text3", 2, false);
} }
DEF_TEST(SkParagraph_CacheFonts, reporter) { UNIX_ONLY_TEST(SkParagraph_CacheFonts, reporter) {
ParagraphCache cache; ParagraphCache cache;
cache.turnOn(true); cache.turnOn(true);
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
@ -5041,7 +5035,7 @@ DEF_TEST(SkParagraph_CacheFonts, reporter) {
test(2, false); test(2, false);
} }
DEF_TEST(SkParagraph_CacheFontRanges, reporter) { UNIX_ONLY_TEST(SkParagraph_CacheFontRanges, reporter) {
ParagraphCache cache; ParagraphCache cache;
cache.turnOn(true); cache.turnOn(true);
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
@ -5086,7 +5080,7 @@ DEF_TEST(SkParagraph_CacheFontRanges, reporter) {
test("text", "", "Roboto", "Homemade Apple", 4, true); test("text", "", "Roboto", "Homemade Apple", 4, true);
} }
DEF_TEST(SkParagraph_CacheStyles, reporter) { UNIX_ONLY_TEST(SkParagraph_CacheStyles, reporter) {
ParagraphCache cache; ParagraphCache cache;
cache.turnOn(true); cache.turnOn(true);
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
@ -5126,7 +5120,7 @@ DEF_TEST(SkParagraph_CacheStyles, reporter) {
test(2, false); test(2, false);
} }
DEF_TEST(SkParagraph_EmptyParagraphWithLineBreak, reporter) { UNIX_ONLY_TEST(SkParagraph_EmptyParagraphWithLineBreak, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); fontCollection->setDefaultFontManager(SkFontMgr::RefDefault());
@ -5152,7 +5146,7 @@ DEF_TEST(SkParagraph_EmptyParagraphWithLineBreak, reporter) {
REPORTER_ASSERT(reporter, rect.size() == 1 && rect[0].rect.width() == 0); REPORTER_ASSERT(reporter, rect.size() == 1 && rect[0].rect.width() == 0);
} }
DEF_TEST(SkParagraph_NullInMiddleOfText, reporter) { UNIX_ONLY_TEST(SkParagraph_NullInMiddleOfText, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); fontCollection->setDefaultFontManager(SkFontMgr::RefDefault());
@ -5172,7 +5166,7 @@ DEF_TEST(SkParagraph_NullInMiddleOfText, reporter) {
paragraph->paint(canvas.get(), 0, 0); paragraph->paint(canvas.get(), 0, 0);
} }
DEF_TEST(SkParagraph_PlaceholderOnly, reporter) { UNIX_ONLY_TEST(SkParagraph_PlaceholderOnly, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_PlaceholderOnly.png"); TestCanvas canvas("SkParagraph_PlaceholderOnly.png");
@ -5189,7 +5183,7 @@ DEF_TEST(SkParagraph_PlaceholderOnly, reporter) {
paragraph->paint(canvas.get(), 0, 0); paragraph->paint(canvas.get(), 0, 0);
} }
DEF_TEST(SkParagraph_Fallbacks, reporter) { UNIX_ONLY_TEST(SkParagraph_Fallbacks, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
fontCollection->setDefaultFontManager(SkFontMgr::RefDefault(), "Arial"); fontCollection->setDefaultFontManager(SkFontMgr::RefDefault(), "Arial");
@ -5232,7 +5226,7 @@ DEF_TEST(SkParagraph_Fallbacks, reporter) {
} }
} }
DEF_TEST(SkParagraph_Bidi1, reporter) { UNIX_ONLY_TEST(SkParagraph_Bidi1, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); fontCollection->setDefaultFontManager(SkFontMgr::RefDefault());
@ -5284,7 +5278,7 @@ DEF_TEST(SkParagraph_Bidi1, reporter) {
paragraph->paint(canvas.get(), 0, 0); paragraph->paint(canvas.get(), 0, 0);
} }
DEF_TEST(SkParagraph_Bidi2, reporter) { UNIX_ONLY_TEST(SkParagraph_Bidi2, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); fontCollection->setDefaultFontManager(SkFontMgr::RefDefault());
@ -5325,7 +5319,7 @@ DEF_TEST(SkParagraph_Bidi2, reporter) {
} }
} }
DEF_TEST(SkParagraph_NewlineOnly, reporter) { UNIX_ONLY_TEST(SkParagraph_NewlineOnly, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); fontCollection->setDefaultFontManager(SkFontMgr::RefDefault());
@ -5346,7 +5340,7 @@ DEF_TEST(SkParagraph_NewlineOnly, reporter) {
REPORTER_ASSERT(reporter, paragraph->getHeight() == 28); REPORTER_ASSERT(reporter, paragraph->getHeight() == 28);
} }
DEF_TEST_DISABLED(SkParagraph_FontResolutions, reporter) { UNIX_ONLY_TEST(SkParagraph_FontResolutions, reporter) {
TestCanvas canvas("SkParagraph_FontResolutions.png"); TestCanvas canvas("SkParagraph_FontResolutions.png");
sk_sp<TestFontCollection> fontCollection = sk_sp<TestFontCollection> fontCollection =
@ -5403,7 +5397,7 @@ DEF_TEST_DISABLED(SkParagraph_FontResolutions, reporter) {
paragraph->paint(canvas.get(), 100, 100); paragraph->paint(canvas.get(), 100, 100);
} }
DEF_TEST_DISABLED(SkParagraph_FontStyle, reporter) { UNIX_ONLY_TEST(SkParagraph_FontStyle, reporter) {
TestCanvas canvas("SkParagraph_FontStyle.png"); TestCanvas canvas("SkParagraph_FontStyle.png");
sk_sp<TestFontCollection> fontCollection = sk_make_sp<TestFontCollection>(GetResourcePath("fonts").c_str(), false, true); sk_sp<TestFontCollection> fontCollection = sk_make_sp<TestFontCollection>(GetResourcePath("fonts").c_str(), false, true);
@ -5441,7 +5435,7 @@ DEF_TEST_DISABLED(SkParagraph_FontStyle, reporter) {
paragraph->paint(canvas.get(), 0, 0); paragraph->paint(canvas.get(), 0, 0);
} }
DEF_TEST_DISABLED(SkParagraph_Shaping, reporter) { UNIX_ONLY_TEST(SkParagraph_Shaping, reporter) {
TestCanvas canvas("SkParagraph_Shaping.png"); TestCanvas canvas("SkParagraph_Shaping.png");
auto dir = "/usr/local/google/home/jlavrova/Sources/flutter/engine/src/out/host_debug_unopt_x86/gen/flutter/third_party/txt/assets"; auto dir = "/usr/local/google/home/jlavrova/Sources/flutter/engine/src/out/host_debug_unopt_x86/gen/flutter/third_party/txt/assets";
@ -5469,7 +5463,7 @@ DEF_TEST_DISABLED(SkParagraph_Shaping, reporter) {
paragraph->paint(canvas.get(), 0, 0); paragraph->paint(canvas.get(), 0, 0);
} }
DEF_TEST(SkParagraph_Ellipsis, reporter) { UNIX_ONLY_TEST(SkParagraph_Ellipsis, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); fontCollection->setDefaultFontManager(SkFontMgr::RefDefault());
@ -5530,7 +5524,7 @@ DEF_TEST(SkParagraph_Ellipsis, reporter) {
relayout(std::numeric_limits<size_t>::max(), false, 50, 200, 90, 950, SK_ColorGREEN); relayout(std::numeric_limits<size_t>::max(), false, 50, 200, 90, 950, SK_ColorGREEN);
} }
DEF_TEST(SkParagraph_MemoryLeak, reporter) { UNIX_ONLY_TEST(SkParagraph_MemoryLeak, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); fontCollection->setDefaultFontManager(SkFontMgr::RefDefault());
@ -5561,7 +5555,7 @@ DEF_TEST(SkParagraph_MemoryLeak, reporter) {
} }
}; };
DEF_TEST(SkParagraph_FormattingInfinity, reporter) { UNIX_ONLY_TEST(SkParagraph_FormattingInfinity, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); fontCollection->setDefaultFontManager(SkFontMgr::RefDefault());
@ -5595,7 +5589,7 @@ DEF_TEST(SkParagraph_FormattingInfinity, reporter) {
draw("justify", TextAlign::kJustify); draw("justify", TextAlign::kJustify);
}; };
DEF_TEST(SkParagraph_Infinity, reporter) { UNIX_ONLY_TEST(SkParagraph_Infinity, reporter) {
SkASSERT(nearlyEqual(1, SK_ScalarInfinity) == false); SkASSERT(nearlyEqual(1, SK_ScalarInfinity) == false);
SkASSERT(nearlyEqual(1, SK_ScalarNegativeInfinity) == false); SkASSERT(nearlyEqual(1, SK_ScalarNegativeInfinity) == false);
SkASSERT(nearlyEqual(1, SK_ScalarNaN) == false); SkASSERT(nearlyEqual(1, SK_ScalarNaN) == false);
@ -5613,7 +5607,7 @@ DEF_TEST(SkParagraph_Infinity, reporter) {
SkASSERT(nearlyEqual(SK_ScalarNaN, SK_ScalarNaN) == false); SkASSERT(nearlyEqual(SK_ScalarNaN, SK_ScalarNaN) == false);
}; };
DEF_TEST(SkParagraph_LineMetrics, reporter) { UNIX_ONLY_TEST(SkParagraph_LineMetrics, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -5693,7 +5687,7 @@ DEF_TEST(SkParagraph_LineMetrics, reporter) {
} }
}; };
DEF_TEST(SkParagraph_PlaceholderHeightInf, reporter) { UNIX_ONLY_TEST(SkParagraph_PlaceholderHeightInf, reporter) {
TestCanvas canvas("SkParagraph_PlaceholderHeightInf.png"); TestCanvas canvas("SkParagraph_PlaceholderHeightInf.png");
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
@ -5726,7 +5720,7 @@ DEF_TEST(SkParagraph_PlaceholderHeightInf, reporter) {
REPORTER_ASSERT(reporter, SkScalarIsFinite(impl->getPicture()->cullRect().width())); REPORTER_ASSERT(reporter, SkScalarIsFinite(impl->getPicture()->cullRect().width()));
} }
DEF_TEST(SkParagraph_LineMetricsTextAlign, reporter) { UNIX_ONLY_TEST(SkParagraph_LineMetricsTextAlign, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -5770,7 +5764,7 @@ DEF_TEST(SkParagraph_LineMetricsTextAlign, reporter) {
REPORTER_ASSERT(reporter, width[3] > width[0]); // delta == 0 REPORTER_ASSERT(reporter, width[3] > width[0]); // delta == 0
} }
DEF_TEST(SkParagraph_FontResolutionInRTL, reporter) { UNIX_ONLY_TEST(SkParagraph_FontResolutionInRTL, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(true); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(true);
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_FontResolutionInRTL.png"); TestCanvas canvas("SkParagraph_FontResolutionInRTL.png");
@ -5800,7 +5794,7 @@ DEF_TEST(SkParagraph_FontResolutionInRTL, reporter) {
REPORTER_ASSERT(reporter, impl->runs().size() == (10 + 11)); REPORTER_ASSERT(reporter, impl->runs().size() == (10 + 11));
} }
DEF_TEST(SkParagraph_FontResolutionInLTR, reporter) { UNIX_ONLY_TEST(SkParagraph_FontResolutionInLTR, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(true); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(true);
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_FontResolutionInLTR.png"); TestCanvas canvas("SkParagraph_FontResolutionInLTR.png");
@ -5832,7 +5826,7 @@ DEF_TEST(SkParagraph_FontResolutionInLTR, reporter) {
REPORTER_ASSERT(reporter, impl->runs()[4].textRange().width() == 4); // " def" REPORTER_ASSERT(reporter, impl->runs()[4].textRange().width() == 4); // " def"
} }
DEF_TEST(SkParagraph_Intrinsic, reporter) { UNIX_ONLY_TEST(SkParagraph_Intrinsic, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
SkString text(std::string(3000, 'a')); SkString text(std::string(3000, 'a'));
@ -5853,7 +5847,7 @@ DEF_TEST(SkParagraph_Intrinsic, reporter) {
REPORTER_ASSERT(reporter, paragraph->getMinIntrinsicWidth() <= paragraph->getMaxIntrinsicWidth()); REPORTER_ASSERT(reporter, paragraph->getMinIntrinsicWidth() <= paragraph->getMaxIntrinsicWidth());
} }
DEF_TEST(SkParagraph_NoCache1, reporter) { UNIX_ONLY_TEST(SkParagraph_NoCache1, reporter) {
ParagraphCache cache; ParagraphCache cache;
cache.turnOn(true); cache.turnOn(true);
@ -5919,7 +5913,7 @@ DEF_TEST(SkParagraph_NoCache1, reporter) {
test("different strings", "0123456789 0123456789 0123456789 0123456789 0123456789", false); test("different strings", "0123456789 0123456789 0123456789 0123456789 0123456789", false);
} }
DEF_TEST(SkParagraph_HeightCalculations, reporter) { UNIX_ONLY_TEST(SkParagraph_HeightCalculations, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -5951,7 +5945,7 @@ DEF_TEST(SkParagraph_HeightCalculations, reporter) {
draw(TextHeightBehavior::kDisableFirstAscent, "Hello", 28); draw(TextHeightBehavior::kDisableFirstAscent, "Hello", 28);
} }
DEF_TEST(SkParagraph_RTL_With_Styles, reporter) { UNIX_ONLY_TEST(SkParagraph_RTL_With_Styles, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -5991,7 +5985,7 @@ DEF_TEST(SkParagraph_RTL_With_Styles, reporter) {
paragraph->paint(canvas.get(), 0, 0); paragraph->paint(canvas.get(), 0, 0);
} }
DEF_TEST(SkParagraph_PositionInsideEmoji, reporter) { UNIX_ONLY_TEST(SkParagraph_PositionInsideEmoji, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6046,7 +6040,7 @@ DEF_TEST(SkParagraph_PositionInsideEmoji, reporter) {
} }
} }
DEF_TEST(SkParagraph_SingleLineHeight1, reporter) { UNIX_ONLY_TEST(SkParagraph_SingleLineHeight1, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6075,7 +6069,7 @@ DEF_TEST(SkParagraph_SingleLineHeight1, reporter) {
paint(""); paint("");
} }
DEF_TEST(SkParagraph_SingleLineHeight2, reporter) { UNIX_ONLY_TEST(SkParagraph_SingleLineHeight2, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6103,7 +6097,7 @@ DEF_TEST(SkParagraph_SingleLineHeight2, reporter) {
paint(""); paint("");
} }
DEF_TEST(SkParagraph_PlaceholderWidth, reporter) { UNIX_ONLY_TEST(SkParagraph_PlaceholderWidth, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6147,7 +6141,7 @@ DEF_TEST(SkParagraph_PlaceholderWidth, reporter) {
REPORTER_ASSERT(reporter, SkScalarNearlyEqual(len2, 250.0f)); REPORTER_ASSERT(reporter, SkScalarNearlyEqual(len2, 250.0f));
} }
DEF_TEST(SkParagraph_GlyphPositionsInEmptyLines, reporter) { UNIX_ONLY_TEST(SkParagraph_GlyphPositionsInEmptyLines, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6179,7 +6173,7 @@ DEF_TEST(SkParagraph_GlyphPositionsInEmptyLines, reporter) {
REPORTER_ASSERT(reporter, res3.position == 3 && res3.affinity == Affinity::kDownstream); REPORTER_ASSERT(reporter, res3.position == 3 && res3.affinity == Affinity::kDownstream);
} }
DEF_TEST(SkParagraph_RTLGlyphPositions, reporter) { UNIX_ONLY_TEST(SkParagraph_RTLGlyphPositions, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6222,7 +6216,7 @@ DEF_TEST(SkParagraph_RTLGlyphPositions, reporter) {
// 500.0f, res2.position, res2.affinity == Affinity::kUpstream ? "U" : "D"); // 500.0f, res2.position, res2.affinity == Affinity::kUpstream ? "U" : "D");
} }
DEF_TEST(SkParagraph_RTLGlyphPositionsInEmptyLines, reporter) { UNIX_ONLY_TEST(SkParagraph_RTLGlyphPositionsInEmptyLines, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6253,7 +6247,7 @@ DEF_TEST(SkParagraph_RTLGlyphPositionsInEmptyLines, reporter) {
REPORTER_ASSERT(reporter, res3.position == 10 && res3.affinity == Affinity::kUpstream); REPORTER_ASSERT(reporter, res3.position == 10 && res3.affinity == Affinity::kUpstream);
} }
DEF_TEST(SkParagraph_LTRGlyphPositionsForTrailingSpaces, reporter) { UNIX_ONLY_TEST(SkParagraph_LTRGlyphPositionsForTrailingSpaces, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6294,7 +6288,7 @@ DEF_TEST(SkParagraph_LTRGlyphPositionsForTrailingSpaces, reporter) {
test("hello "); test("hello ");
} }
DEF_TEST(SkParagraph_RTLGlyphPositionsForTrailingSpaces, reporter) { UNIX_ONLY_TEST(SkParagraph_RTLGlyphPositionsForTrailingSpaces, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6351,7 +6345,7 @@ DEF_TEST(SkParagraph_RTLGlyphPositionsForTrailingSpaces, reporter) {
test(" hello", -10); test(" hello", -10);
} }
DEF_TEST(SkParagraph_LTRLineMetricsDoesNotIncludeNewLine, reporter) { UNIX_ONLY_TEST(SkParagraph_LTRLineMetricsDoesNotIncludeNewLine, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6393,7 +6387,7 @@ DEF_TEST(SkParagraph_LTRLineMetricsDoesNotIncludeNewLine, reporter) {
} }
} }
DEF_TEST(SkParagraph_RTLLineMetricsDoesNotIncludeNewLine, reporter) { UNIX_ONLY_TEST(SkParagraph_RTLLineMetricsDoesNotIncludeNewLine, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6468,7 +6462,7 @@ DEF_TEST(SkParagraph_RTLLineMetricsDoesNotIncludeNewLine, reporter) {
} }
} }
DEF_TEST(SkParagraph_PlaceholderPosition, reporter) { UNIX_ONLY_TEST(SkParagraph_PlaceholderPosition, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6500,7 +6494,7 @@ DEF_TEST(SkParagraph_PlaceholderPosition, reporter) {
REPORTER_ASSERT(reporter, result.position == 4 && result.affinity == Affinity::kDownstream); REPORTER_ASSERT(reporter, result.position == 4 && result.affinity == Affinity::kDownstream);
} }
DEF_TEST(SkParagraph_LineEnd, reporter) { UNIX_ONLY_TEST(SkParagraph_LineEnd, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;
@ -6538,7 +6532,7 @@ DEF_TEST(SkParagraph_LineEnd, reporter) {
REPORTER_ASSERT(reporter, lm[3].fEndExcludingWhitespaces == 25 && lm[3].fEndIndex == 28 && lm[3].fEndIncludingNewline == 29); REPORTER_ASSERT(reporter, lm[3].fEndExcludingWhitespaces == 25 && lm[3].fEndIndex == 28 && lm[3].fEndIncludingNewline == 29);
} }
DEF_TEST(SkParagraph_Utf16Indexes, reporter) { UNIX_ONLY_TEST(SkParagraph_Utf16Indexes, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>(); sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return; if (!fontCollection->fontsFound()) return;

View File

@ -71,10 +71,19 @@ typedef void (*TestProc)(skiatest::Reporter*, const GrContextOptions&);
typedef void (*ContextOptionsProc)(GrContextOptions*); typedef void (*ContextOptionsProc)(GrContextOptions*);
struct Test { struct Test {
Test(const char* n, bool g, TestProc p, ContextOptionsProc optionsProc = nullptr) Test(const char* n,
: name(n), needsGpu(g), proc(p), fContextOptionsProc(optionsProc) {} bool gpu,
bool needsGraphite,
TestProc p,
ContextOptionsProc optionsProc = nullptr)
: name(n)
, needsGpu(gpu)
, fNeedsGraphite(needsGraphite)
, proc(p)
, fContextOptionsProc(optionsProc) {}
const char* name; const char* name;
bool needsGpu; bool needsGpu;
bool fNeedsGraphite;
TestProc proc; TestProc proc;
ContextOptionsProc fContextOptionsProc; ContextOptionsProc fContextOptionsProc;
@ -183,34 +192,52 @@ static inline SkString reporter_string(const char* fmt, Args... args) {
} \ } \
} while (0) } while (0)
#define DEF_TEST(name, reporter) \ #define DEF_TEST(name, reporter) \
static void test_##name(skiatest::Reporter*, const GrContextOptions&); \ static void test_##name(skiatest::Reporter*, const GrContextOptions&); \
skiatest::TestRegistry name##TestRegistry(skiatest::Test(#name, false, test_##name)); \ skiatest::TestRegistry name##TestRegistry( \
skiatest::Test(#name, /*gpu*/ false, /*graphite*/ false, test_##name)); \
void test_##name(skiatest::Reporter* reporter, const GrContextOptions&) void test_##name(skiatest::Reporter* reporter, const GrContextOptions&)
#define DEF_GRAPHITE_TEST(name, reporter) \ #define DEF_TEST_DISABLED(name, reporter) \
static void test_##name(skiatest::Reporter*); \ static void test_##name(skiatest::Reporter*, const GrContextOptions&); \
static void test_graphite_##name(skiatest::Reporter* reporter, \ skiatest::TestRegistry name##TestRegistry( \
const GrContextOptions& /*unused*/) { \ skiatest::Test(#name, /*gpu*/ false, /*graphite*/ false, test_##name)); \
test_##name(reporter); \ void test_##name(skiatest::Reporter* reporter, const GrContextOptions&) { \
} \ /* SkDebugf("Disabled:"#name "\n"); */ \
skiatest::TestRegistry name##TestRegistry( \ } \
skiatest::Test(#name, true, test_graphite_##name)); \ void disabled_##name(skiatest::Reporter* reporter, const GrContextOptions&)
#ifdef SK_BUILD_FOR_UNIX
#define UNIX_ONLY_TEST DEF_TEST
#else
#define UNIX_ONLY_TEST DEF_TEST_DISABLED
#endif
#define DEF_GRAPHITE_TEST(name, reporter) \
static void test_##name(skiatest::Reporter*); \
static void test_graphite_##name(skiatest::Reporter* reporter, \
const GrContextOptions& /*unused*/) { \
test_##name(reporter); \
} \
skiatest::TestRegistry name##TestRegistry( \
skiatest::Test(#name, /*gpu*/ false, /*graphite*/ true, test_graphite_##name)); \
void test_##name(skiatest::Reporter* reporter) void test_##name(skiatest::Reporter* reporter)
#define DEF_GRAPHITE_TEST_FOR_CONTEXTS(name, reporter, graphite_context) \ #define DEF_GRAPHITE_TEST_FOR_CONTEXTS(name, reporter, graphite_context) \
static void test_##name(skiatest::Reporter*, skgpu::Context*); \ static void test_##name(skiatest::Reporter*, skgpu::Context*); \
static void test_graphite_contexts_##name(skiatest::Reporter* _reporter, \ static void test_graphite_contexts_##name(skiatest::Reporter* _reporter, \
const GrContextOptions& /*unused*/) { \ const GrContextOptions& /*unused*/) { \
skiatest::graphite::RunWithGraphiteTestContexts(test_##name, _reporter); \ skiatest::graphite::RunWithGraphiteTestContexts(test_##name, _reporter); \
} \ } \
skiatest::TestRegistry name##TestRegistry( \ skiatest::TestRegistry name##TestRegistry( \
skiatest::Test(#name, true, test_graphite_contexts_##name)); \ skiatest::Test(#name, /*gpu*/ false, /*graphite*/ true, \
test_graphite_contexts_##name)); \
void test_##name(skiatest::Reporter* reporter, skgpu::Context* graphite_context) void test_##name(skiatest::Reporter* reporter, skgpu::Context* graphite_context)
#define DEF_GPUTEST(name, reporter, options) \ #define DEF_GPUTEST(name, reporter, options) \
static void test_##name(skiatest::Reporter*, const GrContextOptions&); \ static void test_##name(skiatest::Reporter*, const GrContextOptions&); \
skiatest::TestRegistry name##TestRegistry(skiatest::Test(#name, true, test_##name)); \ skiatest::TestRegistry name##TestRegistry( \
skiatest::Test(#name, /*gpu*/ true, /*graphite*/ false, test_##name)); \
void test_##name(skiatest::Reporter* reporter, const GrContextOptions& options) void test_##name(skiatest::Reporter* reporter, const GrContextOptions& options)
#define DEF_GPUTEST_FOR_CONTEXTS(name, context_filter, reporter, context_info, options_filter) \ #define DEF_GPUTEST_FOR_CONTEXTS(name, context_filter, reporter, context_info, options_filter) \
@ -220,7 +247,7 @@ static inline SkString reporter_string(const char* fmt, Args... args) {
skiatest::RunWithGPUTestContexts(test_##name, context_filter, reporter, options); \ skiatest::RunWithGPUTestContexts(test_##name, context_filter, reporter, options); \
} \ } \
skiatest::TestRegistry name##TestRegistry( \ skiatest::TestRegistry name##TestRegistry( \
skiatest::Test(#name, true, test_gpu_contexts_##name, options_filter)); \ skiatest::Test(#name, /*gpu*/ true, /*graphite*/ false, test_gpu_contexts_##name, options_filter)); \
void test_##name(skiatest::Reporter* reporter, const sk_gpu_test::ContextInfo& context_info) void test_##name(skiatest::Reporter* reporter, const sk_gpu_test::ContextInfo& context_info)
#define DEF_GPUTEST_FOR_ALL_CONTEXTS(name, reporter, context_info) \ #define DEF_GPUTEST_FOR_ALL_CONTEXTS(name, reporter, context_info) \

View File

@ -19,7 +19,7 @@ SKGPU_MAKE_MASK_OPS(Flags);
using namespace skgpu; using namespace skgpu;
DEF_TEST(skgpu_Mask, r) { DEF_GRAPHITE_TEST(skgpu_Mask, r) {
Mask<Flags> flags = Flags::kNone; Mask<Flags> flags = Flags::kNone;
REPORTER_ASSERT(r, !flags); REPORTER_ASSERT(r, !flags);
flags |= Flags::kA; flags |= Flags::kA;

View File

@ -12,7 +12,7 @@ namespace skgpu {
#define CHECK(A) REPORTER_ASSERT(reporter, A) #define CHECK(A) REPORTER_ASSERT(reporter, A)
DEF_TEST(skgpu_Rect, reporter) { DEF_GRAPHITE_TEST(skgpu_Rect, reporter) {
const SkRect skRect = SkRect::MakeLTRB(1,-3,4,0); const SkRect skRect = SkRect::MakeLTRB(1,-3,4,0);
const Rect rect = skRect; const Rect rect = skRect;
CHECK(rect == rect); CHECK(rect == rect);

View File

@ -33,6 +33,7 @@ static DEFINE_bool2(verbose, v, false, "enable verbose output from the test driv
static DEFINE_bool2(veryVerbose, V, false, "tell individual tests to be verbose."); static DEFINE_bool2(veryVerbose, V, false, "tell individual tests to be verbose.");
static DEFINE_bool(cpu, true, "Run CPU-bound work?"); static DEFINE_bool(cpu, true, "Run CPU-bound work?");
static DEFINE_bool(gpu, true, "Run GPU-bound work?"); static DEFINE_bool(gpu, true, "Run GPU-bound work?");
static DEFINE_bool(graphite, true, "Run Graphite work?");
static DEFINE_string2(match, m, nullptr, static DEFINE_string2(match, m, nullptr,
"[~][^]substring[$] [...] of name to run.\n" "[~][^]substring[$] [...] of name to run.\n"
@ -129,16 +130,19 @@ private:
Status* fStatus; Status* fStatus;
}; };
static bool should_run(const char* testName, bool isGPUTest) { static bool should_run(const char* testName, bool isGPUTest, bool isGraphiteTest) {
if (CommandLineFlags::ShouldSkip(FLAGS_match, testName)) { if (CommandLineFlags::ShouldSkip(FLAGS_match, testName)) {
return false; return false;
} }
if (!FLAGS_cpu && !isGPUTest) { if (!FLAGS_cpu && !isGPUTest && !isGraphiteTest) {
return false; return false;
} }
if (!FLAGS_gpu && isGPUTest) { if (!FLAGS_gpu && isGPUTest) {
return false; return false;
} }
if (!FLAGS_graphite && isGraphiteTest) {
return false;
}
return true; return true;
} }
@ -221,7 +225,7 @@ int main(int argc, char** argv) {
int toRun = 0; int toRun = 0;
for (const Test& test : TestRegistry::Range()) { for (const Test& test : TestRegistry::Range()) {
if (should_run(test.name, test.needsGpu)) { if (should_run(test.name, test.needsGpu, test.fNeedsGraphite)) {
toRun++; toRun++;
} }
total++; total++;
@ -237,9 +241,9 @@ int main(int argc, char** argv) {
Status status(toRun); Status status(toRun);
for (const Test& test : TestRegistry::Range()) { for (const Test& test : TestRegistry::Range()) {
if (!should_run(test.name, test.needsGpu)) { if (!should_run(test.name, test.needsGpu, test.fNeedsGraphite)) {
++skipCount; ++skipCount;
} else if (test.needsGpu) { } else if (test.needsGpu || test.fNeedsGraphite) {
gpuTests.push_back(&test); gpuTests.push_back(&test);
} else { } else {
cpuTests.add(SkTestRunnable(test, &status)); cpuTests.add(SkTestRunnable(test, &status));

View File

@ -131,9 +131,14 @@ static const struct {
#endif #endif
#ifdef SK_GRAPHITE_ENABLED #ifdef SK_GRAPHITE_ENABLED
{ "grgl", "gpu", "api=gl,useGraphite=true" }, #ifdef SK_DIRECT3D
{ "grd3d", "graphite", "api=direct3d" },
#endif
#ifdef SK_METAL #ifdef SK_METAL
{ "grmtl", "gpu", "api=metal,useGraphite=true" }, { "grmtl", "graphite", "api=metal" },
#endif
#ifdef SK_VULKAN
{ "grvk", "graphite", "api=vulkan" },
#endif #endif
#endif #endif
@ -447,6 +452,37 @@ public:
return parse_option_gpu_api(*optionValue, outContextType, outFakeGLESVersion2); return parse_option_gpu_api(*optionValue, outContextType, outFakeGLESVersion2);
} }
#ifdef SK_GRAPHITE_ENABLED
bool get_option_graphite_api(const char* optionKey,
SkCommandLineConfigGraphite::ContextType* outContextType) const {
using ContextType = skiatest::graphite::ContextFactory::ContextType;
SkString* optionValue = fOptionsMap.find(SkString(optionKey));
if (optionValue == nullptr) {
return false;
}
#ifdef SK_VULKAN
if (optionValue->equals("vulkan")) {
*outContextType = ContextType::kVulkan;
return true;
}
#endif
#ifdef SK_METAL
if (optionValue->equals("metal")) {
*outContextType = ContextType::kMetal;
return true;
}
#endif
#ifdef SK_DIRECT3D
if (optionValue->equals("direct3d")) {
*outContextType = ContextType::kDirect3D;
return true;
}
#endif
return false;
}
#endif
bool get_option_gpu_surf_type(const char* optionKey, bool get_option_gpu_surf_type(const char* optionKey,
SkCommandLineConfigGpu::SurfType* outSurfType, SkCommandLineConfigGpu::SurfType* outSurfType,
bool optional = true) const { bool optional = true) const {
@ -492,7 +528,6 @@ SkCommandLineConfigGpu::SkCommandLineConfigGpu(const SkString& tag,
bool useDDLSink, bool useDDLSink,
bool OOPRish, bool OOPRish,
bool reducedShaders, bool reducedShaders,
bool useGraphite,
SurfType surfType) SurfType surfType)
: SkCommandLineConfig(tag, SkString("gpu"), viaParts) : SkCommandLineConfig(tag, SkString("gpu"), viaParts)
, fContextType(contextType) , fContextType(contextType)
@ -507,7 +542,6 @@ SkCommandLineConfigGpu::SkCommandLineConfigGpu(const SkString& tag,
, fUseDDLSink(useDDLSink) , fUseDDLSink(useDDLSink)
, fOOPRish(OOPRish) , fOOPRish(OOPRish)
, fReducedShaders(reducedShaders) , fReducedShaders(reducedShaders)
, fUseGraphite(useGraphite)
, fSurfType(surfType) { , fSurfType(surfType) {
if (!useStencilBuffers) { if (!useStencilBuffers) {
fContextOverrides |= ContextOverrides::kAvoidStencilBuffers; fContextOverrides |= ContextOverrides::kAvoidStencilBuffers;
@ -538,7 +572,6 @@ SkCommandLineConfigGpu* parse_command_line_config_gpu(const SkString&
bool ooprish = false; bool ooprish = false;
bool reducedShaders = false; bool reducedShaders = false;
bool fakeGLESVersion2 = false; bool fakeGLESVersion2 = false;
bool useGraphite = false;
SkCommandLineConfigGpu::SurfType surfType = SkCommandLineConfigGpu::SurfType::kDefault; SkCommandLineConfigGpu::SurfType surfType = SkCommandLineConfigGpu::SurfType::kDefault;
bool parseSucceeded = false; bool parseSucceeded = false;
@ -560,7 +593,6 @@ SkCommandLineConfigGpu* parse_command_line_config_gpu(const SkString&
extendedOptions.get_option_bool("useDDLSink", &useDDLs) && extendedOptions.get_option_bool("useDDLSink", &useDDLs) &&
extendedOptions.get_option_bool("OOPRish", &ooprish) && extendedOptions.get_option_bool("OOPRish", &ooprish) &&
extendedOptions.get_option_bool("reducedShaders", &reducedShaders) && extendedOptions.get_option_bool("reducedShaders", &reducedShaders) &&
extendedOptions.get_option_bool("useGraphite", &useGraphite) &&
extendedOptions.get_option_gpu_surf_type("surf", &surfType); extendedOptions.get_option_gpu_surf_type("surf", &surfType);
// testing threading and the persistent cache are mutually exclusive. // testing threading and the persistent cache are mutually exclusive.
@ -591,10 +623,44 @@ SkCommandLineConfigGpu* parse_command_line_config_gpu(const SkString&
useDDLs, useDDLs,
ooprish, ooprish,
reducedShaders, reducedShaders,
useGraphite,
surfType); surfType);
} }
#ifdef SK_GRAPHITE_ENABLED
SkCommandLineConfigGraphite* parse_command_line_config_graphite(const SkString& tag,
const SkTArray<SkString>& vias,
const SkString& options) {
using ContextType = skiatest::graphite::ContextFactory::ContextType;
ContextType contextType = ContextType::kMetal;
SkColorType colorType = kRGBA_8888_SkColorType;
SkAlphaType alphaType = kPremul_SkAlphaType;
bool testPrecompile = false;
bool parseSucceeded = false;
ExtendedOptions extendedOptions(options, &parseSucceeded);
if (!parseSucceeded) {
return nullptr;
}
bool validOptions = extendedOptions.get_option_graphite_api("api", &contextType) &&
extendedOptions.get_option_gpu_color("color", &colorType, &alphaType) &&
extendedOptions.get_option_bool("testPrecompile", &testPrecompile);
if (!validOptions) {
return nullptr;
}
return new SkCommandLineConfigGraphite(tag,
vias,
contextType,
colorType,
alphaType,
testPrecompile);
}
#endif
SkCommandLineConfigSvg::SkCommandLineConfigSvg(const SkString& tag, SkCommandLineConfigSvg::SkCommandLineConfigSvg(const SkString& tag,
const SkTArray<SkString>& viaParts, const SkTArray<SkString>& viaParts,
int pageIndex) int pageIndex)
@ -668,6 +734,11 @@ void ParseConfigs(const CommandLineFlags::StringArray& configs,
if (extendedBackend.equals("gpu")) { if (extendedBackend.equals("gpu")) {
parsedConfig = parse_command_line_config_gpu(tag, vias, extendedOptions); parsedConfig = parse_command_line_config_gpu(tag, vias, extendedOptions);
} }
#ifdef SK_GRAPHITE_ENABLED
if (extendedBackend.equals("graphite")) {
parsedConfig = parse_command_line_config_graphite(tag, vias, extendedOptions);
}
#endif
if (extendedBackend.equals("svg")) { if (extendedBackend.equals("svg")) {
parsedConfig = parse_command_line_config_svg(tag, vias, extendedOptions); parsedConfig = parse_command_line_config_svg(tag, vias, extendedOptions);
} }

View File

@ -14,6 +14,7 @@
DECLARE_string(config); DECLARE_string(config);
class SkCommandLineConfigGpu; class SkCommandLineConfigGpu;
class SkCommandLineConfigGraphite;
class SkCommandLineConfigSvg; class SkCommandLineConfigSvg;
// SkCommandLineConfig represents a Skia rendering configuration string. // SkCommandLineConfig represents a Skia rendering configuration string.
@ -29,6 +30,7 @@ public:
const SkTArray<SkString>& viaParts); const SkTArray<SkString>& viaParts);
virtual ~SkCommandLineConfig(); virtual ~SkCommandLineConfig();
virtual const SkCommandLineConfigGpu* asConfigGpu() const { return nullptr; } virtual const SkCommandLineConfigGpu* asConfigGpu() const { return nullptr; }
virtual const SkCommandLineConfigGraphite* asConfigGraphite() const { return nullptr; }
virtual const SkCommandLineConfigSvg* asConfigSvg() const { return nullptr; } virtual const SkCommandLineConfigSvg* asConfigSvg() const { return nullptr; }
const SkString& getTag() const { return fTag; } const SkString& getTag() const { return fTag; }
const SkString& getBackend() const { return fBackend; } const SkString& getBackend() const { return fBackend; }
@ -68,7 +70,6 @@ public:
bool useDDLSink, bool useDDLSink,
bool OOPRish, bool OOPRish,
bool reducedShaders, bool reducedShaders,
bool useGraphite,
SurfType); SurfType);
const SkCommandLineConfigGpu* asConfigGpu() const override { return this; } const SkCommandLineConfigGpu* asConfigGpu() const override { return this; }
@ -84,7 +85,6 @@ public:
bool getUseDDLSink() const { return fUseDDLSink; } bool getUseDDLSink() const { return fUseDDLSink; }
bool getOOPRish() const { return fOOPRish; } bool getOOPRish() const { return fOOPRish; }
bool getReducedShaders() const { return fReducedShaders; } bool getReducedShaders() const { return fReducedShaders; }
bool getUseGraphite() const { return fUseGraphite; }
SurfType getSurfType() const { return fSurfType; } SurfType getSurfType() const { return fSurfType; }
private: private:
@ -100,10 +100,45 @@ private:
bool fUseDDLSink; bool fUseDDLSink;
bool fOOPRish; bool fOOPRish;
bool fReducedShaders; bool fReducedShaders;
bool fUseGraphite;
SurfType fSurfType; SurfType fSurfType;
}; };
#ifdef SK_GRAPHITE_ENABLED
#include "tools/graphite/ContextFactory.h"
class SkCommandLineConfigGraphite : public SkCommandLineConfig {
public:
using ContextType = skiatest::graphite::ContextFactory::ContextType;
SkCommandLineConfigGraphite(const SkString& tag,
const SkTArray<SkString>& viaParts,
ContextType contextType,
SkColorType colorType,
SkAlphaType alphaType,
bool testPrecompile)
: SkCommandLineConfig(tag, SkString("graphite"), viaParts)
, fContextType(contextType)
, fColorType(colorType)
, fAlphaType(alphaType)
, fTestPrecompile(testPrecompile) {
}
const SkCommandLineConfigGraphite* asConfigGraphite() const override { return this; }
ContextType getContextType() const { return fContextType; }
SkColorType getColorType() const { return fColorType; }
SkAlphaType getAlphaType() const { return fAlphaType; }
bool getTestPrecompile() const { return fTestPrecompile; }
private:
ContextType fContextType;
SkColorType fColorType;
SkAlphaType fAlphaType;
bool fTestPrecompile;
};
#endif // SK_GRAPHITE_ENABLED
// SkCommandLineConfigSvg is a SkCommandLineConfig that extracts information out of the backend // SkCommandLineConfigSvg is a SkCommandLineConfig that extracts information out of the backend
// part of the tag. It is constructed tags that have: // part of the tag. It is constructed tags that have:
// * backends of form "svg[option=value,option2=value,...]" // * backends of form "svg[option=value,option2=value,...]"

View File

@ -417,7 +417,7 @@ int main(int argc, char** argv) {
SkTHashMap<SkString, const skiatest::Test*> tests; SkTHashMap<SkString, const skiatest::Test*> tests;
for (const skiatest::Test& test : skiatest::TestRegistry::Range()) { for (const skiatest::Test& test : skiatest::TestRegistry::Range()) {
if (test.needsGpu) { if (test.needsGpu || test.fNeedsGraphite) {
continue; // TODO continue; // TODO
} }
if (FLAGS_listTests) { if (FLAGS_listTests) {

View File

@ -15,7 +15,24 @@
namespace skiatest::graphite { namespace skiatest::graphite {
std::tuple<GraphiteTestContext*, sk_sp<skgpu::Context>> ContextFactory::getContextInfo( ContextFactory::ContextInfo::ContextInfo(ContextInfo&& other)
: fType(other.fType)
, fTestContext(std::move(other.fTestContext))
, fContext(std::move(other.fContext)) {
}
ContextFactory::ContextInfo::ContextInfo(ContextFactory::ContextType type,
std::unique_ptr<GraphiteTestContext> testContext,
sk_sp<skgpu::Context> context)
: fType(type)
, fTestContext(std::move(testContext))
, fContext(std::move(context)) {
}
sk_sp<skgpu::Context> ContextFactory::ContextInfo::refContext() const { return fContext; }
////////////////////////////////////////////////////////////////////////////////////////////////////
std::tuple<GraphiteTestContext*, sk_sp<skgpu::Context>> ContextFactory::getContextInfo(
ContextType type) { ContextType type) {
for (ContextInfo& c : fContexts) { for (ContextInfo& c : fContexts) {

View File

@ -22,25 +22,22 @@ namespace skiatest::graphite {
class ContextFactory { class ContextFactory {
public: public:
enum class ContextType { enum class ContextType {
kDirect3D,
kMetal, kMetal,
kVulkan,
kMock, kMock,
}; };
class ContextInfo { class ContextInfo {
public: public:
ContextInfo() = default; ContextInfo() = default;
ContextInfo(ContextInfo&& other) ContextInfo(ContextInfo&& other);
: fType(other.fType)
, fTestContext(std::move(other.fTestContext))
, fContext(std::move(other.fContext)) {
}
~ContextInfo() = default; ~ContextInfo() = default;
ContextFactory::ContextType type() const { return fType; } ContextFactory::ContextType type() const { return fType; }
skgpu::Context* context() const { return fContext.get(); } skgpu::Context* context() const { return fContext.get(); }
sk_sp<skgpu::Context> refContext() const { return fContext; } sk_sp<skgpu::Context> refContext() const;
GraphiteTestContext* testContext() const { return fTestContext.get(); } GraphiteTestContext* testContext() const { return fTestContext.get(); }
private: private:
@ -48,11 +45,7 @@ public:
ContextInfo(ContextFactory::ContextType type, ContextInfo(ContextFactory::ContextType type,
std::unique_ptr<GraphiteTestContext> testContext, std::unique_ptr<GraphiteTestContext> testContext,
sk_sp<skgpu::Context> context) sk_sp<skgpu::Context> context);
: fType(type)
, fTestContext(std::move(testContext))
, fContext(std::move(context)) {
}
ContextType fType = ContextType::kMock; ContextType fType = ContextType::kMock;
std::unique_ptr<GraphiteTestContext> fTestContext; std::unique_ptr<GraphiteTestContext> fTestContext;