@@ -1229,6 +1229,8 @@ FHoudiniEngineUtils::GatherLandscapeInputs(
1229
1229
UHoudiniAssetComponent* HAC,
1230
1230
TArray<ALandscapeProxy*>& AllInputLandscapes)
1231
1231
{
1232
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GatherLandscapeInputs);
1233
+
1232
1234
if (!IsValid (HAC))
1233
1235
return ;
1234
1236
@@ -1528,6 +1530,7 @@ FHoudiniEngineUtils::LoadLibHAPI(FString & StoredLibHAPILocation)
1528
1530
bool
1529
1531
FHoudiniEngineUtils::IsInitialized ()
1530
1532
{
1533
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::IsInitialized);
1531
1534
if (!FHoudiniApi::IsHAPIInitialized ())
1532
1535
return false ;
1533
1536
@@ -1706,6 +1709,8 @@ FHoudiniEngineUtils::LoadHoudiniAsset(const UHoudiniAsset * HoudiniAsset, HAPI_A
1706
1709
// Lambda to detect license issues
1707
1710
auto CheckLicenseValid = [&AssetFileName](const HAPI_Result& Result)
1708
1711
{
1712
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::LoadHoudiniAsset - CheckLicenseValid);
1713
+
1709
1714
// HoudiniEngine acquires a license when creating/loading a node, not when creating a session
1710
1715
if (Result >= HAPI_RESULT_NO_LICENSE_FOUND && Result < HAPI_RESULT_ASSET_INVALID)
1711
1716
{
@@ -1730,6 +1735,8 @@ FHoudiniEngineUtils::LoadHoudiniAsset(const UHoudiniAsset * HoudiniAsset, HAPI_A
1730
1735
// Lambda to load an HDA from file
1731
1736
auto LoadAssetFromFile = [&Result, &OutAssetLibraryId](const FString& InAssetFileName)
1732
1737
{
1738
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::LoadHoudiniAsset - LoadAssetFromFile);
1739
+
1733
1740
// Load the asset from file.
1734
1741
std::string AssetFileNamePlain;
1735
1742
FHoudiniEngineUtils::ConvertUnrealString (InAssetFileName, AssetFileNamePlain);
@@ -1741,6 +1748,8 @@ FHoudiniEngineUtils::LoadHoudiniAsset(const UHoudiniAsset * HoudiniAsset, HAPI_A
1741
1748
// Lambda to load an HDA from memory
1742
1749
auto LoadAssetFromMemory = [&Result, &OutAssetLibraryId](const UHoudiniAsset* InHoudiniAsset)
1743
1750
{
1751
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::LoadHoudiniAsset - LoadAssetFromMemory);
1752
+
1744
1753
// Load the asset from the cached memory buffer
1745
1754
Result = FHoudiniApi::LoadAssetLibraryFromMemory (
1746
1755
FHoudiniEngine::Get ().GetSession (),
@@ -1833,6 +1842,8 @@ FHoudiniEngineUtils::GetSubAssetNames(
1833
1842
const HAPI_AssetLibraryId& AssetLibraryId,
1834
1843
TArray< HAPI_StringHandle >& OutAssetNames)
1835
1844
{
1845
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GetSubAssetNames);
1846
+
1836
1847
if (AssetLibraryId < 0 )
1837
1848
return false ;
1838
1849
@@ -1940,6 +1951,8 @@ FHoudiniEngineUtils::IsValidNodeId(HAPI_NodeId NodeId)
1940
1951
bool
1941
1952
FHoudiniEngineUtils::GetHoudiniAssetName (const HAPI_NodeId& AssetNodeId, FString& NameString)
1942
1953
{
1954
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GetHoudiniAssetName);
1955
+
1943
1956
if (AssetNodeId < 0 )
1944
1957
return false ;
1945
1958
@@ -2018,6 +2031,8 @@ FHoudiniEngineUtils::HapiGetAbsNodePath(const HAPI_NodeId& InNodeId, FString& Ou
2018
2031
bool
2019
2032
FHoudiniEngineUtils::HapiGetNodePath (const HAPI_NodeId& InNodeId, const HAPI_NodeId& InRelativeToNodeId, FString& OutPath)
2020
2033
{
2034
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::HapiGetNodePath);
2035
+
2021
2036
// Retrieve Path to the given Node, relative to the other given Node
2022
2037
if ((InNodeId < 0 ) || (InRelativeToNodeId < 0 ))
2023
2038
return false ;
@@ -2100,6 +2115,8 @@ FHoudiniEngineUtils::HapiGetNodePath(const FHoudiniGeoPartObject& InHGPO, FStrin
2100
2115
bool
2101
2116
FHoudiniEngineUtils::HapiGetObjectInfos (const HAPI_NodeId& InNodeId, TArray<HAPI_ObjectInfo>& OutObjectInfos, TArray<HAPI_Transform>& OutObjectTransforms)
2102
2117
{
2118
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::HapiGetObjectInfos);
2119
+
2103
2120
HAPI_NodeInfo NodeInfo;
2104
2121
FHoudiniApi::NodeInfo_Init (&NodeInfo);
2105
2122
HOUDINI_CHECK_ERROR_RETURN (FHoudiniApi::GetNodeInfo (
@@ -2211,6 +2228,8 @@ FHoudiniEngineUtils::HapiGetObjectInfos(const HAPI_NodeId& InNodeId, TArray<HAPI
2211
2228
bool
2212
2229
FHoudiniEngineUtils::IsObjNodeFullyVisible (const TSet<HAPI_NodeId>& AllObjectIds, const HAPI_NodeId& InRootNodeId, const HAPI_NodeId& InChildNodeId)
2213
2230
{
2231
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::IsObjNodeFullyVisible);
2232
+
2214
2233
// Walk up the hierarchy from child to root.
2215
2234
// If any node in that hierarchy is not in the "AllObjectIds" set, the OBJ node is considered to
2216
2235
// be hidden.
@@ -2289,6 +2308,7 @@ FHoudiniEngineUtils::IsSopNode(const HAPI_NodeId& NodeId)
2289
2308
2290
2309
bool FHoudiniEngineUtils::ContainsSopNodes (const HAPI_NodeId& NodeId)
2291
2310
{
2311
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::ContainsSopNodes);
2292
2312
int ChildCount = 0 ;
2293
2313
HOUDINI_CHECK_ERROR_RETURN (
2294
2314
FHoudiniApi::ComposeChildNodeList (
@@ -2339,15 +2359,23 @@ FHoudiniEngineUtils::GatherAllAssetOutputs(
2339
2359
2340
2360
// Get the AssetInfo
2341
2361
HAPI_AssetInfo AssetInfo;
2342
- FHoudiniApi::AssetInfo_Init (&AssetInfo);
2343
- bool bAssetInfoResult = HAPI_RESULT_SUCCESS == FHoudiniApi::GetAssetInfo (
2344
- FHoudiniEngine::Get ().GetSession (), AssetId, &AssetInfo);
2362
+ bool bAssetInfoResult = false ;
2363
+ {
2364
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GatherAllAssetOutputs-GetAssetInfo);
2365
+ FHoudiniApi::AssetInfo_Init (&AssetInfo);
2366
+ bAssetInfoResult = HAPI_RESULT_SUCCESS == FHoudiniApi::GetAssetInfo (
2367
+ FHoudiniEngine::Get ().GetSession (), AssetId, &AssetInfo);
2368
+ }
2345
2369
2346
2370
// Get the Asset NodeInfo
2347
2371
HAPI_NodeInfo AssetNodeInfo;
2348
- FHoudiniApi::NodeInfo_Init (&AssetNodeInfo);
2349
- HAPI_Result NodeResult = FHoudiniApi::GetNodeInfo (
2350
- FHoudiniEngine::Get ().GetSession (), AssetId, &AssetNodeInfo);
2372
+ HAPI_Result NodeResult = HAPI_RESULT_FAILURE;
2373
+ {
2374
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GatherAllAssetOutputs-GetNodeInfo);
2375
+ FHoudiniApi::NodeInfo_Init (&AssetNodeInfo);
2376
+ NodeResult = FHoudiniApi::GetNodeInfo (
2377
+ FHoudiniEngine::Get ().GetSession (), AssetId, &AssetNodeInfo);
2378
+ }
2351
2379
2352
2380
if (HAPI_RESULT_SUCCESS != NodeResult)
2353
2381
{
@@ -2379,6 +2407,7 @@ FHoudiniEngineUtils::GatherAllAssetOutputs(
2379
2407
int32 EditableNodeCount = 0 ;
2380
2408
if (bAssetHasChildren)
2381
2409
{
2410
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GatherAllAssetOutputs-ComposeChildNodeList);
2382
2411
HOUDINI_CHECK_ERROR (FHoudiniApi::ComposeChildNodeList (
2383
2412
FHoudiniEngine::Get ().GetSession (),
2384
2413
AssetId, HAPI_NODETYPE_SOP, HAPI_NODEFLAGS_EDITABLE,
@@ -2389,6 +2418,7 @@ FHoudiniEngineUtils::GatherAllAssetOutputs(
2389
2418
// of whether the subnet is considered visible or not.
2390
2419
if (EditableNodeCount > 0 )
2391
2420
{
2421
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GatherAllAssetOutputs-GetComposedChildNodeList);
2392
2422
TArray<HAPI_NodeId> EditableNodeIds;
2393
2423
EditableNodeIds.SetNumUninitialized (EditableNodeCount);
2394
2424
HOUDINI_CHECK_ERROR (FHoudiniApi::GetComposedChildNodeList (
@@ -2397,6 +2427,7 @@ FHoudiniEngineUtils::GatherAllAssetOutputs(
2397
2427
2398
2428
for (int32 nEditable = 0 ; nEditable < EditableNodeCount; nEditable++)
2399
2429
{
2430
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GatherAllAssetOutputs-GetEditableGeoInfo);
2400
2431
HAPI_GeoInfo CurrentEditableGeoInfo;
2401
2432
FHoudiniApi::GeoInfo_Init (&CurrentEditableGeoInfo);
2402
2433
HOUDINI_CHECK_ERROR (FHoudiniApi::GetGeoInfo (
@@ -2451,6 +2482,7 @@ FHoudiniEngineUtils::GatherAllAssetOutputs(
2451
2482
TSet<HAPI_NodeId> AllObjectIds;
2452
2483
if (bUseOutputFromSubnets)
2453
2484
{
2485
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GatherAllAssetOutputs-GetComposedChildNodeList2);
2454
2486
int NumObjSubnets;
2455
2487
TArray<HAPI_NodeId> ObjectIds;
2456
2488
HOUDINI_CHECK_ERROR_RETURN (
@@ -2464,6 +2496,7 @@ FHoudiniEngineUtils::GatherAllAssetOutputs(
2464
2496
),
2465
2497
false );
2466
2498
2499
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GatherAllAssetOutputs-GetComposedChildNodeList2);
2467
2500
ObjectIds.SetNumUninitialized (NumObjSubnets);
2468
2501
HOUDINI_CHECK_ERROR_RETURN (
2469
2502
FHoudiniApi::GetComposedChildNodeList (
@@ -2556,6 +2589,8 @@ bool FHoudiniEngineUtils::GatherImmediateOutputGeoInfos(const HAPI_NodeId& InNod
2556
2589
TSet<HAPI_NodeId>& OutForceNodesCook
2557
2590
)
2558
2591
{
2592
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GatherImmediateOutputGeoInfos);
2593
+
2559
2594
TSet<HAPI_NodeId> GatheredNodeIds;
2560
2595
2561
2596
// NOTE: This function assumes that the incoming node is a Geometry container that contains immediate
@@ -2856,8 +2891,8 @@ FHoudiniEngineUtils::TranslateUnrealTransform(const FTransform& UnrealTransform,
2856
2891
2857
2892
void
2858
2893
FHoudiniEngineUtils::TranslateUnrealTransform (
2859
- const FTransform & UnrealTransform,
2860
- HAPI_TransformEuler & HapiTransformEuler)
2894
+ const FTransform& UnrealTransform,
2895
+ HAPI_TransformEuler& HapiTransformEuler)
2861
2896
{
2862
2897
FHoudiniApi::TransformEuler_Init (&HapiTransformEuler);
2863
2898
@@ -3014,6 +3049,7 @@ FHoudiniEngineUtils::UploadHACTransform(UHoudiniAssetComponent* HAC)
3014
3049
bool
3015
3050
FHoudiniEngineUtils::HapiSetAssetTransform (const HAPI_NodeId& AssetId, const FTransform & Transform)
3016
3051
{
3052
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::HapiSetAssetTransform);
3017
3053
if (AssetId < 0 )
3018
3054
return false ;
3019
3055
@@ -3066,6 +3102,8 @@ FHoudiniEngineUtils::HapiGetParentNodeId(const HAPI_NodeId& NodeId)
3066
3102
void
3067
3103
FHoudiniEngineUtils::AssignUniqueActorLabelIfNeeded (UHoudiniAssetComponent* HAC)
3068
3104
{
3105
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::AssignUniqueActorLabelIfNeeded);
3106
+
3069
3107
if (!IsValid (HAC))
3070
3108
return ;
3071
3109
@@ -6132,12 +6170,18 @@ FHoudiniEngineUtils::GetGenericAttributeList(
6132
6170
6133
6171
6134
6172
bool
6135
- FHoudiniEngineUtils::GetGenericPropertiesAttributes (const HAPI_NodeId& InGeoNodeId, const HAPI_PartId& InPartId,
6136
- const bool InbFindDetailAttributes, const int32& InFirstValidPrimIndex, const int32& InFirstValidVertexIndex, const int32& InFirstValidPointIndex,
6173
+ FHoudiniEngineUtils::GetGenericPropertiesAttributes (
6174
+ const HAPI_NodeId& InGeoNodeId,
6175
+ const HAPI_PartId& InPartId,
6176
+ const bool InbFindDetailAttributes,
6177
+ const int32& InFirstValidPrimIndex,
6178
+ const int32& InFirstValidVertexIndex,
6179
+ const int32& InFirstValidPointIndex,
6137
6180
TArray<FHoudiniGenericAttribute>& OutPropertyAttributes)
6138
6181
{
6139
- int32 FoundCount = 0 ;
6182
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::GetGenericPropertiesAttributes) ;
6140
6183
6184
+ int32 FoundCount = 0 ;
6141
6185
// List all the generic property detail attributes ...
6142
6186
if (InbFindDetailAttributes)
6143
6187
{
@@ -6177,6 +6221,7 @@ FHoudiniEngineUtils::UpdateGenericPropertiesAttributes(
6177
6221
const bool bInDeferPostEditChangePropertyCalls,
6178
6222
const FHoudiniGenericAttribute::FFindPropertyFunctionType& InProcessFunction)
6179
6223
{
6224
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::UpdateGenericPropertiesAttributes);
6180
6225
if (!IsValid (InObject))
6181
6226
return false ;
6182
6227
@@ -6942,6 +6987,8 @@ FHoudiniEngineUtils::CreateNode(
6942
6987
int32
6943
6988
FHoudiniEngineUtils::HapiGetCookCount (const HAPI_NodeId& InNodeId)
6944
6989
{
6990
+ TRACE_CPUPROFILER_EVENT_SCOPE (FHoudiniEngineUtils::HapiGetCookCount);
6991
+
6945
6992
// To reduce the "cost" of the call on big HDAs - limit or search to non bypassed SOP/OBJ nodes
6946
6993
int32 CookCount = -1 ;
6947
6994
if (HAPI_RESULT_FAILURE == FHoudiniApi::GetTotalCookCount (
0 commit comments