Skip to content
Snippets Groups Projects
Select Git revision
  • develop
  • master default protected
  • feature/with_art_result_profiler
  • ma2020_palenda
  • scheduler_benchmark
  • scheduler_runtime_optimization
  • feature_template_factory
  • ITASimulationScheduler_v2024a
  • VA_v2023b
  • VA_v2023a
  • VA_v2022a
  • before_cmake_rework
  • v2021.a
  • v0.5.0-b
  • v0.4.0-a
  • v0.3.0-a
  • v0.2.0-a
  • v0.1.0-a
18 results

main.cpp

  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    main.cpp 3.53 KiB
    #include <ITA/SimulationScheduler/AudibilityFilter/rate_filter.h>
    #include <ITA/SimulationScheduler/RoomAcoustics/master_simulation_controller.h>
    #include <ITA/SimulationScheduler/RoomAcoustics/raven/worker_thread.h>
    #include <ITA/SimulationScheduler/profiler.h>
    #include <ITA/SimulationScheduler/result_handler.h>
    #include <ITA/SimulationScheduler/utils/utils.h>
    #include <VistaBase/VistaTimeUtils.h>
    #include <filesystem>
    
    using namespace ITA::SimulationScheduler;
    using namespace RoomAcoustics;
    using namespace AudibilityFilter;
    using namespace Raven;
    using namespace IHTA::Profiler;
    
    struct ResultDump : IResultHandler
    {
    	void PostResultReceived( std::unique_ptr<CSimulationResult> result ) override
    	{
    		resultVector.push_back( result.release( ) );
    
    		const auto rirResult = dynamic_cast<const CRIRSimulationResult*>( resultVector.back( ) );
    
    		if( rirResult )
    		{
    			if( rirResult->eResultType == FieldOfDuty::directSound )
    				dsResultVector.push_back( rirResult );
    			if( rirResult->eResultType == FieldOfDuty::earlyReflections )
    				erResultVector.push_back( rirResult );
    			if( rirResult->eResultType == FieldOfDuty::diffuseDecay )
    				ddResultVector.push_back( rirResult );
    		}
    	}
    
    	std::vector<CSimulationResult*> resultVector = std::vector<CSimulationResult*>( );
    
    	std::vector<const CRIRSimulationResult*> dsResultVector;
    	std::vector<const CRIRSimulationResult*> erResultVector;
    	std::vector<const CRIRSimulationResult*> ddResultVector;
    };
    
    int main( )
    {
    	PROFILER_NAME_THREAD_MAIN( );
    	PROFILER_EVENT_COUNT( "START" );
    
    	auto oConfig = CMasterSimulationController::MasterSimulationControllerConfig( );
    
    	auto schedulerConfig = std::make_shared<CScheduler::LocalSchedulerConfig>( );
    
    	auto workerConfig                   = std::make_shared<CWorkerThread::WorkerThreadConfig>( );
    	workerConfig->sRavenProjectFilePath = "D:/ScieBo/MasterThesis/Raven/RavenInput/Cube/referenceNEW.rpf";
    
    	schedulerConfig->vpWorkerConfigs.push_back( workerConfig );
    
    	auto filterConfig         = std::make_shared<CRateFilter::RateFilterConfig>( );
    	filterConfig->dRate       = 0.5;
    	filterConfig->sFilterName = "Filter";
    
    	CFilterNetwork::FilterNetworkConfig networkConfig;
    	networkConfig.vpFilterConfigs.push_back( filterConfig );
    	networkConfig.sStartFilter = filterConfig->sFilterName;
    
    	schedulerConfig->oFilterNetworkConfig = networkConfig;
    
    	oConfig.oDSSchedulerConfig = schedulerConfig;
    	oConfig.oERSchedulerConfig = schedulerConfig;
    	oConfig.oDDSchedulerConfig = schedulerConfig;
    
    	std::ofstream myfile;
    	myfile.open( "CompleteTest_Master_Test_Config.json" );
    	myfile << Utils::JSONConfigUtils::WriteVistaPropertyListToJSON( oConfig.Store( ) ).dump( );
    	myfile.close( );
    
    	auto masterController = std::make_unique<CMasterSimulationController>( oConfig );
    
    	const auto resultHandler = std::make_unique<ResultDump>( );
    
    	masterController->AttachResultHandler( resultHandler.get( ) );
    
    	auto update   = std::make_unique<CUpdateScene>( );
    	auto source   = std::make_unique<C3DObject>( VistaVector3D( 1, 1.5, 1 ), VistaQuaternion( 0, 0, 0, 1 ), C3DObject::Type::source, 1 );
    	auto receiver = std::make_unique<C3DObject>( VistaVector3D( -0.5, 1.5, -0.5 ), VistaQuaternion( 0, 0, 0, 1 ), C3DObject::Type::receiver, 1 );
    
    	update->SetSourceReceiverPair( std::move( source ), std::move( receiver ) );
    
    	masterController->PushUpdate( std::move( update ) );
    
    	// We need to wait a bit for the workers to start working
    	VistaTimeUtils::Sleep( 500 );
    
    	// wait till we have all results
    	while( resultHandler->resultVector.size( ) != 3 )
    		VistaTimeUtils::Sleep( 250 );
    
    
    	StoreProfilerData( "profiler.json" );
    
    	return 0;
    }