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 10*676a4875SMatt Kopec #include "lldb/lldb-python.h" 11*676a4875SMatt Kopec 125548cb50SEnrico Granata // C Includes 135548cb50SEnrico Granata 145548cb50SEnrico Granata // C++ Includes 155548cb50SEnrico Granata 165548cb50SEnrico Granata // Other libraries and framework includes 175548cb50SEnrico Granata 185548cb50SEnrico Granata // Project includes 195548cb50SEnrico Granata #include "lldb/DataFormatters/FormatCache.h" 205548cb50SEnrico Granata 215548cb50SEnrico Granata using namespace lldb; 225548cb50SEnrico Granata using namespace lldb_private; 235548cb50SEnrico Granata 245548cb50SEnrico Granata FormatCache::Entry::Entry () : 255548cb50SEnrico Granata m_summary_cached(false), 265548cb50SEnrico Granata m_synthetic_cached(false), 2730b95a36SDaniel Malea m_summary_sp(), 2830b95a36SDaniel Malea m_synthetic_sp() 295548cb50SEnrico Granata {} 305548cb50SEnrico Granata 310b464d48SDaniel Malea FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp) : 320b464d48SDaniel Malea m_synthetic_cached(false), 330b464d48SDaniel Malea m_synthetic_sp() 345548cb50SEnrico Granata { 355548cb50SEnrico Granata SetSummary (summary_sp); 365548cb50SEnrico Granata } 375548cb50SEnrico Granata 380b464d48SDaniel Malea FormatCache::Entry::Entry (lldb::SyntheticChildrenSP synthetic_sp) : 390b464d48SDaniel Malea m_summary_cached(false), 400b464d48SDaniel Malea m_summary_sp() 415548cb50SEnrico Granata { 425548cb50SEnrico Granata SetSynthetic (synthetic_sp); 435548cb50SEnrico Granata } 445548cb50SEnrico Granata 450b464d48SDaniel Malea FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp,lldb::SyntheticChildrenSP synthetic_sp) 465548cb50SEnrico Granata { 475548cb50SEnrico Granata SetSummary (summary_sp); 485548cb50SEnrico Granata SetSynthetic (synthetic_sp); 495548cb50SEnrico Granata } 505548cb50SEnrico Granata 515548cb50SEnrico Granata bool 525548cb50SEnrico Granata FormatCache::Entry::IsSummaryCached () 535548cb50SEnrico Granata { 545548cb50SEnrico Granata return m_summary_cached; 555548cb50SEnrico Granata } 565548cb50SEnrico Granata 575548cb50SEnrico Granata bool 585548cb50SEnrico Granata FormatCache::Entry::IsSyntheticCached () 595548cb50SEnrico Granata { 605548cb50SEnrico Granata return m_synthetic_cached; 615548cb50SEnrico Granata } 625548cb50SEnrico Granata 635548cb50SEnrico Granata lldb::TypeSummaryImplSP 645548cb50SEnrico Granata FormatCache::Entry::GetSummary () 655548cb50SEnrico Granata { 665548cb50SEnrico Granata return m_summary_sp; 675548cb50SEnrico Granata } 685548cb50SEnrico Granata 695548cb50SEnrico Granata lldb::SyntheticChildrenSP 705548cb50SEnrico Granata FormatCache::Entry::GetSynthetic () 715548cb50SEnrico Granata { 725548cb50SEnrico Granata return m_synthetic_sp; 735548cb50SEnrico Granata } 745548cb50SEnrico Granata 755548cb50SEnrico Granata void 765548cb50SEnrico Granata FormatCache::Entry::SetSummary (lldb::TypeSummaryImplSP summary_sp) 775548cb50SEnrico Granata { 785548cb50SEnrico Granata m_summary_cached = true; 795548cb50SEnrico Granata m_summary_sp = summary_sp; 805548cb50SEnrico Granata } 815548cb50SEnrico Granata 825548cb50SEnrico Granata void 835548cb50SEnrico Granata FormatCache::Entry::SetSynthetic (lldb::SyntheticChildrenSP synthetic_sp) 845548cb50SEnrico Granata { 855548cb50SEnrico Granata m_synthetic_cached = true; 865548cb50SEnrico Granata m_synthetic_sp = synthetic_sp; 875548cb50SEnrico Granata } 885548cb50SEnrico Granata 895548cb50SEnrico Granata FormatCache::FormatCache () : 905548cb50SEnrico Granata m_map(), 915548cb50SEnrico Granata m_mutex (Mutex::eMutexTypeRecursive) 925548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 935548cb50SEnrico Granata ,m_cache_hits(0),m_cache_misses(0) 945548cb50SEnrico Granata #endif 955548cb50SEnrico Granata { 965548cb50SEnrico Granata } 975548cb50SEnrico Granata 985548cb50SEnrico Granata FormatCache::Entry& 995548cb50SEnrico Granata FormatCache::GetEntry (const ConstString& type) 1005548cb50SEnrico Granata { 1015548cb50SEnrico Granata auto i = m_map.find(type), 1025548cb50SEnrico Granata e = m_map.end(); 1035548cb50SEnrico Granata if (i != e) 1045548cb50SEnrico Granata return i->second; 1055548cb50SEnrico Granata m_map[type] = FormatCache::Entry(); 1065548cb50SEnrico Granata return m_map[type]; 1075548cb50SEnrico Granata } 1085548cb50SEnrico Granata 1095548cb50SEnrico Granata bool 1105548cb50SEnrico Granata FormatCache::GetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp) 1115548cb50SEnrico Granata { 1125548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1135548cb50SEnrico Granata auto entry = GetEntry(type); 1145548cb50SEnrico Granata if (entry.IsSummaryCached()) 1155548cb50SEnrico Granata { 1165548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1175548cb50SEnrico Granata m_cache_hits++; 1185548cb50SEnrico Granata #endif 1195548cb50SEnrico Granata summary_sp = entry.GetSummary(); 1205548cb50SEnrico Granata return true; 1215548cb50SEnrico Granata } 1225548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1235548cb50SEnrico Granata m_cache_misses++; 1245548cb50SEnrico Granata #endif 1255548cb50SEnrico Granata summary_sp.reset(); 1265548cb50SEnrico Granata return false; 1275548cb50SEnrico Granata } 1285548cb50SEnrico Granata 1295548cb50SEnrico Granata bool 1305548cb50SEnrico Granata FormatCache::GetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp) 1315548cb50SEnrico Granata { 1325548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1335548cb50SEnrico Granata auto entry = GetEntry(type); 1345548cb50SEnrico Granata if (entry.IsSyntheticCached()) 1355548cb50SEnrico Granata { 1365548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1375548cb50SEnrico Granata m_cache_hits++; 1385548cb50SEnrico Granata #endif 1395548cb50SEnrico Granata synthetic_sp = entry.GetSynthetic(); 1405548cb50SEnrico Granata return true; 1415548cb50SEnrico Granata } 1425548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 1435548cb50SEnrico Granata m_cache_misses++; 1445548cb50SEnrico Granata #endif 1455548cb50SEnrico Granata synthetic_sp.reset(); 1465548cb50SEnrico Granata return false; 1475548cb50SEnrico Granata } 1485548cb50SEnrico Granata 1495548cb50SEnrico Granata void 1505548cb50SEnrico Granata FormatCache::SetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp) 1515548cb50SEnrico Granata { 1525548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1535548cb50SEnrico Granata GetEntry(type).SetSummary(summary_sp); 1545548cb50SEnrico Granata } 1555548cb50SEnrico Granata 1565548cb50SEnrico Granata void 1575548cb50SEnrico Granata FormatCache::SetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp) 1585548cb50SEnrico Granata { 1595548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1605548cb50SEnrico Granata GetEntry(type).SetSynthetic(synthetic_sp); 1615548cb50SEnrico Granata } 1625548cb50SEnrico Granata 1635548cb50SEnrico Granata void 1645548cb50SEnrico Granata FormatCache::Clear () 1655548cb50SEnrico Granata { 1665548cb50SEnrico Granata Mutex::Locker lock(m_mutex); 1675548cb50SEnrico Granata m_map.clear(); 1685548cb50SEnrico Granata } 1695548cb50SEnrico Granata 170