diff options
| author | Enrico Granata <egranata@apple.com> | 2013-10-17 22:27:19 +0000 |
|---|---|---|
| committer | Enrico Granata <egranata@apple.com> | 2013-10-17 22:27:19 +0000 |
| commit | 52b4b6cddc1eebae2e9ffa2fcc8db2a382dc5277 (patch) | |
| tree | b0f91eac6a45c478f7d0efb184ed137aef27ed3c /lldb/source/DataFormatters | |
| parent | de79e816863b1c026dac1ec329cda30ebabf47a5 (diff) | |
| download | bcm5719-llvm-52b4b6cddc1eebae2e9ffa2fcc8db2a382dc5277.tar.gz bcm5719-llvm-52b4b6cddc1eebae2e9ffa2fcc8db2a382dc5277.zip | |
This is the last piece of work for "formats in categories": we now cache formats as well as summaries and synthetics
llvm-svn: 192928
Diffstat (limited to 'lldb/source/DataFormatters')
| -rw-r--r-- | lldb/source/DataFormatters/FormatCache.cpp | 64 | ||||
| -rw-r--r-- | lldb/source/DataFormatters/FormatManager.cpp | 54 |
2 files changed, 90 insertions, 28 deletions
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; } |

