Prechádzať zdrojové kódy

[ATOM-15868] Modify CullingAndLodPerf script to collect benchmark metadata.

Signed-off-by: Cynthia Lin <[email protected]>
Cynthia Lin 4 rokov pred
rodič
commit
74a50636f3

+ 45 - 2
Gem/Code/Source/Automation/ScriptManager.cpp

@@ -751,6 +751,7 @@ namespace AtomSampleViewer
         behaviorContext->Method("CapturePassTimestamp", &Script_CapturePassTimestamp);
         behaviorContext->Method("CapturePassTimestamp", &Script_CapturePassTimestamp);
         behaviorContext->Method("CapturePassPipelineStatistics", &Script_CapturePassPipelineStatistics);
         behaviorContext->Method("CapturePassPipelineStatistics", &Script_CapturePassPipelineStatistics);
         behaviorContext->Method("CaptureCpuProfilingStatistics", &Script_CaptureCpuProfilingStatistics);
         behaviorContext->Method("CaptureCpuProfilingStatistics", &Script_CaptureCpuProfilingStatistics);
+        behaviorContext->Method("CaptureBenchmarkMetadata", &Script_CaptureBenchmarkMetadata);
 
 
         // Camera...
         // Camera...
         behaviorContext->Method("ArcBallCameraController_SetCenter", &Script_ArcBallCameraController_SetCenter);
         behaviorContext->Method("ArcBallCameraController_SetCenter", &Script_ArcBallCameraController_SetCenter);
@@ -1076,7 +1077,7 @@ namespace AtomSampleViewer
         s_instance->m_isCapturePending = true;
         s_instance->m_isCapturePending = true;
         s_instance->AZ::Render::FrameCaptureNotificationBus::Handler::BusConnect();
         s_instance->AZ::Render::FrameCaptureNotificationBus::Handler::BusConnect();
         s_instance->PauseScript();
         s_instance->PauseScript();
-        
+
         return true;
         return true;
     }
     }
 
 
@@ -1272,6 +1273,13 @@ namespace AtomSampleViewer
         ResumeScript();
         ResumeScript();
     }
     }
 
 
+    void ScriptManager::OnCaptureBenchmarkMetadataFinished([[maybe_unused]] bool result, [[maybe_unused]] const AZStd::string& info)
+    {
+        m_isCapturePending = false;
+        AZ::Render::ProfilingCaptureNotificationBus::Handler::BusDisconnect();
+        ResumeScript();
+    }
+
     void ScriptManager::Script_CapturePassTimestamp(AZ::ScriptDataContext& dc)
     void ScriptManager::Script_CapturePassTimestamp(AZ::ScriptDataContext& dc)
     {
     {
         AZStd::string outputFilePath;
         AZStd::string outputFilePath;
@@ -1335,6 +1343,41 @@ namespace AtomSampleViewer
         s_instance->m_scriptOperations.push(AZStd::move(operation));
         s_instance->m_scriptOperations.push(AZStd::move(operation));
     }
     }
 
 
+    void ScriptManager::Script_CaptureBenchmarkMetadata(AZ::ScriptDataContext& dc)
+    {
+        if (dc.GetNumArguments() != 2)
+        {
+            ReportScriptError("CaptureBenchmarkMetadata needs two arguments, benchmarkName and outputFilePath.");
+            return;
+        }
+
+        if (!dc.IsString(0) || !dc.IsString(1))
+        {
+            ReportScriptError("CaptureBenchmarkMetadata's arguments benchmarkName and outputFilePath must both be of type string.");
+            return;
+        }
+
+        const char* stringValue = nullptr;
+        AZStd::string benchmarkName;
+        AZStd::string outputFilePath;
+
+        dc.ReadArg(0, stringValue);
+        benchmarkName = AZStd::string(stringValue);
+        dc.ReadArg(1, stringValue);
+        outputFilePath = AZStd::string(stringValue);
+
+        auto operation = [benchmarkName, outputFilePath]()
+        {
+            s_instance->m_isCapturePending = true;
+            s_instance->AZ::Render::ProfilingCaptureNotificationBus::Handler::BusConnect();
+            s_instance->PauseScript();
+
+            AZ::Render::ProfilingCaptureRequestBus::Broadcast(&AZ::Render::ProfilingCaptureRequestBus::Events::CaptureBenchmarkMetadata, benchmarkName, outputFilePath);
+        };
+
+        s_instance->m_scriptOperations.push(AZStd::move(operation));
+    }
+
     bool ScriptManager::ValidateProfilingCaptureScripContexts(AZ::ScriptDataContext& dc, AZStd::string& outputFilePath)
     bool ScriptManager::ValidateProfilingCaptureScripContexts(AZ::ScriptDataContext& dc, AZStd::string& outputFilePath)
     {
     {
         if (dc.GetNumArguments() != 1)
         if (dc.GetNumArguments() != 1)
@@ -1371,7 +1414,7 @@ namespace AtomSampleViewer
     {
     {
         AZ::RPI::RPISystemInterface* rpiSystem = AZ::RPI::RPISystemInterface::Get();
         AZ::RPI::RPISystemInterface* rpiSystem = AZ::RPI::RPISystemInterface::Get();
         return rpiSystem->GetRenderApiName().GetCStr();
         return rpiSystem->GetRenderApiName().GetCStr();
-        
+
     }
     }
 
 
     int ScriptManager::Script_GetRandomTestSeed()
     int ScriptManager::Script_GetRandomTestSeed()

+ 5 - 3
Gem/Code/Source/Automation/ScriptManager.h

@@ -17,7 +17,7 @@
 #include <Automation/ImageComparisonConfig.h>
 #include <Automation/ImageComparisonConfig.h>
 #include <Utils/ImGuiAssetBrowser.h>
 #include <Utils/ImGuiAssetBrowser.h>
 
 
-namespace AZ 
+namespace AZ
 {
 {
     class ScriptContext;
     class ScriptContext;
     class ScriptDataContext;
     class ScriptDataContext;
@@ -54,7 +54,7 @@ namespace AtomSampleViewer
 
 
         void Activate();
         void Activate();
         void Deactivate();
         void Deactivate();
-        
+
         void SetCameraEntity(AZ::Entity* cameraEntity);
         void SetCameraEntity(AZ::Entity* cameraEntity);
 
 
         void TickScript(float deltaTime);
         void TickScript(float deltaTime);
@@ -63,7 +63,7 @@ namespace AtomSampleViewer
         void OpenScriptRunnerDialog();
         void OpenScriptRunnerDialog();
 
 
         void RunMainTestSuite(const AZStd::string& suiteFilePath, bool exitOnTestEnd, int randomSeed);
         void RunMainTestSuite(const AZStd::string& suiteFilePath, bool exitOnTestEnd, int randomSeed);
-        
+
     private:
     private:
 
 
         void ShowScriptRunnerDialog();
         void ShowScriptRunnerDialog();
@@ -135,6 +135,7 @@ namespace AtomSampleViewer
         static void Script_CapturePassTimestamp(AZ::ScriptDataContext& dc);
         static void Script_CapturePassTimestamp(AZ::ScriptDataContext& dc);
         static void Script_CapturePassPipelineStatistics(AZ::ScriptDataContext& dc);
         static void Script_CapturePassPipelineStatistics(AZ::ScriptDataContext& dc);
         static void Script_CaptureCpuProfilingStatistics(AZ::ScriptDataContext& dc);
         static void Script_CaptureCpuProfilingStatistics(AZ::ScriptDataContext& dc);
+        static void Script_CaptureBenchmarkMetadata(AZ::ScriptDataContext& dc);
 
 
         // Camera...
         // Camera...
         static void Script_ArcBallCameraController_SetCenter(AZ::Vector3 center);
         static void Script_ArcBallCameraController_SetCenter(AZ::Vector3 center);
@@ -202,6 +203,7 @@ namespace AtomSampleViewer
         void OnCaptureQueryTimestampFinished(bool result, const AZStd::string& info) override;
         void OnCaptureQueryTimestampFinished(bool result, const AZStd::string& info) override;
         void OnCaptureQueryPipelineStatisticsFinished(bool result, const AZStd::string& info) override;
         void OnCaptureQueryPipelineStatisticsFinished(bool result, const AZStd::string& info) override;
         void OnCaptureCpuProfilingStatisticsFinished(bool result, const AZStd::string& info) override;
         void OnCaptureCpuProfilingStatisticsFinished(bool result, const AZStd::string& info) override;
+        void OnCaptureBenchmarkMetadataFinished(bool result, const AZStd::string& info) override;
 
 
         void AbortScripts(const AZStd::string& reason);
         void AbortScripts(const AZStd::string& reason);
 
 

+ 1 - 0
Scripts/CullingandAndLodPerf.bv.lua

@@ -20,6 +20,7 @@ ResizeViewport(800, 800)
 IDLE_COUNT = 100
 IDLE_COUNT = 100
 FRAME_COUNT = 100
 FRAME_COUNT = 100
 
 
+CaptureBenchmarkMetadata('CullingAndLod', g_performanceStatsOutputFolder .. '/benchmark_metadata.json')
 Print('Idling for ' .. tostring(IDLE_COUNT) .. ' frames..')
 Print('Idling for ' .. tostring(IDLE_COUNT) .. ' frames..')
 IdleFrames(IDLE_COUNT)
 IdleFrames(IDLE_COUNT)
 Print('Capturing timestamps for ' .. tostring(FRAME_COUNT) .. ' frames...')
 Print('Capturing timestamps for ' .. tostring(FRAME_COUNT) .. ' frames...')