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

Replace SkRect by SkIRect in dark mode module.

As dark mode image classification logic works on integral values,
making APIs accept SkIRect will help callers decide how to round
the SkRects.

This patch rounds |src| and |dst| by calling SkRect::roundOut() in
DarkModeFilterHelper::ApplyToImageIfNeeded().

Bug: 1094005
Change-Id: I86dead7936932e207d0e1a3540de1741c27587d3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2389862
Commit-Queue: Prashant Nevase <prashant.n@samsung.com>
Reviewed-by: default avatarKhushal <khushalsagar@chromium.org>
Reviewed-by: default avatarStephen Chenney <schenney@chromium.org>
Reviewed-by: default avatarPhilip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#810228}
parent c221f900
...@@ -148,8 +148,8 @@ SkColor DarkModeFilter::InvertColorIfNeeded(SkColor color, ElementRole role) { ...@@ -148,8 +148,8 @@ SkColor DarkModeFilter::InvertColorIfNeeded(SkColor color, ElementRole role) {
} }
DarkModeResult DarkModeFilter::AnalyzeShouldApplyToImage( DarkModeResult DarkModeFilter::AnalyzeShouldApplyToImage(
const SkRect& src, const SkIRect& src,
const SkRect& dst) const { const SkIRect& dst) const {
if (settings().image_policy == DarkModeImagePolicy::kFilterNone) if (settings().image_policy == DarkModeImagePolicy::kFilterNone)
return DarkModeResult::kDoNotApplyFilter; return DarkModeResult::kDoNotApplyFilter;
...@@ -172,8 +172,8 @@ DarkModeResult DarkModeFilter::AnalyzeShouldApplyToImage( ...@@ -172,8 +172,8 @@ DarkModeResult DarkModeFilter::AnalyzeShouldApplyToImage(
} }
sk_sp<SkColorFilter> DarkModeFilter::ApplyToImage(const SkPixmap& pixmap, sk_sp<SkColorFilter> DarkModeFilter::ApplyToImage(const SkPixmap& pixmap,
const SkRect& src, const SkIRect& src,
const SkRect& dst) { const SkIRect& dst) {
DCHECK(AnalyzeShouldApplyToImage(src, dst) == DarkModeResult::kNotClassified); DCHECK(AnalyzeShouldApplyToImage(src, dst) == DarkModeResult::kNotClassified);
DCHECK(settings().image_policy == DarkModeImagePolicy::kFilterSmart); DCHECK(settings().image_policy == DarkModeImagePolicy::kFilterSmart);
DCHECK(image_filter_); DCHECK(image_filter_);
......
...@@ -51,8 +51,8 @@ class PLATFORM_EXPORT DarkModeFilter { ...@@ -51,8 +51,8 @@ class PLATFORM_EXPORT DarkModeFilter {
// get the color filter GetImageFilter() should be called. // get the color filter GetImageFilter() should be called.
// DarkModeResult::kNotClassified - Dark mode filter should be applied and to // DarkModeResult::kNotClassified - Dark mode filter should be applied and to
// get the color filter ApplyToImage() should be called. // get the color filter ApplyToImage() should be called.
DarkModeResult AnalyzeShouldApplyToImage(const SkRect& src, DarkModeResult AnalyzeShouldApplyToImage(const SkIRect& src,
const SkRect& dst) const; const SkIRect& dst) const;
// Returns dark mode color filter based on the classification done on // Returns dark mode color filter based on the classification done on
// |pixmap|. The image cannot be classified if pixmap is empty or |src| is // |pixmap|. The image cannot be classified if pixmap is empty or |src| is
...@@ -61,8 +61,8 @@ class PLATFORM_EXPORT DarkModeFilter { ...@@ -61,8 +61,8 @@ class PLATFORM_EXPORT DarkModeFilter {
// appropriate function call. This function should be called only if image // appropriate function call. This function should be called only if image
// policy is set to DarkModeImagePolicy::kFilterSmart. // policy is set to DarkModeImagePolicy::kFilterSmart.
sk_sp<SkColorFilter> ApplyToImage(const SkPixmap& pixmap, sk_sp<SkColorFilter> ApplyToImage(const SkPixmap& pixmap,
const SkRect& src, const SkIRect& src,
const SkRect& dst); const SkIRect& dst);
// Returns dark mode color filter for images. Before calling this function // Returns dark mode color filter for images. Before calling this function
// AnalyzeShouldApplyToImage() must be called for early out or deciding // AnalyzeShouldApplyToImage() must be called for early out or deciding
......
...@@ -27,16 +27,20 @@ void DarkModeFilterHelper::ApplyToImageIfNeeded( ...@@ -27,16 +27,20 @@ void DarkModeFilterHelper::ApplyToImageIfNeeded(
// this function. See: https://crbug.com/1094781. // this function. See: https://crbug.com/1094781.
DCHECK(dark_mode_filter->IsDarkModeActive()); DCHECK(dark_mode_filter->IsDarkModeActive());
SkIRect rounded_src = src.roundOut();
SkIRect rounded_dst = dst.roundOut();
sk_sp<SkColorFilter> filter; sk_sp<SkColorFilter> filter;
DarkModeResult result = dark_mode_filter->AnalyzeShouldApplyToImage(src, dst); DarkModeResult result =
dark_mode_filter->AnalyzeShouldApplyToImage(rounded_src, rounded_dst);
if (result == DarkModeResult::kApplyFilter) { if (result == DarkModeResult::kApplyFilter) {
filter = dark_mode_filter->GetImageFilter(); filter = dark_mode_filter->GetImageFilter();
} else if (result == DarkModeResult::kNotClassified) { } else if (result == DarkModeResult::kNotClassified) {
DarkModeImageCache* cache = image->GetDarkModeImageCache(); DarkModeImageCache* cache = image->GetDarkModeImageCache();
DCHECK(cache); DCHECK(cache);
if (cache->Exists(src)) { if (cache->Exists(rounded_src)) {
filter = cache->Get(src); filter = cache->Get(rounded_src);
} else { } else {
// Performance warning: Calling this function will synchronously decode // Performance warning: Calling this function will synchronously decode
// image. // image.
...@@ -44,8 +48,8 @@ void DarkModeFilterHelper::ApplyToImageIfNeeded( ...@@ -44,8 +48,8 @@ void DarkModeFilterHelper::ApplyToImageIfNeeded(
image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation); image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation);
SkPixmap pixmap; SkPixmap pixmap;
bitmap.peekPixels(&pixmap); bitmap.peekPixels(&pixmap);
filter = dark_mode_filter->ApplyToImage(pixmap, src, dst); filter = dark_mode_filter->ApplyToImage(pixmap, rounded_src, rounded_dst);
cache->Add(src, filter); cache->Add(rounded_src, filter);
} }
} }
......
...@@ -118,38 +118,38 @@ TEST(DarkModeFilterTest, AnalyzeShouldApplyToImage) { ...@@ -118,38 +118,38 @@ TEST(DarkModeFilterTest, AnalyzeShouldApplyToImage) {
filter.UpdateSettings(settings); filter.UpdateSettings(settings);
// |dst| is smaller than threshold size. // |dst| is smaller than threshold size.
EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkRect::MakeWH(100, 100), EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkIRect::MakeWH(100, 100),
SkRect::MakeWH(100, 100)), SkIRect::MakeWH(100, 100)),
DarkModeResult::kNotClassified); DarkModeResult::kNotClassified);
// |dst| is smaller than threshold size, even |src| is larger. // |dst| is smaller than threshold size, even |src| is larger.
EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkRect::MakeWH(200, 200), EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkIRect::MakeWH(200, 200),
SkRect::MakeWH(100, 100)), SkIRect::MakeWH(100, 100)),
DarkModeResult::kNotClassified); DarkModeResult::kNotClassified);
// |dst| is smaller than threshold size, |src| is smaller. // |dst| is smaller than threshold size, |src| is smaller.
EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkRect::MakeWH(20, 20), EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkIRect::MakeWH(20, 20),
SkRect::MakeWH(100, 100)), SkIRect::MakeWH(100, 100)),
DarkModeResult::kNotClassified); DarkModeResult::kNotClassified);
// |src| having very smaller width, even |dst| is larger than threshold size. // |src| having very smaller width, even |dst| is larger than threshold size.
EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkRect::MakeWH(5, 200), EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkIRect::MakeWH(5, 200),
SkRect::MakeWH(5, 200)), SkIRect::MakeWH(5, 200)),
DarkModeResult::kNotClassified); DarkModeResult::kNotClassified);
// |src| having very smaller height, even |dst| is larger than threshold size. // |src| having very smaller height, even |dst| is larger than threshold size.
EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkRect::MakeWH(200, 5), EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkIRect::MakeWH(200, 5),
SkRect::MakeWH(200, 5)), SkIRect::MakeWH(200, 5)),
DarkModeResult::kNotClassified); DarkModeResult::kNotClassified);
// |dst| is larger than threshold size. // |dst| is larger than threshold size.
EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkRect::MakeWH(20, 20), EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkIRect::MakeWH(20, 20),
SkRect::MakeWH(200, 200)), SkIRect::MakeWH(200, 200)),
DarkModeResult::kDoNotApplyFilter); DarkModeResult::kDoNotApplyFilter);
// |dst| is larger than threshold size. // |dst| is larger than threshold size.
EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkRect::MakeWH(20, 200), EXPECT_EQ(filter.AnalyzeShouldApplyToImage(SkIRect::MakeWH(20, 200),
SkRect::MakeWH(20, 200)), SkIRect::MakeWH(20, 200)),
DarkModeResult::kDoNotApplyFilter); DarkModeResult::kDoNotApplyFilter);
} }
......
...@@ -20,16 +20,16 @@ class PLATFORM_EXPORT DarkModeImageCache { ...@@ -20,16 +20,16 @@ class PLATFORM_EXPORT DarkModeImageCache {
DarkModeImageCache() = default; DarkModeImageCache() = default;
~DarkModeImageCache() = default; ~DarkModeImageCache() = default;
bool Exists(const SkRect& src) { bool Exists(const SkIRect& src) {
return cache_.find(DarkModeKey(src)) != cache_.end(); return cache_.find(DarkModeKey(src)) != cache_.end();
} }
sk_sp<SkColorFilter> Get(const SkRect& src) { sk_sp<SkColorFilter> Get(const SkIRect& src) {
auto result = cache_.find(DarkModeKey(src)); auto result = cache_.find(DarkModeKey(src));
return (result != cache_.end()) ? result->second : nullptr; return (result != cache_.end()) ? result->second : nullptr;
} }
void Add(const SkRect& src, sk_sp<SkColorFilter> dark_mode_color_filter) { void Add(const SkIRect& src, sk_sp<SkColorFilter> dark_mode_color_filter) {
DCHECK(!Exists(src)); DCHECK(!Exists(src));
cache_.emplace(DarkModeKey(src), std::move(dark_mode_color_filter)); cache_.emplace(DarkModeKey(src), std::move(dark_mode_color_filter));
...@@ -42,14 +42,14 @@ class PLATFORM_EXPORT DarkModeImageCache { ...@@ -42,14 +42,14 @@ class PLATFORM_EXPORT DarkModeImageCache {
private: private:
struct DarkModeKeyHash; struct DarkModeKeyHash;
struct DarkModeKey { struct DarkModeKey {
explicit DarkModeKey(SkRect src) : src_(src) {} explicit DarkModeKey(SkIRect src) : src_(src) {}
bool operator==(const DarkModeKey& other) const { bool operator==(const DarkModeKey& other) const {
return src_ == other.src_; return src_ == other.src_;
} }
private: private:
SkRect src_; SkIRect src_;
friend struct DarkModeImageCache::DarkModeKeyHash; friend struct DarkModeImageCache::DarkModeKeyHash;
}; };
......
...@@ -18,9 +18,9 @@ TEST_F(DarkModeImageCacheTest, Caching) { ...@@ -18,9 +18,9 @@ TEST_F(DarkModeImageCacheTest, Caching) {
config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness; config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness;
sk_sp<SkColorFilter> filter = SkHighContrastFilter::Make(config); sk_sp<SkColorFilter> filter = SkHighContrastFilter::Make(config);
SkRect src1 = SkRect::MakeXYWH(0, 0, 50, 50); SkIRect src1 = SkIRect::MakeXYWH(0, 0, 50, 50);
SkRect src2 = SkRect::MakeXYWH(5, 20, 100, 100); SkIRect src2 = SkIRect::MakeXYWH(5, 20, 100, 100);
SkRect src3 = SkRect::MakeXYWH(6, -9, 50, 50); SkIRect src3 = SkIRect::MakeXYWH(6, -9, 50, 50);
EXPECT_FALSE(cache.Exists(src1)); EXPECT_FALSE(cache.Exists(src1));
EXPECT_EQ(cache.Get(src1), nullptr); EXPECT_EQ(cache.Get(src1), nullptr);
......
...@@ -41,7 +41,7 @@ DarkModeImageClassifier::DarkModeImageClassifier() = default; ...@@ -41,7 +41,7 @@ DarkModeImageClassifier::DarkModeImageClassifier() = default;
DarkModeImageClassifier::~DarkModeImageClassifier() = default; DarkModeImageClassifier::~DarkModeImageClassifier() = default;
DarkModeResult DarkModeImageClassifier::Classify(const SkPixmap& pixmap, DarkModeResult DarkModeImageClassifier::Classify(const SkPixmap& pixmap,
const SkRect& src) { const SkIRect& src) {
// Empty pixmap or |src| out of bounds cannot be classified. // Empty pixmap or |src| out of bounds cannot be classified.
SkIRect bounds = pixmap.bounds(); SkIRect bounds = pixmap.bounds();
if (src.isEmpty() || bounds.isEmpty() || !bounds.contains(src) || if (src.isEmpty() || bounds.isEmpty() || !bounds.contains(src) ||
...@@ -57,7 +57,7 @@ DarkModeResult DarkModeImageClassifier::Classify(const SkPixmap& pixmap, ...@@ -57,7 +57,7 @@ DarkModeResult DarkModeImageClassifier::Classify(const SkPixmap& pixmap,
base::Optional<DarkModeImageClassifier::Features> base::Optional<DarkModeImageClassifier::Features>
DarkModeImageClassifier::GetFeatures(const SkPixmap& pixmap, DarkModeImageClassifier::GetFeatures(const SkPixmap& pixmap,
const SkRect& src) { const SkIRect& src) {
DCHECK(!pixmap.bounds().isEmpty()); DCHECK(!pixmap.bounds().isEmpty());
float transparency_ratio; float transparency_ratio;
float background_ratio; float background_ratio;
...@@ -77,31 +77,17 @@ DarkModeImageClassifier::GetFeatures(const SkPixmap& pixmap, ...@@ -77,31 +77,17 @@ DarkModeImageClassifier::GetFeatures(const SkPixmap& pixmap,
// distributed blocks through its width and height, each block is sampled, and // distributed blocks through its width and height, each block is sampled, and
// checked to see if it seems to be background or foreground. // checked to see if it seems to be background or foreground.
void DarkModeImageClassifier::GetSamples(const SkPixmap& pixmap, void DarkModeImageClassifier::GetSamples(const SkPixmap& pixmap,
const SkRect& src, const SkIRect& src,
std::vector<SkColor>* sampled_pixels, std::vector<SkColor>* sampled_pixels,
float* transparency_ratio, float* transparency_ratio,
float* background_ratio) { float* background_ratio) {
int num_sampled_pixels = kMaxSampledPixels; DCHECK(!src.isEmpty());
int num_blocks_x = kMaxBlocks;
int num_blocks_y = kMaxBlocks;
// TODO(prashant.n): Make src as SkIRect for removing flooring and rounding.
// Let caller control the rounding.
// Crash reports indicate that the src can be less than 1, so make
// sure it goes to 1. We know it is not 0 because GetBitmap above
// will return false for zero-sized src.
IntSize rounded_src(ceil(src.width()), ceil(src.height()));
if (num_sampled_pixels > rounded_src.Width() * rounded_src.Height())
num_sampled_pixels = rounded_src.Width() * rounded_src.Height();
if (num_blocks_x > rounded_src.Width())
num_blocks_x = rounded_src.Width();
if (num_blocks_y > rounded_src.Height())
num_blocks_y = rounded_src.Height();
int num_sampled_pixels =
std::min(kMaxSampledPixels, src.width() * src.height());
int num_blocks_x = std::min(kMaxBlocks, src.width());
int num_blocks_y = std::min(kMaxBlocks, src.height());
int pixels_per_block = num_sampled_pixels / (num_blocks_x * num_blocks_y); int pixels_per_block = num_sampled_pixels / (num_blocks_x * num_blocks_y);
int transparent_pixels = 0; int transparent_pixels = 0;
int opaque_pixels = 0; int opaque_pixels = 0;
int blocks_count = 0; int blocks_count = 0;
...@@ -109,15 +95,16 @@ void DarkModeImageClassifier::GetSamples(const SkPixmap& pixmap, ...@@ -109,15 +95,16 @@ void DarkModeImageClassifier::GetSamples(const SkPixmap& pixmap,
std::vector<int> horizontal_grid(num_blocks_x + 1); std::vector<int> horizontal_grid(num_blocks_x + 1);
std::vector<int> vertical_grid(num_blocks_y + 1); std::vector<int> vertical_grid(num_blocks_y + 1);
float block_width = static_cast<float>(src.width()) / num_blocks_x;
float block_height = static_cast<float>(src.height()) / num_blocks_y;
for (int block = 0; block <= num_blocks_x; block++) { for (int block = 0; block <= num_blocks_x; block++) {
horizontal_grid[block] = horizontal_grid[block] =
src.x() + static_cast<int>(round(block * src.width() / src.x() + static_cast<int>(round(block_width * block));
static_cast<float>(num_blocks_x)));
} }
for (int block = 0; block <= num_blocks_y; block++) { for (int block = 0; block <= num_blocks_y; block++) {
vertical_grid[block] = vertical_grid[block] =
src.y() + static_cast<int>(round(block * src.height() / src.y() + static_cast<int>(round(block_height * block));
static_cast<float>(num_blocks_y)));
} }
sampled_pixels->clear(); sampled_pixels->clear();
......
...@@ -41,7 +41,7 @@ class PLATFORM_EXPORT DarkModeImageClassifier { ...@@ -41,7 +41,7 @@ class PLATFORM_EXPORT DarkModeImageClassifier {
float background_ratio; float background_ratio;
}; };
DarkModeResult Classify(const SkPixmap& pixmap, const SkRect& src); DarkModeResult Classify(const SkPixmap& pixmap, const SkIRect& src);
private: private:
DarkModeResult ClassifyWithFeatures(const Features& features); DarkModeResult ClassifyWithFeatures(const Features& features);
...@@ -50,11 +50,11 @@ class PLATFORM_EXPORT DarkModeImageClassifier { ...@@ -50,11 +50,11 @@ class PLATFORM_EXPORT DarkModeImageClassifier {
enum class ColorMode { kColor = 0, kGrayscale = 1 }; enum class ColorMode { kColor = 0, kGrayscale = 1 };
base::Optional<Features> GetFeatures(const SkPixmap& pixmap, base::Optional<Features> GetFeatures(const SkPixmap& pixmap,
const SkRect& src); const SkIRect& src);
// Extracts a sample set of pixels (|sampled_pixels|), |transparency_ratio|, // Extracts a sample set of pixels (|sampled_pixels|), |transparency_ratio|,
// and |background_ratio|. // and |background_ratio|.
void GetSamples(const SkPixmap& pixmap, void GetSamples(const SkPixmap& pixmap,
const SkRect& src, const SkIRect& src,
std::vector<SkColor>* sampled_pixels, std::vector<SkColor>* sampled_pixels,
float* transparency_ratio, float* transparency_ratio,
float* background_ratio); float* background_ratio);
......
...@@ -57,7 +57,7 @@ TEST_F(DarkModeImageClassifierTest, ValidImage) { ...@@ -57,7 +57,7 @@ TEST_F(DarkModeImageClassifierTest, ValidImage) {
bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation); bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation);
bitmap.peekPixels(&pixmap); bitmap.peekPixels(&pixmap);
EXPECT_EQ(image_classifier()->Classify( EXPECT_EQ(image_classifier()->Classify(
pixmap, SkRect::MakeWH(image->width(), image->height())), pixmap, SkIRect::MakeWH(image->width(), image->height())),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
} }
...@@ -67,7 +67,7 @@ TEST_F(DarkModeImageClassifierTest, InvalidImage) { ...@@ -67,7 +67,7 @@ TEST_F(DarkModeImageClassifierTest, InvalidImage) {
SkPixmap pixmap; SkPixmap pixmap;
// Empty pixmap. // Empty pixmap.
SkRect src = SkRect::MakeWH(50, 50); SkIRect src = SkIRect::MakeWH(50, 50);
EXPECT_EQ(image_classifier()->Classify(pixmap, src), EXPECT_EQ(image_classifier()->Classify(pixmap, src),
DarkModeResult::kDoNotApplyFilter); DarkModeResult::kDoNotApplyFilter);
...@@ -77,11 +77,11 @@ TEST_F(DarkModeImageClassifierTest, InvalidImage) { ...@@ -77,11 +77,11 @@ TEST_F(DarkModeImageClassifierTest, InvalidImage) {
bitmap.peekPixels(&pixmap); bitmap.peekPixels(&pixmap);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify( image_classifier()->Classify(
pixmap, SkRect::MakeWH(image->width() + 10, image->height() + 10)), pixmap, SkIRect::MakeWH(image->width() + 10, image->height() + 10)),
DarkModeResult::kDoNotApplyFilter); DarkModeResult::kDoNotApplyFilter);
// Empty src rect. // Empty src rect.
EXPECT_EQ(image_classifier()->Classify(pixmap, SkRect()), EXPECT_EQ(image_classifier()->Classify(pixmap, SkIRect()),
DarkModeResult::kDoNotApplyFilter); DarkModeResult::kDoNotApplyFilter);
} }
...@@ -94,27 +94,27 @@ TEST_F(DarkModeImageClassifierTest, ImageSpriteAllFragmentsSame) { ...@@ -94,27 +94,27 @@ TEST_F(DarkModeImageClassifierTest, ImageSpriteAllFragmentsSame) {
bitmap.peekPixels(&pixmap); bitmap.peekPixels(&pixmap);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 0, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 0, 95, 36)),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 36, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 36, 95, 36)),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 72, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 72, 95, 36)),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 108, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 108, 95, 36)),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 144, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 144, 95, 36)),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 180, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 180, 95, 36)),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
} }
...@@ -127,27 +127,27 @@ TEST_F(DarkModeImageClassifierTest, ImageSpriteAlternateFragmentsSame) { ...@@ -127,27 +127,27 @@ TEST_F(DarkModeImageClassifierTest, ImageSpriteAlternateFragmentsSame) {
bitmap.peekPixels(&pixmap); bitmap.peekPixels(&pixmap);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 0, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 0, 95, 36)),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 36, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 36, 95, 36)),
DarkModeResult::kDoNotApplyFilter); DarkModeResult::kDoNotApplyFilter);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 72, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 72, 95, 36)),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 108, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 108, 95, 36)),
DarkModeResult::kDoNotApplyFilter); DarkModeResult::kDoNotApplyFilter);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 144, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 144, 95, 36)),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ( EXPECT_EQ(
image_classifier()->Classify(pixmap, SkRect::MakeXYWH(0, 180, 95, 36)), image_classifier()->Classify(pixmap, SkIRect::MakeXYWH(0, 180, 95, 36)),
DarkModeResult::kDoNotApplyFilter); DarkModeResult::kDoNotApplyFilter);
} }
...@@ -265,10 +265,10 @@ TEST_F(DarkModeImageClassifierTest, FeaturesAndClassification) { ...@@ -265,10 +265,10 @@ TEST_F(DarkModeImageClassifierTest, FeaturesAndClassification) {
image = GetImage("/images/resources/grid-large.png"); image = GetImage("/images/resources/grid-large.png");
bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation); bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation);
bitmap.peekPixels(&pixmap); bitmap.peekPixels(&pixmap);
features = features = image_classifier()
image_classifier() ->GetFeatures(pixmap,
->GetFeatures(pixmap, SkRect::MakeWH(image->width(), image->height())) SkIRect::MakeWH(image->width(), image->height()))
.value(); .value();
EXPECT_EQ(image_classifier()->ClassifyWithFeatures(features), EXPECT_EQ(image_classifier()->ClassifyWithFeatures(features),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features), EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features),
...@@ -286,10 +286,10 @@ TEST_F(DarkModeImageClassifierTest, FeaturesAndClassification) { ...@@ -286,10 +286,10 @@ TEST_F(DarkModeImageClassifierTest, FeaturesAndClassification) {
image = GetImage("/images/resources/apng08-ref.png"); image = GetImage("/images/resources/apng08-ref.png");
bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation); bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation);
bitmap.peekPixels(&pixmap); bitmap.peekPixels(&pixmap);
features = features = image_classifier()
image_classifier() ->GetFeatures(pixmap,
->GetFeatures(pixmap, SkRect::MakeWH(image->width(), image->height())) SkIRect::MakeWH(image->width(), image->height()))
.value(); .value();
EXPECT_EQ(image_classifier()->ClassifyWithFeatures(features), EXPECT_EQ(image_classifier()->ClassifyWithFeatures(features),
DarkModeResult::kDoNotApplyFilter); DarkModeResult::kDoNotApplyFilter);
EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features), EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features),
...@@ -307,10 +307,10 @@ TEST_F(DarkModeImageClassifierTest, FeaturesAndClassification) { ...@@ -307,10 +307,10 @@ TEST_F(DarkModeImageClassifierTest, FeaturesAndClassification) {
image = GetImage("/images/resources/twitter_favicon.ico"); image = GetImage("/images/resources/twitter_favicon.ico");
bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation); bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation);
bitmap.peekPixels(&pixmap); bitmap.peekPixels(&pixmap);
features = features = image_classifier()
image_classifier() ->GetFeatures(pixmap,
->GetFeatures(pixmap, SkRect::MakeWH(image->width(), image->height())) SkIRect::MakeWH(image->width(), image->height()))
.value(); .value();
EXPECT_EQ(image_classifier()->ClassifyWithFeatures(features), EXPECT_EQ(image_classifier()->ClassifyWithFeatures(features),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features), EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features),
...@@ -328,10 +328,10 @@ TEST_F(DarkModeImageClassifierTest, FeaturesAndClassification) { ...@@ -328,10 +328,10 @@ TEST_F(DarkModeImageClassifierTest, FeaturesAndClassification) {
image = GetImage("/images/resources/blue-wheel-srgb-color-profile.png"); image = GetImage("/images/resources/blue-wheel-srgb-color-profile.png");
bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation); bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation);
bitmap.peekPixels(&pixmap); bitmap.peekPixels(&pixmap);
features = features = image_classifier()
image_classifier() ->GetFeatures(pixmap,
->GetFeatures(pixmap, SkRect::MakeWH(image->width(), image->height())) SkIRect::MakeWH(image->width(), image->height()))
.value(); .value();
EXPECT_EQ(image_classifier()->ClassifyWithFeatures(features), EXPECT_EQ(image_classifier()->ClassifyWithFeatures(features),
DarkModeResult::kDoNotApplyFilter); DarkModeResult::kDoNotApplyFilter);
EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features), EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features),
...@@ -349,10 +349,10 @@ TEST_F(DarkModeImageClassifierTest, FeaturesAndClassification) { ...@@ -349,10 +349,10 @@ TEST_F(DarkModeImageClassifierTest, FeaturesAndClassification) {
image = GetImage("/images/resources/ycbcr-444-float.jpg"); image = GetImage("/images/resources/ycbcr-444-float.jpg");
bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation); bitmap = image->AsSkBitmapForCurrentFrame(kDoNotRespectImageOrientation);
bitmap.peekPixels(&pixmap); bitmap.peekPixels(&pixmap);
features = features = image_classifier()
image_classifier() ->GetFeatures(pixmap,
->GetFeatures(pixmap, SkRect::MakeWH(image->width(), image->height())) SkIRect::MakeWH(image->width(), image->height()))
.value(); .value();
EXPECT_EQ(image_classifier()->ClassifyWithFeatures(features), EXPECT_EQ(image_classifier()->ClassifyWithFeatures(features),
DarkModeResult::kApplyFilter); DarkModeResult::kApplyFilter);
EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features), EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features),
......
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