- 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):