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/FormatCache.cpp | |
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/FormatCache.cpp')
-rw-r--r-- | lldb/source/DataFormatters/FormatCache.cpp | 64 |
1 files changed, 63 insertions, 1 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); |