summaryrefslogtreecommitdiffstats
path: root/src/foundation/Qt3DSBroadcastingAllocator.h
blob: dc6ae7b51b9a83a7efee9213c9f87554048981fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/****************************************************************************
**
** Copyright (C) 2008-2012 NVIDIA Corporation.
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt 3D Studio.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef QT3DS_FOUNDATION_QT3DS_BROADCASTING_ALLOCATOR_H
#define QT3DS_FOUNDATION_QT3DS_BROADCASTING_ALLOCATOR_H

#include "foundation/Qt3DSAllocatorCallback.h"

/** \addtogroup foundation
  @{
*/
#ifndef QT3DS_DOXYGEN
namespace qt3ds {
#endif

/**
\brief Abstract listener class that listens to allocation and deallocation events from the
        foundation memory system.

<b>Threading:</b> All methods of this class should be thread safe as it can be called from the user
thread
or the physics processing thread(s).
*/
class NVAllocationListener
{
protected:
    virtual ~NVAllocationListener() {}

public:
    /**
    \brief callback when memory is allocated.
    \param size Size of the allocation in bytes.
    \param typeName Type this data is being allocated for.
    \param filename File the allocation came from.
    \param line the allocation came from.
    \param allocatedMemory memory that will be returned from the allocation.
    */
    virtual void onAllocation(size_t size, const char *typeName, const char *filename, int line,
                              void *allocatedMemory) = 0;

    /**
    /brief callback when memory is deallocated.
    /param allocatedMemory memory just before allocation.
    */
    virtual void onDeallocation(void *allocatedMemory) = 0;
};

/**
\brief Abstract base class for an application defined memory allocator that allows an external
listener
to audit the memory allocations.

<b>Threading:</b> Register/deregister are *not* threadsafe!!!
You need to be sure multiple threads are using this allocator when you are adding
new listeners.
*/
class NVBroadcastingAllocator : public NVAllocatorCallback
{
protected:
    virtual ~NVBroadcastingAllocator() {}

public:
    /**
    \brief Register an allocation listener.  This object will be notified whenever an
    allocation happens.

    <b>Threading:</b>Not threadsafe if you are allocating and deallocating in another
    thread using this allocator.
    */
    virtual void registerAllocationListener(NVAllocationListener &inListener) = 0;
    /**
    \brief Deregister an allocation listener.  This object will no longer receive
    notifications upon allocation.

    <b>Threading:</b>Not threadsafe if you are allocating and deallocating in another
    thread using this allocator.
    */
    virtual void deregisterAllocationListener(NVAllocationListener &inListener) = 0;
};

#ifndef QT3DS_DOXYGEN
} // namespace qt3ds
#endif

/** @} */
#endif // QT3DS_FOUNDATION_QT3DS_BROADCASTING_ALLOCATOR_H