Commit f52ee5d6 authored by Mike Reed's avatar Mike Reed Committed by Commit Bot

bitmap.getColor can be expensive (unmpremul, etc.), so don't call if not needed

Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_slimming_paint_v2;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: Id97f574f12deffbfe28e943a7735823be1533db9
Reviewed-on: https://chromium-review.googlesource.com/1233941Reviewed-by: default avatarFlorin Malita <fmalita@chromium.org>
Commit-Queue: Mike Reed <reed@chromium.org>
Cr-Commit-Position: refs/heads/master@{#592508}
parent 0820a872
......@@ -63,8 +63,8 @@ static bool BitmapsEqual(sk_sp<const PaintRecord> record1,
constexpr int kMaxMismatches = 10;
for (int y = 0; y < bounds.Height(); ++y) {
for (int x = 0; x < bounds.Width(); ++x) {
SkColor pixel1 = bitmap1.getColor(x, y);
SkColor pixel2 = bitmap2.getColor(x, y);
SkPMColor pixel1 = *bitmap1.getAddr32(x, y);
SkPMColor pixel2 = *bitmap2.getAddr32(x, y);
if (pixel1 != pixel2) {
if (!RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled())
return false;
......
......@@ -14,6 +14,7 @@
#include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/wtf/text/string_utf8_adaptor.h"
#include "third_party/skia/include/core/SkColorPriv.h"
namespace blink {
......@@ -159,11 +160,11 @@ static bool PixelComponentsDiffer(int c1, int c2) {
return abs(c1 - c2) > 2;
}
static bool PixelsDiffer(SkColor p1, SkColor p2) {
return PixelComponentsDiffer(SkColorGetA(p1), SkColorGetA(p2)) ||
PixelComponentsDiffer(SkColorGetR(p1), SkColorGetR(p2)) ||
PixelComponentsDiffer(SkColorGetG(p1), SkColorGetG(p2)) ||
PixelComponentsDiffer(SkColorGetB(p1), SkColorGetB(p2));
static bool PMColorsDiffer(SkPMColor p1, SkPMColor p2) {
return PixelComponentsDiffer(SkGetPackedA32(p1), SkGetPackedA32(p2)) ||
PixelComponentsDiffer(SkGetPackedR32(p1), SkGetPackedR32(p2)) ||
PixelComponentsDiffer(SkGetPackedG32(p1), SkGetPackedG32(p2)) ||
PixelComponentsDiffer(SkGetPackedB32(p1), SkGetPackedB32(p2));
}
void RasterInvalidationTracking::CheckUnderInvalidations(
......@@ -215,9 +216,9 @@ void RasterInvalidationTracking::CheckUnderInvalidations(
int layer_y = bitmap_y + rect.Y();
for (int bitmap_x = 0; bitmap_x < rect.Width(); ++bitmap_x) {
int layer_x = bitmap_x + rect.X();
SkColor old_pixel = old_bitmap.getColor(bitmap_x, bitmap_y);
SkColor new_pixel = new_bitmap.getColor(bitmap_x, bitmap_y);
if (PixelsDiffer(old_pixel, new_pixel) &&
SkPMColor old_pixel = *old_bitmap.getAddr32(bitmap_x, bitmap_y);
SkPMColor new_pixel = *new_bitmap.getAddr32(bitmap_x, bitmap_y);
if (PMColorsDiffer(old_pixel, new_pixel) &&
!invalidation_region.Contains(IntPoint(layer_x, layer_y))) {
if (mismatching_pixels < kMaxMismatchesToReport) {
RasterUnderInvalidation under_invalidation = {layer_x, layer_y,
......
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