Commit c1258b02 authored by Prashant Nevase's avatar Prashant Nevase Committed by Commit Bot

Rename lab_color_space to dark_mode_lab_color_space.

Renaming lab_color_space* files to dark_mode_lab_color_space* will
help identify dark mode module files easily and also help in running
the all related tests using --gtest_filter=*Dark* filter.

Bug: None
Change-Id: I56408d6bc3c9973b03407e4265614bd1549e97bd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2421978Reviewed-by: default avatarStephen Chenney <schenney@chromium.org>
Commit-Queue: Prashant Nevase <prashant.n@samsung.com>
Cr-Commit-Position: refs/heads/master@{#809005}
parent 15066855
...@@ -874,6 +874,7 @@ component("platform") { ...@@ -874,6 +874,7 @@ component("platform") {
"graphics/dark_mode_filter.h", "graphics/dark_mode_filter.h",
"graphics/dark_mode_image_classifier.cc", "graphics/dark_mode_image_classifier.cc",
"graphics/dark_mode_image_classifier.h", "graphics/dark_mode_image_classifier.h",
"graphics/dark_mode_lab_color_space.h",
"graphics/dark_mode_settings.h", "graphics/dark_mode_settings.h",
"graphics/darkmode/darkmode_classifier.cc", "graphics/darkmode/darkmode_classifier.cc",
"graphics/darkmode/darkmode_classifier.h", "graphics/darkmode/darkmode_classifier.h",
...@@ -1008,7 +1009,6 @@ component("platform") { ...@@ -1008,7 +1009,6 @@ component("platform") {
"graphics/intercepting_canvas.h", "graphics/intercepting_canvas.h",
"graphics/interpolation_space.cc", "graphics/interpolation_space.cc",
"graphics/interpolation_space.h", "graphics/interpolation_space.h",
"graphics/lab_color_space.h",
"graphics/logging_canvas.cc", "graphics/logging_canvas.cc",
"graphics/logging_canvas.h", "graphics/logging_canvas.h",
"graphics/mailbox_texture_backing.cc", "graphics/mailbox_texture_backing.cc",
...@@ -1943,6 +1943,7 @@ source_set("blink_platform_unittests_sources") { ...@@ -1943,6 +1943,7 @@ source_set("blink_platform_unittests_sources") {
"graphics/dark_mode_color_classifier_test.cc", "graphics/dark_mode_color_classifier_test.cc",
"graphics/dark_mode_filter_test.cc", "graphics/dark_mode_filter_test.cc",
"graphics/dark_mode_image_classifier_test.cc", "graphics/dark_mode_image_classifier_test.cc",
"graphics/dark_mode_lab_color_space_test.cc",
"graphics/decoding_image_generator_test.cc", "graphics/decoding_image_generator_test.cc",
"graphics/deferred_image_decoder_test_wo_platform.cc", "graphics/deferred_image_decoder_test_wo_platform.cc",
"graphics/filters/fe_composite_test.cc", "graphics/filters/fe_composite_test.cc",
...@@ -1954,7 +1955,6 @@ source_set("blink_platform_unittests_sources") { ...@@ -1954,7 +1955,6 @@ source_set("blink_platform_unittests_sources") {
"graphics/gpu/webgpu_swap_buffer_provider_test.cc", "graphics/gpu/webgpu_swap_buffer_provider_test.cc",
"graphics/graphics_context_test.cc", "graphics/graphics_context_test.cc",
"graphics/identifiability_paint_op_digest_unittest.cc", "graphics/identifiability_paint_op_digest_unittest.cc",
"graphics/lab_color_space_test.cc",
"graphics/paint/cull_rect_test.cc", "graphics/paint/cull_rect_test.cc",
"graphics/paint/display_item_client_test.cc", "graphics/paint/display_item_client_test.cc",
"graphics/paint/display_item_raster_invalidator_test.cc", "graphics/paint/display_item_raster_invalidator_test.cc",
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "base/check.h" #include "base/check.h"
#include "base/notreached.h" #include "base/notreached.h"
#include "third_party/blink/renderer/platform/graphics/lab_color_space.h" #include "third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h"
#include "third_party/skia/include/core/SkColorFilter.h" #include "third_party/skia/include/core/SkColorFilter.h"
#include "third_party/skia/include/effects/SkHighContrastFilter.h" #include "third_party/skia/include/effects/SkHighContrastFilter.h"
#include "third_party/skia/include/effects/SkTableColorFilter.h" #include "third_party/skia/include/effects/SkTableColorFilter.h"
...@@ -48,10 +48,10 @@ class SkColorFilterWrapper : public DarkModeColorFilter { ...@@ -48,10 +48,10 @@ class SkColorFilterWrapper : public DarkModeColorFilter {
sk_sp<SkColorFilter> filter_; sk_sp<SkColorFilter> filter_;
}; };
// LabColorFilter implementation. // LABColorFilter implementation.
class LabColorFilter : public DarkModeColorFilter { class LABColorFilter : public DarkModeColorFilter {
public: public:
LabColorFilter() : transformer_(LabColorSpace::RGBLABTransformer()) { LABColorFilter() : transformer_(lab::DarkModeSRGBLABTransformer()) {
SkHighContrastConfig config; SkHighContrastConfig config;
config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness; config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness;
config.fGrayscale = false; config.fGrayscale = false;
...@@ -62,9 +62,9 @@ class LabColorFilter : public DarkModeColorFilter { ...@@ -62,9 +62,9 @@ class LabColorFilter : public DarkModeColorFilter {
SkColor InvertColor(SkColor color) const override { SkColor InvertColor(SkColor color) const override {
SkV3 rgb = {SkColorGetR(color) / 255.0f, SkColorGetG(color) / 255.0f, SkV3 rgb = {SkColorGetR(color) / 255.0f, SkColorGetG(color) / 255.0f,
SkColorGetB(color) / 255.0f}; SkColorGetB(color) / 255.0f};
SkV3 lab = transformer_.sRGBToLab(rgb); SkV3 lab = transformer_.SRGBToLAB(rgb);
lab.x = std::min(110.0f - lab.x, 100.0f); lab.x = std::min(110.0f - lab.x, 100.0f);
rgb = transformer_.LabToSRGB(lab); rgb = transformer_.LABToSRGB(lab);
SkColor inverted_color = SkColorSetARGB( SkColor inverted_color = SkColorSetARGB(
SkColorGetA(color), static_cast<unsigned int>(rgb.x * 255 + 0.5), SkColorGetA(color), static_cast<unsigned int>(rgb.x * 255 + 0.5),
...@@ -99,7 +99,7 @@ class LabColorFilter : public DarkModeColorFilter { ...@@ -99,7 +99,7 @@ class LabColorFilter : public DarkModeColorFilter {
return color; return color;
} }
const LabColorSpace::RGBLABTransformer transformer_; const lab::DarkModeSRGBLABTransformer transformer_;
sk_sp<SkColorFilter> filter_; sk_sp<SkColorFilter> filter_;
}; };
...@@ -129,7 +129,7 @@ std::unique_ptr<DarkModeColorFilter> DarkModeColorFilter::FromSettings( ...@@ -129,7 +129,7 @@ std::unique_ptr<DarkModeColorFilter> DarkModeColorFilter::FromSettings(
SkHighContrastConfig::InvertStyle::kInvertLightness, settings); SkHighContrastConfig::InvertStyle::kInvertLightness, settings);
case DarkModeInversionAlgorithm::kInvertLightnessLAB: case DarkModeInversionAlgorithm::kInvertLightnessLAB:
return std::make_unique<LabColorFilter>(); return std::make_unique<LABColorFilter>();
} }
NOTREACHED(); NOTREACHED();
} }
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include <memory> #include <memory>
#include "third_party/blink/renderer/platform/graphics/dark_mode_settings.h" #include "third_party/blink/renderer/platform/graphics/dark_mode_settings.h"
#include "third_party/blink/renderer/platform/graphics/lab_color_space.h"
#include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkRefCnt.h" #include "third_party/skia/include/core/SkRefCnt.h"
......
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_LAB_COLOR_SPACE_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_DARK_MODE_LAB_COLOR_SPACE_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_LAB_COLOR_SPACE_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_DARK_MODE_LAB_COLOR_SPACE_H_
#include <algorithm> #include <algorithm>
#include <cmath> #include <cmath>
...@@ -7,8 +7,12 @@ ...@@ -7,8 +7,12 @@
#include "base/check.h" #include "base/check.h"
#include "third_party/skia/include/core/SkM44.h" #include "third_party/skia/include/core/SkM44.h"
// Class to handle color transformation between RGB and CIE L*a*b* color spaces. namespace blink {
namespace LabColorSpace {
// TODO(prashant.n): Hide implementation details to .cc file.
// Namespace to handle color transformation between RGB and CIE L*a*b* color
// spaces.
namespace lab {
static constexpr SkV3 kIlluminantD50 = {0.964212f, 1.0f, 0.825188f}; static constexpr SkV3 kIlluminantD50 = {0.964212f, 1.0f, 0.825188f};
static constexpr SkV3 kIlluminantD65 = {0.95042855f, 1.0f, 1.0889004f}; static constexpr SkV3 kIlluminantD65 = {0.95042855f, 1.0f, 1.0889004f};
...@@ -40,9 +44,9 @@ inline SkM44 ChromaticAdaptation(const SkM44& matrix, ...@@ -40,9 +44,9 @@ inline SkM44 ChromaticAdaptation(const SkM44& matrix,
return inverse * (SkM44::Scale(lms.x, lms.y, lms.z) * matrix); return inverse * (SkM44::Scale(lms.x, lms.y, lms.z) * matrix);
} }
class sRGBColorSpace { class DarkModeSRGBColorSpace {
public: public:
sRGBColorSpace() { DarkModeSRGBColorSpace() {
bool success = transform_.invert(&inverseTransform_); bool success = transform_.invert(&inverseTransform_);
DCHECK(success); DCHECK(success);
} }
...@@ -115,7 +119,7 @@ class sRGBColorSpace { ...@@ -115,7 +119,7 @@ class sRGBColorSpace {
SkM44 inverseTransform_; SkM44 inverseTransform_;
}; };
class LABColorSpace { class DarkModeLABColorSpace {
public: public:
// See // See
// https://en.wikipedia.org/wiki/CIELAB_color_space#Reverse_transformation. // https://en.wikipedia.org/wiki/CIELAB_color_space#Reverse_transformation.
...@@ -158,23 +162,25 @@ class LABColorSpace { ...@@ -158,23 +162,25 @@ class LABColorSpace {
static const constexpr float kSigma3 = 216.0f / 24389.0f; static const constexpr float kSigma3 = 216.0f / 24389.0f;
}; };
class RGBLABTransformer { class DarkModeSRGBLABTransformer {
public: public:
SkV3 sRGBToLab(const SkV3& rgb) const { SkV3 SRGBToLAB(const SkV3& rgb) const {
SkV3 xyz = rgb_space_.ToXYZ(rgb); SkV3 xyz = srgb_space_.ToXYZ(rgb);
return lab_space_.FromXYZ(xyz); return lab_space_.FromXYZ(xyz);
} }
SkV3 LabToSRGB(const SkV3& lab) const { SkV3 LABToSRGB(const SkV3& lab) const {
SkV3 xyz = lab_space_.ToXYZ(lab); SkV3 xyz = lab_space_.ToXYZ(lab);
return rgb_space_.FromXYZ(xyz); return srgb_space_.FromXYZ(xyz);
} }
private: private:
sRGBColorSpace rgb_space_ = sRGBColorSpace(); DarkModeSRGBColorSpace srgb_space_ = DarkModeSRGBColorSpace();
LABColorSpace lab_space_ = LABColorSpace(); DarkModeLABColorSpace lab_space_ = DarkModeLABColorSpace();
}; };
} // namespace LabColorSpace } // namespace lab
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_LAB_COLOR_SPACE_H_ #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_DARK_MODE_LAB_COLOR_SPACE_H_
#include "third_party/blink/renderer/platform/graphics/lab_color_space.h" #include "third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace LabColorSpace { namespace blink {
static constexpr SkV3 rgbReferenceWhite = {1.0f, 1.0f, 1.0f}; namespace lab {
static constexpr SkV3 labReferenceWhite = {100.0f, 0.0f, 0.0f};
static constexpr float epsilon = 0.0001;
class LabColorSpaceTest : public testing::Test { static constexpr SkV3 kSRGBReferenceWhite = {1.0f, 1.0f, 1.0f};
static constexpr SkV3 kLABReferenceWhite = {100.0f, 0.0f, 0.0f};
static constexpr float kEpsilon = 0.0001;
class DarkModeLABColorSpaceTest : public testing::Test {
public: public:
void AssertColorsEqual(const SkV3& color1, const SkV3& color2) { void AssertColorsEqual(const SkV3& color1, const SkV3& color2) {
EXPECT_NEAR(color1.x, color2.x, epsilon); EXPECT_NEAR(color1.x, color2.x, kEpsilon);
EXPECT_NEAR(color1.y, color2.y, epsilon); EXPECT_NEAR(color1.y, color2.y, kEpsilon);
EXPECT_NEAR(color1.z, color2.z, epsilon); EXPECT_NEAR(color1.z, color2.z, kEpsilon);
} }
}; };
TEST_F(LabColorSpaceTest, XYZTranslation) { TEST_F(DarkModeLABColorSpaceTest, XYZTranslation) {
sRGBColorSpace colorSpace = sRGBColorSpace(); DarkModeSRGBColorSpace color_space = DarkModeSRGBColorSpace();
// Check whether white transformation is correct // Check whether white transformation is correct.
SkV3 xyzWhite = colorSpace.ToXYZ(rgbReferenceWhite); SkV3 xyz_white = color_space.ToXYZ(kSRGBReferenceWhite);
AssertColorsEqual(xyzWhite, kIlluminantD50); AssertColorsEqual(xyz_white, kIlluminantD50);
SkV3 rgbWhite = colorSpace.FromXYZ(kIlluminantD50); SkV3 rgb_white = color_space.FromXYZ(kIlluminantD50);
AssertColorsEqual(rgbWhite, rgbReferenceWhite); AssertColorsEqual(rgb_white, kSRGBReferenceWhite);
// Check whether transforming sRGB to XYZ and back gives the same RGB values // Check whether transforming sRGB to XYZ and back gives the same RGB values
// for some random colors with different r, g, b components. // for some random colors with different r, g, b components.
...@@ -32,22 +34,22 @@ TEST_F(LabColorSpaceTest, XYZTranslation) { ...@@ -32,22 +34,22 @@ TEST_F(LabColorSpaceTest, XYZTranslation) {
for (unsigned g = 0; r <= 255; r += 50) { for (unsigned g = 0; r <= 255; r += 50) {
for (unsigned b = 0; r <= 255; r += 60) { for (unsigned b = 0; r <= 255; r += 60) {
SkV3 rgb = {r / 255.0f, g / 255.0f, b / 255.0f}; SkV3 rgb = {r / 255.0f, g / 255.0f, b / 255.0f};
SkV3 xyz = colorSpace.ToXYZ(rgb); SkV3 xyz = color_space.ToXYZ(rgb);
AssertColorsEqual(rgb, colorSpace.FromXYZ(xyz)); AssertColorsEqual(rgb, color_space.FromXYZ(xyz));
} }
} }
} }
} }
TEST_F(LabColorSpaceTest, LabTranslation) { TEST_F(DarkModeLABColorSpaceTest, LABTranslation) {
RGBLABTransformer transformer = RGBLABTransformer(); DarkModeSRGBLABTransformer transformer = DarkModeSRGBLABTransformer();
// Check whether white transformation is correct // Check whether white transformation is correct.
SkV3 labWhite = transformer.sRGBToLab(rgbReferenceWhite); SkV3 lab_white = transformer.SRGBToLAB(kSRGBReferenceWhite);
AssertColorsEqual(labWhite, labReferenceWhite); AssertColorsEqual(lab_white, kLABReferenceWhite);
SkV3 rgbWhite = transformer.LabToSRGB(labReferenceWhite); SkV3 rgb_white = transformer.LABToSRGB(kLABReferenceWhite);
AssertColorsEqual(rgbWhite, rgbReferenceWhite); AssertColorsEqual(rgb_white, kSRGBReferenceWhite);
// Check whether transforming sRGB to Lab and back gives the same RGB values // Check whether transforming sRGB to Lab and back gives the same RGB values
// for some random colors with different r, g, b components. // for some random colors with different r, g, b components.
...@@ -55,11 +57,13 @@ TEST_F(LabColorSpaceTest, LabTranslation) { ...@@ -55,11 +57,13 @@ TEST_F(LabColorSpaceTest, LabTranslation) {
for (unsigned g = 0; r <= 255; r += 50) { for (unsigned g = 0; r <= 255; r += 50) {
for (unsigned b = 0; r <= 255; r += 60) { for (unsigned b = 0; r <= 255; r += 60) {
SkV3 rgb = {r / 255.0f, g / 255.0f, b / 255.0f}; SkV3 rgb = {r / 255.0f, g / 255.0f, b / 255.0f};
SkV3 lab = transformer.sRGBToLab(rgb); SkV3 lab = transformer.SRGBToLAB(rgb);
AssertColorsEqual(rgb, transformer.LabToSRGB(lab)); AssertColorsEqual(rgb, transformer.LABToSRGB(lab));
} }
} }
} }
} }
} // namespace LabColorSpace } // namespace lab
} // namespace blink
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment