Pack ResourceResponse harder.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Jan 2014 06:51:34 +0000 (06:51 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Jan 2014 06:51:34 +0000 (06:51 +0000)
<https://webkit.org/b/127005>

Re-arrange the members of ResourceResponse to reduce padding,
shrinking it by 8 bytes.

This nudges CachedResource and CachedImage into smaller size
classes, yielding a ~700 kB progression on Membuster3.

Reviewed by Anders Carlsson.

* platform/network/ResourceResponseBase.cpp:
(WebCore::ResourceResponseBase::ResourceResponseBase):
* platform/network/ResourceResponseBase.h:
* platform/network/cf/ResourceResponse.h:
(WebCore::ResourceResponse::ResourceResponse):

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

Source/WebCore/ChangeLog
Source/WebCore/platform/network/ResourceResponseBase.cpp
Source/WebCore/platform/network/ResourceResponseBase.h
Source/WebCore/platform/network/cf/ResourceResponse.h

index d1c26c2c98033d5cead9d042ce2d1160405ed1e2..5b3e54c87828967c66307c3386651b83550b74d7 100644 (file)
@@ -1,3 +1,22 @@
+2014-01-14  Andreas Kling  <akling@apple.com>
+
+        Pack ResourceResponse harder.
+        <https://webkit.org/b/127005>
+
+        Re-arrange the members of ResourceResponse to reduce padding,
+        shrinking it by 8 bytes.
+
+        This nudges CachedResource and CachedImage into smaller size
+        classes, yielding a ~700 kB progression on Membuster3.
+
+        Reviewed by Anders Carlsson.
+
+        * platform/network/ResourceResponseBase.cpp:
+        (WebCore::ResourceResponseBase::ResourceResponseBase):
+        * platform/network/ResourceResponseBase.h:
+        * platform/network/cf/ResourceResponse.h:
+        (WebCore::ResourceResponse::ResourceResponse):
+
 2014-01-14  Dirk Schulze  <krit@webkit.org>
 
         Remove unnecessary WebkitCSSSVGDocumentValue
index 817aa8f6da701178f31ef7cf3bd07c03830700b7..5c057ebb44e1d47d1498879e41d9b05eac32de4a 100644 (file)
@@ -45,8 +45,13 @@ inline const ResourceResponse& ResourceResponseBase::asResourceResponse() const
 ResourceResponseBase::ResourceResponseBase()  
     : m_expectedContentLength(0)
     , m_httpStatusCode(0)
-    , m_wasCached(false)
     , m_connectionID(0)
+    , m_cacheControlMaxAge(0)
+    , m_age(0)
+    , m_date(0)
+    , m_expires(0)
+    , m_lastModified(0)
+    , m_wasCached(false)
     , m_connectionReused(false)
     , m_isNull(true)
     , m_haveParsedCacheControlHeader(false)
@@ -57,11 +62,6 @@ ResourceResponseBase::ResourceResponseBase()
     , m_cacheControlContainsNoCache(false)
     , m_cacheControlContainsNoStore(false)
     , m_cacheControlContainsMustRevalidate(false)
-    , m_cacheControlMaxAge(0.0)
-    , m_age(0.0)
-    , m_date(0.0)
-    , m_expires(0.0)
-    , m_lastModified(0.0)
 {
 }
 
@@ -72,8 +72,13 @@ ResourceResponseBase::ResourceResponseBase(const URL& url, const String& mimeTyp
     , m_textEncodingName(textEncodingName)
     , m_suggestedFilename(filename)
     , m_httpStatusCode(0)
-    , m_wasCached(false)
     , m_connectionID(0)
+    , m_cacheControlMaxAge(0)
+    , m_age(0)
+    , m_date(0)
+    , m_expires(0)
+    , m_lastModified(0)
+    , m_wasCached(false)
     , m_connectionReused(false)
     , m_isNull(false)
     , m_haveParsedCacheControlHeader(false)
@@ -84,11 +89,6 @@ ResourceResponseBase::ResourceResponseBase(const URL& url, const String& mimeTyp
     , m_cacheControlContainsNoCache(false)
     , m_cacheControlContainsNoStore(false)
     , m_cacheControlContainsMustRevalidate(false)
-    , m_cacheControlMaxAge(0.0)
-    , m_age(0.0)
-    , m_date(0.0)
-    , m_expires(0.0)
-    , m_lastModified(0.0)
 {
 }
 
index 2cfb53a937fb4ab7fa6b86b4796bb86e24eb7eb3..9d838acc49703710af7c7cddadf2f36e3d990f9b 100644 (file)
@@ -145,13 +145,23 @@ protected:
     long long m_expectedContentLength;
     String m_textEncodingName;
     String m_suggestedFilename;
-    int m_httpStatusCode;
     String m_httpStatusText;
     HTTPHeaderMap m_httpHeaderFields;
-    bool m_wasCached : 1;
+    RefPtr<ResourceLoadTiming> m_resourceLoadTiming;
+
+    int m_httpStatusCode;
     unsigned m_connectionID;
+
+private:
+    mutable double m_cacheControlMaxAge;
+    mutable double m_age;
+    mutable double m_date;
+    mutable double m_expires;
+    mutable double m_lastModified;
+
+public:
+    bool m_wasCached : 1;
     bool m_connectionReused : 1;
-    RefPtr<ResourceLoadTiming> m_resourceLoadTiming;
 
     bool m_isNull : 1;
     
@@ -169,12 +179,6 @@ private:
     mutable bool m_cacheControlContainsNoCache : 1;
     mutable bool m_cacheControlContainsNoStore : 1;
     mutable bool m_cacheControlContainsMustRevalidate : 1;
-    mutable double m_cacheControlMaxAge;
-
-    mutable double m_age;
-    mutable double m_date;
-    mutable double m_expires;
-    mutable double m_lastModified;
 };
 
 inline bool operator==(const ResourceResponse& a, const ResourceResponse& b) { return ResourceResponseBase::compare(a, b); }
index 13a581180ea688dde376e35f07e2ee31638ad35e..bf7d328d75a86d2d524914463865560f6ea3e766 100644 (file)
@@ -47,9 +47,9 @@ public:
 
 #if USE(CFNETWORK)
     ResourceResponse(CFURLResponseRef cfResponse)
-        : m_cfResponse(cfResponse)
-        , m_initLevel(Uninitialized)
+        : m_initLevel(Uninitialized)
         , m_platformResponseIsUpToDate(true)
+        , m_cfResponse(cfResponse)
     {
         m_isNull = !cfResponse;
     }
@@ -58,9 +58,9 @@ public:
 #endif
 #else
     ResourceResponse(NSURLResponse *nsResponse)
-        : m_nsResponse(nsResponse)
-        , m_initLevel(Uninitialized)
+        : m_initLevel(Uninitialized)
         , m_platformResponseIsUpToDate(true)
+        , m_nsResponse(nsResponse)
     {
         m_isNull = !nsResponse;
     }
@@ -111,6 +111,9 @@ private:
 
     static bool platformCompare(const ResourceResponse& a, const ResourceResponse& b);
 
+    InitLevel m_initLevel : 3;
+    bool m_platformResponseIsUpToDate : 1;
+
 #if USE(CFNETWORK)
     mutable RetainPtr<CFURLResponseRef> m_cfResponse;
 #endif
@@ -121,8 +124,6 @@ private:
     // Certificate chain is normally part of NS/CFURLResponse, but there is no way to re-add it to a deserialized response after IPC.
     RetainPtr<CFArrayRef> m_externalCertificateChain;
 #endif
-    InitLevel m_initLevel;
-    bool m_platformResponseIsUpToDate;
 };
 
 struct CrossThreadResourceResponseData : public CrossThreadResourceResponseDataBase {