Title: [133234] trunk/Tools
- Revision
- 133234
- Author
- [email protected]
- Date
- 2012-11-01 15:33:10 -0700 (Thu, 01 Nov 2012)
Log Message
Add Python-LLDB support for WTF::Vector types.
https://bugs.webkit.org/show_bug.cgi?id=100980
Reviewed by Anders Carlsson.
Add a synthetic child provider for WTF::Vector types.
* lldb/lldb_webkit.py:
(__lldb_init_module): Add both the summary and synthetic providers for WTF::Vector
(WTFVector_SummaryProvider): Wrapper around WTFVectorProvider
(WTFVectorProvider):
(WTFVectorProvider.__init__):
(WTFVectorProvider.num_children): Return m_size+2 children to account for synthesized children.
(WTFVectorProvider.get_child_index): Synthesize child indexes for each entry in the Vector.
(WTFVectorProvider.get_child_at_index): Synthesize children for each entry in the Vector.
(WTFVectorProvider.update): Retrieve state from the underlying Vector.
(WTFVectorProvider.has_children): Vectors always have children.
Modified Paths
Diff
Modified: trunk/Tools/ChangeLog (133233 => 133234)
--- trunk/Tools/ChangeLog 2012-11-01 22:29:23 UTC (rev 133233)
+++ trunk/Tools/ChangeLog 2012-11-01 22:33:10 UTC (rev 133234)
@@ -1,3 +1,23 @@
+2012-11-01 Jer Noble <[email protected]>
+
+ Add Python-LLDB support for WTF::Vector types.
+ https://bugs.webkit.org/show_bug.cgi?id=100980
+
+ Reviewed by Anders Carlsson.
+
+ Add a synthetic child provider for WTF::Vector types.
+
+ * lldb/lldb_webkit.py:
+ (__lldb_init_module): Add both the summary and synthetic providers for WTF::Vector
+ (WTFVector_SummaryProvider): Wrapper around WTFVectorProvider
+ (WTFVectorProvider):
+ (WTFVectorProvider.__init__):
+ (WTFVectorProvider.num_children): Return m_size+2 children to account for synthesized children.
+ (WTFVectorProvider.get_child_index): Synthesize child indexes for each entry in the Vector.
+ (WTFVectorProvider.get_child_at_index): Synthesize children for each entry in the Vector.
+ (WTFVectorProvider.update): Retrieve state from the underlying Vector.
+ (WTFVectorProvider.has_children): Vectors always have children.
+
2012-11-01 Zoltan Horvath <[email protected]>
Remove PageLoad directory entry from PerformanceTests pattern_map
Modified: trunk/Tools/lldb/lldb_webkit.py (133233 => 133234)
--- trunk/Tools/lldb/lldb_webkit.py 2012-11-01 22:29:23 UTC (rev 133233)
+++ trunk/Tools/lldb/lldb_webkit.py 2012-11-01 22:33:10 UTC (rev 133234)
@@ -36,6 +36,8 @@
debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFString_SummaryProvider WTF::String')
debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFStringImpl_SummaryProvider WTF::StringImpl')
debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFAtomicString_SummaryProvider WTF::AtomicString')
+ debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFVector_SummaryProvider -x "WTF::Vector<.+>$"')
+ debugger.HandleCommand('type synthetic add -x "WTF::Vector<.+>$" --python-class lldb_webkit.WTFVectorProvider')
def WTFString_SummaryProvider(valobj, dict):
@@ -51,6 +53,11 @@
def WTFAtomicString_SummaryProvider(valobj, dict):
return WTFString_SummaryProvider(valobj.GetChildMemberWithName('m_string'), dict)
+
+def WTFVector_SummaryProvider(valobj, dict):
+ provider = WTFVectorProvider(valobj, dict)
+ return "{ size = %d, capacity = %d }" % (provider.size, provider.capacity)
+
# FIXME: Provide support for the following types:
# def WTFVector_SummaryProvider(valobj, dict):
# def WTFCString_SummaryProvider(valobj, dict):
@@ -143,3 +150,43 @@
if not impl:
return u""
return impl.to_string()
+
+
+class WTFVectorProvider:
+ def __init__(self, valobj, internal_dict):
+ self.valobj = valobj
+ self.update()
+
+ def num_children(self):
+ return self.size + 2
+
+ def get_child_index(self, name):
+ if name == "m_size":
+ return self.size
+ elif name == "m_buffer":
+ return self.size + 1
+ else:
+ return int(name.lstrip('[').rstrip(']'))
+
+ def get_child_at_index(self, index):
+ if index == self.size:
+ return self.valobj.GetChildMemberWithName("m_size")
+ elif index == self.size + 1:
+ return self.vector_buffer
+ elif index < self.size:
+ offset = index * self.data_size
+ child = self.buffer.CreateChildAtOffset('[' + str(index) + ']', offset, self.data_type)
+ return child
+ else:
+ return None
+
+ def update(self):
+ self.vector_buffer = self.valobj.GetChildMemberWithName('m_buffer')
+ self.buffer = self.vector_buffer.GetChildMemberWithName('m_buffer')
+ self.size = self.valobj.GetChildMemberWithName('m_size').GetValueAsUnsigned(0)
+ self.capacity = self.vector_buffer.GetChildMemberWithName('m_capacity').GetValueAsUnsigned(0)
+ self.data_type = self.buffer.GetType().GetPointeeType()
+ self.data_size = self.data_type.GetByteSize()
+
+ def has_children(self):
+ return True
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes