[webkit-changes] cvs commit: WebCore/khtml/rendering render_canvas.cpp render_canvas.h render_frames.cpp render_frames.h render_layer.cpp render_object.cpp render_object.h render_replaced.cpp render_replaced.h

Maciej mjs at opensource.apple.com
Wed Oct 19 02:15:16 PDT 2005


mjs         05/10/19 02:15:15

  Modified:    .        ChangeLog
               khtml    khtmlview.cpp
               khtml/rendering render_canvas.cpp render_canvas.h
                        render_frames.cpp render_frames.h render_layer.cpp
                        render_object.cpp render_object.h
                        render_replaced.cpp render_replaced.h
  Log:
          Reviewed by Dave.
  
          - instead of walking the render tree to update widget positions, instead
  	keep a set of widgets per canvas, maintained by the constructor and destroy method
  	for RenderWidget. About a .5% speedup.
  
          * khtml/khtmlview.cpp:
          (KHTMLView::layout):
          * khtml/rendering/render_canvas.cpp:
          (RenderCanvas::updateWidgetPositions):
          (RenderCanvas::addWidget):
          (RenderCanvas::removeWidget):
          * khtml/rendering/render_canvas.h:
          * khtml/rendering/render_frames.cpp:
          (RenderPart::updateWidgetPosition):
          (RenderPart::needWidgetPositionUpdating):
          * khtml/rendering/render_frames.h:
          * khtml/rendering/render_layer.cpp:
          (khtml::RenderLayer::scrollToOffset):
          * khtml/rendering/render_object.cpp:
          (RenderObject::updateWidgetPosition):
          (RenderObject::needWidgetPositionUpdating):
          * khtml/rendering/render_object.h:
          * khtml/rendering/render_replaced.cpp:
          (RenderWidget::RenderWidget):
          (RenderWidget::destroy):
          (RenderWidget::updateWidgetPosition):
          (RenderWidget::needWidgetPositionUpdating):
          * khtml/rendering/render_replaced.h:
  
  Revision  Changes    Path
  1.252     +32 -0     WebCore/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/WebCore/ChangeLog,v
  retrieving revision 1.251
  retrieving revision 1.252
  diff -u -r1.251 -r1.252
  --- ChangeLog	19 Oct 2005 00:03:41 -0000	1.251
  +++ ChangeLog	19 Oct 2005 09:15:12 -0000	1.252
  @@ -1,3 +1,35 @@
  +2005-10-19  Maciej Stachowiak  <mjs at apple.com>
  +
  +        Reviewed by Dave.
  +
  +        - instead of walking the render tree to update widget positions, instead
  +	keep a set of widgets per canvas, maintained by the constructor and destroy method
  +	for RenderWidget. About a .5% speedup.
  +
  +        * khtml/khtmlview.cpp:
  +        (KHTMLView::layout):
  +        * khtml/rendering/render_canvas.cpp:
  +        (RenderCanvas::updateWidgetPositions):
  +        (RenderCanvas::addWidget):
  +        (RenderCanvas::removeWidget):
  +        * khtml/rendering/render_canvas.h:
  +        * khtml/rendering/render_frames.cpp:
  +        (RenderPart::updateWidgetPosition):
  +        (RenderPart::needWidgetPositionUpdating):
  +        * khtml/rendering/render_frames.h:
  +        * khtml/rendering/render_layer.cpp:
  +        (khtml::RenderLayer::scrollToOffset):
  +        * khtml/rendering/render_object.cpp:
  +        (RenderObject::updateWidgetPosition):
  +        (RenderObject::needWidgetPositionUpdating):
  +        * khtml/rendering/render_object.h:
  +        * khtml/rendering/render_replaced.cpp:
  +        (RenderWidget::RenderWidget):
  +        (RenderWidget::destroy):
  +        (RenderWidget::updateWidgetPosition):
  +        (RenderWidget::needWidgetPositionUpdating):
  +        * khtml/rendering/render_replaced.h:
  +
   2005-10-18  Darin Adler  <darin at apple.com>
   
           Reviewed and landed by Maciej.
  
  
  
  1.149     +0 -2      WebCore/khtml/khtmlview.cpp
  
  Index: khtmlview.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/khtmlview.cpp,v
  retrieving revision 1.148
  retrieving revision 1.149
  diff -u -r1.148 -r1.149
  --- khtmlview.cpp	18 Oct 2005 20:45:36 -0000	1.148
  +++ khtmlview.cpp	19 Oct 2005 09:15:13 -0000	1.149
  @@ -699,10 +699,8 @@
       // Now update the positions of all layers.
       layer->updateLayerPositions(d->doFullRepaint);
   
  -#if APPLE_CHANGES
       // We update our widget positions right after doing a layout.
       root->updateWidgetPositions();
  -#endif
       
       if (d->repaintRects && !d->repaintRects->isEmpty()) {
           // FIXME: Could optimize this and have objects removed from this list
  
  
  
  1.34      +20 -0     WebCore/khtml/rendering/render_canvas.cpp
  
  Index: render_canvas.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_canvas.cpp,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- render_canvas.cpp	3 Oct 2005 21:12:38 -0000	1.33
  +++ render_canvas.cpp	19 Oct 2005 09:15:13 -0000	1.34
  @@ -546,6 +546,26 @@
       epos = m_selectionEndPos;
   }
   
  +void RenderCanvas::updateWidgetPositions()
  +{
  +    RenderObjectSet::iterator end = m_widgets.end();
  +    for (RenderObjectSet::iterator it = m_widgets.begin(); it != end; ++it) {
  +        (*it)->updateWidgetPosition();
  +    }
  +}
  +
  +void RenderCanvas::addWidget(RenderObject *o)
  +{
  +    m_widgets.insert(o);
  +}
  +
  +void RenderCanvas::removeWidget(RenderObject *o)
  +{
  +    m_widgets.remove(o);
  +}
  +
  +
  +
   QRect RenderCanvas::viewRect() const
   {
       if (m_printingMode)
  
  
  
  1.12      +9 -0      WebCore/khtml/rendering/render_canvas.h
  
  Index: render_canvas.h
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_canvas.h,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- render_canvas.h	7 Dec 2004 01:36:23 -0000	1.11
  +++ render_canvas.h	19 Oct 2005 09:15:14 -0000	1.12
  @@ -23,6 +23,7 @@
   #define render_canvas_h
   
   #include "render_block.h"
  +#include <kxmlcore/HashSet.h>
   
   class KHTMLView;
   class QScrollView;
  @@ -102,6 +103,10 @@
       QRect printRect() const { return m_printRect; }
       void setPrintRect(const QRect& r) { m_printRect = r; }
   
  +    void updateWidgetPositions();
  +    void addWidget(RenderObject *);
  +    void removeWidget(RenderObject *);
  +
   protected:
   
       KHTMLView *m_view;
  @@ -124,6 +129,10 @@
       
       int m_maximalOutlineSize; // Used to apply a fudge factor to dirty-rect checks on blocks/tables.
       QRect m_printRect; // Used when printing.
  +
  +    typedef HashSet<RenderObject *, PointerHash<RenderObject *> > RenderObjectSet;
  +
  +    RenderObjectSet m_widgets;
   };
   
   };
  
  
  
  1.81      +1 -3      WebCore/khtml/rendering/render_frames.cpp
  
  Index: render_frames.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_frames.cpp,v
  retrieving revision 1.80
  retrieving revision 1.81
  diff -u -r1.80 -r1.81
  --- render_frames.cpp	18 Oct 2005 20:45:37 -0000	1.80
  +++ render_frames.cpp	19 Oct 2005 09:15:14 -0000	1.81
  @@ -919,10 +919,9 @@
     }
   }
   
  -#if APPLE_CHANGES
   // FIXME: This should not be necessary.  Remove this once WebKit knows to properly schedule
   // layouts using WebCore when objects resize.
  -void RenderPart::updateWidgetPositions()
  +void RenderPart::updateWidgetPosition()
   {
       if (!m_widget)
           return;
  @@ -947,6 +946,5 @@
               static_cast<KHTMLView*>(view)->layout();
       }
   }
  -#endif
   
   #include "render_frames.moc"
  
  
  
  1.20      +1 -3      WebCore/khtml/rendering/render_frames.h
  
  Index: render_frames.h
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_frames.h,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- render_frames.h	18 Oct 2005 20:45:37 -0000	1.19
  +++ render_frames.h	19 Oct 2005 09:15:14 -0000	1.20
  @@ -100,11 +100,9 @@
   
       virtual void setWidget( QWidget *widget );
   
  -#if APPLE_CHANGES
       // FIXME: This should not be necessary.  Remove this once WebKit knows to properly schedule
       // layouts using WebCore when objects resize.
  -    void updateWidgetPositions();
  -#endif
  +    void updateWidgetPosition();
   
       bool hasFallbackContent() const { return m_hasFallbackContent; }
   
  
  
  
  1.114     +7 -7      WebCore/khtml/rendering/render_layer.cpp
  
  Index: render_layer.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_layer.cpp,v
  retrieving revision 1.113
  retrieving revision 1.114
  diff -u -r1.113 -r1.114
  --- render_layer.cpp	18 Oct 2005 20:45:37 -0000	1.113
  +++ render_layer.cpp	19 Oct 2005 09:15:14 -0000	1.114
  @@ -526,17 +526,17 @@
       for (RenderLayer* child = firstChild(); child; child = child->nextSibling())
           child->updateLayerPositions(false, false);
       
  -#if APPLE_CHANGES
  -    // Move our widgets.
  -    m_object->updateWidgetPositions();
  -    
  -    // Update dashboard regions, scrolling may change the clip of a
  -    // particular region.
       RenderCanvas *canvas = renderer()->canvas();
  -    if (canvas)
  +    if (canvas) {
  +#if APPLE_CHANGES
  +        // Update dashboard regions, scrolling may change the clip of a
  +        // particular region.
           canvas->view()->updateDashboardRegions();
   #endif
   
  +        m_object->canvas()->updateWidgetPositions();
  +    }
  +
       // Fire the scroll DOM event.
       m_object->element()->dispatchHTMLEvent(scrollEvent, true, false);
   
  
  
  
  1.223     +2 -4      WebCore/khtml/rendering/render_object.cpp
  
  Index: render_object.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_object.cpp,v
  retrieving revision 1.222
  retrieving revision 1.223
  diff -u -r1.222 -r1.223
  --- render_object.cpp	18 Oct 2005 20:45:38 -0000	1.222
  +++ render_object.cpp	19 Oct 2005 09:15:14 -0000	1.223
  @@ -2379,13 +2379,11 @@
       }        
   }
   
  -#if APPLE_CHANGES
  -void RenderObject::updateWidgetPositions()
  +void RenderObject::updateWidgetPosition()
   {
  -    for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling())
  -        curr->updateWidgetPositions();
   }
   
  +#if APPLE_CHANGES
   QValueList<DashboardRegionValue> RenderObject::computeDashboardRegions()
   {
       QValueList<DashboardRegionValue> regions;
  
  
  
  1.164     +2 -3      WebCore/khtml/rendering/render_object.h
  
  Index: render_object.h
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_object.h,v
  retrieving revision 1.163
  retrieving revision 1.164
  diff -u -r1.163 -r1.164
  --- render_object.h	18 Oct 2005 20:45:38 -0000	1.163
  +++ render_object.h	19 Oct 2005 09:15:14 -0000	1.164
  @@ -462,10 +462,9 @@
   
       virtual int availableHeight() const { return 0; }
   
  -#if APPLE_CHANGES
  -    // Called recursively to update the absolute positions of all widgets.
  -    virtual void updateWidgetPositions();
  +    virtual void updateWidgetPosition();
       
  +#if APPLE_CHANGES
       QValueList<DashboardRegionValue> RenderObject::computeDashboardRegions();
       void addDashboardRegions (QValueList<DashboardRegionValue>& regions);
       void collectDashboardRegions (QValueList<DashboardRegionValue>& regions);
  
  
  
  1.91      +9 -13     WebCore/khtml/rendering/render_replaced.cpp
  
  Index: render_replaced.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_replaced.cpp,v
  retrieving revision 1.90
  retrieving revision 1.91
  diff -u -r1.90 -r1.91
  --- render_replaced.cpp	18 Oct 2005 20:45:38 -0000	1.90
  +++ render_replaced.cpp	19 Oct 2005 09:15:14 -0000	1.91
  @@ -228,6 +228,8 @@
       assert(node);
       m_view = node->getDocument()->view();
   
  +    canvas()->addWidget(this);
  +
       // this is no real reference counting, its just there
       // to make sure that we're not deleted while we're recursed
       // in an eventFilter of the widget
  @@ -241,11 +243,14 @@
       // So the code below includes copied and pasted contents of
       // both RenderBox::destroy() and RenderObject::destroy().
       // Fix originally made for <rdar://problem/4228818>.
  -    
  +
  +    if (RenderCanvas *c = canvas())
  +        c->removeWidget(this);
  +
       remove();
   
  -    if ( m_widget ) {
  -        if ( m_view )
  +    if (m_widget) {
  +        if (m_view)
               m_view->removeChild( m_widget );
   
           m_widget->removeEventFilter( this );
  @@ -343,13 +348,6 @@
   {
       KHTMLAssert( needsLayout() );
       KHTMLAssert( minMaxKnown() );
  -#if !APPLE_CHANGES
  -    if ( m_widget ) {
  -	resizeWidget( m_widget,
  -		      m_width-borderLeft()-borderRight()-paddingLeft()-paddingRight(),
  -		      m_height-borderLeft()-borderRight()-paddingLeft()-paddingRight() );
  -    }
  -#endif
   
       setNeedsLayout(false);
   }
  @@ -542,8 +540,7 @@
           arenaDelete(arena, this);
   }
   
  -#if APPLE_CHANGES
  -void RenderWidget::updateWidgetPositions()
  +void RenderWidget::updateWidgetPosition()
   {
       if (!m_widget)
           return;
  @@ -573,7 +570,6 @@
           deref(arena);
       }
   }
  -#endif
   
   void RenderWidget::setSelectionState(SelectionState s) 
   {
  
  
  
  1.36      +1 -1      WebCore/khtml/rendering/render_replaced.h
  
  Index: render_replaced.h
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_replaced.h,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- render_replaced.h	18 Oct 2005 20:45:38 -0000	1.35
  +++ render_replaced.h	19 Oct 2005 09:15:14 -0000	1.36
  @@ -100,8 +100,8 @@
   
   #if APPLE_CHANGES 
       void sendConsumedMouseUp();
  -    virtual void updateWidgetPositions();
   #endif
  +    virtual void updateWidgetPosition();
   
   public slots:
       void slotWidgetDestructed();
  
  
  



More information about the webkit-changes mailing list