UDocumentation
UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PackageAccessTracking.h
Go to the documentation of this file.
1
// Copyright Epic Games, Inc. All Rights Reserved.
2
3
#pragma once
4
5
#include "
CoreTypes.h
"
6
#include "Misc/Optional.h"
7
#include "
UObject/NameTypes.h
"
8
#include "
UObject/ObjectHandleDefines.h
"
9
10
class
ITargetPlatform
;
11
12
#define UE_WITH_PACKAGE_ACCESS_TRACKING UE_WITH_OBJECT_HANDLE_TRACKING
13
14
#if UE_WITH_PACKAGE_ACCESS_TRACKING
15
#define UE_TRACK_REFERENCING_PACKAGE_SCOPED(Object, OpName) PackageAccessTracking_Private::FPackageAccessRefScope ANONYMOUS_VARIABLE(PackageAccessTracker_)(Object, OpName);
16
#define UE_TRACK_REFERENCING_PACKAGE_DELAYED_SCOPED(TrackerName, OpName) TOptional<PackageAccessTracking_Private::FPackageAccessRefScope> TrackerName; FName TrackerName##_OpName(OpName);
17
#define UE_TRACK_REFERENCING_PACKAGE_DELAYED(TrackerName, Package) if (TrackerName) TrackerName->SetPackageName(Package->GetFName()); else TrackerName.Emplace(Package->GetFName(), TrackerName##_OpName);
18
#define UE_TRACK_REFERENCING_PLATFORM_SCOPED(TargetPlatform) PackageAccessTracking_Private::FPackageAccessRefScope ANONYMOUS_VARIABLE(PackageAccessTracker_)(TargetPlatform);
19
#define UE_TRACK_REFERENCING_OPNAME_SCOPED(OpName) PackageAccessTracking_Private::FPackageAccessRefScope ANONYMOUS_VARIABLE(PackageAccessTracker_)(OpName);
20
#define UE_TRACK_REFERENCING_PACKAGE_DECLARE_SCOPE_VARIABLE(VariableName) TOptional<PackageAccessTracking_Private::FPackageAccessRefScope> VariableName;
21
#define UE_TRACK_REFERENCING_PACKAGE_ACTIVATE_SCOPE_VARIABLE(VariableName, Object, OpName) check(!VariableName.IsSet()); VariableName.Emplace(Object, OpName);
22
#define UE_TRACK_REFERENCING_PACKAGE_DEACTIVATE_SCOPE_VARIABLE(VariableName) VariableName.Reset();
23
#else
24
#define UE_TRACK_REFERENCING_PACKAGE_SCOPED(Package, OpName)
25
#define UE_TRACK_REFERENCING_PACKAGE_DELAYED_SCOPED(TrackerName, OpName)
26
#define UE_TRACK_REFERENCING_PACKAGE_DELAYED(TrackerName, Package)
27
#define UE_TRACK_REFERENCING_PLATFORM_SCOPED(TargetPlatform)
28
#define UE_TRACK_REFERENCING_OPNAME_SCOPED(OpName)
29
#define UE_TRACK_REFERENCING_PACKAGE_DECLARE_SCOPE_VARIABLE(VariableName)
30
#define UE_TRACK_REFERENCING_PACKAGE_ACTIVATE_SCOPE_VARIABLE(VariableName, Object, OpName)
31
#define UE_TRACK_REFERENCING_PACKAGE_DEACTIVATE_SCOPE_VARIABLE(VariableName)
32
#endif
//UE_WITH_PACKAGE_ACCESS_TRACKING
33
34
// Cook-specific AccessTracking Scopes
35
#if WITH_EDITOR && UE_WITH_PACKAGE_ACCESS_TRACKING
43
#define UE_COOK_RESULTPROJECTION_SCOPED(ProjectionName) \
44
PackageAccessTracking_Private::FPackageAccessRefScope ANONYMOUS_VARIABLE(PackageAccessTracker_)( \
45
PackageAccessTracking_Private::FPackageAccessRefScope::CookResultProjectionType, ProjectionName)
46
51
#define UE_COOK_DISABLE_PACKAGE_ACCESS_TRACKING_SCOPED() UE_COOK_RESULTPROJECTION_SCOPED(UE::Cook::ResultProjection::None)
52
53
#else
54
#define UE_COOK_RESULTPROJECTION_SCOPED(ProjectionName)
55
#define UE_COOK_DISABLE_PACKAGE_ACCESS_TRACKING_SCOPED()
56
#endif
//WITH_EDITOR && UE_WITH_PACKAGE_ACCESS_TRACKING
57
59
60
#if UE_WITH_PACKAGE_ACCESS_TRACKING
61
namespace
PackageAccessTracking_Private
62
{
63
struct
FTrackedData
64
{
66
COREUOBJECT_API
FTrackedData
(
FName
PackageNameIn
,
FName
InOpName
,
FName
InCookResultProjection
,
67
const
ITargetPlatform
*
InTargetPlatform
,
const
UObject
* InObject);
68
70
COREUOBJECT_API
FTrackedData
(
FTrackedData
& DirectData,
FTrackedData
*
OuterAccumulatedData
);
71
72
FName
PackageName;
73
FName
OpName;
74
FName
BuildOpName
;
75
FName
CookResultProjection
;
76
const
UObject
*
Object
=
nullptr
;
77
const
ITargetPlatform
* TargetPlatform =
nullptr
;
78
};
79
80
class
FPackageAccessRefScope
81
{
82
public
:
83
COREUOBJECT_API
FPackageAccessRefScope
(
FName
InPackageName
,
FName
InOpName
);
84
COREUOBJECT_API
FPackageAccessRefScope
(
const
UObject
* InObject,
FName
InOpName
);
85
COREUOBJECT_API
FPackageAccessRefScope
(
FName
InOpName
);
86
COREUOBJECT_API
FPackageAccessRefScope
(
const
ITargetPlatform
*
InTargetPlatform
);
87
enum
ECookResultProjectionType
88
{
89
CookResultProjectionType
,
90
};
91
COREUOBJECT_API
FPackageAccessRefScope
(
ECookResultProjectionType
,
FName
InCookResultProjection
);
92
93
COREUOBJECT_API
~FPackageAccessRefScope
();
94
95
COREUOBJECT_API
void
SetPackageName(
FName
InPackageName
);
96
97
UE_FORCEINLINE_HINT
FName
GetPackageName()
const
{
return
DirectData.PackageName; }
98
UE_FORCEINLINE_HINT
FName
GetOpName
()
const
{
return
DirectData.OpName; }
99
UE_FORCEINLINE_HINT
FPackageAccessRefScope
* GetOuter()
const
{
return
Outer
; }
100
UE_FORCEINLINE_HINT
const
ITargetPlatform
* GetTargetPlatform()
const
{
return
DirectData.TargetPlatform; }
101
102
static
COREUOBJECT_API
FPackageAccessRefScope
*
GetCurrentThreadScope
();
103
static
COREUOBJECT_API
FTrackedData
*
GetCurrentThreadAccumulatedData
();
104
private
:
105
COREUOBJECT_API
FPackageAccessRefScope
(
FName
InPackageName
,
FName
InOpName
,
FName
InCookResultProjection
,
106
const
ITargetPlatform
*
InTargetPlatform
,
const
UObject
* InObject);
107
108
FTrackedData
DirectData;
109
FTrackedData
AccumulatedData
;
110
FPackageAccessRefScope
*
Outer
=
nullptr
;
111
static
thread_local
FPackageAccessRefScope
*
CurrentThreadScope
;
112
};
113
};
114
#endif
// UE_WITH_PACKAGE_ACCESS_TRACKING
115
116
#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_7
117
#include "
Misc/PackageName.h
"
118
#include "
UObject/ObjectHandle.h
"
119
#include "
UObject/Package.h
"
120
#endif
ESphericalLimitType::Outer
@ Outer
EAudioParameterType::Object
@ Object
CoreTypes.h
UE_FORCEINLINE_HINT
#define UE_FORCEINLINE_HINT
Definition
Platform.h:723
StaticCastSharedRef
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition
SharedPointer.h:127
NameTypes.h
ObjectHandleDefines.h
ObjectHandle.h
PackageName.h
Package.h
FName
Definition
NameTypes.h:617
UObject
Definition
Object.h:95
Engine
Source
Runtime
CoreUObject
Public
Misc
PackageAccessTracking.h
Generated by
1.9.8