| Index: src/core/SkImageInfo.cpp | 
| diff --git a/src/core/SkImageInfo.cpp b/src/core/SkImageInfo.cpp | 
| index ee169239ef0867fe8c45662489d711800924bdd5..ba418d519840d036f64f3e7173d3fcaff8796ac7 100644 | 
| --- a/src/core/SkImageInfo.cpp | 
| +++ b/src/core/SkImageInfo.cpp | 
| @@ -9,50 +9,6 @@ | 
| #include "SkReadBuffer.h" | 
| #include "SkWriteBuffer.h" | 
|  | 
| -/* | 
| - *  We store this as a byte in the ImageInfo flatten buffer. | 
| - */ | 
| -enum class SkFlattenColorSpaceEnum { | 
| -    kUnspecified, | 
| -    kSRGB, | 
| -    kAdobe1998, | 
| -    // ... add more here | 
| -    kLastEnum = kAdobe1998, | 
| -    // final value means the actual profile data follows the info | 
| -    kICCProfile = 0xFF, | 
| -}; | 
| - | 
| -static sk_sp<SkColorSpace> make_from_enum(SkFlattenColorSpaceEnum value) { | 
| -    switch (value) { | 
| -        case SkFlattenColorSpaceEnum::kSRGB: | 
| -            return SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); | 
| -        case SkFlattenColorSpaceEnum::kAdobe1998: | 
| -            return SkColorSpace::NewNamed(SkColorSpace::kAdobeRGB_Named); | 
| -        default: | 
| -            return nullptr; | 
| -    } | 
| -} | 
| - | 
| -SkColorSpace::Named sk_deduce_named_from_colorspace(SkColorSpace* cs) { | 
| -    return cs->fNamed; | 
| -} | 
| - | 
| -static SkFlattenColorSpaceEnum deduce_from_colorspace(SkColorSpace* cs) { | 
| -    if (!cs) { | 
| -        return SkFlattenColorSpaceEnum::kUnspecified; | 
| -    } | 
| -    switch (sk_deduce_named_from_colorspace(cs)) { | 
| -        case SkColorSpace::kSRGB_Named: | 
| -            return SkFlattenColorSpaceEnum::kSRGB; | 
| -        case SkColorSpace::kAdobeRGB_Named: | 
| -            return SkFlattenColorSpaceEnum::kAdobe1998; | 
| -        default: | 
| -            return SkFlattenColorSpaceEnum::kICCProfile; | 
| -    } | 
| -} | 
| - | 
| -/////////////////////////////////////////////////////////////////////////////////////////////////// | 
| - | 
| #ifdef SK_SUPPORT_LEGACY_COLORPROFILETYPE | 
| SkColorProfileType SkImageInfo::profileType() const { | 
| return fColorSpace && fColorSpace->gammaCloseToSRGB() | 
| @@ -81,40 +37,31 @@ void SkImageInfo::unflatten(SkReadBuffer& buffer) { | 
| SkASSERT(0 == (packed >> 24)); | 
| fColorType = (SkColorType)((packed >> 0) & 0xFF); | 
| fAlphaType = (SkAlphaType)((packed >> 8) & 0xFF); | 
| -    SkFlattenColorSpaceEnum csenum = (SkFlattenColorSpaceEnum)((packed >> 16) & 0xFF); | 
| buffer.validate(alpha_type_is_valid(fAlphaType) && color_type_is_valid(fColorType)); | 
|  | 
| -    if (SkFlattenColorSpaceEnum::kICCProfile == csenum) { | 
| -        SkASSERT(false);    // we shouldn't hit this yet, as we don't write these yet | 
| -        fColorSpace.reset(); | 
| -    } else { | 
| -        if (csenum > SkFlattenColorSpaceEnum::kLastEnum) { | 
| -            csenum = SkFlattenColorSpaceEnum::kUnspecified; | 
| -        } | 
| -        fColorSpace = make_from_enum(csenum); | 
| -    } | 
| +    sk_sp<SkData> data = buffer.readByteArrayAsData(); | 
| +    fColorSpace = SkColorSpace::Deserialize(data->data(), data->size()); | 
| } | 
|  | 
| void SkImageInfo::flatten(SkWriteBuffer& buffer) const { | 
| buffer.write32(fWidth); | 
| buffer.write32(fHeight); | 
|  | 
| -    SkFlattenColorSpaceEnum csenum = deduce_from_colorspace(fColorSpace.get()); | 
| - | 
| -    // TODO: when we actually support flattening the colorspace to a profile blob, remove this | 
| -    //       hack (and write the blob after we write packed. | 
| -    if (SkFlattenColorSpaceEnum::kICCProfile == csenum) { | 
| -        csenum = SkFlattenColorSpaceEnum::kUnspecified; | 
| -    } | 
| - | 
| -    SkASSERT(0 == ((int)csenum & ~0xFF)); | 
| SkASSERT(0 == (fAlphaType & ~0xFF)); | 
| SkASSERT(0 == (fColorType & ~0xFF)); | 
| -    uint32_t packed = ((int)csenum << 16) | (fAlphaType << 8) | fColorType; | 
| +    uint32_t packed = (fAlphaType << 8) | fColorType; | 
| buffer.write32(packed); | 
|  | 
| -    if (SkFlattenColorSpaceEnum::kICCProfile == csenum) { | 
| -        // TODO: write the ICCProfile blob | 
| +    if (fColorSpace) { | 
| +        sk_sp<SkData> data = fColorSpace->serialize(); | 
| +        if (data) { | 
| +            buffer.writeDataAsByteArray(data.get()); | 
| +        } else { | 
| +            buffer.writeByteArray(nullptr, 0); | 
| +        } | 
| +    } else { | 
| +        sk_sp<SkData> data = SkData::MakeEmpty(); | 
| +        buffer.writeDataAsByteArray(data.get()); | 
| } | 
| } | 
|  | 
|  |