15548cb50SEnrico Granata //===-- FormatCache.cpp ------------------------------------------*- C++ -*-===// 25548cb50SEnrico Granata // 35548cb50SEnrico Granata // The LLVM Compiler Infrastructure 45548cb50SEnrico Granata // 55548cb50SEnrico Granata // This file is distributed under the University of Illinois Open Source 65548cb50SEnrico Granata // License. See LICENSE.TXT for details. 75548cb50SEnrico Granata // 85548cb50SEnrico Granata //===----------------------------------------------------------------------===// 95548cb50SEnrico Granata 105548cb50SEnrico Granata // C Includes 115548cb50SEnrico Granata 125548cb50SEnrico Granata // C++ Includes 135548cb50SEnrico Granata 145548cb50SEnrico Granata // Other libraries and framework includes 155548cb50SEnrico Granata 165548cb50SEnrico Granata // Project includes 175548cb50SEnrico Granata #include "lldb/DataFormatters/FormatCache.h" 185548cb50SEnrico Granata 195548cb50SEnrico Granata using namespace lldb; 205548cb50SEnrico Granata using namespace lldb_private; 215548cb50SEnrico Granata 225548cb50SEnrico Granata FormatCache::Entry::Entry () : 235548cb50SEnrico Granata m_summary_cached(false), 245548cb50SEnrico Granata m_synthetic_cached(false), 2530b95a36SDaniel Malea m_summary_sp(), 2630b95a36SDaniel Malea m_synthetic_sp() 275548cb50SEnrico Granata {} 285548cb50SEnrico Granata 29*0b464d48SDaniel Malea FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp) : 30*0b464d48SDaniel Malea m_synthetic_cached(false), 31*0b464d48SDaniel Malea m_synthetic_sp() 325548cb50SEnrico Granata { 335548cb50SEnrico Granata SetSummary (summary_sp); 345548cb50SEnrico Granata } 355548cb50SEnrico Granata 36*0b464d48SDaniel Malea FormatCache::Entry::Entry (lldb::SyntheticChildrenSP synthetic_sp) : 37*0b464d48SDaniel Malea m_summary_cached(false), 38*0b464d48SDaniel Malea m_summary_sp() 395548cb50SEnrico Granata { 405548cb50SEnrico Granata SetSynthetic (synthetic_sp); 415548cb50SEnrico Granata } 425548cb50SEnrico Granata 43*0b464d48SDaniel Malea FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp,lldb::SyntheticChildrenSP synthetic_sp) 445548cb50SEnrico Granata { 455548cb50SEnrico Granata SetSummary (summary_sp); 465548cb50SEnrico Granata SetSynthetic (synthetic_sp); 475548cb50SEnrico Granata } 485548cb50SEnrico Granata 495548cb50SEnrico Granata bool 505548cb50SEnrico Granata FormatCache::Entry::IsSummaryCached () 515548cb50SEnrico Granata { 525548cb50SEnrico Granata return m_summary_cached; 535548cb50SEnrico Granata } 545548cb50SEnrico Granata 555548cb50SEnrico Granata bool 565548cb50SEnrico Granata FormatCache::Entry::IsSyntheticCached () 575548cb50SEnrico Granata { 585548cb50SEnrico Granata return m_synthetic_cached; 595548cb50SEnrico Granata } 605548cb50SEnrico Granata 615548cb50SEnrico Granata lldb::TypeSummaryImplSP 625548cb50SEnrico Granata FormatCache::Entry::GetSummary () 635548cb50SEnrico Granata { 645548cb50SEnrico Granata return m_summary_sp; 655548cb50SEnrico Granata } 665548cb50SEnrico Granata 675548cb50SEnrico Granata lldb::SyntheticChildrenSP 685548cb50SEnrico Granata FormatCache::Entry::GetSynthetic () 695548cb50SEnrico Granata { 705548cb50SEnrico Granata return m_synthetic_sp; 715548cb50SEnrico Granata } 725548cb50SEnrico Granata 735548cb50SEnrico Granata void 745548cb50SEnrico Granata FormatCache::Entry::SetSummary (lldb::TypeSummaryImplSP summary_sp) 755548cb50SEnrico Granata { 765548cb50SEnrico Granata m_summary_cached = true; 775548cb50SEnrico Granata m_summary_sp = summary_sp; 785548cb50SEnrico Granata } 795548cb50SEnrico Granata 805548cb50SEnrico Granata void 815548cb50SEnrico Granata FormatCache::Entry::SetSynthetic (lldb::SyntheticChildrenSP synthetic_sp) 825548cb50SEnrico Granata { 835548cb50SEnrico Granata m_synthetic_cached = true; 845548cb50SEnrico Granata m_synthetic_sp = synthetic_sp; 855548cb50SEnrico Granata } 865548cb50SEnrico Granata 875548cb50SEnrico Granata FormatCache::FormatCache () : 885548cb50SEnrico Granata m_map(), 895548cb50SEnrico Granata m_mutex (Mutex::eMutexTypeRecursive) 905548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 915548cb50SEnrico Granata ,m_cache_hits(0),m_cache_misses(0) 925548cb50SEnrico Granata #endif 935548cb50SEnrico Granata { 945548cb50SEnrico Granata } 955548cb50SEnrico Granata 965548cb50SEnrico Granata FormatCache::Entry& 975548cb50SEnrico Granata FormatCache::GetEntry (const ConstString& type) 985548cb50SEnrico Granata { 995548cb50SEnrico Granata auto i = m_map.find(type), 1005548cb50SEnrico Granata e = m_map.end(); 1015548cb50SEnrico Granata if (i != e) 1025548cb50SEnrico Granata return i->second; 1035548cb50SEnrico Granata m_map[type] = FormatCache::Entry(); 1045548cb50SEnrico Granata return m_map[type]; 1055548cb50SEnrico Granata } 1065548cb50SEnrico Granata 1075548cb50SEnrico Granata bool 1085548cb50SEnrico Granata FormatCache::GetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp) 1095548cb50SEnrico Granata { 1105548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1115548cb50SEnrico Granata auto entry = GetEntry(type); 1125548cb50SEnrico Granata if (entry.IsSummaryCached()) 1135548cb50SEnrico Granata { 1145548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1155548cb50SEnrico Granata m_cache_hits++; 1165548cb50SEnrico Granata #endif 1175548cb50SEnrico Granata summary_sp = entry.GetSummary(); 1185548cb50SEnrico Granata return true; 1195548cb50SEnrico Granata } 1205548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1215548cb50SEnrico Granata m_cache_misses++; 1225548cb50SEnrico Granata #endif 1235548cb50SEnrico Granata summary_sp.reset(); 1245548cb50SEnrico Granata return false; 1255548cb50SEnrico Granata } 1265548cb50SEnrico Granata 1275548cb50SEnrico Granata bool 1285548cb50SEnrico Granata FormatCache::GetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp) 1295548cb50SEnrico Granata { 1305548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1315548cb50SEnrico Granata auto entry = GetEntry(type); 1325548cb50SEnrico Granata if (entry.IsSyntheticCached()) 1335548cb50SEnrico Granata { 1345548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1355548cb50SEnrico Granata m_cache_hits++; 1365548cb50SEnrico Granata #endif 1375548cb50SEnrico Granata synthetic_sp = entry.GetSynthetic(); 1385548cb50SEnrico Granata return true; 1395548cb50SEnrico Granata } 1405548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1415548cb50SEnrico Granata m_cache_misses++; 1425548cb50SEnrico Granata #endif 1435548cb50SEnrico Granata synthetic_sp.reset(); 1445548cb50SEnrico Granata return false; 1455548cb50SEnrico Granata } 1465548cb50SEnrico Granata 1475548cb50SEnrico Granata void 1485548cb50SEnrico Granata FormatCache::SetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp) 1495548cb50SEnrico Granata { 1505548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1515548cb50SEnrico Granata GetEntry(type).SetSummary(summary_sp); 1525548cb50SEnrico Granata } 1535548cb50SEnrico Granata 1545548cb50SEnrico Granata void 1555548cb50SEnrico Granata FormatCache::SetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp) 1565548cb50SEnrico Granata { 1575548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1585548cb50SEnrico Granata GetEntry(type).SetSynthetic(synthetic_sp); 1595548cb50SEnrico Granata } 1605548cb50SEnrico Granata 1615548cb50SEnrico Granata void 1625548cb50SEnrico Granata FormatCache::Clear () 1635548cb50SEnrico Granata { 1645548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1655548cb50SEnrico Granata m_map.clear(); 1665548cb50SEnrico Granata } 1675548cb50SEnrico Granata 168