FormatCache.cpp revision fe21d4f351f560921e615a6677afe1c057aa7f28
1f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//===-- FormatCache.cpp ------------------------------------------*- C++ -*-===// 2f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// 3f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// The LLVM Compiler Infrastructure 4f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// 5f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// This file is distributed under the University of Illinois Open Source 6f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// License. See LICENSE.TXT for details. 7f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// 8f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//===----------------------------------------------------------------------===// 9f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 10fe21d4f351f560921e615a6677afe1c057aa7f28Matt Kopec#include "lldb/lldb-python.h" 11fe21d4f351f560921e615a6677afe1c057aa7f28Matt Kopec 12f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// C Includes 13f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 14f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// C++ Includes 15f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 16f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// Other libraries and framework includes 17f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 18f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// Project includes 19f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/DataFormatters/FormatCache.h" 20f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 21f509c5ec066599a3399fced39ea36996184939e8Enrico Granatausing namespace lldb; 22f509c5ec066599a3399fced39ea36996184939e8Enrico Granatausing namespace lldb_private; 23f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 24f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::Entry::Entry () : 25f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_summary_cached(false), 26f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_synthetic_cached(false), 2777332ba5320cb506c5ccec65cc6d4e6107aaa374Daniel Maleam_summary_sp(), 2877332ba5320cb506c5ccec65cc6d4e6107aaa374Daniel Maleam_synthetic_sp() 29f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{} 30f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 3104334199f3c719e958c7eec6e25152c2bab9ad5eDaniel MaleaFormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp) : 3204334199f3c719e958c7eec6e25152c2bab9ad5eDaniel Maleam_synthetic_cached(false), 3304334199f3c719e958c7eec6e25152c2bab9ad5eDaniel Maleam_synthetic_sp() 34f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 35f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SetSummary (summary_sp); 36f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 37f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 3804334199f3c719e958c7eec6e25152c2bab9ad5eDaniel MaleaFormatCache::Entry::Entry (lldb::SyntheticChildrenSP synthetic_sp) : 3904334199f3c719e958c7eec6e25152c2bab9ad5eDaniel Maleam_summary_cached(false), 4004334199f3c719e958c7eec6e25152c2bab9ad5eDaniel Maleam_summary_sp() 41f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 42f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SetSynthetic (synthetic_sp); 43f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 44f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 4504334199f3c719e958c7eec6e25152c2bab9ad5eDaniel MaleaFormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp,lldb::SyntheticChildrenSP synthetic_sp) 46f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 47f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SetSummary (summary_sp); 48f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SetSynthetic (synthetic_sp); 49f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 50f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 51f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool 52f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::Entry::IsSummaryCached () 53f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 54f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_summary_cached; 55f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 56f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 57f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool 58f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::Entry::IsSyntheticCached () 59f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 60f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_synthetic_cached; 61f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 62f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 63f509c5ec066599a3399fced39ea36996184939e8Enrico Granatalldb::TypeSummaryImplSP 64f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::Entry::GetSummary () 65f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 66f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_summary_sp; 67f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 68f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 69f509c5ec066599a3399fced39ea36996184939e8Enrico Granatalldb::SyntheticChildrenSP 70f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::Entry::GetSynthetic () 71f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 72f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_synthetic_sp; 73f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 74f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 75f509c5ec066599a3399fced39ea36996184939e8Enrico Granatavoid 76f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::Entry::SetSummary (lldb::TypeSummaryImplSP summary_sp) 77f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 78f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_summary_cached = true; 79f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_summary_sp = summary_sp; 80f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 81f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 82f509c5ec066599a3399fced39ea36996184939e8Enrico Granatavoid 83f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::Entry::SetSynthetic (lldb::SyntheticChildrenSP synthetic_sp) 84f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 85f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_synthetic_cached = true; 86f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_synthetic_sp = synthetic_sp; 87f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 88f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 89f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::FormatCache () : 90f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_map(), 91f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_mutex (Mutex::eMutexTypeRecursive) 92f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifdef LLDB_CONFIGURATION_DEBUG 93f509c5ec066599a3399fced39ea36996184939e8Enrico Granata,m_cache_hits(0),m_cache_misses(0) 94f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 95f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 96f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 97f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 98f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::Entry& 99f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::GetEntry (const ConstString& type) 100f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 101f509c5ec066599a3399fced39ea36996184939e8Enrico Granata auto i = m_map.find(type), 102f509c5ec066599a3399fced39ea36996184939e8Enrico Granata e = m_map.end(); 103f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (i != e) 104f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return i->second; 105f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_map[type] = FormatCache::Entry(); 106f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_map[type]; 107f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 108f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 109f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool 110f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::GetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp) 111f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 112f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Mutex::Locker lock(m_mutex); 113f509c5ec066599a3399fced39ea36996184939e8Enrico Granata auto entry = GetEntry(type); 114f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (entry.IsSummaryCached()) 115f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 116f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifdef LLDB_CONFIGURATION_DEBUG 117f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_cache_hits++; 118f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 119f509c5ec066599a3399fced39ea36996184939e8Enrico Granata summary_sp = entry.GetSummary(); 120f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 121f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 122f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifdef LLDB_CONFIGURATION_DEBUG 123f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_cache_misses++; 124f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 125f509c5ec066599a3399fced39ea36996184939e8Enrico Granata summary_sp.reset(); 126f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return false; 127f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 128f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 129f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool 130f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::GetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp) 131f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 132f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Mutex::Locker lock(m_mutex); 133f509c5ec066599a3399fced39ea36996184939e8Enrico Granata auto entry = GetEntry(type); 134f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (entry.IsSyntheticCached()) 135f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 136f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifdef LLDB_CONFIGURATION_DEBUG 137f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_cache_hits++; 138f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 139f509c5ec066599a3399fced39ea36996184939e8Enrico Granata synthetic_sp = entry.GetSynthetic(); 140f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 141f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 142f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifdef LLDB_CONFIGURATION_DEBUG 143f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_cache_misses++; 144f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 145f509c5ec066599a3399fced39ea36996184939e8Enrico Granata synthetic_sp.reset(); 146f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return false; 147f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 148f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 149f509c5ec066599a3399fced39ea36996184939e8Enrico Granatavoid 150f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::SetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp) 151f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 152f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Mutex::Locker lock(m_mutex); 153f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetEntry(type).SetSummary(summary_sp); 154f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 155f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 156f509c5ec066599a3399fced39ea36996184939e8Enrico Granatavoid 157f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::SetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp) 158f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 159f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Mutex::Locker lock(m_mutex); 160f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetEntry(type).SetSynthetic(synthetic_sp); 161f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 162f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 163f509c5ec066599a3399fced39ea36996184939e8Enrico Granatavoid 164f509c5ec066599a3399fced39ea36996184939e8Enrico GranataFormatCache::Clear () 165f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 166f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Mutex::Locker lock(m_mutex); 167f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_map.clear(); 168f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 169f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 170