Shrink CSSFontFace
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 9 Jul 2018 18:41:31 +0000 (18:41 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 9 Jul 2018 18:41:31 +0000 (18:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=187456

Reviewed by Anders Carlsson.

Shrink CSSFontFace by 56 bytes, from 288 to 256 bytes, mostly by defining enums as 8-bit,
but also re-ordering the member variables. There are over 400 of these objects on nytimes.com,
so this saves about 22KB.

* css/CSSFontFace.cpp:
(WebCore::CSSFontFace::CSSFontFace):
* css/CSSFontFace.h:
* platform/text/TextFlags.h:
* rendering/style/RenderStyleConstants.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233648 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/css/CSSFontFace.cpp
Source/WebCore/css/CSSFontFace.h
Source/WebCore/platform/text/TextFlags.h
Source/WebCore/rendering/style/RenderStyleConstants.h

index 5038d4b..f18f236 100644 (file)
@@ -1,3 +1,20 @@
+2018-07-09  Simon Fraser  <simon.fraser@apple.com>
+
+        Shrink CSSFontFace
+        https://bugs.webkit.org/show_bug.cgi?id=187456
+
+        Reviewed by Anders Carlsson.
+
+        Shrink CSSFontFace by 56 bytes, from 288 to 256 bytes, mostly by defining enums as 8-bit,
+        but also re-ordering the member variables. There are over 400 of these objects on nytimes.com,
+        so this saves about 22KB.
+
+        * css/CSSFontFace.cpp:
+        (WebCore::CSSFontFace::CSSFontFace):
+        * css/CSSFontFace.h:
+        * platform/text/TextFlags.h:
+        * rendering/style/RenderStyleConstants.h:
+
 2018-07-09  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r233612.
index cdec5a3..5b5a521 100644 (file)
@@ -89,12 +89,12 @@ void CSSFontFace::appendSources(CSSFontFace& fontFace, CSSValueList& srcList, Do
 }
 
 CSSFontFace::CSSFontFace(CSSFontSelector* fontSelector, StyleRuleFontFace* cssConnection, FontFace* wrapper, bool isLocalFallback)
-    : m_timeoutTimer(*this, &CSSFontFace::timeoutFired)
-    , m_fontSelector(fontSelector)
+    : m_fontSelector(fontSelector)
     , m_cssConnection(cssConnection)
     , m_wrapper(makeWeakPtr(wrapper))
     , m_isLocalFallback(isLocalFallback)
     , m_mayBePurged(!wrapper)
+    , m_timeoutTimer(*this, &CSSFontFace::timeoutFired)
 {
 }
 
index d0aa769..bd7fc22 100644 (file)
@@ -78,7 +78,7 @@ public:
     void setFeatureSettings(CSSValue&);
     void setLoadingBehavior(CSSValue&);
 
-    enum class Status;
+    enum class Status : uint8_t;
     struct UnicodeRange;
     const CSSValueList* families() const { return m_families.get(); }
     FontSelectionRange weight() const { return m_fontSelectionCapabilities.computeWeight(); }
@@ -136,7 +136,7 @@ public:
     //              ||   //  \\   ||
     //              \/  \/    \/  \/
     //             Success    Failure
-    enum class Status { Pending, Loading, TimedOut, Success, Failure };
+    enum class Status : uint8_t { Pending, Loading, TimedOut, Success, Failure };
 
     struct UnicodeRange {
         UChar32 from;
@@ -183,20 +183,24 @@ private:
 
     RefPtr<CSSValueList> m_families;
     Vector<UnicodeRange> m_ranges;
+
     FontFeatureSettings m_featureSettings;
     FontVariantSettings m_variantSettings;
-    Timer m_timeoutTimer;
+    FontLoadingBehavior m_loadingBehavior { FontLoadingBehavior::Auto };
+
     Vector<std::unique_ptr<CSSFontFaceSource>, 0, CrashOnOverflow, 0> m_sources;
     RefPtr<CSSFontSelector> m_fontSelector;
     RefPtr<StyleRuleFontFace> m_cssConnection;
     HashSet<Client*> m_clients;
     WeakPtr<FontFace> m_wrapper;
     FontSelectionSpecifiedCapabilities m_fontSelectionCapabilities;
-    FontLoadingBehavior m_loadingBehavior { FontLoadingBehavior::Auto };
+    
     Status m_status { Status::Pending };
     bool m_isLocalFallback { false };
     bool m_sourcesPopulated { false };
     bool m_mayBePurged { true };
+
+    Timer m_timeoutTimer;
 };
 
 }
index e295661..c48574b 100644 (file)
@@ -65,19 +65,19 @@ enum FontSynthesisValues {
 typedef unsigned FontSynthesis;
 const unsigned FontSynthesisWidth = 3;
 
-enum class FontVariantLigatures {
+enum class FontVariantLigatures : uint8_t {
     Normal,
     Yes,
     No
 };
 
-enum class FontVariantPosition {
+enum class FontVariantPosition : uint8_t {
     Normal,
     Subscript,
     Superscript
 };
 
-enum class FontVariantCaps {
+enum class FontVariantCaps : uint8_t {
     Normal,
     Small,
     AllSmall,
@@ -87,40 +87,40 @@ enum class FontVariantCaps {
     Titling
 };
 
-enum class FontVariantNumericFigure {
+enum class FontVariantNumericFigure : uint8_t {
     Normal,
     LiningNumbers,
     OldStyleNumbers
 };
 
-enum class FontVariantNumericSpacing {
+enum class FontVariantNumericSpacing : uint8_t {
     Normal,
     ProportionalNumbers,
     TabularNumbers
 };
 
-enum class FontVariantNumericFraction {
+enum class FontVariantNumericFraction : uint8_t {
     Normal,
     DiagonalFractions,
     StackedFractions
 };
 
-enum class FontVariantNumericOrdinal {
+enum class FontVariantNumericOrdinal : uint8_t {
     Normal,
     Yes
 };
 
-enum class FontVariantNumericSlashedZero {
+enum class FontVariantNumericSlashedZero : uint8_t {
     Normal,
     Yes
 };
 
-enum class FontVariantAlternates {
+enum class FontVariantAlternates : uint8_t {
     Normal,
     HistoricalForms
 };
 
-enum class FontVariantEastAsianVariant {
+enum class FontVariantEastAsianVariant : uint8_t {
     Normal,
     Jis78,
     Jis83,
@@ -130,13 +130,13 @@ enum class FontVariantEastAsianVariant {
     Traditional
 };
 
-enum class FontVariantEastAsianWidth {
+enum class FontVariantEastAsianWidth : uint8_t {
     Normal,
     Full,
     Proportional
 };
 
-enum class FontVariantEastAsianRuby {
+enum class FontVariantEastAsianRuby : uint8_t {
     Normal,
     Yes
 };
@@ -254,6 +254,7 @@ struct FontVariantSettings {
             | static_cast<unsigned>(eastAsianRuby) << 0;
     }
 
+    // FIXME: this would be much more compact with bitfields.
     FontVariantLigatures commonLigatures;
     FontVariantLigatures discretionaryLigatures;
     FontVariantLigatures historicalLigatures;
@@ -345,24 +346,24 @@ enum FontSmallCaps {
     FontSmallCapsOn = 1
 };
 
-enum class Kerning {
+enum class Kerning : uint8_t {
     Auto,
     Normal,
     NoShift
 };
 
-enum class FontOpticalSizing {
+enum class FontOpticalSizing : uint8_t {
     Enabled,
     Disabled
 };
 
 // https://www.microsoft.com/typography/otspec/fvar.htm#VAT
-enum class FontStyleAxis {
+enum class FontStyleAxis : uint8_t {
     slnt,
     ital
 };
 
-enum class AllowUserInstalledFonts {
+enum class AllowUserInstalledFonts : uint8_t {
     No,
     Yes
 };
index dc99ba2..c5e7a9c 100644 (file)
@@ -1154,7 +1154,7 @@ enum class PaintType {
     Markers
 };
 
-enum class FontLoadingBehavior {
+enum class FontLoadingBehavior : uint8_t {
     Auto,
     Block,
     Swap,