Reduce the overhead of updating the animatable style on ARMv7
authorbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Jun 2014 03:35:43 +0000 (03:35 +0000)
committerbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Jun 2014 03:35:43 +0000 (03:35 +0000)
https://bugs.webkit.org/show_bug.cgi?id=133618

Reviewed by Simon Fraser.

While updating the style for animations, most of the time spent was pure calling overhead.

This patch should reduce this a bit on ARMv7:
1) Get the frame directly from the document instead of document->view->framview->frame.
2) Inline RenderObject::animation(). This is just 3 loads, setting up the registers on the call
   site is more expensive than loading the values directly.
3) Inline RenderElement::setAnimatableStyle(). It has only one call site and the call is mostly
   overhead.

* css/CSSComputedStyleDeclaration.cpp:
* rendering/RenderElement.cpp:
(WebCore::RenderElement::setAnimatableStyle): Deleted.
* rendering/RenderElement.h:
(WebCore::RenderElement::setAnimatableStyle):
* rendering/RenderObject.cpp:
(WebCore::RenderObject::adjustRectForOutlineAndShadow):
(WebCore::RenderObject::animation): Deleted.
* rendering/RenderObject.h:
(WebCore::RenderObject::animation):
* rendering/RenderView.h:
(WebCore::RenderObject::frame):

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

Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderElement.cpp
Source/WebCore/rendering/RenderElement.h
Source/WebCore/rendering/RenderObject.cpp
Source/WebCore/rendering/RenderObject.h
Source/WebCore/rendering/RenderView.h

index 2fdb864..2d944f9 100644 (file)
@@ -1,3 +1,32 @@
+2014-06-10  Benjamin Poulain  <benjamin@webkit.org>
+
+        Reduce the overhead of updating the animatable style on ARMv7
+        https://bugs.webkit.org/show_bug.cgi?id=133618
+
+        Reviewed by Simon Fraser.
+
+        While updating the style for animations, most of the time spent was pure calling overhead.
+
+        This patch should reduce this a bit on ARMv7:
+        1) Get the frame directly from the document instead of document->view->framview->frame.
+        2) Inline RenderObject::animation(). This is just 3 loads, setting up the registers on the call
+           site is more expensive than loading the values directly.
+        3) Inline RenderElement::setAnimatableStyle(). It has only one call site and the call is mostly
+           overhead.
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        * rendering/RenderElement.cpp:
+        (WebCore::RenderElement::setAnimatableStyle): Deleted.
+        * rendering/RenderElement.h:
+        (WebCore::RenderElement::setAnimatableStyle):
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::adjustRectForOutlineAndShadow):
+        (WebCore::RenderObject::animation): Deleted.
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::animation):
+        * rendering/RenderView.h:
+        (WebCore::RenderObject::frame):
+
 2014-06-10  Sam Weinig  <sam@webkit.org>
 
         Don't create a HashTable for JSObjects that use eager reification
index b49ba1e..9d3d83d 100644 (file)
@@ -26,7 +26,6 @@
 #include "RenderElement.h"
 
 #include "AXObjectCache.h"
-#include "AnimationController.h"
 #include "ContentData.h"
 #include "ControlStates.h"
 #include "CursorList.h"
@@ -463,11 +462,6 @@ void RenderElement::setStyle(PassRef<RenderStyle> style)
     }
 }
 
-void RenderElement::setAnimatableStyle(PassRef<RenderStyle> style)
-{
-    setStyle(animation().updateAnimations(*this, std::move(style)));
-}
-
 void RenderElement::addChild(RenderObject* newChild, RenderObject* beforeChild)
 {
     bool needsTable = false;
index 7b7906f..ceb1e2b 100644 (file)
@@ -23,6 +23,7 @@
 #ifndef RenderElement_h
 #define RenderElement_h
 
+#include "AnimationController.h"
 #include "RenderObject.h"
 
 namespace WebCore {
@@ -244,6 +245,11 @@ private:
 
 RENDER_OBJECT_TYPE_CASTS(RenderElement, isRenderElement())
 
+inline void RenderElement::setAnimatableStyle(PassRef<RenderStyle> style)
+{
+    setStyle(animation().updateAnimations(*this, std::move(style)));
+}
+
 inline RenderStyle& RenderElement::firstLineStyle() const
 {
     return document().styleSheetCollection().usesFirstLineRules() ? *cachedFirstLineStyle() : style();
index 3732733..0fde593 100644 (file)
@@ -33,7 +33,6 @@
 #include "FloatQuad.h"
 #include "FlowThreadController.h"
 #include "FocusController.h"
-#include "Frame.h"
 #include "FrameSelection.h"
 #include "FrameView.h"
 #include "GeometryUtilities.h"
@@ -2315,11 +2314,6 @@ void RenderObject::adjustRectForOutlineAndShadow(LayoutRect& rect) const
     rect.inflate(outlineSize);
 }
 
-AnimationController& RenderObject::animation() const
-{
-    return frame().animation();
-}
-
 void RenderObject::imageChanged(CachedImage* image, const IntRect* rect)
 {
     imageChanged(static_cast<WrappedImagePtr>(image), rect);
index ac89091..6492a00 100644 (file)
@@ -30,6 +30,7 @@
 #include "DocumentStyleSheetCollection.h"
 #include "Element.h"
 #include "FloatQuad.h"
+#include "Frame.h"
 #include "LayoutRect.h"
 #include "PaintPhase.h"
 #include "RenderStyle.h"
@@ -1033,6 +1034,16 @@ private:
 template <typename Type> bool isRendererOfType(const RenderObject&);
 template <> inline bool isRendererOfType<const RenderObject>(const RenderObject&) { return true; }
 
+inline Frame& RenderObject::frame() const
+{
+    return *document().frame();
+}
+
+inline AnimationController& RenderObject::animation() const
+{
+    return frame().animation();
+}
+
 inline bool RenderObject::documentBeingDestroyed() const
 {
     return document().renderTreeBeingDestroyed();
index 125a19b..bb82112 100644 (file)
@@ -456,11 +456,6 @@ private:
     RenderView* m_view;
 };
 
-inline Frame& RenderObject::frame() const
-{
-    return view().frameView().frame();
-}
-
 } // namespace WebCore
 
 #endif // RenderView_h