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); }
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); }
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"); } } }