[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

hyatt hyatt at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:24:50 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 0000dafa52fca93321a4604231cc9a67398d7b39
Author: hyatt <hyatt at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Jan 30 19:12:55 2004 +0000

    	Make m_lineHeight be cached on RenderFlow instead of RenderText and avoid recomputing it so much when it
    	is not set by CSS (since calls to fontMetrics().lineSpacing() are expensive).
    
    	Yields ~1.5% performance improvement.
    
            Reviewed by darin
    
            * khtml/rendering/render_block.cpp:
            (khtml::RenderBlock::setStyle):
            * khtml/rendering/render_flow.cpp:
            (RenderFlow::lineHeight):
            * khtml/rendering/render_flow.h:
            * khtml/rendering/render_inline.cpp:
            (RenderInline::setStyle):
            * khtml/rendering/render_object.cpp:
            (RenderObject::verticalPositionHint):
            (RenderObject::lineHeight):
            * khtml/rendering/render_object.h:
            * khtml/rendering/render_text.cpp:
            (RenderText::setStyle):
            (RenderText::checkSelectionPointIgnoringContinuations):
            (RenderText::height):
            (RenderText::lineHeight):
            * khtml/rendering/render_text.h:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@6010 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 41819e0..6d1033c 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,5 +1,32 @@
 2004-01-30  David Hyatt  <hyatt at apple.com>
 
+	Make m_lineHeight be cached on RenderFlow instead of RenderText and avoid recomputing it so much when it
+	is not set by CSS (since calls to fontMetrics().lineSpacing() are expensive).
+
+	Yields ~1.5% performance improvement.
+	
+        Reviewed by darin
+
+        * khtml/rendering/render_block.cpp:
+        (khtml::RenderBlock::setStyle):
+        * khtml/rendering/render_flow.cpp:
+        (RenderFlow::lineHeight):
+        * khtml/rendering/render_flow.h:
+        * khtml/rendering/render_inline.cpp:
+        (RenderInline::setStyle):
+        * khtml/rendering/render_object.cpp:
+        (RenderObject::verticalPositionHint):
+        (RenderObject::lineHeight):
+        * khtml/rendering/render_object.h:
+        * khtml/rendering/render_text.cpp:
+        (RenderText::setStyle):
+        (RenderText::checkSelectionPointIgnoringContinuations):
+        (RenderText::height):
+        (RenderText::lineHeight):
+        * khtml/rendering/render_text.h:
+
+2004-01-30  David Hyatt  <hyatt at apple.com>
+
 	Disable XBL.  The loadBindings call was taking 0.1-0.25%.  While I know how to get rid of this overhead,
 	it's easier for now to just disable all of XBL.
 
diff --git a/WebCore/khtml/rendering/render_block.cpp b/WebCore/khtml/rendering/render_block.cpp
index 2f8d58d..15766de 100644
--- a/WebCore/khtml/rendering/render_block.cpp
+++ b/WebCore/khtml/rendering/render_block.cpp
@@ -90,6 +90,8 @@ void RenderBlock::setStyle(RenderStyle* _style)
         child = child->nextSibling();
     }
 
+    m_lineHeight = -1;
+
     // Update pseudos for :before and :after now.
     updatePseudoChild(RenderStyle::BEFORE, firstChild());
     updatePseudoChild(RenderStyle::AFTER, lastChild());
diff --git a/WebCore/khtml/rendering/render_flow.cpp b/WebCore/khtml/rendering/render_flow.cpp
index 371087f..765985f 100644
--- a/WebCore/khtml/rendering/render_flow.cpp
+++ b/WebCore/khtml/rendering/render_flow.cpp
@@ -151,6 +151,26 @@ void RenderFlow::detach()
     RenderBox::detach();
 }
 
+short RenderFlow::lineHeight(bool firstLine, bool isRootLineBox) const
+{
+    if (firstLine) {
+        RenderStyle* s = style(firstLine);
+        Length lh = s->lineHeight();
+        if (lh.value < 0) {
+	    if (m_lineHeight == -1)
+	      m_lineHeight = RenderObject::lineHeight(false);
+	    return m_lineHeight;
+	}
+        if (lh.isPercent())
+            return lh.minWidth(s->font().pixelSize());
+        return lh.value;
+    }
+
+    if (m_lineHeight == -1)
+        m_lineHeight = RenderObject::lineHeight(false);
+    return m_lineHeight;
+}
+
 InlineBox* RenderFlow::createInlineBox(bool makePlaceHolderBox, bool isRootLineBox)
 {
     if (!isRootLineBox &&
diff --git a/WebCore/khtml/rendering/render_flow.h b/WebCore/khtml/rendering/render_flow.h
index e96c718..2cd8c90 100644
--- a/WebCore/khtml/rendering/render_flow.h
+++ b/WebCore/khtml/rendering/render_flow.h
@@ -59,6 +59,8 @@ public:
     void deleteLineBoxes();
     virtual void detach();
 
+    virtual short lineHeight(bool firstLine, bool isRootLineBox=false) const;
+    
     InlineFlowBox* firstLineBox() const { return m_firstLineBox; }
     InlineFlowBox* lastLineBox() const { return m_lastLineBox; }
 
@@ -89,6 +91,8 @@ protected:
     // For inline flows, each box represents a portion of that inline.
     InlineFlowBox* m_firstLineBox;
     InlineFlowBox* m_lastLineBox;
+    
+    mutable short m_lineHeight;
 };
 
     
diff --git a/WebCore/khtml/rendering/render_inline.cpp b/WebCore/khtml/rendering/render_inline.cpp
index 56984aa..5ffbf3d 100644
--- a/WebCore/khtml/rendering/render_inline.cpp
+++ b/WebCore/khtml/rendering/render_inline.cpp
@@ -59,6 +59,8 @@ void RenderInline::setStyle(RenderStyle* _style)
         currCont = currCont->continuation();
     }
 
+    m_lineHeight = -1;
+    
     // Update pseudos for :before and :after now.
     updatePseudoChild(RenderStyle::BEFORE, firstChild());
     updatePseudoChild(RenderStyle::AFTER, lastChild());
diff --git a/WebCore/khtml/rendering/render_object.cpp b/WebCore/khtml/rendering/render_object.cpp
index bed34ce..9193ef2 100644
--- a/WebCore/khtml/rendering/render_object.cpp
+++ b/WebCore/khtml/rendering/render_object.cpp
@@ -1844,7 +1844,7 @@ short RenderObject::verticalPositionHint( bool firstLine ) const
     if ( m_verticalPosition == PositionUndefined || firstLine ) {
 	vpos = getVerticalPosition( firstLine );
 	if ( !firstLine )
-	    const_cast<RenderObject *>(this)->m_verticalPosition = vpos;
+	    m_verticalPosition = vpos;
     }
     return vpos;
 
@@ -1909,14 +1909,16 @@ short RenderObject::getVerticalPosition( bool firstLine ) const
 
 short RenderObject::lineHeight( bool firstLine, bool ) const
 {
-    Length lh = style(firstLine)->lineHeight();
+    RenderStyle* s = style(firstLine);
+    
+    Length lh = s->lineHeight();
 
     // its "unset", choose nice default
-    if ( lh.value < 0 )
-        return style(firstLine)->fontMetrics().lineSpacing();
+    if (lh.value < 0)
+        return s->fontMetrics().lineSpacing();
 
-    if ( lh.isPercent() )
-        return lh.minWidth( style(firstLine)->font().pixelSize() );
+    if (lh.isPercent())
+        return lh.minWidth(s->font().pixelSize());
 
     // its fixed
     return lh.value;
diff --git a/WebCore/khtml/rendering/render_object.h b/WebCore/khtml/rendering/render_object.h
index 99d7dd1..5bee100 100644
--- a/WebCore/khtml/rendering/render_object.h
+++ b/WebCore/khtml/rendering/render_object.h
@@ -733,7 +733,7 @@ private:
     RenderObject *m_previous;
     RenderObject *m_next;
 
-    short m_verticalPosition;
+    mutable short m_verticalPosition;
 
     bool m_needsLayout               : 1;
     bool m_normalChildNeedsLayout    : 1;
diff --git a/WebCore/khtml/rendering/render_text.cpp b/WebCore/khtml/rendering/render_text.cpp
index 49535af..1d2384b 100644
--- a/WebCore/khtml/rendering/render_text.cpp
+++ b/WebCore/khtml/rendering/render_text.cpp
@@ -275,7 +275,6 @@ void RenderText::setStyle(RenderStyle *_style)
                                    (style() && style()->textTransform() != _style->textTransform());
 
         RenderObject::setStyle( _style );
-        m_lineHeight = RenderObject::lineHeight(false);
 
         if (needToTransformText) {
             DOM::DOMStringImpl* textToTransform = originalString();
@@ -403,7 +402,7 @@ FindSelectionResult RenderText::checkSelectionPointIgnoringContinuations(int _x,
     for (InlineTextBox* s = firstTextBox(); s; s = s->nextTextBox()) {
         int result;
         const Font *f = htmlFont(s == firstTextBox());
-        result = s->checkSelectionPoint(_x, _y, _tx, _ty, f, this, offset, m_lineHeight);
+        result = s->checkSelectionPoint(_x, _y, _tx, _ty, f, this, offset, lineHeight(false));
 
 //         kdDebug(6040) << "RenderText::checkSelectionPoint " << this << " line " << si << " result=" << result << " offset=" << offset << endl;
         if ( result == SelectionPointInside ) // x,y is inside the InlineTextBox
@@ -1171,16 +1170,13 @@ int RenderText::height() const
     // FIXME: Why use line-height? Shouldn't we be adding in the height of the last text box? -dwh
     int retval = 0;
     if (firstTextBox())
-        retval = lastTextBox()->m_y + m_lineHeight - firstTextBox()->m_y;
+        retval = lastTextBox()->m_y + lineHeight(false) - firstTextBox()->m_y;
     return retval;
 }
 
-short RenderText::lineHeight( bool firstLine, bool ) const
+short RenderText::lineHeight( bool firstLine, bool isRootLineBox) const
 {
-    if ( firstLine )
- 	return RenderObject::lineHeight( firstLine );
-
-    return m_lineHeight;
+    return parent()->lineHeight(firstLine, isRootLineBox);
 }
 
 short RenderText::baselinePosition( bool firstLine, bool ) const
diff --git a/WebCore/khtml/rendering/render_text.h b/WebCore/khtml/rendering/render_text.h
index bda68ad..b505a0e 100644
--- a/WebCore/khtml/rendering/render_text.h
+++ b/WebCore/khtml/rendering/render_text.h
@@ -222,7 +222,6 @@ protected: // members
     InlineTextBox* m_firstTextBox;
     InlineTextBox* m_lastTextBox;
     
-    short m_lineHeight;
     short m_minWidth;
     short m_maxWidth;
     short m_beginMinWidth;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list