diff options
-rw-r--r-- | lldb/include/lldb/DataFormatters/FormatCache.h | 20 | ||||
-rw-r--r-- | lldb/source/DataFormatters/FormatCache.cpp | 64 | ||||
-rw-r--r-- | lldb/source/DataFormatters/FormatManager.cpp | 54 | ||||
-rwxr-xr-x | lldb/test/dotest.py | 2 |
4 files changed, 110 insertions, 30 deletions
diff --git a/lldb/include/lldb/DataFormatters/FormatCache.h b/lldb/include/lldb/DataFormatters/FormatCache.h index 941b96c1fac..bd9e20ccc9e 100644 --- a/lldb/include/lldb/DataFormatters/FormatCache.h +++ b/lldb/include/lldb/DataFormatters/FormatCache.h @@ -27,23 +27,32 @@ private: struct Entry { private: + bool m_format_cached : 1; bool m_summary_cached : 1; bool m_synthetic_cached : 1; + lldb::TypeFormatImplSP m_format_sp; lldb::TypeSummaryImplSP m_summary_sp; lldb::SyntheticChildrenSP m_synthetic_sp; public: Entry (); + Entry (lldb::TypeFormatImplSP); Entry (lldb::TypeSummaryImplSP); Entry (lldb::SyntheticChildrenSP); - Entry (lldb::TypeSummaryImplSP,lldb::SyntheticChildrenSP); + Entry (lldb::TypeFormatImplSP,lldb::TypeSummaryImplSP,lldb::SyntheticChildrenSP); bool + IsFormatCached (); + + bool IsSummaryCached (); bool IsSyntheticCached (); + lldb::TypeFormatImplSP + GetFormat (); + lldb::TypeSummaryImplSP GetSummary (); @@ -51,6 +60,9 @@ private: GetSynthetic (); void + SetFormat (lldb::TypeFormatImplSP); + + void SetSummary (lldb::TypeSummaryImplSP); void @@ -70,12 +82,18 @@ public: FormatCache (); bool + GetFormat (const ConstString& type,lldb::TypeFormatImplSP& format_sp); + + bool GetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp); bool GetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp); void + SetFormat (const ConstString& type,lldb::TypeFormatImplSP& format_sp); + + void SetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp); void diff --git a/lldb/source/DataFormatters/FormatCache.cpp b/lldb/source/DataFormatters/FormatCache.cpp index af7b1c386c3..3721f182f91 100644 --- a/lldb/source/DataFormatters/FormatCache.cpp +++ b/lldb/source/DataFormatters/FormatCache.cpp @@ -22,33 +22,55 @@ using namespace lldb; using namespace lldb_private; FormatCache::Entry::Entry () : +m_format_cached(false), m_summary_cached(false), m_synthetic_cached(false), +m_format_sp(), m_summary_sp(), m_synthetic_sp() {} +FormatCache::Entry::Entry (lldb::TypeFormatImplSP format_sp) : +m_summary_cached(false), +m_synthetic_cached(false), +m_summary_sp(), +m_synthetic_sp() +{ + SetFormat (format_sp); +} + FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp) : +m_format_cached(false), m_synthetic_cached(false), +m_format_sp(), m_synthetic_sp() { SetSummary (summary_sp); } FormatCache::Entry::Entry (lldb::SyntheticChildrenSP synthetic_sp) : +m_format_cached(false), m_summary_cached(false), +m_format_sp(), m_summary_sp() { SetSynthetic (synthetic_sp); } -FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp,lldb::SyntheticChildrenSP synthetic_sp) +FormatCache::Entry::Entry (lldb::TypeFormatImplSP format_sp, lldb::TypeSummaryImplSP summary_sp, lldb::SyntheticChildrenSP synthetic_sp) { + SetFormat (format_sp); SetSummary (summary_sp); SetSynthetic (synthetic_sp); } bool +FormatCache::Entry::IsFormatCached () +{ + return m_format_cached; +} + +bool FormatCache::Entry::IsSummaryCached () { return m_summary_cached; @@ -60,6 +82,12 @@ FormatCache::Entry::IsSyntheticCached () return m_synthetic_cached; } +lldb::TypeFormatImplSP +FormatCache::Entry::GetFormat () +{ + return m_format_sp; +} + lldb::TypeSummaryImplSP FormatCache::Entry::GetSummary () { @@ -73,6 +101,13 @@ FormatCache::Entry::GetSynthetic () } void +FormatCache::Entry::SetFormat (lldb::TypeFormatImplSP format_sp) +{ + m_format_cached = true; + m_format_sp = format_sp; +} + +void FormatCache::Entry::SetSummary (lldb::TypeSummaryImplSP summary_sp) { m_summary_cached = true; @@ -107,6 +142,26 @@ FormatCache::GetEntry (const ConstString& type) } bool +FormatCache::GetFormat (const ConstString& type,lldb::TypeFormatImplSP& format_sp) +{ + Mutex::Locker lock(m_mutex); + auto entry = GetEntry(type); + if (entry.IsSummaryCached()) + { +#ifdef LLDB_CONFIGURATION_DEBUG + m_cache_hits++; +#endif + format_sp = entry.GetFormat(); + return true; + } +#ifdef LLDB_CONFIGURATION_DEBUG + m_cache_misses++; +#endif + format_sp.reset(); + return false; +} + +bool FormatCache::GetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp) { Mutex::Locker lock(m_mutex); @@ -147,6 +202,13 @@ FormatCache::GetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& sy } void +FormatCache::SetFormat (const ConstString& type,lldb::TypeFormatImplSP& format_sp) +{ + Mutex::Locker lock(m_mutex); + GetEntry(type).SetFormat(format_sp); +} + +void FormatCache::SetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp) { Mutex::Locker lock(m_mutex); diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp index 0faf817dd78..1fa287281f3 100644 --- a/lldb/source/DataFormatters/FormatManager.cpp +++ b/lldb/source/DataFormatters/FormatManager.cpp @@ -425,34 +425,34 @@ FormatManager::GetFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic) { TypeFormatImplSP retval; -// Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES)); -// ConstString valobj_type(GetTypeForCache(valobj, use_dynamic)); -// if (valobj_type) -// { -// if (log) -// log->Printf("\n\n[FormatManager::GetSummaryFormat] Looking into cache for type %s", valobj_type.AsCString("<invalid>")); -// if (m_format_cache.GetSummary(valobj_type,retval)) -// { -// if (log) -// { -// log->Printf("[FormatManager::GetSummaryFormat] Cache search success. Returning."); -// if (log->GetDebug()) -// log->Printf("[FormatManager::GetSummaryFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses()); -// } -// return retval; -// } -// if (log) -// log->Printf("[FormatManager::GetSummaryFormat] Cache search failed. Going normal route"); -// } + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES)); + ConstString valobj_type(GetTypeForCache(valobj, use_dynamic)); + if (valobj_type) + { + if (log) + log->Printf("\n\n[FormatManager::GetFormat] Looking into cache for type %s", valobj_type.AsCString("<invalid>")); + if (m_format_cache.GetFormat(valobj_type,retval)) + { + if (log) + { + log->Printf("[FormatManager::GetFormat] Cache search success. Returning."); + if (log->GetDebug()) + log->Printf("[FormatManager::GetFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses()); + } + return retval; + } + if (log) + log->Printf("[FormatManager::GetFormat] Cache search failed. Going normal route"); + } retval = m_categories_map.GetFormat(valobj, use_dynamic); -// if (valobj_type) -// { -// if (log) -// log->Printf("[FormatManager::GetSummaryFormat] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>")); -// m_format_cache.SetSummary(valobj_type,retval); -// } -// if (log && log->GetDebug()) -// log->Printf("[FormatManager::GetSummaryFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses()); + if (valobj_type) + { + if (log) + log->Printf("[FormatManager::GetFormat] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>")); + m_format_cache.SetFormat(valobj_type,retval); + } + if (log && log->GetDebug()) + log->Printf("[FormatManager::GetFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses()); return retval; } diff --git a/lldb/test/dotest.py b/lldb/test/dotest.py index 19683f33e0c..96a35b9f135 100755 --- a/lldb/test/dotest.py +++ b/lldb/test/dotest.py @@ -624,7 +624,7 @@ def parseOptionsAndInitTestdirs(): noHeaders = True parsable = True - if args.P: + if args.P and not args.v: progress_bar = True verbose = 0 |