Title: [282312] trunk/Tools
Revision
282312
Author
[email protected]
Date
2021-09-11 10:43:56 -0700 (Sat, 11 Sep 2021)

Log Message

Add an lldb summary provider for the WebCore::Length type
https://bugs.webkit.org/show_bug.cgi?id=230185

Reviewed by Alan Bujtas.

Make Length types easier to visualize when debugging in lldb.

* lldb/lldb_webkit.py:
(__lldb_init_module):
(WebCoreLength_SummaryProvider):
(WebCoreLengthProvider):
(WebCoreLengthProvider.__init__):
(WebCoreLengthProvider.get_type):
(WebCoreLengthProvider.get_type_string):
(WebCoreLengthProvider.is_auto):
(WebCoreLengthProvider.is_undefined):
(WebCoreLengthProvider.is_calculated):
(WebCoreLengthProvider.is_fixed):
(WebCoreLengthProvider.is_percent):
(WebCoreLengthProvider.has_quirk):
(WebCoreLengthProvider.is_float):
(WebCoreLengthProvider.get_numeric_value):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (282311 => 282312)


--- trunk/Tools/ChangeLog	2021-09-11 16:10:13 UTC (rev 282311)
+++ trunk/Tools/ChangeLog	2021-09-11 17:43:56 UTC (rev 282312)
@@ -1,3 +1,28 @@
+2021-09-10  Simon Fraser  <[email protected]>
+
+        Add an lldb summary provider for the WebCore::Length type
+        https://bugs.webkit.org/show_bug.cgi?id=230185
+
+        Reviewed by Alan Bujtas.
+
+        Make Length types easier to visualize when debugging in lldb.
+
+        * lldb/lldb_webkit.py:
+        (__lldb_init_module):
+        (WebCoreLength_SummaryProvider):
+        (WebCoreLengthProvider):
+        (WebCoreLengthProvider.__init__):
+        (WebCoreLengthProvider.get_type):
+        (WebCoreLengthProvider.get_type_string):
+        (WebCoreLengthProvider.is_auto):
+        (WebCoreLengthProvider.is_undefined):
+        (WebCoreLengthProvider.is_calculated):
+        (WebCoreLengthProvider.is_fixed):
+        (WebCoreLengthProvider.is_percent):
+        (WebCoreLengthProvider.has_quirk):
+        (WebCoreLengthProvider.is_float):
+        (WebCoreLengthProvider.get_numeric_value):
+
 2021-09-10  Chris Dumez  <[email protected]>
 
         Implement navigation reporting for Cross-Origin-Opener-Policy

Modified: trunk/Tools/lldb/lldb_webkit.py (282311 => 282312)


--- trunk/Tools/lldb/lldb_webkit.py	2021-09-11 16:10:13 UTC (rev 282311)
+++ trunk/Tools/lldb/lldb_webkit.py	2021-09-11 17:43:56 UTC (rev 282312)
@@ -85,6 +85,8 @@
     debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreFloatPoint_SummaryProvider WebCore::FloatPoint')
     debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreFloatRect_SummaryProvider WebCore::FloatRect')
 
+    debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreLength_SummaryProvider WebCore::Length')
+
     debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreSecurityOrigin_SummaryProvider WebCore::SecurityOrigin')
     debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreFrame_SummaryProvider WebCore::Frame')
 
@@ -249,6 +251,28 @@
     return "{ x = %s, y = %s, width = %s, height = %s }" % (provider.get_x(), provider.get_y(), provider.get_width(), provider.get_height())
 
 
+def WebCoreLength_SummaryProvider(valobj, dict):
+    provider = WebCoreLengthProvider(valobj, dict)
+    quirky = ' (quirky)' if provider.has_quirk() else ""
+
+    if (provider.is_auto()):
+        return "{ auto%s }" % (quirky)
+
+    if (provider.is_undefined()):
+        return "{ undefined%s }" % (quirky)
+
+    if (provider.is_calculated()):
+        return "{ calc%s }" % (quirky)
+
+    if (provider.is_fixed()):
+        return "{ %spx%s }" % (provider.get_numeric_value(), quirky)
+
+    if (provider.is_percent()):
+        return "{ %s%%%s }" % (provider.get_numeric_value(), quirky)
+
+    return "{ %s %s%s }" % (provider.get_type_string(), provider.get_numeric_value(), quirky)
+
+
 def WebCoreSecurityOrigin_SummaryProvider(valobj, dict):
     provider = WebCoreSecurityOriginProvider(valobj, dict)
     return '{ %s, domain = %s, hasUniversalAccess = %d }' % (provider.to_string(), provider.domain(), provider.has_universal_access())
@@ -702,6 +726,84 @@
         return WebCoreFloatSizeProvider(self.valobj.GetChildMemberWithName('m_size'), dict).get_height()
 
 
+class WebCoreLengthProvider:
+    "Print a WebCore::Length"
+
+    AUTO_TYPE           = 0
+    RELATIVE_TYPE       = 1
+    PERCENT_TYPE        = 2
+    FIXED_TYPE          = 3
+    INTRINSIC_TYPE      = 4
+    MIN_INTRINSIC_TYPE  = 5
+    MIN_CONTENT_TYPE    = 6
+    MAX_CONTENT_TYPE    = 7
+    FILL_AVAILABLE_TYPE = 8
+    FIT_CONTENT_TYPE    = 9
+    CALCULATED_TYPE     = 10
+    UNDEFINED_TYPE      = 11
+
+    def __init__(self, valobj, dict):
+        self.valobj = valobj
+
+    def get_type(self):
+        return self.valobj.GetChildMemberWithName('m_type').GetValueAsUnsigned(0)
+
+    def get_type_string(self):
+        length_type = self.get_type()
+
+        type_names = [
+            "Auto",
+            "Relative",
+            "Percent",
+            "Fixed",
+            "Intrinsic",
+            "MinIntrinsic",
+            "MinContent",
+            "MaxContent",
+            "FillAvailable",
+            "FitContent",
+            "Calculated",
+            "Undefined",
+        ]
+
+        if (length_type <= self.UNDEFINED_TYPE):
+            return type_names[length_type]
+
+        return "Unknown"
+
+    def is_auto(self):
+        return self.get_type() == self.AUTO_TYPE
+
+    def is_undefined(self):
+        return self.get_type() == self.UNDEFINED_TYPE
+
+    def is_calculated(self):
+        return self.get_type() == self.CALCULATED_TYPE
+
+    def is_fixed(self):
+        return self.get_type() == self.FIXED_TYPE
+
+    def is_percent(self):
+        return self.get_type() == self.PERCENT_TYPE
+
+    def has_quirk(self):
+        return bool(self.valobj.GetChildMemberWithName('m_hasQuirk').GetValueAsUnsigned(0))
+
+    def is_float(self):
+        return bool(self.valobj.GetChildMemberWithName('m_isFloat').GetValueAsUnsigned(0))
+
+    def get_numeric_value(self):
+        length_type = self.get_type()
+        if (length_type == self.CALCULATED_TYPE):
+            return 0
+
+        if (self.is_float()):
+            return self.valobj.GetChildMemberWithName('m_floatValue').GetValue()
+
+        return self.valobj.GetChildMemberWithName('m_intValue').GetValueAsSigned()
+
+
+
 class WTFURLProvider:
     "Print a WTF::URL"
     def __init__(self, valobj, dict):
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to