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"
9
10class 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
62{
63 struct FTrackedData
64 {
67 const ITargetPlatform* InTargetPlatform, const UObject* InObject);
68
71
72 FName PackageName;
73 FName OpName;
76 const UObject* Object = nullptr;
77 const ITargetPlatform* TargetPlatform = nullptr;
78 };
79
81 {
82 public:
88 {
90 };
92
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
104 private:
106 const ITargetPlatform* InTargetPlatform, const UObject* InObject);
107
108 FTrackedData DirectData;
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
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition NameTypes.h:617
Definition Object.h:95