Exemplo n.º 1
0
	BenchmarkResults benchmark(StringRef description, uint32 iterations, Function<void()> function) {
		if (iterations == 0) iterations = 1;
		BenchmarkResults results;
		results.description = description;
		results.iterations = 0;
		results.worst_time = ProcessTime::microseconds(0);
		results.best_time = ProcessTimeDelta::forever();
		ProcessTimeDelta total_time;
		for (uint32 i = 0; i < iterations; ++i) {
			ProcessTime before;
			ProcessTime after;
			try {
				before = process_now();
				function();
				after = process_now();
			}
			catch (...) {
				Error() << "Unhandled exception in benchmark, stopping!";
				break;
			}
			ProcessTimeDelta elapsed = after - before;
			total_time += elapsed;
			results.add_time(elapsed, i);
		}
		results.avg_time = ProcessTime::microseconds(total_time.microseconds() / results.iterations);
		results.med_time = results.best_time + ProcessTime::microseconds((results.worst_time - results.best_time).microseconds() / 2);
		return move(results);
	}
Exemplo n.º 2
0
	BenchmarkCompareResults benchmark_compare_interleaved(StringRef description, uint32 iterations, ArrayRef<Function<void()>> functions, ArrayRef<StringRef> descriptions) {
		BenchmarkCompareResults results;
		results.results.resize(functions.size());
		results.description = description;
		
		for (size_t i = 0; i < functions.size(); ++i) {
			BenchmarkResults& r = results.results[i];
			r.description = i >= descriptions.size() ? "<unknown>" : descriptions[i];
			r.iterations = 0;
			r.worst_time = ProcessTime::microseconds(0);
			r.best_time = ProcessTimeDelta::forever();
		}
		
		for (uint32 i = 0; i < iterations; ++i) {
			for (size_t j = 0; j < functions.size(); ++j) {
				auto& f = functions[j];
				BenchmarkResults& r = results.results[j];
				ProcessTime before;
				ProcessTime after;
				try {
					before = process_now();
					f();
					after = process_now();
				}
				catch (...) {
					Error() << "Unhandled exception in benchmark, stopping!";
					goto stop;
				}
				ProcessTimeDelta elapsed = after - before;
				// using avg_time as total time for now
				r.avg_time += elapsed;
				r.add_time(elapsed, i);
			}
		}
		
		stop:
		for (auto& r: results.results) {
			r.avg_time = ProcessTime::microseconds(r.avg_time.microseconds() / r.iterations);
			r.med_time = r.best_time + ProcessTime::microseconds((r.worst_time - r.best_time).microseconds() / 2);
		}
		
		return move(results);
	}
Exemplo n.º 3
0
void BaseBot::process_diplomacy_message( char *message, int message_length )
{
	Token *message_tokens;							// The tokens in the incoming message
	TokenMessage incoming_message;					// The incoming message
	Token lead_token;								// The first token of the message
	
	message_tokens = (Token *)( message );

	if ( message_tokens[ 0 ] == TOKEN_COMMAND_PRN )
	{
		process_prn_message( message_tokens, message_length );
	}
	else
	{
		incoming_message.set_message( message_tokens, message_length / 2 );

		log_tcpip_comms( true, incoming_message );

		// If the first subtoken is a single message
		if ( incoming_message.submessage_is_single_token( 0 ) )
		{
			// Act on that token
			lead_token = incoming_message.get_token( 0 );

			// Messages that BaseBot handles initially
			if ( lead_token == TOKEN_COMMAND_HLO )
			{
				process_hlo( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_MAP )
			{
				process_map( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_MDF )
			{
				process_mdf( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_NOW )
			{
				process_now( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_ORD )
			{
				process_ord( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_SCO )
			{
				process_sco( incoming_message );
			}

			// Messages which are broken down further before being passed on
			else if ( lead_token == TOKEN_COMMAND_NOT )
			{
				process_not( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_REJ )
			{
				process_rej( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_YES )
			{
				process_yes( incoming_message );
			}

			// Messages to be handled by Bot immediately
			else if ( lead_token == TOKEN_COMMAND_CCD )
			{
				process_ccd( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_DRW )
			{
				process_drw( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_FRM )
			{
				process_frm_message( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_HUH )
			{
				process_huh_message( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_LOD )
			{
				process_lod_message( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_MIS )
			{
				process_mis_message( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_OFF )
			{
				process_off_message( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_OUT )
			{
				process_out( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_SLO )
			{
				process_slo( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_SMR )
			{
				process_smr_message( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_SVE )
			{
				process_sve_message( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_THX )
			{
				process_thx_message( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_TME )
			{
				process_tme_message( incoming_message );
			}
			else if ( lead_token == TOKEN_COMMAND_ADM )
			{
				process_adm_message( incoming_message );
			}

			/* ADDED BY ME */
			else if ( lead_token == TOKEN_PRESS_PRP )
			{
				process_prp_message( incoming_message );
			}

			else
			{
				log_error("Unexpected first token in message : %s", 
							incoming_message.get_message_as_text().c_str() );
			}
		}
		else
		{
			log_error("Illegal message received");
		}
	}
}