From Bug 183438: - Refactor copyPremultipliedToPremultiplied and copyUnpremultipliedToUnpremultiplied in Source/WebCore/platform/graphics/ImageBufferBackend.cpp . - Remove comment which was added in place of the previous assert in copyImagePixelsAccelerated in Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.cpp .
Also - The members: m_originClean, m_premultiplyAlpha and m_forciblyPremultiplyAlpha of ImageBitmap can be replaced by ImageBuffer::SerializationState. This will eliminate the need to sync the members of ImageBitmap and ImageBuffer::SerializationState. Also the whole struct can be copied in many places from std::pair<std::unique_ptr<ImageBuffer>, ImageBuffer::SerializationState> to ImageBitmap and vice versa.
Another approach is to make SerializationState enum class type and have an OptionSet< SerializationState> be stored in ImageBitmap: enum class SerializationState { OriginClean = 1 << 0, PremultiplyAlpha = 1 << 1, ForciblyPremultiplyAlpha = 1 << 2, }; class ImageBitmap { public: bool originClean() const { return m_serializationState.contains(SerializationState::OriginClean); } private: OptionSet<SerializationState> m_serializationState; };
<rdar://problem/67105644>