ArmNN
 25.11
Loading...
Searching...
No Matches
LeakChecking.hpp
Go to the documentation of this file.
1//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
7#ifdef ARMNN_LEAK_CHECKING_ENABLED
8
9#include <string>
10#include <cstddef>
11#include <memory>
12
13namespace armnnUtils
14{
15
16class ScopedLeakChecker final
17{
18public:
19 ScopedLeakChecker(const std::string & name);
20 ~ScopedLeakChecker();
21
22 // Forwarding these to Google Performance Tools.
23 static bool IsActive();
24 bool NoLeaks();
25 // Note that the following two functions only work after
26 // NoLeaks() has been called. See explanations in
27 // heap-checker.h
28 ssize_t BytesLeaked() const;
29 ssize_t ObjectsLeaked() const;
30
31private:
32 // Hides imlementation so we don't litter other's namespaces
33 // with heap checker related stuff.
34 struct Impl;
35 std::unique_ptr<Impl> m_Impl;
36
37 // No default construction and copying.
38 ScopedLeakChecker() = delete;
39 ScopedLeakChecker(const ScopedLeakChecker &) = delete;
40 ScopedLeakChecker & operator=(const ScopedLeakChecker &) = delete;
41};
42
43class ScopedDisableLeakChecking final
44{
45public:
46 ScopedDisableLeakChecking();
47 ~ScopedDisableLeakChecking();
48
49private:
50 // Hides imlementation so we don't litter other's namespaces
51 // with heap checker related stuff.
52 struct Impl;
53 std::unique_ptr<Impl> m_Impl;
54
55 // No copying.
56 ScopedDisableLeakChecking(const ScopedDisableLeakChecking &) = delete;
57 ScopedDisableLeakChecking & operator=(const ScopedDisableLeakChecking &) = delete;
58};
59
60// disable global leak checks starting from 'main'
61void LocalLeakCheckingOnly();
62
63} // namespace armnnUtils
64
65#define ARMNN_SCOPED_LEAK_CHECKER(TAG) \
66 armnnUtils::ScopedLeakChecker __scoped_armnn_leak_checker__(TAG)
67
68#define ARMNN_LEAK_CHECKER_IS_ACTIVE() \
69 armnnUtils::ScopedLeakChecker::IsActive()
70
71#define ARMNN_NO_LEAKS_IN_SCOPE() \
72 __scoped_armnn_leak_checker__.NoLeaks()
73
74#define ARMNN_BYTES_LEAKED_IN_SCOPE() \
75 __scoped_armnn_leak_checker__.BytesLeaked()
76
77#define ARMNN_OBJECTS_LEAKED_IN_SCOPE() \
78 __scoped_armnn_leak_checker__.ObjectsLeaked()
79
80#define ARMNN_DISABLE_LEAK_CHECKING_IN_SCOPE() \
81 armnnUtils::ScopedDisableLeakChecking __disable_leak_checking_in_scope__
82
83#define ARMNN_LOCAL_LEAK_CHECKING_ONLY() \
84 armnnUtils::LocalLeakCheckingOnly()
85
86#else // ARMNN_LEAK_CHECKING_ENABLED
87
88#define ARMNN_SCOPED_LEAK_CHECKER(TAG)
89#define ARMNN_LEAK_CHECKER_IS_ACTIVE() false
90#define ARMNN_NO_LEAKS_IN_SCOPE() true
91#define ARMNN_BYTES_LEAKED_IN_SCOPE() 0
92#define ARMNN_OBJECTS_LEAKED_IN_SCOPE() 0
93#define ARMNN_DISABLE_LEAK_CHECKING_IN_SCOPE()
94#define ARMNN_LOCAL_LEAK_CHECKING_ONLY()
95
96#endif // ARMNN_LEAK_CHECKING_ENABLED