Cook時のStartupWallTimeSecにかかっている時間をプロファイルしたい

RunUAT.bat BuildCookRunを使用してプロジェクトのパッケージを行った際に、

マシン・ビルドによってCook時のStartupWallTimeSecが多く時間を費やしています。

30secから2000secほどと大きな開きがあります。

<br/>

原因を探るために、StartupWallTimeSecにかかる処理をプロファイルしたいのですが

適切な方法があればご教授願いたいです

20:39:42 LogCookStats: Display: Cook Profile 20:39:42 LogCookStats: Display: ============ 20:39:42 LogCookStats: Display: 0.CookWallTimeSec=1241.117802 20:39:42 LogCookStats: Display: 0. 0.StartupWallTimeSec=454.458091 20:39:42 LogCookStats: Display: 0. 1.StartCookByTheBookTimeSec=15.141889 20:39:42 LogCookStats: Display: 0. 1. 0.BlockOnAssetRegistryTimeSec=5.361031 20:39:42 LogCookStats: Display: 0. 1. 1.GameCookModificationDelegateTimeSec=0.018084 20:39:42 LogCookStats: Display: 0. 2.TickCookOnTheSideTimeSec=607.060954 20:39:42 LogCookStats: Display: 0. 2. 0.TickCookOnTheSideLoadPackagesTimeSec=219.298662 20:39:42 LogCookStats: Display: 0. 2. 1.TickCookOnTheSideSaveCookedPackageTimeSec=181.426830 20:39:42 LogCookStats: Display: 0. 2. 1. 0.TickCookOnTheSideResolveRedirectorsTimeSec=0.000000 20:39:42 LogCookStats: Display: 0. 2. 2.TickCookOnTheSidePrepareSaveTimeSec=232.960282 20:39:42 LogCookStats: Display: 0. 3.TickLoopGCTimeSec=19.008004 20:39:42 LogCookStats: Display: 0. 4.TickLoopRecompileShaderRequestsTimeSec=0.000000 20:39:42 LogCookStats: Display: 0. 5.TickLoopShaderProcessAsyncResultsTimeSec=0.000053 20:39:42 LogCookStats: Display: 0. 6.TickLoopProcessDeferredCommandsTimeSec=0.059093 20:39:42 LogCookStats: Display: 0. 7.TickLoopTickCommandletStatsTimeSec=0.000009 20:39:42 LogCookStats: Display: 0. 8.TickLoopFlushRenderingCommandsTimeSec=0.041226 20:39:42 LogCookStats: Display: 0. 9.ShaderFlushTimeSec=0.000010 20:39:42 LogCookStats: Display: 0. 10.ValidationTimeSec=0.008248 20:39:42 LogCookStats: Display: 1.CookParameters= 20:39:42 LogCookStats: Display: 1. 0.TargetPlatforms=Windows 20:39:42 LogCookStats: Display: 1. 1.CookProject=***** 20:39:42 LogCookStats: Display: 1. 2.CookCultures= 20:39:42 LogCookStats: Display: 1. 3.IsCookAll=false 20:39:42 LogCookStats: Display: 1. 4.IsCookOnTheFly=false 20:39:42 LogCookStats: Display: 1. 5.IsIterativeCook=false 20:39:42 LogCookStats: Display: 1. 6.IsUnversioned=true 20:39:42 LogCookStats: Display: 1. 7.CookLabel= 20:39:42 LogCookStats: Display: 1. 8.IsFastCook=false

お世話になっております。

ご質問ありがとうございます。

RunUAT BuildCookRun コマンド実施時にトレースデータを取得し、Unreal Insightsでプロファイルを進めるというアプローチが有効ではないかと思われます。

​StartupWallTimeSecは、クックが開始された時刻からUE起動時刻を引いたものになっております。そこで(エンジン改造が必要となりますが)クック開始時刻を記録しているコード付近にトレースブックマークを追加し、

COOK_STAT(DetailedCookStats::CookStartTime = FPlatformTime::Seconds()); // ブックマークを追加(CookStartTimeに書き込んでいる行すべてに追加) TRACE_BOOKMARK(TEXT("Cook Start"));RunUATでトレースを行ったあと、Unreal Insightsで当該ブックマークから左側に記録された処理をチェックすれば、StartupWallTimeSec期間中のボトルネックの洗い出しに役立つのではないかと思います。

[Image Removed]​RunUATでトレースの取得を行うには、-additionalcookeroptionsを通じて、

-additionalcookeroptions="-trace=default,cook,bookmark -statnamedevents"のようなオプションを追加すれば可能となります。

一度、ご確認ください。

以上、よろしくお願いいたします。​

ご回答ありがとうございます。

こちらの方法を試させていただきます。

回答のご確認ありがとうございます。

確実を期すために、エンジン改造でトレースブックマークを埋め込む旨を申し上げましたが、​無改造であっても「CookByTheBook」や「StartCookByTheBook」の処理開始時点より左側を見ていただければ、StartupWallTimeSec該当時間に行われている処理をプロファイルできるかと思います。

[Image Removed]​

他に何かご不明な点がございましたら、お気軽にお問い合わせください。​​

以上、よろしくお願いいたします。