// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #ifdef ARMNN_LEAK_CHECKING_ENABLED #include "LeakChecking.hpp" #include "gperftools/heap-checker.h" namespace armnnUtils { struct ScopedLeakChecker::Impl { HeapLeakChecker m_LeakChecker; Impl(const std::string & name) : m_LeakChecker(name.c_str()) { } }; ScopedLeakChecker::ScopedLeakChecker(const std::string & name) : m_Impl(new Impl(name)) { } ScopedLeakChecker::~ScopedLeakChecker() {} bool ScopedLeakChecker::IsActive() { return HeapLeakChecker::IsActive(); } bool ScopedLeakChecker::NoLeaks() { return (IsActive() ? m_Impl->m_LeakChecker.NoLeaks() : true); } ssize_t ScopedLeakChecker::BytesLeaked() const { return (IsActive() ? m_Impl->m_LeakChecker.BytesLeaked(): 0); } ssize_t ScopedLeakChecker::ObjectsLeaked() const { return (IsActive() ? m_Impl->m_LeakChecker.ObjectsLeaked(): 0 ); } struct ScopedDisableLeakChecking::Impl { HeapLeakChecker::Disabler m_Disabler; }; ScopedDisableLeakChecking::ScopedDisableLeakChecking() : m_Impl(new Impl) { } ScopedDisableLeakChecking::~ScopedDisableLeakChecking() { } void LocalLeakCheckingOnly() { auto * globalChecker = HeapLeakChecker::GlobalChecker(); if (globalChecker) { // Don't care about global leaks and make sure we won't report any. // This is because leak checking supposed to run in well defined // contexts through the ScopedLeakChecker, otherwise we risk false // positives because of external factors. globalChecker->NoGlobalLeaks(); globalChecker->CancelGlobalCheck(); } } } // namespace armnnUtils #endif // ARMNN_LEAK_CHECKING_ENABLED