summaryrefslogtreecommitdiffstats
path: root/lldb/examples/summaries/cocoa/CFBinaryHeap.py
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2012-03-05 19:56:33 +0000
committerEnrico Granata <egranata@apple.com>2012-03-05 19:56:33 +0000
commitcfdafa37b4d3552268a92d7dfd107ed92d3dca51 (patch)
tree92e111d6a1450a643d22c851f599a0e4e3a567ae /lldb/examples/summaries/cocoa/CFBinaryHeap.py
parent35e2ab60397ec15d9a2ce31ad71614ecc62f34b6 (diff)
downloadbcm5719-llvm-cfdafa37b4d3552268a92d7dfd107ed92d3dca51.tar.gz
bcm5719-llvm-cfdafa37b4d3552268a92d7dfd107ed92d3dca51.zip
Several performance-oriented changes to the introspecting data formatters:
(a) the SystemParameters object is now passed around to the formatters; doing so enables the formatters to reuse computed values for things such as pointer-size and endianness instead of repeatedly computing these on their own (b) replacing the global ISA cache with a per-process one (c) providing a per-process types cache where each formatter can store the types it needs to operate, and be sure to find them the next time without recalculating them this also enables formatters to share types if they agree on a local naming convention (d) lazy fetching of data from Objective-C runtime data structures data is fetched as needed and we stop reading as soon as we determine that an ISA is actually garbage llvm-svn: 152052
Diffstat (limited to 'lldb/examples/summaries/cocoa/CFBinaryHeap.py')
-rw-r--r--lldb/examples/summaries/cocoa/CFBinaryHeap.py40
1 files changed, 17 insertions, 23 deletions
diff --git a/lldb/examples/summaries/cocoa/CFBinaryHeap.py b/lldb/examples/summaries/cocoa/CFBinaryHeap.py
index 0a120745c3c..160389eae4e 100644
--- a/lldb/examples/summaries/cocoa/CFBinaryHeap.py
+++ b/lldb/examples/summaries/cocoa/CFBinaryHeap.py
@@ -15,51 +15,45 @@ statistics.add_metric('code_notrun')
# obey the interface specification for synthetic children providers
class CFBinaryHeapRef_SummaryProvider:
def adjust_for_architecture(self):
- self.is_64_bit = (self.valobj.GetTarget().GetProcess().GetAddressByteSize() == 8)
- self.is_little = (self.valobj.GetTarget().GetProcess().GetByteOrder() == lldb.eByteOrderLittle)
- self.pointer_size = self.valobj.GetTarget().GetProcess().GetAddressByteSize()
+ pass
- def __init__(self, valobj):
+ def __init__(self, valobj, params):
self.valobj = valobj;
+ self.sys_params = params
+ if not(self.sys_params.types_cache.NSUInteger):
+ if self.sys_params.is_64_bit:
+ self.sys_params.types_cache.NSUInteger = self.valobj.GetType().GetBasicType(lldb.eBasicTypeUnsignedLong)
+ else:
+ self.sys_params.types_cache.NSUInteger = self.valobj.GetType().GetBasicType(lldb.eBasicTypeUnsignedInt)
self.update();
def update(self):
self.adjust_for_architecture();
- self.id_type = self.valobj.GetType().GetBasicType(lldb.eBasicTypeObjCID)
- if self.is_64_bit:
- self.NSUInteger = self.valobj.GetType().GetBasicType(lldb.eBasicTypeUnsignedLong)
- else:
- self.NSUInteger = self.valobj.GetType().GetBasicType(lldb.eBasicTypeUnsignedInt)
# 8 bytes on i386
# 16 bytes on x64
# most probably 2 pointers
def offset(self):
- if self.is_64_bit:
- return 16
- else:
- return 8
+ return 2 * self.sys_params.pointer_size
def length(self):
size = self.valobj.CreateChildAtOffset("count",
self.offset(),
- self.NSUInteger)
+ self.sys_params.types_cache.NSUInteger)
return size.GetValueAsUnsigned(0)
class CFBinaryHeapUnknown_SummaryProvider:
def adjust_for_architecture(self):
- self.is_64_bit = (self.valobj.GetTarget().GetProcess().GetAddressByteSize() == 8)
- self.is_little = (self.valobj.GetTarget().GetProcess().GetByteOrder() == lldb.eByteOrderLittle)
- self.pointer_size = self.valobj.GetTarget().GetProcess().GetAddressByteSize()
+ pass
- def __init__(self, valobj):
+ def __init__(self, valobj, params):
self.valobj = valobj;
- self.update()
+ self.sys_params = params
+ self.update();
def update(self):
self.adjust_for_architecture();
- self.id_type = self.valobj.GetType().GetBasicType(lldb.eBasicTypeObjCID)
def length(self):
stream = lldb.SBStream()
@@ -95,10 +89,10 @@ def GetSummary_Impl(valobj):
if valobj_type.IsValid() and valobj_type.IsPointerType():
pointee_type = valobj_type.GetPointeeType()
if pointee_type.GetName() == '__CFBinaryHeap':
- wrapper = CFBinaryHeapRef_SummaryProvider(valobj)
+ wrapper = CFBinaryHeapRef_SummaryProvider(valobj, class_data.sys_params)
statistics.metric_hit('code_notrun',valobj)
return wrapper
- wrapper = CFBinaryHeapUnknown_SummaryProvider(valobj)
+ wrapper = CFBinaryHeapUnknown_SummaryProvider(valobj, class_data.sys_params)
statistics.metric_hit('unknown_class',str(valobj) + " seen as " + name_string)
return wrapper;
@@ -117,7 +111,7 @@ def CFBinaryHeap_SummaryProvider (valobj,dict):
if summary == None:
summary = 'no valid set here'
else:
- if provider.is_64_bit:
+ if provider.sys_params.is_64_bit:
summary = summary & ~0x1fff000000000000
if summary == 1:
return '1 item'
OpenPOWER on IntegriCloud