summaryrefslogtreecommitdiffstats
path: root/src/Runtime/Source/system/Qt3DSMemorySettings.h
blob: 540024240fbc6387bba1f2feb35b5322bb155925 (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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/****************************************************************************
**
** Copyright (C) 1993-2009 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$
**
****************************************************************************/

#pragma once

//==============================================================================
//	Includes
//==============================================================================
#include "Qt3DSTypes.h"

//==============================================================================
//	Namespace
//==============================================================================
namespace Q3DStudio {

//==============================================================================
/**
 *	GlobalMemoryManager constants
 *	NOTE THAT THESE NUMBERS BELOW SHOULD BE ADJUSTED TO FIT YOUR APPLICATION.
 *
 *	See the Memory Management section in the documentation for guidelines
 *	on memory diagnostics that enable you to optimize these values:
 */

//==============================================================================
//	Memory Pool Configuration
//==============================================================================

#ifndef Q3DStudio_MEMORY_POOLCOUNT
#define Q3DStudio_MEMORY_POOLCOUNT 12
#endif // Q3DStudio_MEMORY_POOLCOUNT

/// A memory pool has a chunk size that defines he size in bytes of each slot
/// and a chunk count defining how many slots there are of that size.
/// The pools below thus has 128 slots of 4 bytes, 256 slots of 8 bytes etc:
const INT32 g_ChunkSize[Q3DStudio_MEMORY_POOLCOUNT] = { 4,  8,   16,  32,  48,  64,
                                                        96, 128, 160, 256, 384, 640 };
const INT32 g_ChunkCount[Q3DStudio_MEMORY_POOLCOUNT] = { 128, 256, 256, 1536, 128, 128,
                                                         256, 64,  32,  32,   32,  32 };

//==============================================================================
//	Memory Settings
//==============================================================================

/// Define the upper memory limit used by Runtime.
/// 0 = unlimited
#ifndef Q3DStudio_MEMORY_LIMIT
#define Q3DStudio_MEMORY_LIMIT 0
#endif // Q3DStudio_MEMORY_LIMIT

// Pool sizes and diagnostics are aligned to the required boundary.
#ifndef Q3DStudio_MEMORY_ALIGNMENT
#define Q3DStudio_MEMORY_ALIGNMENT 8
#endif // Q3DStudio_MEMORY_ALIGNMENT

//==============================================================================
//	Memory Diagnostics
//==============================================================================

/// Note that the simple report is always on.	(F1 in Quarterback)

/// CMemoryHeap usage report.					(F2 in Quarterback)
/// Tracks large allocations such as pool buffers, managers and overflows.
/// Not much overhead since most allocations should be intercepted by pools.
#ifndef Q3DStudio_MEMORY_HEAPTRACKING
#define Q3DStudio_MEMORY_HEAPTRACKING 0
#endif // Q3DStudio_MEMORY_HEAPTRACKING

/// Max number of 20 byte SReportEntry heap entries
/// Increase this number if you get a log warning but you should really tune
/// your memory pools to avoid hitting the heap.
#ifndef Q3DStudio_MEMORY_HEAPTRACKINGSIZE
#define Q3DStudio_MEMORY_HEAPTRACKINGSIZE 4000
#endif // Q3DStudio_MEMORY_HEAPTRACKINGSIZE

/// Invasive allocation tracker.				(F3 in Quarterback)
/// Track detailed memory usage per allocation through CMemoryManager by tracking
/// every Runtime allocation, line by line using __FILE__ and __LINE__.
/// Note that this adds a 16byte SMemoryInfo to each allocation and thus
/// changes pool usage.
///  === Do not tune pools with line tracking enabled! ===
#ifndef Q3DStudio_MEMORY_LINETRACKING
#define Q3DStudio_MEMORY_LINETRACKING 0
#endif // Q3DStudio_MEMORY_LINETRACKING

// Hashbin size of entries pointing to SMemoryInfo allocation headers
#ifndef Q3DStudio_MEMORY_LINETRACKINGSIZE
#define Q3DStudio_MEMORY_LINETRACKINGSIZE (128 * 1024)
#endif // Q3DStudio_MEMORY_LINETRACKINGSIZE

/// CMemoryManager pooled memory usage report.	(F5-F8 in Quarterback)
/// Track most used allocation sizes to tune pool sizes and count.
/// Enabled by default since it allows tracking precise presentation
/// memory usage without much of an overhead.
/// It also includes a histogram when showing Reset data (F5,F6)
#ifndef Q3DStudio_MEMORY_POOLTRACKING
#ifdef _DEBUG
#define Q3DStudio_MEMORY_POOLTRACKING 1
#else
#define Q3DStudio_MEMORY_POOLTRACKING 0
#endif
#endif // Q3DStudio_MEMORY_POOLTRACKING

} // namespace Q3DStudio