Reviewed by Dave.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 May 2004 21:47:37 +0000 (21:47 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 May 2004 21:47:37 +0000 (21:47 +0000)
- some minor performance tweaks that together give .5% or so on
the HTML iBench

        * khtml/css/css_valueimpl.h: don't use a bitfield for id and important,
unpacking the bitfield is too expensive
        * kwq/KWQArrayImpl.h:
        * kwq/KWQArrayImpl.mm:
        (KWQArrayImpl::at): inline this method because it's so hot
        * kwq/KWQString.mm:
        (allocateHandle): inline this function because it's so hot
        (initializeHandleNodes): move this in the file so above can be inlined
        (allocateNode): ditto

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/css/css_valueimpl.h
WebCore/kwq/KWQArrayImpl.h
WebCore/kwq/KWQArrayImpl.mm
WebCore/kwq/KWQString.mm

index 0d074b3..f605a52 100644 (file)
@@ -1,3 +1,20 @@
+2004-05-08  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Dave.
+
+       - some minor performance tweaks that together give .5% or so on
+       the HTML iBench
+       
+        * khtml/css/css_valueimpl.h: don't use a bitfield for id and important,
+       unpacking the bitfield is too expensive
+        * kwq/KWQArrayImpl.h:
+        * kwq/KWQArrayImpl.mm:
+        (KWQArrayImpl::at): inline this method because it's so hot
+        * kwq/KWQString.mm:
+        (allocateHandle): inline this function because it's so hot
+        (initializeHandleNodes): move this in the file so above can be inlined
+        (allocateNode): ditto
+
 2004-05-10  David Hyatt  <hyatt@apple.com>
 
        Move image loading to content.
@@ -51,6 +68,7 @@
         building with a case sensitive file system. I could have changed this to "qcstring.h",
         but it seemed better to use the header's real name since we're inside KWQ here.
 
+>>>>>>> 1.2754
 2004-05-07  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Dave.
index f0ae93d..6549185 100644 (file)
@@ -389,8 +389,8 @@ public:
     DOM::DOMString cssText() const;
 
     // make sure the following fits in 4 bytes.
-    int  m_id          : 30;
-    bool m_bImportant  : 1;
+    int  m_id;
+    bool m_bImportant;
 protected:
     CSSValueImpl *m_value;
 
index f144cef..204fd0d 100644 (file)
@@ -39,7 +39,8 @@ class KWQArrayImpl
     KWQArrayImpl(const KWQArrayImpl &);
     KWQArrayImpl &operator=(const KWQArrayImpl &);
     
-    void *at(size_t pos) const;
+    void *at(size_t pos) const { return &d->data[pos * d->itemSize]; }
+
     void *data() const;
     uint size() const;
     bool resize(size_t size);
@@ -48,7 +49,16 @@ class KWQArrayImpl
     
     bool operator==(const KWQArrayImpl &) const;
  private:
-    class KWQArrayPrivate;
+    class KWQArrayPrivate
+    {
+    public:    
+       KWQArrayPrivate(size_t pNumItems, size_t pItemSize);
+       ~KWQArrayPrivate();
+       size_t numItems;
+       size_t itemSize;
+       char *data;
+       int refCount;
+    };
 
     KWQRefPtr<KWQArrayPrivate> d;
 };
index bee2377..0bb270a 100644 (file)
 
 using std::nothrow;
 
-class KWQArrayImpl::KWQArrayPrivate
-{
-public:        
-    KWQArrayPrivate(size_t pNumItems, size_t pItemSize);
-    ~KWQArrayPrivate();
-    size_t numItems;
-    size_t itemSize;
-    char *data;
-    int refCount;
-};
-
 KWQArrayImpl::KWQArrayPrivate::KWQArrayPrivate(size_t pItemSize, size_t pNumItems) : 
     numItems(pNumItems), 
     itemSize(pItemSize), 
@@ -77,11 +66,6 @@ KWQArrayImpl &KWQArrayImpl::operator=(const KWQArrayImpl &a)
     return *this;
 }
 
-void *KWQArrayImpl::at(size_t pos) const
-{
-    return &d->data[pos * d->itemSize];
-}
-
 void *KWQArrayImpl::data() const
 {
     return d->data;
index 042cf25..799a7c2 100644 (file)
@@ -219,7 +219,36 @@ void _printQStringAllocationStatistics()
 #import <mach/vm_map.h>
 #import <mach/mach_init.h>
 
-static KWQStringData **allocateHandle();
+struct HandleNode;
+struct HandlePageNode;
+
+static HandleNode *allocateNode(HandlePageNode *pageNode);
+static HandlePageNode *allocatePageNode();
+
+static HandlePageNode *usedNodeAllocationPages = 0;
+static HandlePageNode *freeNodeAllocationPages = 0;
+
+static inline void initializeHandleNodes()
+{
+    if (freeNodeAllocationPages == 0)
+        freeNodeAllocationPages = allocatePageNode();
+}
+
+static inline KWQStringData **allocateHandle()
+{
+#if CHECK_FOR_HANDLE_LEAKS
+    return static_cast<KWQStringData **>(malloc(sizeof(KWQStringData *)));
+#endif
+
+    initializeHandleNodes();
+    
+#ifdef QSTRING_DEBUG_ALLOCATIONS
+    handleInstances++;
+#endif
+
+    return reinterpret_cast<KWQStringData **>(allocateNode(freeNodeAllocationPages));
+}
+
 static void freeHandle(KWQStringData **);
 
 #define IS_ASCII_QCHAR(c) ((c).unicode() > 0 && (c).unicode() <= 0xff)
@@ -2851,9 +2880,6 @@ struct HandleNode {
     } type;
 };
 
-static HandlePageNode *usedNodeAllocationPages = 0;
-static HandlePageNode *freeNodeAllocationPages = 0;
-
 #if 1 // change to 0 to do the page lists checks
 
 #define CHECK_PAGE_LISTS() ((void)0)
@@ -2926,12 +2952,6 @@ static HandlePageNode *allocatePageNode()
     return node;
 }
 
-static inline void initializeHandleNodes()
-{
-    if (freeNodeAllocationPages == 0)
-        freeNodeAllocationPages = allocatePageNode();
-}
-
 static HandleNode *allocateNode(HandlePageNode *pageNode)
 {
     CHECK_PAGE_LISTS();
@@ -2974,21 +2994,6 @@ static HandleNode *allocateNode(HandlePageNode *pageNode)
     return allocated;
 }
 
-KWQStringData **allocateHandle()
-{
-#if CHECK_FOR_HANDLE_LEAKS
-    return static_cast<KWQStringData **>(malloc(sizeof(KWQStringData *)));
-#endif
-
-    initializeHandleNodes();
-    
-#ifdef QSTRING_DEBUG_ALLOCATIONS
-    handleInstances++;
-#endif
-
-    return reinterpret_cast<KWQStringData **>(allocateNode(freeNodeAllocationPages));
-}
-
 void freeHandle(KWQStringData **_free)
 {
 #if CHECK_FOR_HANDLE_LEAKS