diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/Profiling.cpp | 54 | 
1 files changed, 43 insertions, 11 deletions
diff --git a/src/test/Profiling.cpp b/src/test/Profiling.cpp index 8283bba..6b32805 100644 --- a/src/test/Profiling.cpp +++ b/src/test/Profiling.cpp @@ -51,10 +51,16 @@ class TestScript : public Script {  class Profiling : public Test {  public: -	// config for test +	// Config for test +	// Minimum amount to let test pass  	const int min_gameobject_count = 100; -	const int max_gameobject_count = 1000; +	// Maximum amount to stop test +	const int max_gameobject_count = 200; +	// Amount of times a test runs to calculate average +	const int average = 10; +	// Maximum duration to stop test  	const std::chrono::microseconds duration = 16000us; +	  	ComponentManager mgr;  	// Add system used for profling tests  @@ -88,7 +94,7 @@ public:  		func();  		auto end = std::chrono::steady_clock::now();  		std::chrono::microseconds duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start); -		timings[name] = duration; +		timings[name] += duration;  		return duration;  	} @@ -107,16 +113,23 @@ public:  		std::stringstream ss;          ss << "\nFunction timings:\n";          for (const auto& [name, duration] : timings) { -            ss << name << " took " << duration.count() / 1000.0 << " ms (" << duration.count() << " µs).\n"; +            ss << name << " took " << duration.count() / 1000.0 / average << " ms (" << duration.count() / average << " µs).\n";          } -        ss << "Total time: " << this->total_time.count() / 1000.0 << " ms (" << this->total_time.count() << " µs)\n"; +        ss << "Total time: " << this->total_time.count() / 1000.0 / average << " ms (" << this->total_time.count() / average << " µs)\n";          ss << "Amount of gameobjects: " << game_object_count << "\n";          GTEST_LOG_(INFO) << ss.str();  	} + +	void clear_timings() { +		for (auto& [key, value] : timings) { +    	value = std::chrono::microseconds(0); +		} +	}  };  TEST_F(Profiling, Profiling_1) { -	while (this->total_time < this->duration) { +	while (this->total_time/this->average < this->duration) { +		  		{  			//define gameobject used for testing @@ -124,7 +137,14 @@ TEST_F(Profiling, Profiling_1) {  		}  		this->game_object_count++; -		this->total_time = run_all_systems(); + +		this->total_time = 0us; +		clear_timings(); + +		for (int amount = 0; amount < this->average; amount++) { +			this->total_time += run_all_systems(); +		} +  		if(this->game_object_count >= this->max_gameobject_count) break;  	}  	log_timings(); @@ -132,7 +152,7 @@ TEST_F(Profiling, Profiling_1) {  }  TEST_F(Profiling, Profiling_2) { -	while (this->total_time < this->duration) { +	while (this->total_time/this->average < this->duration) {  		{  			//define gameobject used for testing @@ -150,7 +170,13 @@ TEST_F(Profiling, Profiling_2) {  		}  		this->game_object_count++; -		this->total_time = run_all_systems(); + +		this->total_time = 0us; +		clear_timings(); +		for (int amount = 0; amount < this->average; amount++) { +			this->total_time += run_all_systems(); +		} +  		if(this->game_object_count >= this->max_gameobject_count) break;  	}  	log_timings(); @@ -158,7 +184,7 @@ TEST_F(Profiling, Profiling_2) {  }  TEST_F(Profiling, Profiling_3) { -	while (this->total_time < this->duration) { +	while (this->total_time/this->average < this->duration) {  		{  			//define gameobject used for testing @@ -190,7 +216,13 @@ TEST_F(Profiling, Profiling_3) {  		}  		render_sys.update();  		this->game_object_count++; -		this->total_time = run_all_systems(); +		 +		this->total_time = 0us; +		clear_timings(); +		for (int amount = 0; amount < this->average; amount++) { +			this->total_time += run_all_systems(); +		} +  		if(this->game_object_count >= this->max_gameobject_count) break;  	}  	log_timings();  |