static bool gather_sinks() { SkCommandLineConfigArray configs; ParseConfigs(FLAGS_config, &configs); for (int i = 0; i < configs.count(); i++) { const SkCommandLineConfig& config = *configs[i]; Sink* sink = create_sink(&config); if (sink == nullptr) { info("Skipping config %s: Don't understand '%s'.\n", config.getTag().c_str(), config.getTag().c_str()); continue; } const SkTArray<SkString>& parts = config.getViaParts(); for (int j = parts.count(); j-- > 0;) { const SkString& part = parts[j]; Sink* next = create_via(part, sink); if (next == nullptr) { info("Skipping config %s: Don't understand '%s'.\n", config.getTag().c_str(), part.c_str()); delete sink; sink = nullptr; break; } sink = next; } if (sink) { push_sink(config, sink); } } // If no configs were requested (just running tests, perhaps?), then we're okay. // Otherwise, make sure that at least one sink was constructed correctly. This catches // the case of bots without a GPU being assigned GPU configs. return (configs.count() == 0) || (gSinks.count() > 0); }
static void gather_sinks() { SkCommandLineConfigArray configs; ParseConfigs(FLAGS_config, &configs); for (int i = 0; i < configs.count(); i++) { const SkCommandLineConfig& config = *configs[i]; Sink* sink = create_sink(&config); if (sink == nullptr) { SkDebugf("Skipping config %s: Don't understand '%s'.\n", config.getTag().c_str(), config.getTag().c_str()); continue; } const SkTArray<SkString>& parts = config.getViaParts(); for (int j = parts.count(); j-- > 0;) { const SkString& part = parts[j]; Sink* next = create_via(part, sink); if (next == nullptr) { SkDebugf("Skipping config %s: Don't understand '%s'.\n", config.getTag().c_str(), part.c_str()); delete sink; sink = nullptr; break; } sink = next; } if (sink) { push_sink(config, sink); } } }
DEF_TEST(ParseConfigs_ExtendedGpuConfigsIncorrect, reporter) { SkCommandLineFlags::StringArray config1 = make_string_array({ "gpu[api=gl,nvpr=1]", // Number as bool. "gpu[api=gl,]", // Trailing in comma. "gpu[api=angle_glu]", // Unknown api. "gpu[api=,samples=0]", // Empty api. "gpu[api=gl,samples=true]", // Value true as a number. "gpu[api=gl,samples=0,samples=0]", // Duplicate option key. "gpu[,api=gl,samples=0]", // Leading comma. "gpu[samples=54", // Missing closing parenthesis. ",,", "gpu[]", // Missing required api specifier "gpu[samples=4]", // Missing required api specifier "gpu[", // Missing bracket. "samples=54" // No backend. "gpu[nvpr=true ]", // Space. }); SkCommandLineConfigArray configs; ParseConfigs(config1, &configs); REPORTER_ASSERT(reporter, configs.count() == config1.count()); for (int i = 0; i < config1.count(); ++i) { REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i])); REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(config1[i])); #if SK_SUPPORT_GPU REPORTER_ASSERT(reporter, !configs[i]->asConfigGpu()); #endif } }
DEF_TEST(ParseConfigs_OutParam, reporter) { // Clears the out parameter. SkCommandLineFlags::StringArray config1 = make_string_array({"gles"}); SkCommandLineConfigArray configs; ParseConfigs(config1, &configs); REPORTER_ASSERT(reporter, configs.count() == 1); REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gles")); SkCommandLineFlags::StringArray config2 = make_string_array({"8888"}); ParseConfigs(config2, &configs); REPORTER_ASSERT(reporter, configs.count() == 1); REPORTER_ASSERT(reporter, configs[0]->getTag().equals("8888")); SkCommandLineFlags::StringArray config3 = make_string_array({"gl"}); ParseConfigs(config3, &configs); REPORTER_ASSERT(reporter, configs.count() == 1); REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gl")); }
DEF_TEST(ParseConfigs_ExtendedGpuConfigsSurprises, reporter) { // These just list explicitly some properties of the system. SkCommandLineFlags::StringArray config1 = make_string_array({ // Options are not canonized -> two same configs have a different tag. "gpu[api=gl,nvpr=true,dit=true]", "gpu[api=gl,dit=true,nvpr=true]", "gpu[api=debuggl]", "gpu[api=gl]", "gpu[api=gles]", "" "gpu[api=gl]", "gpu[api=gl,samples=0]", "gpu[api=gles,samples=0]" }); SkCommandLineConfigArray configs; ParseConfigs(config1, &configs); REPORTER_ASSERT(reporter, configs.count() == config1.count()); for (int i = 0; i < config1.count(); ++i) { REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i])); #if SK_SUPPORT_GPU REPORTER_ASSERT(reporter, configs[i]->getBackend().equals("gpu")); REPORTER_ASSERT(reporter, configs[i]->asConfigGpu()); #else REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(config1[i])); #endif } }
DEF_TEST(ParseConfigs_Gpu, reporter) { // Parses a normal config and returns correct "tag". // Simple GL config works SkCommandLineFlags::StringArray config1 = make_string_array({"gl"}); SkCommandLineConfigArray configs; ParseConfigs(config1, &configs); REPORTER_ASSERT(reporter, configs.count() == 1); REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gl")); REPORTER_ASSERT(reporter, configs[0]->getViaParts().count() == 0); #if SK_SUPPORT_GPU REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getContextType() == GrContextFactory::kGL_ContextType); REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseNVPR() == false); REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseDIText() == false); REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getSamples() == 1); REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType); REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getColorSpace() == nullptr); REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getSurfType() == SkCommandLineConfigGpu::SurfType::kDefault); #endif }
DEF_TEST(ParseConfigs_DefaultConfigs, reporter) { // Parses all default configs and returns correct "tag". SkCommandLineFlags::StringArray config1 = make_string_array({ "565", "8888", "debuggl", "gl", "gldft", "nullgl", "glmsaa8", "glmsaa4", "nonrendering", "nullgl", "gles", "glnvpr8", "glnvpr4", "pdf", "skp", "svg", "xps", "angle_d3d11_es2", "angle_gl_es2", "commandbuffer", "mesa", "hwui", "glf16", "glessrgb", "gl", "glnvpr4", "glsrgb", "glmsaa4", "vk", "glwide", "glnarrow", "glnostencils", "mock", "mtl", "gl4444", "gl565", "gltestthreading", "gl1010102", "glesbert" }); SkCommandLineConfigArray configs; ParseConfigs(config1, &configs); auto srgbColorSpace = SkColorSpace::MakeSRGB(); REPORTER_ASSERT(reporter, configs.count() == config1.count()); for (int i = 0; i < config1.count(); ++i) { REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i])); REPORTER_ASSERT(reporter, configs[i]->getViaParts().count() == 0); } #if SK_SUPPORT_GPU REPORTER_ASSERT(reporter, !configs[0]->asConfigGpu()); REPORTER_ASSERT(reporter, !configs[1]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[2]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[3]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[4]->asConfigGpu()->getUseDIText()); REPORTER_ASSERT(reporter, configs[5]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getSamples() == 8); REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getSamples() == 4); REPORTER_ASSERT(reporter, !configs[8]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[9]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[10]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[11]->asConfigGpu()->getSamples() == 8); REPORTER_ASSERT(reporter, configs[11]->asConfigGpu()->getUseNVPR()); REPORTER_ASSERT(reporter, !configs[11]->asConfigGpu()->getUseDIText()); REPORTER_ASSERT(reporter, configs[12]->asConfigGpu()->getSamples() == 4); REPORTER_ASSERT(reporter, configs[12]->asConfigGpu()->getUseNVPR()); REPORTER_ASSERT(reporter, !configs[12]->asConfigGpu()->getUseDIText()); REPORTER_ASSERT(reporter, !configs[13]->asConfigGpu()); REPORTER_ASSERT(reporter, !configs[14]->asConfigGpu()); REPORTER_ASSERT(reporter, !configs[15]->asConfigGpu()); REPORTER_ASSERT(reporter, !configs[16]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[17]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[18]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[19]->asConfigGpu()); REPORTER_ASSERT(reporter, !configs[20]->asConfigGpu()); REPORTER_ASSERT(reporter, !configs[21]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[22]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType); REPORTER_ASSERT(reporter, configs[22]->asConfigGpu()->getColorSpace()); REPORTER_ASSERT(reporter, configs[22]->asConfigGpu()->getColorSpace()->gammaIsLinear()); const SkMatrix44* srgbXYZ = srgbColorSpace->toXYZD50(); SkASSERT(srgbXYZ); const SkMatrix44* config25XYZ = configs[22]->asConfigGpu()->getColorSpace()->toXYZD50(); SkASSERT(config25XYZ); REPORTER_ASSERT(reporter, *config25XYZ == *srgbXYZ); REPORTER_ASSERT(reporter, configs[23]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType); REPORTER_ASSERT(reporter, configs[23]->asConfigGpu()->getColorSpace() == srgbColorSpace.get()); REPORTER_ASSERT(reporter, configs[24]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getSamples() == 4); REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getUseNVPR()); REPORTER_ASSERT(reporter, configs[26]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[26]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType); REPORTER_ASSERT(reporter, configs[26]->asConfigGpu()->getColorSpace() == srgbColorSpace.get()); REPORTER_ASSERT(reporter, configs[27]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[27]->asConfigGpu()->getSamples() == 4); #ifdef SK_VULKAN REPORTER_ASSERT(reporter, configs[28]->asConfigGpu()); #endif REPORTER_ASSERT(reporter, configs[29]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType); REPORTER_ASSERT(reporter, configs[29]->asConfigGpu()->getColorSpace()); REPORTER_ASSERT(reporter, configs[29]->asConfigGpu()->getColorSpace()->gammaIsLinear()); const SkMatrix44* config41XYZ = configs[29]->asConfigGpu()->getColorSpace()->toXYZD50(); SkASSERT(config41XYZ); REPORTER_ASSERT(reporter, *config41XYZ != *srgbXYZ); REPORTER_ASSERT(reporter, configs[30]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType); REPORTER_ASSERT(reporter, configs[30]->asConfigGpu()->getColorSpace()); REPORTER_ASSERT(reporter, configs[30]->asConfigGpu()->getColorSpace()->gammaIsLinear()); REPORTER_ASSERT(reporter, *configs[30]->asConfigGpu()->getColorSpace()->toXYZD50() != *srgbColorSpace->toXYZD50()); REPORTER_ASSERT(reporter, configs[31]->asConfigGpu()->getContextType() == GrContextFactory::kGL_ContextType); REPORTER_ASSERT(reporter, SkToBool(configs[31]->asConfigGpu()->getContextOverrides() & SkCommandLineConfigGpu::ContextOverrides::kAvoidStencilBuffers)); REPORTER_ASSERT(reporter, configs[32]->asConfigGpu()->getContextType() == GrContextFactory::kMock_ContextType); REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getContextType() == GrContextFactory::kGL_ContextType); REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getColorType() == kARGB_4444_SkColorType); REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getAlphaType() == kPremul_SkAlphaType); REPORTER_ASSERT(reporter, configs[35]->asConfigGpu()->getContextType() == GrContextFactory::kGL_ContextType); REPORTER_ASSERT(reporter, configs[35]->asConfigGpu()->getColorType() == kRGB_565_SkColorType); REPORTER_ASSERT(reporter, configs[35]->asConfigGpu()->getAlphaType() == kOpaque_SkAlphaType); REPORTER_ASSERT(reporter, configs[36]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[36]->asConfigGpu()->getTestThreading()); REPORTER_ASSERT(reporter, configs[37]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[37]->asConfigGpu()->getColorType() == kRGBA_1010102_SkColorType); REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()->getSurfType() == SkCommandLineConfigGpu::SurfType::kBackendRenderTarget); #endif }
DEF_TEST(ParseConfigs_ExtendedGpuConfigsCorrect, reporter) { SkCommandLineFlags::StringArray config1 = make_string_array({ "gpu[api=gl,nvpr=true,dit=false]", "gpu[api=angle_d3d9_es2]", "gpu[api=angle_gl_es3]", "gpu[api=mesa,samples=77]", "gpu[dit=true,api=commandbuffer]", "gpu[api=gles]", "gpu[api=gl]", "gpu[api=vulkan]", "gpu[api=metal]", "gpu[api=mock,surf=betex]", }); SkCommandLineConfigArray configs; ParseConfigs(config1, &configs); REPORTER_ASSERT(reporter, configs.count() == config1.count()); for (int i = 0; i < config1.count(); ++i) { REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i])); } #if SK_SUPPORT_GPU REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getContextType() == GrContextFactory::kGL_ContextType); REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseNVPR()); REPORTER_ASSERT(reporter, !configs[0]->asConfigGpu()->getUseDIText()); REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getSamples() == 1); REPORTER_ASSERT(reporter, configs[1]->asConfigGpu()->getContextType() == GrContextFactory::kANGLE_D3D9_ES2_ContextType); REPORTER_ASSERT(reporter, configs[1]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[2]->asConfigGpu()->getContextType() == GrContextFactory::kANGLE_GL_ES3_ContextType); REPORTER_ASSERT(reporter, configs[2]->asConfigGpu()); REPORTER_ASSERT(reporter, !configs[3]->asConfigGpu()); REPORTER_ASSERT(reporter, configs[4]->asConfigGpu()->getContextType() == GrContextFactory::kCommandBuffer_ContextType); REPORTER_ASSERT(reporter, configs[5]->asConfigGpu()->getContextType() == GrContextFactory::kGLES_ContextType); REPORTER_ASSERT(reporter, !configs[5]->asConfigGpu()->getUseNVPR()); REPORTER_ASSERT(reporter, !configs[5]->asConfigGpu()->getUseDIText()); REPORTER_ASSERT(reporter, configs[5]->asConfigGpu()->getSamples() == 1); REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getContextType() == GrContextFactory::kGL_ContextType); REPORTER_ASSERT(reporter, !configs[6]->asConfigGpu()->getUseNVPR()); REPORTER_ASSERT(reporter, !configs[6]->asConfigGpu()->getUseDIText()); REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getSamples() == 1); #ifdef SK_VULKAN REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getContextType() == GrContextFactory::kVulkan_ContextType); REPORTER_ASSERT(reporter, !configs[7]->asConfigGpu()->getUseNVPR()); REPORTER_ASSERT(reporter, !configs[7]->asConfigGpu()->getUseDIText()); REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getSamples() == 1); #endif #ifdef SK_METAL REPORTER_ASSERT(reporter, configs[8]->asConfigGpu()->getContextType() == GrContextFactory::kMetal_ContextType); REPORTER_ASSERT(reporter, !configs[8]->asConfigGpu()->getUseNVPR()); REPORTER_ASSERT(reporter, !configs[8]->asConfigGpu()->getUseDIText()); REPORTER_ASSERT(reporter, configs[8]->asConfigGpu()->getSamples() == 0); #endif REPORTER_ASSERT(reporter, configs[9]->asConfigGpu()->getContextType() == GrContextFactory::kMock_ContextType); REPORTER_ASSERT(reporter, configs[9]->asConfigGpu()->getSurfType() == SkCommandLineConfigGpu::SurfType::kBackendTexture); #endif }