summaryrefslogtreecommitdiffstats
path: root/lldb/source/DataFormatters/FormatCache.cpp
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2013-10-17 22:27:19 +0000
committerEnrico Granata <egranata@apple.com>2013-10-17 22:27:19 +0000
commit52b4b6cddc1eebae2e9ffa2fcc8db2a382dc5277 (patch)
treeb0f91eac6a45c478f7d0efb184ed137aef27ed3c /lldb/source/DataFormatters/FormatCache.cpp
parentde79e816863b1c026dac1ec329cda30ebabf47a5 (diff)
downloadbcm5719-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.cpp64
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);
OpenPOWER on IntegriCloud