Use static const global variable for TransformationMatrix instead of NeverDestroyed
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 31 Jul 2018 16:31:47 +0000 (16:31 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 31 Jul 2018 16:31:47 +0000 (16:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=188195

Reviewed by Darin Adler.

Since TransformationMatrix does not have a non-trivial destructor, we can put it
as static const global variable if its constructor is constexpr. This patch makes
some of constructors constexpr and makes identityTransform static const global variable
instead of NeverDestroyed<> + static function. This removes unnecessary static function
and lazy initialization.

No behavior change.

* platform/graphics/GraphicsLayer.cpp:
(WebCore::GraphicsLayer::transform const):
(WebCore::GraphicsLayer::childrenTransform const):
(WebCore::identityTransform): Deleted.
* platform/graphics/transforms/TransformationMatrix.h:
(WebCore::TransformationMatrix::TransformationMatrix):

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

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/GraphicsLayer.cpp
Source/WebCore/platform/graphics/transforms/TransformationMatrix.h

index 74e5096..b2be801 100644 (file)
@@ -1,3 +1,25 @@
+2018-07-31  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Use static const global variable for TransformationMatrix instead of NeverDestroyed
+        https://bugs.webkit.org/show_bug.cgi?id=188195
+
+        Reviewed by Darin Adler.
+
+        Since TransformationMatrix does not have a non-trivial destructor, we can put it
+        as static const global variable if its constructor is constexpr. This patch makes
+        some of constructors constexpr and makes identityTransform static const global variable
+        instead of NeverDestroyed<> + static function. This removes unnecessary static function
+        and lazy initialization.
+
+        No behavior change.
+
+        * platform/graphics/GraphicsLayer.cpp:
+        (WebCore::GraphicsLayer::transform const):
+        (WebCore::GraphicsLayer::childrenTransform const):
+        (WebCore::identityTransform): Deleted.
+        * platform/graphics/transforms/TransformationMatrix.h:
+        (WebCore::TransformationMatrix::TransformationMatrix):
+
 2018-07-31  Zalan Bujtas  <zalan@apple.com>
 
         [LFC][Floating] Add basic left/right floating positioning.
index b9641bb..38c034a 100644 (file)
@@ -292,15 +292,11 @@ void GraphicsLayer::removeFromParent()
     }
 }
 
-static const TransformationMatrix& identityTransform()
-{
-    static NeverDestroyed<TransformationMatrix> identityTransform;
-    return identityTransform;
-}
+static const TransformationMatrix identityTransform { };
 
 const TransformationMatrix& GraphicsLayer::transform() const
 {
-    return m_transform ? *m_transform : identityTransform();
+    return m_transform ? *m_transform : identityTransform;
 }
 
 void GraphicsLayer::setTransform(const TransformationMatrix& matrix)
@@ -313,7 +309,7 @@ void GraphicsLayer::setTransform(const TransformationMatrix& matrix)
 
 const TransformationMatrix& GraphicsLayer::childrenTransform() const
 {
-    return m_childrenTransform ? *m_childrenTransform : identityTransform();
+    return m_childrenTransform ? *m_childrenTransform : identityTransform;
 }
 
 void GraphicsLayer::setChildrenTransform(const TransformationMatrix& matrix)
index e832ba9..37d8159 100644 (file)
@@ -82,18 +82,43 @@ public:
     typedef double Matrix4[4][4];
 #endif
 
-    TransformationMatrix() { makeIdentity(); }
-    WEBCORE_EXPORT TransformationMatrix(const AffineTransform&);
-    TransformationMatrix(const TransformationMatrix& t) { *this = t; }
-    TransformationMatrix(double a, double b, double c, double d, double e, double f) { setMatrix(a, b, c, d, e, f); }
-    TransformationMatrix(double m11, double m12, double m13, double m14,
-                         double m21, double m22, double m23, double m24,
-                         double m31, double m32, double m33, double m34,
-                         double m41, double m42, double m43, double m44)
+    constexpr TransformationMatrix()
+        : m_matrix {
+            { 1, 0, 0, 0 },
+            { 0, 1, 0, 0 },
+            { 0, 0, 1, 0 },
+            { 0, 0, 0, 1 },
+        }
+    {
+    }
+
+    constexpr TransformationMatrix(double a, double b, double c, double d, double e, double f)
+        : m_matrix {
+            { a, b, 0, 0 },
+            { c, d, 0, 0 },
+            { 0, 0, 1, 0 },
+            { e, f, 0, 1 },
+        }
     {
-        setMatrix(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44);
     }
 
+    constexpr TransformationMatrix(
+        double m11, double m12, double m13, double m14,
+        double m21, double m22, double m23, double m24,
+        double m31, double m32, double m33, double m34,
+        double m41, double m42, double m43, double m44)
+        : m_matrix {
+            { m11, m12, m13, m14 },
+            { m21, m22, m23, m24 },
+            { m31, m32, m33, m34 },
+            { m41, m42, m43, m44 },
+        }
+    {
+    }
+
+    TransformationMatrix(const TransformationMatrix& t) { *this = t; }
+    WEBCORE_EXPORT TransformationMatrix(const AffineTransform&);
+
     void setMatrix(double a, double b, double c, double d, double e, double f)
     {
         m_matrix[0][0] = a; m_matrix[0][1] = b; m_matrix[0][2] = 0; m_matrix[0][3] = 0;