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