diff options
author | 2016-07-20 16:14:16 -0700 | |
---|---|---|
committer | 2016-07-20 16:14:17 -0700 | |
commit | 456bf30d321292da7f15d1af35fd94fbb6a4bb59 (patch) | |
tree | c430f62b2f242475f685e5d4a7244ba4282542f3 /tests | |
parent | ad7604b4a7ab8d4f8deb061a309b582b12a9bba9 (diff) |
Revert of Refactor parsing and storage of SkGammas (patchset #8 id:280001 of https://codereview.chromium.org/2117773002/ )
Reason for revert:
Tests failing
Original issue's description:
> Refactor parsing and storage of SkGammas
>
> Benefits:
> (1) Parses and stores gamma tags in a single allocation.
> (2) Recognizes equal gamma tags to skip parsing work and
> save memory.
>
> Non-Benefits:
> (1) Not less complicated.
>
> BUG=skia:
> GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2117773002
>
> Committed: https://skia.googlesource.com/skia/+/2ea944c2b710caf29d4795ac953bad14224796f7
> Committed: https://skia.googlesource.com/skia/+/959ccc1f3f49e1ddeb51c32c30ac4a2d94653856
TBR=reed@google.com,brianosman@google.com,mtklein@google.com
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Review-Url: https://codereview.chromium.org/2171623002
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ColorSpaceXformTest.cpp | 109 |
1 files changed, 31 insertions, 78 deletions
diff --git a/tests/ColorSpaceXformTest.cpp b/tests/ColorSpaceXformTest.cpp index 23b08ce8ae..7091946bbb 100644 --- a/tests/ColorSpaceXformTest.cpp +++ b/tests/ColorSpaceXformTest.cpp @@ -17,8 +17,7 @@ class ColorSpaceXformTest { public: static std::unique_ptr<SkColorSpaceXform> CreateIdentityXform(const sk_sp<SkGammas>& gammas) { // Logically we can pass any matrix here. For simplicty, pass I(), i.e. D50 XYZ gamut. - sk_sp<SkColorSpace> space(new SkColorSpace_Base( - nullptr, SkColorSpace::kNonStandard_GammaNamed, gammas, SkMatrix::I(), nullptr)); + sk_sp<SkColorSpace> space(new SkColorSpace_Base(nullptr, gammas, SkMatrix::I(), nullptr)); return SkColorSpaceXform::New(space, space); } }; @@ -55,99 +54,53 @@ static void test_identity_xform(skiatest::Reporter* r, const sk_sp<SkGammas>& ga DEF_TEST(ColorSpaceXform_TableGamma, r) { // Lookup-table based gamma curves + SkGammaCurve red, green, blue; constexpr size_t tableSize = 10; - void* memory = sk_malloc_throw(sizeof(SkGammas) + sizeof(float) * tableSize); - sk_sp<SkGammas> gammas = sk_sp<SkGammas>(new (memory) SkGammas()); - gammas->fRedType = gammas->fGreenType = gammas->fBlueType = SkGammas::Type::kTable_Type; - gammas->fRedData.fTable.fSize = gammas->fGreenData.fTable.fSize = - gammas->fBlueData.fTable.fSize = tableSize; - gammas->fRedData.fTable.fOffset = gammas->fGreenData.fTable.fOffset = - gammas->fBlueData.fTable.fOffset = 0; - float* table = SkTAddOffset<float>(memory, sizeof(SkGammas)); - - table[0] = 0.00f; - table[1] = 0.05f; - table[2] = 0.10f; - table[3] = 0.15f; - table[4] = 0.25f; - table[5] = 0.35f; - table[6] = 0.45f; - table[7] = 0.60f; - table[8] = 0.75f; - table[9] = 1.00f; + red.fTable = std::unique_ptr<float[]>(new float[tableSize]); + green.fTable = std::unique_ptr<float[]>(new float[tableSize]); + blue.fTable = std::unique_ptr<float[]>(new float[tableSize]); + red.fTableSize = green.fTableSize = blue.fTableSize = 10; + red.fTable[0] = green.fTable[0] = blue.fTable[0] = 0.00f; + red.fTable[1] = green.fTable[1] = blue.fTable[1] = 0.05f; + red.fTable[2] = green.fTable[2] = blue.fTable[2] = 0.10f; + red.fTable[3] = green.fTable[3] = blue.fTable[3] = 0.15f; + red.fTable[4] = green.fTable[4] = blue.fTable[4] = 0.25f; + red.fTable[5] = green.fTable[5] = blue.fTable[5] = 0.35f; + red.fTable[6] = green.fTable[6] = blue.fTable[6] = 0.45f; + red.fTable[7] = green.fTable[7] = blue.fTable[7] = 0.60f; + red.fTable[8] = green.fTable[8] = blue.fTable[8] = 0.75f; + red.fTable[9] = green.fTable[9] = blue.fTable[9] = 1.00f; + sk_sp<SkGammas> gammas = + sk_make_sp<SkGammas>(std::move(red), std::move(green), std::move(blue)); test_identity_xform(r, gammas); } DEF_TEST(ColorSpaceXform_ParametricGamma, r) { // Parametric gamma curves - void* memory = sk_malloc_throw(sizeof(SkGammas) + sizeof(SkGammas::Params)); - sk_sp<SkGammas> gammas = sk_sp<SkGammas>(new (memory) SkGammas()); - gammas->fRedType = gammas->fGreenType = gammas->fBlueType = SkGammas::Type::kParam_Type; - gammas->fRedData.fParamOffset = gammas->fGreenData.fParamOffset = - gammas->fBlueData.fParamOffset = 0; - SkGammas::Params* params = SkTAddOffset<SkGammas::Params>(memory, sizeof(SkGammas)); + SkGammaCurve red, green, blue; // Interval, switch xforms at 0.0031308f - params->fD = 0.04045f; + red.fD = green.fD = blue.fD = 0.04045f; // First equation: - params->fE = 1.0f / 12.92f; - params->fF = 0.0f; + red.fE = green.fE = blue.fE = 1.0f / 12.92f; // Second equation: // Note that the function is continuous (it's actually sRGB). - params->fA = 1.0f / 1.055f; - params->fB = 0.055f / 1.055f; - params->fC = 0.0f; - params->fG = 2.4f; + red.fA = green.fA = blue.fA = 1.0f / 1.055f; + red.fB = green.fB = blue.fB = 0.055f / 1.055f; + red.fC = green.fC = blue.fC = 0.0f; + red.fG = green.fG = blue.fG = 2.4f; + sk_sp<SkGammas> gammas = + sk_make_sp<SkGammas>(std::move(red), std::move(green), std::move(blue)); test_identity_xform(r, gammas); } DEF_TEST(ColorSpaceXform_ExponentialGamma, r) { // Exponential gamma curves - sk_sp<SkGammas> gammas = sk_sp<SkGammas>(new SkGammas()); - gammas->fRedType = gammas->fGreenType = gammas->fBlueType = SkGammas::Type::kValue_Type; - gammas->fRedData.fValue = gammas->fGreenData.fValue = gammas->fBlueData.fValue = 1.4f; - test_identity_xform(r, gammas); -} - -DEF_TEST(ColorSpaceXform_NonMatchingGamma, r) { - constexpr size_t tableSize = 10; - void* memory = sk_malloc_throw(sizeof(SkGammas) + sizeof(float) * tableSize + - sizeof(SkGammas::Params)); - sk_sp<SkGammas> gammas = sk_sp<SkGammas>(new (memory) SkGammas()); - - float* table = SkTAddOffset<float>(memory, sizeof(SkGammas)); - table[0] = 0.00f; - table[1] = 0.15f; - table[2] = 0.20f; - table[3] = 0.25f; - table[4] = 0.35f; - table[5] = 0.45f; - table[6] = 0.55f; - table[7] = 0.70f; - table[8] = 0.85f; - table[9] = 1.00f; - - SkGammas::Params* params = SkTAddOffset<SkGammas::Params>(memory, sizeof(SkGammas) + - sizeof(float) * tableSize); - params->fA = 1.0f / 1.055f; - params->fB = 0.055f / 1.055f; - params->fC = 0.0f; - params->fD = 0.04045f; - params->fE = 1.0f / 12.92f; - params->fF = 0.0f; - params->fG = 2.4f; - - gammas->fRedType = SkGammas::Type::kValue_Type; - gammas->fRedData.fValue = 1.2f; - - gammas->fGreenType = SkGammas::Type::kTable_Type; - gammas->fGreenData.fTable.fSize = tableSize; - gammas->fGreenData.fTable.fOffset = 0; - - gammas->fBlueType = SkGammas::Type::kParam_Type; - gammas->fBlueData.fParamOffset = sizeof(float) * tableSize; - + SkGammaCurve red, green, blue; + red.fValue = green.fValue = blue.fValue = 1.4f; + sk_sp<SkGammas> gammas = + sk_make_sp<SkGammas>(std::move(red), std::move(green), std::move(blue)); test_identity_xform(r, gammas); } |