chromium: 60.0.3112.78 -> 60.0.3112.90

This commit is contained in:
Danny Rawlins 2017-08-05 18:47:45 +10:00
parent b35584c279
commit 63fbbd5351
4 changed files with 5 additions and 181 deletions

View File

@ -1,5 +1,4 @@
c8b274991cdd5064aed600add48a0bf6 0001-Clip-FreeType-glyph-bitmap-to-mask.patch
e5f1c85bec4a50df09da6d4b17249826 chromium-60.0.3112.78.tar.xz
75f9199e5e0b31e9fbfbaf1f3071b411 chromium-60.0.3112.90.tar.xz
034bc28a6988f3d6d1e7f291ec95365c chromium-blink-gcc7.patch
3d379c46c547a21d6f20fc1c1761bff1 chromium-gn-bootstrap-r8.patch
c2f283eee77d4123a0952d9ee277ec3c chromium-v8-gcc7.patch

View File

@ -1,12 +1,11 @@
untrusted comment: verify with /etc/ports/opt.pub
RWSE3ohX2g5d/XLaCVmbCMsspxPKBcx0491RclWXvUzRDeDgDIhVMOlvG9QywXC8RZ6nwAVoRIbmwtLLrCW5rFBjhkH0BWFQfQE=
SHA256 (Pkgfile) = a2d1d95c4dead5dd2cddd4331807481f82233b5d810433fe2b4c42937d494d79
RWSE3ohX2g5d/YgHvDr1xQX10nbeFiL6cGaQfU3Bw1tHqKi5Tm1CCp278c2z0VT6w897CXTfAJ2L6KBmu1jcxJyWN4D+wqqhjg8=
SHA256 (Pkgfile) = d456345301a34e26becfd90e07c4eab4d1dc8e8da1a249171e961894fd45bb84
SHA256 (.footprint) = 1212ab960b6ace8249ad85297b0c158b11ab0822da7f8098c82b3f6e5e8a4909
SHA256 (chromium-60.0.3112.78.tar.xz) = a82db2aa1b9348b619c01894db565eba686780de0e6fa9e83a8f406d06ce03ea
SHA256 (chromium-60.0.3112.90.tar.xz) = b42f7965764b4528116622a71a60f52becd4186ff8854f3051bf45c6368739e6
SHA256 (last-commit-position.patch) = d3dc397956a26ec045e76c25c57a1fac5fc0acff94306b2a670daee7ba15709e
SHA256 (chromium.sh) = 7b182d0ae1e9ef841f8cd0b403a304babd548bf60b5e3808b2144bebdbb7c154
SHA256 (chromium.desktop) = caf015652ac7ce9403a5cb6c7bec3dc597222b20c5842059ee15674e2c9209cc
SHA256 (0001-Clip-FreeType-glyph-bitmap-to-mask.patch) = e60aa0ff01f8bee67e45fde7bbe932901194984673ec4b10ea82bba1bace0cd7
SHA256 (chromium-blink-gcc7.patch) = f94310a7ba9b8b777adfb4442bcc0a8f0a3d549b2cf4a156066f8e2e28e2f323
SHA256 (chromium-v8-gcc7.patch) = 46dacc4fa52652b7d99b8996d6a97e5e3bac586f879aefb9fb95020d2c4e5aec
SHA256 (chromium-gn-bootstrap-r8.patch) = 06345804c00d9618dad98a2dc04f31ef19912cdf6e9d6e577ef7ffb1fa57003f

View File

@ -1,170 +0,0 @@
From 6cdb5f2ad7684302a8a66217462d2aef4c5f4632 Mon Sep 17 00:00:00 2001
From: Ben Wagner <bungeman@behemoth.cnc.corp.google.com>
Date: Thu, 15 Jun 2017 10:43:17 -0400
Subject: [PATCH] Clip FreeType glyph bitmap to mask.
Skia has for some time assumed that when using FT_Render_Glyph with one
of the LCD render modes that one extra pixel would be applied to each
side of the resulting bitmap. FreieType has changed to make this more
conservative when possible, so the pre-allocated SkMask and the generated
FT_Bitmap may no longer agree on the size and origin.
This change ensures the SkMask and FT_Bitmap are the same size and their
origins align. This is not an ideal long term fix, but is both simple and
localized for easy and quick back-porting, should that become necessary.
BUG=skia:6663
Change-Id: I49ec8f45376be8d867e8aef54eab79537731c310
Reviewed-on: https://skia-review.googlesource.com/20327
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
---
src/ports/SkFontHost_FreeType_common.cpp | 100 +++++++++++++++++++++++++------
1 file changed, 83 insertions(+), 17 deletions(-)
diff --git a/src/ports/SkFontHost_FreeType_common.cpp b/src/ports/SkFontHost_FreeType_common.cpp
index 9df7268bb4..a216fdb29c 100644
--- a/src/ports/SkFontHost_FreeType_common.cpp
+++ b/src/ports/SkFontHost_FreeType_common.cpp
@@ -395,8 +395,6 @@ void SkScalerContext_FreeType_Base::generateGlyphImage(
switch ( face->glyph->format ) {
case FT_GLYPH_FORMAT_OUTLINE: {
FT_Outline* outline = &face->glyph->outline;
- FT_BBox bbox;
- FT_Bitmap target;
int dx = 0, dy = 0;
if (fRec.fFlags & SkScalerContext::kSubpixelPositioning_Flag) {
@@ -405,36 +403,97 @@ void SkScalerContext_FreeType_Base::generateGlyphImage(
// negate dy since freetype-y-goes-up and skia-y-goes-down
dy = -dy;
}
- FT_Outline_Get_CBox(outline, &bbox);
- /*
- what we really want to do for subpixel is
- offset(dx, dy)
- compute_bounds
- offset(bbox & !63)
- but that is two calls to offset, so we do the following, which
- achieves the same thing with only one offset call.
- */
- FT_Outline_Translate(outline, dx - ((bbox.xMin + dx) & ~63),
- dy - ((bbox.yMin + dy) & ~63));
+
+ memset(glyph.fImage, 0, glyph.rowBytes() * glyph.fHeight);
if (SkMask::kLCD16_Format == glyph.fMaskFormat) {
+ FT_Outline_Translate(outline, dx, dy);
FT_Error err = FT_Render_Glyph(face->glyph, doVert ? FT_RENDER_MODE_LCD_V :
FT_RENDER_MODE_LCD);
if (err) {
SK_TRACEFTR(err, "Could not render glyph.");
- sk_bzero(glyph.fImage, glyph.computeImageSize());
return;
}
+
SkMask mask;
glyph.toMask(&mask);
+#ifdef SK_SHOW_TEXT_BLIT_COVERAGE
+ memset(mask.fImage, 0x80, mask.fBounds.height() * mask.fRowBytes);
+#endif
+ FT_GlyphSlotRec& ftGlyph = *face->glyph;
+
+ if (!SkIRect::Intersects(mask.fBounds,
+ SkIRect::MakeXYWH( ftGlyph.bitmap_left,
+ -ftGlyph.bitmap_top,
+ ftGlyph.bitmap.width,
+ ftGlyph.bitmap.rows)))
+ {
+ return;
+ }
+
+ // If the FT_Bitmap extent is larger, discard bits of the bitmap outside the mask.
+ // If the SkMask extent is larger, shrink mask to fit bitmap (clearing discarded).
+ unsigned char* origBuffer = ftGlyph.bitmap.buffer;
+ // First align the top left (origin).
+ if (-ftGlyph.bitmap_top < mask.fBounds.fTop) {
+ int32_t topDiff = mask.fBounds.fTop - (-ftGlyph.bitmap_top);
+ ftGlyph.bitmap.buffer += ftGlyph.bitmap.pitch * topDiff;
+ ftGlyph.bitmap.rows -= topDiff;
+ ftGlyph.bitmap_top = -mask.fBounds.fTop;
+ }
+ if (ftGlyph.bitmap_left < mask.fBounds.fLeft) {
+ int32_t leftDiff = mask.fBounds.fLeft - ftGlyph.bitmap_left;
+ ftGlyph.bitmap.buffer += leftDiff;
+ ftGlyph.bitmap.width -= leftDiff;
+ ftGlyph.bitmap_left = mask.fBounds.fLeft;
+ }
+ if (mask.fBounds.fTop < -ftGlyph.bitmap_top) {
+ mask.fImage += mask.fRowBytes * (-ftGlyph.bitmap_top - mask.fBounds.fTop);
+ mask.fBounds.fTop = -ftGlyph.bitmap_top;
+ }
+ if (mask.fBounds.fLeft < ftGlyph.bitmap_left) {
+ mask.fImage += sizeof(uint16_t) * (ftGlyph.bitmap_left - mask.fBounds.fLeft);
+ mask.fBounds.fLeft = ftGlyph.bitmap_left;
+ }
+ // Origins aligned, clean up the width and height.
+ int ftVertScale = (doVert ? 3 : 1);
+ int ftHoriScale = (doVert ? 1 : 3);
+ if (mask.fBounds.height() * ftVertScale < SkToInt(ftGlyph.bitmap.rows)) {
+ ftGlyph.bitmap.rows = mask.fBounds.height() * ftVertScale;
+ }
+ if (mask.fBounds.width() * ftHoriScale < SkToInt(ftGlyph.bitmap.width)) {
+ ftGlyph.bitmap.width = mask.fBounds.width() * ftHoriScale;
+ }
+ if (SkToInt(ftGlyph.bitmap.rows) < mask.fBounds.height() * ftVertScale) {
+ mask.fBounds.fBottom = mask.fBounds.fTop + ftGlyph.bitmap.rows / ftVertScale;
+ }
+ if (SkToInt(ftGlyph.bitmap.width) < mask.fBounds.width() * ftHoriScale) {
+ mask.fBounds.fRight = mask.fBounds.fLeft + ftGlyph.bitmap.width / ftHoriScale;
+ }
if (fPreBlend.isApplicable()) {
- copyFT2LCD16<true>(face->glyph->bitmap, mask, doBGR,
+ copyFT2LCD16<true>(ftGlyph.bitmap, mask, doBGR,
fPreBlend.fR, fPreBlend.fG, fPreBlend.fB);
} else {
- copyFT2LCD16<false>(face->glyph->bitmap, mask, doBGR,
+ copyFT2LCD16<false>(ftGlyph.bitmap, mask, doBGR,
fPreBlend.fR, fPreBlend.fG, fPreBlend.fB);
}
+ // Restore the buffer pointer so FreeType can properly free it.
+ ftGlyph.bitmap.buffer = origBuffer;
} else {
+ FT_BBox bbox;
+ FT_Bitmap target;
+ FT_Outline_Get_CBox(outline, &bbox);
+ /*
+ what we really want to do for subpixel is
+ offset(dx, dy)
+ compute_bounds
+ offset(bbox & !63)
+ but that is two calls to offset, so we do the following, which
+ achieves the same thing with only one offset call.
+ */
+ FT_Outline_Translate(outline, dx - ((bbox.xMin + dx) & ~63),
+ dy - ((bbox.yMin + dy) & ~63));
+
target.width = glyph.fWidth;
target.rows = glyph.fHeight;
target.pitch = glyph.rowBytes();
@@ -442,8 +501,15 @@ void SkScalerContext_FreeType_Base::generateGlyphImage(
target.pixel_mode = compute_pixel_mode( (SkMask::Format)fRec.fMaskFormat);
target.num_grays = 256;
- memset(glyph.fImage, 0, glyph.rowBytes() * glyph.fHeight);
FT_Outline_Get_Bitmap(face->glyph->library, outline, &target);
+#ifdef SK_SHOW_TEXT_BLIT_COVERAGE
+ for (int y = 0; y < glyph.fHeight; ++y) {
+ for (int x = 0; x < glyph.fWidth; ++x) {
+ uint8_t& a = ((uint8_t*)glyph.fImage)[(glyph.rowBytes() * y) + x];
+ a = SkTMax<uint8_t>(a, 0x20);
+ }
+ }
+#endif
}
} break;
--
2.13.2

View File

@ -5,11 +5,10 @@
# Depends on: dbus-glib gperf gtk gtk3 libevent libexif libgcrypt ninja nodejs nss pciutils speech-dispatcher xorg-libxscrnsaver xorg-libxt yasm
name=chromium
version=60.0.3112.78
version=60.0.3112.90
release=1
source=(https://commondatastorage.googleapis.com/$name-browser-official/$name-$version.tar.xz
last-commit-position.patch $name.sh $name.desktop
0001-Clip-FreeType-glyph-bitmap-to-mask.patch
chromium-blink-gcc7.patch
chromium-v8-gcc7.patch
chromium-gn-bootstrap-r8.patch)
@ -23,9 +22,6 @@ build() {
# we don't use git sources
patch -p1 -i $SRC/last-commit-position.patch
# https://bugs.chromium.org/p/skia/issues/detail?id=6663
patch -p1 -d third_party/skia -i $SRC/0001-Clip-FreeType-glyph-bitmap-to-mask.patch
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853347
patch -p1 -i $SRC/chromium-blink-gcc7.patch