Title: [282254] trunk/Tools
Revision
282254
Author
[email protected]
Date
2021-09-09 18:00:54 -0700 (Thu, 09 Sep 2021)

Log Message

Fix some lldb data provider issues
https://bugs.webkit.org/show_bug.cgi?id=230134

Reviewed by Daniel Bates.

Fix the color data provider. Add a test for the URL provider. Add an
early return in lstring_to_string that fixed an error.

* lldb/lldbWebKitTester/main.cpp:
(testSummaryProviders):
* lldb/lldb_webkit.py:
(lstring_to_string):
(WebCoreColorProvider):
(WebCoreColorProvider._is_outOfLine):
(WebCoreColorProvider._is_valid):
(WebCoreColorProvider._is_semantic):
(WebCoreColorProvider._color_space):
(WebCoreColorProvider._flags):
(WebCoreColorProvider._to_string_outOfLine):
(WebCoreColorProvider.to_string):
(WebCoreColorProvider._is_extended): Deleted.
(WebCoreColorProvider._to_string_extended): Deleted.
* lldb/lldb_webkit_unittest.py:
(TestSummaryProviders):
(TestSummaryProviders.serial_test_WTFURL_SummaryProvider):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (282253 => 282254)


--- trunk/Tools/ChangeLog	2021-09-10 00:37:49 UTC (rev 282253)
+++ trunk/Tools/ChangeLog	2021-09-10 01:00:54 UTC (rev 282254)
@@ -1,3 +1,31 @@
+2021-09-09  Simon Fraser  <[email protected]>
+
+        Fix some lldb data provider issues
+        https://bugs.webkit.org/show_bug.cgi?id=230134
+
+        Reviewed by Daniel Bates.
+
+        Fix the color data provider. Add a test for the URL provider. Add an
+        early return in lstring_to_string that fixed an error.
+
+        * lldb/lldbWebKitTester/main.cpp:
+        (testSummaryProviders):
+        * lldb/lldb_webkit.py:
+        (lstring_to_string):
+        (WebCoreColorProvider):
+        (WebCoreColorProvider._is_outOfLine):
+        (WebCoreColorProvider._is_valid):
+        (WebCoreColorProvider._is_semantic):
+        (WebCoreColorProvider._color_space):
+        (WebCoreColorProvider._flags):
+        (WebCoreColorProvider._to_string_outOfLine):
+        (WebCoreColorProvider.to_string):
+        (WebCoreColorProvider._is_extended): Deleted.
+        (WebCoreColorProvider._to_string_extended): Deleted.
+        * lldb/lldb_webkit_unittest.py:
+        (TestSummaryProviders):
+        (TestSummaryProviders.serial_test_WTFURL_SummaryProvider):
+
 2021-09-09  Wenson Hsieh  <[email protected]>
 
         [Mac Catalyst] Korean characters do not combine correctly in editable fields in WKWebView

Modified: trunk/Tools/lldb/lldbWebKitTester/main.cpp (282253 => 282254)


--- trunk/Tools/lldb/lldbWebKitTester/main.cpp	2021-09-10 00:37:49 UTC (rev 282253)
+++ trunk/Tools/lldb/lldbWebKitTester/main.cpp	2021-09-10 01:00:54 UTC (rev 282254)
@@ -29,6 +29,7 @@
 #include <wtf/HashMap.h>
 #include <wtf/HashSet.h>
 #include <wtf/OptionSet.h>
+#include <wtf/URL.h>
 #include <wtf/Vector.h>
 #include <wtf/text/StringBuilder.h>
 #include <wtf/text/WTFString.h>
@@ -91,6 +92,8 @@
     CompactPointerTuple<String*, uint8_t> exampleCompactPointerTupleSimple { &an8BitString, 7 };
     CompactPointerTuple<String*, uint8_t> exampleCompactPointerTupleMaxTypeValue { &an8BitString, 255 };
     CompactPointerTuple<String*, bool> exampleCompactPointerTupleSimpleBool { &an8BitString, true };
+    
+    URL aURL({ }, "https://www.example.com");
 
     breakForTestingSummaryProviders();
 }

Modified: trunk/Tools/lldb/lldb_webkit.py (282253 => 282254)


--- trunk/Tools/lldb/lldb_webkit.py	2021-09-10 00:37:49 UTC (rev 282253)
+++ trunk/Tools/lldb/lldb_webkit.py	2021-09-10 01:00:54 UTC (rev 282254)
@@ -378,6 +378,8 @@
 
     pointer = valobj.GetValueAsUnsigned()
     contents = valobj.GetProcess().ReadMemory(pointer, length, lldb.SBError())
+    if not contents:
+        return ""
 
     # lldb does not (currently) support returning unicode from python summary providers,
     # so potentially convert this to ascii by escaping
@@ -468,44 +470,70 @@
 
 
 class WebCoreColorProvider:
+    SEMANTIC_FLAG                           = 1 << 0
+    USE_COLOR_FUNCTION_SERIALIZATION_FLAG   = 1 << 1
+    VALID_FLAG                              = 1 << 2
+    OUT_OF_LINE_FLAG                        = 1 << 3
+
+    COLOR_VALUE_MASK                        = (1 << 48) - 1 # only correct for 64-bit
+    FLAGS_SHIFT                             = 48
+    FLAGS_SIZE                              = 8
+    COLOR_SPACE_SHIFT                       = FLAGS_SHIFT + FLAGS_SIZE
+
     "Print a WebCore::Color"
     def __init__(self, valobj, dict):
         self.valobj = valobj
 
-    def _is_extended(self, rgba_and_flags):
-        return not bool(rgba_and_flags & 0x1)
+    def _is_out_of_line(self, rgba_and_flags):
+        flags = self._flags(rgba_and_flags)
+        return bool(flags & self.OUT_OF_LINE_FLAG)
 
     def _is_valid(self, rgba_and_flags):
-        # Assumes not extended.
-        return bool(rgba_and_flags & 0x2)
+        flags = self._flags(rgba_and_flags)
+        return bool(flags & self.VALID_FLAG)
 
     def _is_semantic(self, rgba_and_flags):
-        # Assumes not extended.
-        return bool(rgba_and_flags & 0x4)
+        flags = self._flags(rgba_and_flags)
+        return bool(flags & self.SEMANTIC_FLAG)
 
-    def _to_string_extended(self):
-        extended_color = self.valobj.GetChildMemberWithName('m_colorData').GetChildMemberWithName('extendedColor').Dereference()
-        profile = ""
-        if profile == 'A98RGB':
+    def _color_space(self, rgba_and_flags):
+        return rgba_and_flags >> self.COLOR_SPACE_SHIFT
+
+    def _flags(self, rgba_and_flags):
+        return rgba_and_flags >> self.FLAGS_SHIFT
+
+    def _to_string_out_of_line(self):
+        rgba_and_flags = self.valobj.GetChildMemberWithName('m_colorAndFlags').GetValueAsUnsigned(0)
+
+        out_of_line_components_type = self.valobj.GetTarget().FindFirstType('WebCore::Color::OutOfLineComponents')
+        out_of_line_components = self.valobj.CreateValueFromAddress('out_of_line_components', rgba_and_flags & self.COLOR_VALUE_MASK, out_of_line_components_type)
+
+        color_space = self._color_space(rgba_and_flags)
+
+        if color_space == 0:
             profile = ''
-        elif profile == 'DisplayP3':
+        elif color_space == 1:
             profile = ''
-        elif profile == 'Lab':
+        elif color_space == 2:
+            profile = ''
+        elif color_space == 3:
             profile = ''
-        elif profile == 'LinearSRGB':
+        elif color_space == 4:
             profile = ''
-        elif profile == 'ProPhotoRGB':
+        elif color_space == 5:
+            profile = ''
+        elif color_space == 6:
             profile = ''
-        elif profile == 'Rec2020':
+        elif color_space == 7:
             profile = ''
-        elif profile == 'SRGB':
+        elif color_space == 8:
             profile = ''
-        elif profile == 'XYZ_D50':
+        elif color_space == 9:
             profile = ''
         else:
             profile = ''
 
-        color_components = extended_color.GetChildMemberWithName('m_components')
+        color_components = out_of_line_components.GetChildMemberWithName('m_components')
         std_array_elems = color_components.GetChildMemberWithName('components').GetChildMemberWithName('__elems_')
 
         red = float(std_array_elems.GetChildAtIndex(0).GetValue())
@@ -512,18 +540,21 @@
         green = float(std_array_elems.GetChildAtIndex(1).GetValue())
         blue = float(std_array_elems.GetChildAtIndex(2).GetValue())
         alpha = float(std_array_elems.GetChildAtIndex(3).GetValue())
-        return "color(%s %1.2f %1.2f %1.2f / %1.2f)" % (profile, red, green, blue, alpha)
 
+        semantic = ' semantic' if self._is_semantic(rgba_and_flags) else ""
+
+        return "color(%s %1.2f %1.2f %1.2f / %1.2f)%s" % (profile, red, green, blue, alpha, semantic)
+
     def to_string(self):
-        rgba_and_flags = self.valobj.GetChildMemberWithName('m_colorData').GetChildMemberWithName('inlineColorAndFlags').GetValueAsUnsigned(0)
+        rgba_and_flags = self.valobj.GetChildMemberWithName('m_colorAndFlags').GetValueAsUnsigned(0)
 
-        if self._is_extended(rgba_and_flags):
-            return self._to_string_extended()
+        if self._is_out_of_line(rgba_and_flags):
+            return self._to_string_out_of_line()
 
         if not self._is_valid(rgba_and_flags):
             return 'invalid'
 
-        color = rgba_and_flags >> 32
+        color = rgba_and_flags & self.COLOR_VALUE_MASK
         red = (color >> 24) & 0xFF
         green = (color >> 16) & 0xFF
         blue = (color >> 8) & 0xFF

Modified: trunk/Tools/lldb/lldb_webkit_unittest.py (282253 => 282254)


--- trunk/Tools/lldb/lldb_webkit_unittest.py	2021-09-10 00:37:49 UTC (rev 282253)
+++ trunk/Tools/lldb/lldb_webkit_unittest.py	2021-09-10 01:00:54 UTC (rev 282254)
@@ -205,6 +205,12 @@
         self.assertEqual(provider.get_child_at_index(1).GetName(), 'D')
         self.assertEqual(provider.get_child_at_index(1).GetValue(), '8')
 
+    # MARK: WTFURL_SummaryProvider test cases
+
+    def serial_test_WTFURL_SummaryProvider(self):
+        variable = lldb_webkit.WTFURL_SummaryProvider(self._sbFrame.FindVariable('aURL'), {})
+        self.assertEqual(variable, '{ https://www.example.com/ }')
+
     # MARK: WTFCompactPointerTuple test cases
 
     def serial_test_WTFCompactPointerTuple_SummaryProvider_empty(self):
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to