[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