Commit 21b0517d authored by Yoshifumi Inoue's avatar Yoshifumi Inoue Committed by Commit Bot

Reduce 4 byte from HarfBuzzRunGlyphData for Windows

This patch makes |HarfBuzzRunGlyphData| four byte smaller by omitting structure
alignment padding to reduce memory usage for Windows.

Note: Linux doesn't insert padding after |unit16_t|.

In rude estimation, we can reduce:
  number_of_character_in_page × 4 byte
per page.

Example: https://en.wikipedia.org
document.body.innerText.length = 9681
Thus, we can reduce 38,724 byte.


Before this patch:
   +----------+----------+
+0 | utin16_t | padding  |
   +----------+----------+
+4 | bit field           |
   +----------+----------+
+8 | float advance       |
   +----------+----------+
   ...
sizeof(HarfBuzzRunGlyphData)==20

After this patch:
   +----------+----------+
+0 | bit field           |
   +----------+----------+
+4 | float advance       |
   +----------+----------+
   ...
sizeof(HarfBuzzRunGlyphData)==16


Bug: 965564
Change-Id: I73cae1096d74168ead1e2e48251dc2d50597e7e8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1627832
Commit-Queue: Yoshifumi Inoue <yosin@chromium.org>
Auto-Submit: Yoshifumi Inoue <yosin@chromium.org>
Reviewed-by: default avatarEmil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#662974}
parent 3c616886
...@@ -55,8 +55,8 @@ constexpr unsigned HarfBuzzRunGlyphData::kMaxCharacterIndex; ...@@ -55,8 +55,8 @@ constexpr unsigned HarfBuzzRunGlyphData::kMaxCharacterIndex;
constexpr unsigned HarfBuzzRunGlyphData::kMaxGlyphs; constexpr unsigned HarfBuzzRunGlyphData::kMaxGlyphs;
struct SameSizeAsHarfBuzzRunGlyphData { struct SameSizeAsHarfBuzzRunGlyphData {
uint16_t unsigned_int16; unsigned glyph : 16;
unsigned bit_fields : 2; unsigned char_index_and_bit_field : 16;
float advance; float advance;
FloatSize offset; FloatSize offset;
}; };
......
...@@ -51,7 +51,7 @@ struct HarfBuzzRunGlyphData { ...@@ -51,7 +51,7 @@ struct HarfBuzzRunGlyphData {
static constexpr unsigned kMaxCharacterIndex = (1 << kCharacterIndexBits) - 1; static constexpr unsigned kMaxCharacterIndex = (1 << kCharacterIndexBits) - 1;
static constexpr unsigned kMaxGlyphs = 1 << kCharacterIndexBits; static constexpr unsigned kMaxGlyphs = 1 << kCharacterIndexBits;
uint16_t glyph; unsigned glyph : 16;
unsigned character_index : kCharacterIndexBits; unsigned character_index : kCharacterIndexBits;
unsigned safe_to_break_before : 1; unsigned safe_to_break_before : 1;
......
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