• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #ifdef ARMNN_LEAK_CHECKING_ENABLED
7 
8 #include "LeakChecking.hpp"
9 #include "gperftools/heap-checker.h"
10 
11 namespace armnnUtils
12 {
13 
14 struct ScopedLeakChecker::Impl
15 {
16     HeapLeakChecker m_LeakChecker;
17 
ImplarmnnUtils::ScopedLeakChecker::Impl18     Impl(const std::string & name)
19     : m_LeakChecker(name.c_str())
20     {
21     }
22 };
23 
ScopedLeakChecker(const std::string & name)24 ScopedLeakChecker::ScopedLeakChecker(const std::string & name)
25 : m_Impl(new Impl(name))
26 {
27 }
28 
~ScopedLeakChecker()29 ScopedLeakChecker::~ScopedLeakChecker() {}
30 
IsActive()31 bool ScopedLeakChecker::IsActive()
32 {
33     return HeapLeakChecker::IsActive();
34 }
35 
NoLeaks()36 bool ScopedLeakChecker::NoLeaks()
37 {
38     return (IsActive() ? m_Impl->m_LeakChecker.NoLeaks() : true);
39 }
40 
BytesLeaked() const41 ssize_t ScopedLeakChecker::BytesLeaked() const
42 {
43     return (IsActive() ? m_Impl->m_LeakChecker.BytesLeaked(): 0);
44 }
45 
ObjectsLeaked() const46 ssize_t ScopedLeakChecker::ObjectsLeaked() const
47 {
48     return (IsActive() ? m_Impl->m_LeakChecker.ObjectsLeaked(): 0 );
49 }
50 
51 struct ScopedDisableLeakChecking::Impl
52 {
53     HeapLeakChecker::Disabler m_Disabler;
54 };
55 
ScopedDisableLeakChecking()56 ScopedDisableLeakChecking::ScopedDisableLeakChecking()
57 : m_Impl(new Impl)
58 {
59 }
60 
~ScopedDisableLeakChecking()61 ScopedDisableLeakChecking::~ScopedDisableLeakChecking()
62 {
63 }
64 
LocalLeakCheckingOnly()65 void LocalLeakCheckingOnly()
66 {
67     auto * globalChecker = HeapLeakChecker::GlobalChecker();
68     if (globalChecker)
69     {
70         // Don't care about global leaks and make sure we won't report any.
71         // This is because leak checking supposed to run in well defined
72         // contexts through the ScopedLeakChecker, otherwise we risk false
73         // positives because of external factors.
74         globalChecker->NoGlobalLeaks();
75         globalChecker->CancelGlobalCheck();
76     }
77 }
78 
79 } // namespace armnnUtils
80 
81 #endif // ARMNN_LEAK_CHECKING_ENABLED
82