Pack booleans in Event into a bitfield
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 18 Aug 2018 06:47:22 +0000 (06:47 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 18 Aug 2018 06:47:22 +0000 (06:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=188713

Reviewed by Daniel Bates.

Use bitfields for booleans in Event class.

* dom/Event.cpp:
(WebCore::Event::Event):
* dom/Event.h:
(WebCore::Event::IsComposed): Added.
(WebCore::Event): Packed booleans into a bitfield.

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

Source/WebCore/ChangeLog
Source/WebCore/dom/Event.cpp
Source/WebCore/dom/Event.h

index 8fb2880..881286f 100644 (file)
@@ -1,3 +1,18 @@
+2018-08-17  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Pack booleans in Event into a bitfield
+        https://bugs.webkit.org/show_bug.cgi?id=188713
+
+        Reviewed by Daniel Bates.
+
+        Use bitfields for booleans in Event class.
+
+        * dom/Event.cpp:
+        (WebCore::Event::Event):
+        * dom/Event.h:
+        (WebCore::Event::IsComposed): Added.
+        (WebCore::Event): Packed booleans into a bitfield.
+
 2018-08-17  Aditya Keerthi  <akeerthi@apple.com>
 
         [Datalist][iOS] Display suggestions for input[type=color]
index 7bb64bb..66e0662 100644 (file)
 
 namespace WebCore {
 
+ALWAYS_INLINE Event::Event(MonotonicTime createTime, const AtomicString& type, IsTrusted isTrusted, CanBubble canBubble, IsCancelable cancelable, IsComposed composed)
+    : m_type { type }
+    , m_isInitialized { !type.isNull() }
+    , m_canBubble { canBubble == CanBubble::Yes }
+    , m_cancelable { cancelable == IsCancelable::Yes }
+    , m_composed { composed == IsComposed::Yes }
+    , m_propagationStopped { false }
+    , m_immediatePropagationStopped { false }
+    , m_wasCanceled { false }
+    , m_defaultHandled { false }
+    , m_isDefaultEventHandlerIgnored { false }
+    , m_isTrusted { isTrusted == IsTrusted::Yes }
+    , m_isExecutingPassiveEventListener { false }
+    , m_eventPhase { NONE }
+    , m_createTime { createTime }
+{
+}
+
 Event::Event(IsTrusted isTrusted)
-    : m_isTrusted(isTrusted == IsTrusted::Yes)
-    , m_createTime(MonotonicTime::now())
+    : Event { MonotonicTime::now(), { }, isTrusted, CanBubble::No, IsCancelable::No, IsComposed::No }
 {
 }
 
 Event::Event(const AtomicString& eventType, CanBubble canBubble, IsCancelable isCancelable)
-    : m_type(eventType)
-    , m_isInitialized(true)
-    , m_canBubble(canBubble == CanBubble::Yes)
-    , m_cancelable(isCancelable == IsCancelable::Yes)
-    , m_isTrusted(true)
-    , m_createTime(MonotonicTime::now())
+    : Event { MonotonicTime::now(), eventType, IsTrusted::Yes, canBubble, isCancelable, IsComposed::No }
 {
+    ASSERT(!eventType.isNull());
 }
 
 Event::Event(const AtomicString& eventType, CanBubble canBubble, IsCancelable isCancelable, MonotonicTime timestamp)
-    : m_type(eventType)
-    , m_isInitialized(true)
-    , m_canBubble(canBubble == CanBubble::Yes)
-    , m_cancelable(isCancelable == IsCancelable::Yes)
-    , m_isTrusted(true)
-    , m_createTime(timestamp)
+    : Event { timestamp, eventType, IsTrusted::Yes, canBubble, isCancelable, IsComposed::No }
 {
+    ASSERT(!eventType.isNull());
 }
 
 Event::Event(const AtomicString& eventType, const EventInit& initializer, IsTrusted isTrusted)
-    : m_type(eventType)
-    , m_isInitialized(true)
-    , m_canBubble(initializer.bubbles)
-    , m_cancelable(initializer.cancelable)
-    , m_composed(initializer.composed)
-    , m_isTrusted(isTrusted == IsTrusted::Yes)
-    , m_createTime(MonotonicTime::now())
+    : Event { MonotonicTime::now(), eventType, isTrusted,
+        initializer.bubbles ? CanBubble::Yes : CanBubble::No,
+        initializer.cancelable ? IsCancelable::Yes : IsCancelable::No,
+        initializer.composed ? IsComposed::Yes : IsComposed::No }
 {
+    ASSERT(!eventType.isNull());
 }
 
 Event::~Event() = default;
index 89bb87c..b747143 100644 (file)
@@ -43,8 +43,9 @@ public:
     enum class IsTrusted : uint8_t { No, Yes };
     enum class CanBubble : uint8_t { No, Yes };
     enum class IsCancelable : uint8_t { No, Yes };
+    enum class IsComposed : uint8_t { No, Yes };
 
-    enum PhaseType { 
+    enum PhaseType {
         NONE = 0,
         CAPTURING_PHASE = 1,
         AT_TARGET = 2,
@@ -148,24 +149,27 @@ protected:
     virtual void receivedTarget() { }
 
 private:
-    AtomicString m_type;
+    explicit Event(MonotonicTime createTime, const AtomicString& type, IsTrusted, CanBubble, IsCancelable, IsComposed);
 
     void setCanceledFlagIfPossible();
 
-    bool m_isInitialized { false };
-    bool m_canBubble { false };
-    bool m_cancelable { false };
-    bool m_composed { false };
+    AtomicString m_type;
+
+    unsigned m_isInitialized : 1;
+    unsigned m_canBubble : 1;
+    unsigned m_cancelable : 1;
+    unsigned m_composed : 1;
+
+    unsigned m_propagationStopped : 1;
+    unsigned m_immediatePropagationStopped : 1;
+    unsigned m_wasCanceled : 1;
+    unsigned m_defaultHandled : 1;
+    unsigned m_isDefaultEventHandlerIgnored : 1;
+    unsigned m_isTrusted : 1;
+    unsigned m_isExecutingPassiveEventListener : 1;
 
-    bool m_propagationStopped { false };
-    bool m_immediatePropagationStopped { false };
-    bool m_wasCanceled { false };
-    bool m_defaultHandled { false };
-    bool m_isDefaultEventHandlerIgnored { false };
-    bool m_isTrusted { false };
-    bool m_isExecutingPassiveEventListener { false };
+    unsigned m_eventPhase : 2;
 
-    PhaseType m_eventPhase { NONE };
     RefPtr<EventTarget> m_currentTarget;
     const EventPath* m_eventPath { nullptr };
     RefPtr<EventTarget> m_target;