<rdar://problem/12848118>

Making MightHaveChildren() always return true regardless for our own data formatters
This is meant to optimize performance for common most-often-not-empty container classes

llvm-svn: 169759
This commit is contained in:
Enrico Granata 2012-12-10 19:55:53 +00:00
parent cdf218d606
commit ecbabe6d66
3 changed files with 11 additions and 58 deletions

View File

@ -133,24 +133,6 @@ class StdListSynthProvider:
pass
def has_children(self):
logger = lldb.formatters.Logger.Logger()
if self.count == None:
self.update ()
try:
next_val = self.next.GetValueAsUnsigned(0)
prev_val = self.prev.GetValueAsUnsigned(0)
if next_val == 0 or prev_val == 0:
return False
if next_val == self.node_address:
return False
# skip all the advanced logic to detect the exact count of children
# in the interest of speed from this point on, we MIGHT have children
# our loop detection logic will still make nothing show up :)
return True
except:
return False
if self.count == 0:
return False
return True
class StdVectorSynthProvider:
@ -249,7 +231,7 @@ class StdVectorSynthProvider:
def has_children(self):
return self.num_children() > 0
return True
class StdMapSynthProvider:
@ -434,7 +416,7 @@ class StdMapSynthProvider:
return x;
def has_children(self):
return self.num_children() > 0
return True
_map_capping_size = 255
_list_capping_size = 255

View File

@ -125,8 +125,7 @@ class stdvector_SynthProvider:
pass
def has_children(self):
# retrieving the count is quick enough on a std::vector
return self.num_children() > 0
return True
# Just an example: the actual summary is produced by a summary string: size=${svar%#}
def stdvector_SummaryProvider(valobj,dict):
@ -322,24 +321,6 @@ class stdlist_SynthProvider:
pass
def has_children(self):
logger = lldb.formatters.Logger.Logger()
if self.count == None:
self.update()
try:
next_val = self.head.GetValueAsUnsigned(0)
prev_val = self.tail.GetValueAsUnsigned(0)
if next_val == 0 or prev_val == 0:
return False
if next_val == self.node_address:
return False
# skip all the advanced logic to detect the exact count of children
# in the interest of speed from this point on, we MIGHT have children
# our loop detection logic will still make nothing show up :)
return True
except:
return 0;
if self.count == 0:
return False
return True
@ -504,7 +485,7 @@ class stdmap_SynthProvider:
return 0;
def has_children(self):
return self.num_children_impl() > 0
return True
def get_data_type(self):
logger = lldb.formatters.Logger.Logger()
@ -629,9 +610,7 @@ class stddeque_SynthProvider:
return min(self.count, _deque_capping_size)
def has_children(self):
if self.cont is None:
self.update()
return self.count > 0
return True
def get_child_index(self,name):
logger = lldb.formatters.Logger.Logger()

View File

@ -833,9 +833,7 @@ lldb_private::formatters::NSArrayMSyntheticFrontEnd::Update()
bool
lldb_private::formatters::NSArrayMSyntheticFrontEnd::MightHaveChildren ()
{
if (!m_data_32 && !m_data_64)
Update ();
return CalculateNumChildren();
return true;
}
static uint32_t
@ -950,9 +948,7 @@ lldb_private::formatters::NSArrayISyntheticFrontEnd::Update()
bool
lldb_private::formatters::NSArrayISyntheticFrontEnd::MightHaveChildren ()
{
if (!m_data_ptr)
Update ();
return CalculateNumChildren();
return true;
}
lldb::ValueObjectSP
@ -1052,7 +1048,7 @@ lldb_private::formatters::NSArrayCodeRunningSyntheticFrontEnd::Update()
bool
lldb_private::formatters::NSArrayCodeRunningSyntheticFrontEnd::MightHaveChildren ()
{
return CalculateNumChildren() > 0;
return true;
}
uint32_t
@ -1149,7 +1145,7 @@ lldb_private::formatters::NSDictionaryCodeRunningSyntheticFrontEnd::Update()
bool
lldb_private::formatters::NSDictionaryCodeRunningSyntheticFrontEnd::MightHaveChildren ()
{
return CalculateNumChildren() > 0;
return true;
}
uint32_t
@ -1247,9 +1243,7 @@ lldb_private::formatters::NSDictionaryISyntheticFrontEnd::Update()
bool
lldb_private::formatters::NSDictionaryISyntheticFrontEnd::MightHaveChildren ()
{
if (!m_data_32 && !m_data_64)
Update ();
return CalculateNumChildren();
return true;
}
lldb::ValueObjectSP
@ -1396,9 +1390,7 @@ lldb_private::formatters::NSDictionaryMSyntheticFrontEnd::Update()
bool
lldb_private::formatters::NSDictionaryMSyntheticFrontEnd::MightHaveChildren ()
{
if (!m_data_32 && !m_data_64)
Update ();
return CalculateNumChildren();
return true;
}
lldb::ValueObjectSP