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") {
"graphics/dark_mode_filter.h",
"graphics/dark_mode_image_classifier.cc",
"graphics/dark_mode_image_classifier.h",
"graphics/dark_mode_lab_color_space.h",
"graphics/dark_mode_settings.h",
"graphics/darkmode/darkmode_classifier.cc",
"graphics/darkmode/darkmode_classifier.h",
......@@ -1008,7 +1009,6 @@ component("platform") {
"graphics/intercepting_canvas.h",
"graphics/interpolation_space.cc",
"graphics/interpolation_space.h",
"graphics/lab_color_space.h",
"graphics/logging_canvas.cc",
"graphics/logging_canvas.h",
"graphics/mailbox_texture_backing.cc",
......@@ -1943,6 +1943,7 @@ source_set("blink_platform_unittests_sources") {
"graphics/dark_mode_color_classifier_test.cc",
"graphics/dark_mode_filter_test.cc",
"graphics/dark_mode_image_classifier_test.cc",
"graphics/dark_mode_lab_color_space_test.cc",
"graphics/decoding_image_generator_test.cc",
"graphics/deferred_image_decoder_test_wo_platform.cc",
"graphics/filters/fe_composite_test.cc",
......@@ -1954,7 +1955,6 @@ source_set("blink_platform_unittests_sources") {
"graphics/gpu/webgpu_swap_buffer_provider_test.cc",
"graphics/graphics_context_test.cc",
"graphics/identifiability_paint_op_digest_unittest.cc",
"graphics/lab_color_space_test.cc",
"graphics/paint/cull_rect_test.cc",
"graphics/paint/display_item_client_test.cc",
"graphics/paint/display_item_raster_invalidator_test.cc",
......
......@@ -6,7 +6,7 @@
#include "base/check.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/effects/SkHighContrastFilter.h"
#include "third_party/skia/include/effects/SkTableColorFilter.h"
......@@ -48,10 +48,10 @@ class SkColorFilterWrapper : public DarkModeColorFilter {
sk_sp<SkColorFilter> filter_;
};
// LabColorFilter implementation.
class LabColorFilter : public DarkModeColorFilter {
// LABColorFilter implementation.
class LABColorFilter : public DarkModeColorFilter {
public:
LabColorFilter() : transformer_(LabColorSpace::RGBLABTransformer()) {
LABColorFilter() : transformer_(lab::DarkModeSRGBLABTransformer()) {
SkHighContrastConfig config;
config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness;
config.fGrayscale = false;
......@@ -62,9 +62,9 @@ class LabColorFilter : public DarkModeColorFilter {
SkColor InvertColor(SkColor color) const override {
SkV3 rgb = {SkColorGetR(color) / 255.0f, SkColorGetG(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);
rgb = transformer_.LabToSRGB(lab);
rgb = transformer_.LABToSRGB(lab);
SkColor inverted_color = SkColorSetARGB(
SkColorGetA(color), static_cast<unsigned int>(rgb.x * 255 + 0.5),
......@@ -99,7 +99,7 @@ class LabColorFilter : public DarkModeColorFilter {
return color;
}
const LabColorSpace::RGBLABTransformer transformer_;
const lab::DarkModeSRGBLABTransformer transformer_;
sk_sp<SkColorFilter> filter_;
};
......@@ -129,7 +129,7 @@ std::unique_ptr<DarkModeColorFilter> DarkModeColorFilter::FromSettings(
SkHighContrastConfig::InvertStyle::kInvertLightness, settings);
case DarkModeInversionAlgorithm::kInvertLightnessLAB:
return std::make_unique<LabColorFilter>();
return std::make_unique<LABColorFilter>();
}
NOTREACHED();
}
......
......@@ -8,7 +8,6 @@
#include <memory>
#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/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkRefCnt.h"
......
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_LAB_COLOR_SPACE_H_
#define 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_DARK_MODE_LAB_COLOR_SPACE_H_
#include <algorithm>
#include <cmath>
......@@ -7,8 +7,12 @@
#include "base/check.h"
#include "third_party/skia/include/core/SkM44.h"
// Class to handle color transformation between RGB and CIE L*a*b* color spaces.
namespace LabColorSpace {
namespace blink {
// 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 kIlluminantD65 = {0.95042855f, 1.0f, 1.0889004f};
......@@ -40,9 +44,9 @@ inline SkM44 ChromaticAdaptation(const SkM44& matrix,
return inverse * (SkM44::Scale(lms.x, lms.y, lms.z) * matrix);
}
class sRGBColorSpace {
class DarkModeSRGBColorSpace {
public:
sRGBColorSpace() {
DarkModeSRGBColorSpace() {
bool success = transform_.invert(&inverseTransform_);
DCHECK(success);
}
......@@ -115,7 +119,7 @@ class sRGBColorSpace {
SkM44 inverseTransform_;
};
class LABColorSpace {
class DarkModeLABColorSpace {
public:
// See
// https://en.wikipedia.org/wiki/CIELAB_color_space#Reverse_transformation.
......@@ -158,23 +162,25 @@ class LABColorSpace {
static const constexpr float kSigma3 = 216.0f / 24389.0f;
};
class RGBLABTransformer {
class DarkModeSRGBLABTransformer {
public:
SkV3 sRGBToLab(const SkV3& rgb) const {
SkV3 xyz = rgb_space_.ToXYZ(rgb);
SkV3 SRGBToLAB(const SkV3& rgb) const {
SkV3 xyz = srgb_space_.ToXYZ(rgb);
return lab_space_.FromXYZ(xyz);
}
SkV3 LabToSRGB(const SkV3& lab) const {
SkV3 LABToSRGB(const SkV3& lab) const {
SkV3 xyz = lab_space_.ToXYZ(lab);
return rgb_space_.FromXYZ(xyz);
return srgb_space_.FromXYZ(xyz);
}
private:
sRGBColorSpace rgb_space_ = sRGBColorSpace();
LABColorSpace lab_space_ = LABColorSpace();
DarkModeSRGBColorSpace srgb_space_ = DarkModeSRGBColorSpace();
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"
namespace LabColorSpace {
namespace blink {
static constexpr SkV3 rgbReferenceWhite = {1.0f, 1.0f, 1.0f};
static constexpr SkV3 labReferenceWhite = {100.0f, 0.0f, 0.0f};
static constexpr float epsilon = 0.0001;
namespace lab {
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:
void AssertColorsEqual(const SkV3& color1, const SkV3& color2) {
EXPECT_NEAR(color1.x, color2.x, epsilon);
EXPECT_NEAR(color1.y, color2.y, epsilon);
EXPECT_NEAR(color1.z, color2.z, epsilon);
EXPECT_NEAR(color1.x, color2.x, kEpsilon);
EXPECT_NEAR(color1.y, color2.y, kEpsilon);
EXPECT_NEAR(color1.z, color2.z, kEpsilon);
}
};
TEST_F(LabColorSpaceTest, XYZTranslation) {
sRGBColorSpace colorSpace = sRGBColorSpace();
TEST_F(DarkModeLABColorSpaceTest, XYZTranslation) {
DarkModeSRGBColorSpace color_space = DarkModeSRGBColorSpace();
// Check whether white transformation is correct
SkV3 xyzWhite = colorSpace.ToXYZ(rgbReferenceWhite);
AssertColorsEqual(xyzWhite, kIlluminantD50);
// Check whether white transformation is correct.
SkV3 xyz_white = color_space.ToXYZ(kSRGBReferenceWhite);
AssertColorsEqual(xyz_white, kIlluminantD50);
SkV3 rgbWhite = colorSpace.FromXYZ(kIlluminantD50);
AssertColorsEqual(rgbWhite, rgbReferenceWhite);
SkV3 rgb_white = color_space.FromXYZ(kIlluminantD50);
AssertColorsEqual(rgb_white, kSRGBReferenceWhite);
// Check whether transforming sRGB to XYZ and back gives the same RGB values
// for some random colors with different r, g, b components.
......@@ -32,22 +34,22 @@ TEST_F(LabColorSpaceTest, XYZTranslation) {
for (unsigned g = 0; r <= 255; r += 50) {
for (unsigned b = 0; r <= 255; r += 60) {
SkV3 rgb = {r / 255.0f, g / 255.0f, b / 255.0f};
SkV3 xyz = colorSpace.ToXYZ(rgb);
AssertColorsEqual(rgb, colorSpace.FromXYZ(xyz));
SkV3 xyz = color_space.ToXYZ(rgb);
AssertColorsEqual(rgb, color_space.FromXYZ(xyz));
}
}
}
}
TEST_F(LabColorSpaceTest, LabTranslation) {
RGBLABTransformer transformer = RGBLABTransformer();
TEST_F(DarkModeLABColorSpaceTest, LABTranslation) {
DarkModeSRGBLABTransformer transformer = DarkModeSRGBLABTransformer();
// Check whether white transformation is correct
SkV3 labWhite = transformer.sRGBToLab(rgbReferenceWhite);
AssertColorsEqual(labWhite, labReferenceWhite);
// Check whether white transformation is correct.
SkV3 lab_white = transformer.SRGBToLAB(kSRGBReferenceWhite);
AssertColorsEqual(lab_white, kLABReferenceWhite);
SkV3 rgbWhite = transformer.LabToSRGB(labReferenceWhite);
AssertColorsEqual(rgbWhite, rgbReferenceWhite);
SkV3 rgb_white = transformer.LABToSRGB(kLABReferenceWhite);
AssertColorsEqual(rgb_white, kSRGBReferenceWhite);
// Check whether transforming sRGB to Lab and back gives the same RGB values
// for some random colors with different r, g, b components.
......@@ -55,11 +57,13 @@ TEST_F(LabColorSpaceTest, LabTranslation) {
for (unsigned g = 0; r <= 255; r += 50) {
for (unsigned b = 0; r <= 255; r += 60) {
SkV3 rgb = {r / 255.0f, g / 255.0f, b / 255.0f};
SkV3 lab = transformer.sRGBToLab(rgb);
AssertColorsEqual(rgb, transformer.LabToSRGB(lab));
SkV3 lab = transformer.SRGBToLAB(rgb);
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