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), 25*30b95a36SDaniel Malea m_summary_sp(), 26*30b95a36SDaniel Malea m_synthetic_sp() 275548cb50SEnrico Granata {} 285548cb50SEnrico Granata 295548cb50SEnrico Granata FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp) : FormatCache::Entry() 305548cb50SEnrico Granata { 315548cb50SEnrico Granata SetSummary (summary_sp); 325548cb50SEnrico Granata } 335548cb50SEnrico Granata 345548cb50SEnrico Granata FormatCache::Entry::Entry (lldb::SyntheticChildrenSP synthetic_sp) : FormatCache::Entry() 355548cb50SEnrico Granata { 365548cb50SEnrico Granata SetSynthetic (synthetic_sp); 375548cb50SEnrico Granata } 385548cb50SEnrico Granata 395548cb50SEnrico Granata FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp,lldb::SyntheticChildrenSP synthetic_sp) : FormatCache::Entry() 405548cb50SEnrico Granata { 415548cb50SEnrico Granata SetSummary (summary_sp); 425548cb50SEnrico Granata SetSynthetic (synthetic_sp); 435548cb50SEnrico Granata } 445548cb50SEnrico Granata 455548cb50SEnrico Granata bool 465548cb50SEnrico Granata FormatCache::Entry::IsSummaryCached () 475548cb50SEnrico Granata { 485548cb50SEnrico Granata return m_summary_cached; 495548cb50SEnrico Granata } 505548cb50SEnrico Granata 515548cb50SEnrico Granata bool 525548cb50SEnrico Granata FormatCache::Entry::IsSyntheticCached () 535548cb50SEnrico Granata { 545548cb50SEnrico Granata return m_synthetic_cached; 555548cb50SEnrico Granata } 565548cb50SEnrico Granata 575548cb50SEnrico Granata lldb::TypeSummaryImplSP 585548cb50SEnrico Granata FormatCache::Entry::GetSummary () 595548cb50SEnrico Granata { 605548cb50SEnrico Granata return m_summary_sp; 615548cb50SEnrico Granata } 625548cb50SEnrico Granata 635548cb50SEnrico Granata lldb::SyntheticChildrenSP 645548cb50SEnrico Granata FormatCache::Entry::GetSynthetic () 655548cb50SEnrico Granata { 665548cb50SEnrico Granata return m_synthetic_sp; 675548cb50SEnrico Granata } 685548cb50SEnrico Granata 695548cb50SEnrico Granata void 705548cb50SEnrico Granata FormatCache::Entry::SetSummary (lldb::TypeSummaryImplSP summary_sp) 715548cb50SEnrico Granata { 725548cb50SEnrico Granata m_summary_cached = true; 735548cb50SEnrico Granata m_summary_sp = summary_sp; 745548cb50SEnrico Granata } 755548cb50SEnrico Granata 765548cb50SEnrico Granata void 775548cb50SEnrico Granata FormatCache::Entry::SetSynthetic (lldb::SyntheticChildrenSP synthetic_sp) 785548cb50SEnrico Granata { 795548cb50SEnrico Granata m_synthetic_cached = true; 805548cb50SEnrico Granata m_synthetic_sp = synthetic_sp; 815548cb50SEnrico Granata } 825548cb50SEnrico Granata 835548cb50SEnrico Granata FormatCache::FormatCache () : 845548cb50SEnrico Granata m_map(), 855548cb50SEnrico Granata m_mutex (Mutex::eMutexTypeRecursive) 865548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 875548cb50SEnrico Granata ,m_cache_hits(0),m_cache_misses(0) 885548cb50SEnrico Granata #endif 895548cb50SEnrico Granata { 905548cb50SEnrico Granata } 915548cb50SEnrico Granata 925548cb50SEnrico Granata FormatCache::Entry& 935548cb50SEnrico Granata FormatCache::GetEntry (const ConstString& type) 945548cb50SEnrico Granata { 955548cb50SEnrico Granata auto i = m_map.find(type), 965548cb50SEnrico Granata e = m_map.end(); 975548cb50SEnrico Granata if (i != e) 985548cb50SEnrico Granata return i->second; 995548cb50SEnrico Granata m_map[type] = FormatCache::Entry(); 1005548cb50SEnrico Granata return m_map[type]; 1015548cb50SEnrico Granata } 1025548cb50SEnrico Granata 1035548cb50SEnrico Granata bool 1045548cb50SEnrico Granata FormatCache::GetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp) 1055548cb50SEnrico Granata { 1065548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1075548cb50SEnrico Granata auto entry = GetEntry(type); 1085548cb50SEnrico Granata if (entry.IsSummaryCached()) 1095548cb50SEnrico Granata { 1105548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1115548cb50SEnrico Granata m_cache_hits++; 1125548cb50SEnrico Granata #endif 1135548cb50SEnrico Granata summary_sp = entry.GetSummary(); 1145548cb50SEnrico Granata return true; 1155548cb50SEnrico Granata } 1165548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1175548cb50SEnrico Granata m_cache_misses++; 1185548cb50SEnrico Granata #endif 1195548cb50SEnrico Granata summary_sp.reset(); 1205548cb50SEnrico Granata return false; 1215548cb50SEnrico Granata } 1225548cb50SEnrico Granata 1235548cb50SEnrico Granata bool 1245548cb50SEnrico Granata FormatCache::GetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp) 1255548cb50SEnrico Granata { 1265548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1275548cb50SEnrico Granata auto entry = GetEntry(type); 1285548cb50SEnrico Granata if (entry.IsSyntheticCached()) 1295548cb50SEnrico Granata { 1305548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1315548cb50SEnrico Granata m_cache_hits++; 1325548cb50SEnrico Granata #endif 1335548cb50SEnrico Granata synthetic_sp = entry.GetSynthetic(); 1345548cb50SEnrico Granata return true; 1355548cb50SEnrico Granata } 1365548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1375548cb50SEnrico Granata m_cache_misses++; 1385548cb50SEnrico Granata #endif 1395548cb50SEnrico Granata synthetic_sp.reset(); 1405548cb50SEnrico Granata return false; 1415548cb50SEnrico Granata } 1425548cb50SEnrico Granata 1435548cb50SEnrico Granata void 1445548cb50SEnrico Granata FormatCache::SetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp) 1455548cb50SEnrico Granata { 1465548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1475548cb50SEnrico Granata GetEntry(type).SetSummary(summary_sp); 1485548cb50SEnrico Granata } 1495548cb50SEnrico Granata 1505548cb50SEnrico Granata void 1515548cb50SEnrico Granata FormatCache::SetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp) 1525548cb50SEnrico Granata { 1535548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1545548cb50SEnrico Granata GetEntry(type).SetSynthetic(synthetic_sp); 1555548cb50SEnrico Granata } 1565548cb50SEnrico Granata 1575548cb50SEnrico Granata void 1585548cb50SEnrico Granata FormatCache::Clear () 1595548cb50SEnrico Granata { 1605548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1615548cb50SEnrico Granata m_map.clear(); 1625548cb50SEnrico Granata } 1635548cb50SEnrico Granata 164