Index: ai/advmilitary.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/advmilitary.c,v retrieving revision 1.189 diff -u -r1.189 advmilitary.c --- ai/advmilitary.c 25 Mar 2005 16:49:06 -0000 1.189 +++ ai/advmilitary.c 12 Apr 2005 14:04:57 -0000 @@ -451,6 +451,8 @@ int igwall_threat = 0; struct tile *ptile = pcity->tile; + TIMING_LOG(AIT_DANGER, TIMER_START); + memset(&danger, 0, sizeof(danger)); generate_warmap(pcity, NULL); /* generates both land and sea maps */ @@ -589,6 +591,8 @@ pcity->ai.danger = danger[0]; pcity->ai.urgency = urgency; + TIMING_LOG(AIT_DANGER, TIMER_STOP); + return urgency; } Index: ai/aicity.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/aicity.c,v retrieving revision 1.210 diff -u -r1.210 aicity.c --- ai/aicity.c 10 Apr 2005 23:55:24 -0000 1.210 +++ ai/aicity.c 12 Apr 2005 14:04:57 -0000 @@ -1190,6 +1190,7 @@ { pplayer->ai.maxbuycost = 0; + TIMING_LOG(AIT_EMERGENCY, TIMER_START); city_list_iterate(pplayer->cities, pcity) { if (CITY_EMERGENCY(pcity)) { auto_arrange_workers(pcity); /* this usually helps */ @@ -1201,23 +1202,32 @@ ai_sell_obsolete_buildings(pcity); sync_cities(); } city_list_iterate_end; + TIMING_LOG(AIT_EMERGENCY, TIMER_STOP); + TIMING_LOG(AIT_BUILDINGS, TIMER_START); ai_manage_buildings(pplayer); + TIMING_LOG(AIT_BUILDINGS, TIMER_STOP); /* Initialize the infrastructure cache, which is used shortly. */ initialize_infrastructure_cache(pplayer); city_list_iterate(pplayer->cities, pcity) { /* Note that this function mungs the seamap, but we don't care */ + TIMING_LOG(AIT_CITY_MILITARY, TIMER_START); military_advisor_choose_build(pplayer, pcity, &pcity->ai.choice); + TIMING_LOG(AIT_CITY_MILITARY, TIMER_STOP); /* Will record its findings in pcity->settler_want */ + TIMING_LOG(AIT_CITY_TERRAIN, TIMER_START); contemplate_terrain_improvements(pcity); + TIMING_LOG(AIT_CITY_TERRAIN, TIMER_STOP); + TIMING_LOG(AIT_CITY_SETTLERS, TIMER_START); if (pcity->ai.next_founder_want_recalc <= game.turn) { /* Will record its findings in pcity->founder_want */ contemplate_new_city(pcity); /* Avoid recalculating all the time.. */ pcity->ai.next_founder_want_recalc = game.turn + myrand(RECALC_SPEED) + RECALC_SPEED; - } + } + TIMING_LOG(AIT_CITY_SETTLERS, TIMER_STOP); } city_list_iterate_end; city_list_iterate(pplayer->cities, pcity) { Index: ai/aidata.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/aidata.c,v retrieving revision 1.61 diff -u -r1.61 aidata.c --- ai/aidata.c 21 Mar 2005 14:10:53 -0000 1.61 +++ ai/aidata.c 12 Apr 2005 14:04:58 -0000 @@ -168,7 +168,7 @@ **************************************************************************/ void ai_data_movemap_recalculate(void) { - TIMING_LOG(LOG_DEBUG, NULL, "Generating movemap"); + TIMING_LOG(AIT_MOVEMAP, TIMER_START); /* Clean the slate */ whole_map_iterate(ptile) { @@ -224,7 +224,7 @@ } } whole_map_iterate_end; - TIMING_LOG(LOG_DEBUG, NULL, "Done generating movemap"); + TIMING_LOG(AIT_MOVEMAP, TIMER_STOP); } /************************************************************************** @@ -398,7 +398,7 @@ /*** Threats ***/ - TIMING_LOG(LOG_DEBUG, pplayer, "Generating aidata"); + TIMING_LOG(AIT_AIDATA, TIMER_START); ai->num_continents = map.num_continents; ai->num_oceans = map.num_oceans; @@ -668,8 +668,12 @@ ai->wants_no_science = FALSE; } + TIMING_LOG(AIT_AIDATA, TIMER_STOP); + /* Government */ + TIMING_LOG(AIT_GOVERNMENT, TIMER_START); ai_best_government(pplayer); + TIMING_LOG(AIT_GOVERNMENT, TIMER_STOP); } /************************************************************************** Index: ai/aiexplorer.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/aiexplorer.c,v retrieving revision 1.9 diff -u -r1.9 aiexplorer.c --- ai/aiexplorer.c 20 Mar 2005 12:56:20 -0000 1.9 +++ ai/aiexplorer.c 12 Apr 2005 14:04:58 -0000 @@ -277,6 +277,8 @@ return FALSE; /* too dangerous */ } + TIMING_LOG(AIT_EXPLORER, TIMER_START); + pft_fill_unit_parameter(¶meter, punit); parameter.get_TB = no_fights_or_unknown; /* When exploring, even AI should pretend to not cheat. */ @@ -343,6 +345,8 @@ } pf_destroy_map(map); + TIMING_LOG(AIT_EXPLORER, TIMER_STOP); + /* Go to the best tile found. */ if (best_tile != NULL) { /* TODO: read the path off the map we made. Then we can make a path Index: ai/aihand.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/aihand.c,v retrieving revision 1.110 diff -u -r1.110 aihand.c --- ai/aihand.c 28 Mar 2005 17:14:57 -0000 1.110 +++ ai/aihand.c 12 Apr 2005 14:04:58 -0000 @@ -286,7 +286,6 @@ } if (ai->govt_reeval == 0) { - TIMING_LOG(LOG_DEBUG, pplayer, "Finding best government"); government_iterate(gov) { int val = 0; int dist, i; @@ -432,15 +431,18 @@ **************************************************************************/ void ai_do_first_activities(struct player *pplayer) { + TIMING_LOG(AIT_ALL, TIMER_START); assess_danger_player(pplayer); /* TODO: Make assess_danger save information on what is threatening * us and make ai_mange_units and Co act upon this information, trying * to eliminate the source of danger */ - TIMING_LOG(LOG_DEBUG, pplayer, "Manage units"); + TIMING_LOG(AIT_UNITS, TIMER_START); ai_manage_units(pplayer); - TIMING_LOG(LOG_DEBUG, pplayer, "All first activities done"); + TIMING_LOG(AIT_UNITS, TIMER_STOP); /* STOP. Everything else is at end of turn. */ + + TIMING_LOG(AIT_ALL, TIMER_STOP); } /************************************************************************** @@ -453,17 +455,22 @@ **************************************************************************/ void ai_do_last_activities(struct player *pplayer) { - TIMING_LOG(LOG_DEBUG, pplayer, "Manage government"); + TIMING_LOG(AIT_ALL, TIMER_START); + ai_manage_government(pplayer); - TIMING_LOG(LOG_DEBUG, pplayer, "Manage taxes"); + TIMING_LOG(AIT_TAXES, TIMER_START); ai_manage_taxes(pplayer); - TIMING_LOG(LOG_DEBUG, pplayer, "Manage cities"); + TIMING_LOG(AIT_TAXES, TIMER_STOP); + TIMING_LOG(AIT_CITIES, TIMER_START); ai_manage_cities(pplayer); - TIMING_LOG(LOG_DEBUG, pplayer, "Manage tech, space and aidata cleanup"); + TIMING_LOG(AIT_CITIES, TIMER_STOP); + TIMING_LOG(AIT_TECH, TIMER_START); ai_manage_tech(pplayer); + TIMING_LOG(AIT_TECH, TIMER_STOP); ai_manage_spaceship(pplayer); ai_data_phase_done(pplayer); - TIMING_LOG(LOG_DEBUG, pplayer, "Last activities done"); + + TIMING_LOG(AIT_ALL, TIMER_STOP); } /************************************************************************** Index: ai/ailog.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/ailog.c,v retrieving revision 1.22 diff -u -r1.22 ailog.c --- ai/ailog.c 21 Mar 2005 14:10:53 -0000 1.22 +++ ai/ailog.c 12 Apr 2005 14:04:58 -0000 @@ -17,6 +17,7 @@ #include +#include "astring.h" #include "city.h" #include "log.h" #include "shared.h" @@ -31,6 +32,9 @@ #include "aidata.h" #include "ailog.h" +static struct timer *aitimer[AIT_LAST][2]; +static int recursion[AIT_LAST]; + /* General AI logging functions */ /************************************************************************** @@ -253,36 +257,81 @@ Measure the time between the calls. Used to see where in the AI too much CPU is being used. **************************************************************************/ -void TIMING_LOG(int level, struct player *pplayer, const char *msg) +void TIMING_LOG(enum ai_timer timer, enum ai_timer_activity activity) { - char buffer[500]; - int minlevel = MIN(LOGLEVEL_BODYGUARD, level); - static struct timer *t = NULL; static int turn = -1; + int i; - if (t == NULL) { - t = new_timer_start(TIMER_CPU, TIMER_ACTIVE); - } - - if (srvarg.timing_debug) { - minlevel = LOG_NORMAL; - } else if (minlevel > fc_log_level) { - clear_timer_start(t); - return; + if (turn == -1) { + for (i = 0; i < AIT_LAST; i++) { + aitimer[i][0] = new_timer(TIMER_CPU, TIMER_ACTIVE); + aitimer[i][1] = new_timer(TIMER_CPU, TIMER_ACTIVE); + recursion[i] = 0; + } } - /* So that the first log won't be displayed ridiculously high */ - if (turn != game.turn) { + if (game.turn != turn) { turn = game.turn; - clear_timer_start(t); + for (i = 0; i < AIT_LAST; i++) { + clear_timer(aitimer[i][0]); + } + assert(activity == TIMER_START); } - my_snprintf(buffer, sizeof(buffer), "... %g seconds. %s: ", - read_timer_seconds(t), pplayer ? pplayer->name : "(all)"); - clear_timer_start(t); - cat_snprintf(buffer, sizeof(buffer), msg); - if (srvarg.timing_debug) { - notify_conn(game.est_connections, buffer); + if (activity == TIMER_START && recursion[timer] == 0) { + start_timer(aitimer[timer][0]); + start_timer(aitimer[timer][1]); + recursion[timer]++; + } else if (activity == TIMER_STOP && recursion[timer] == 1) { + stop_timer(aitimer[timer][0]); + stop_timer(aitimer[timer][1]); + recursion[timer]--; } - freelog(minlevel, buffer); +} + +/************************************************************************** + Print results +**************************************************************************/ +void TIMING_RESULTS(void) +{ + char buf[200]; + +#define OUT(text, which) \ + my_snprintf(buf, sizeof(buf), " %s: %g sec turn, %g sec game", text, \ + read_timer_seconds(aitimer[which][0]), \ + read_timer_seconds(aitimer[which][1])); \ + freelog(LOG_NORMAL, buf); \ + notify_conn(game.est_connections, buf); + + freelog(LOG_NORMAL, " --- AI timing results ---"); + notify_conn(game.est_connections, " --- AI timing results ---"); + OUT("Total AI time", AIT_ALL); + OUT("Movemap", AIT_MOVEMAP); + OUT("Units", AIT_UNITS); + OUT(" - Military", AIT_MILITARY); + OUT(" - Attack", AIT_ATTACK); + OUT(" - Defense", AIT_DEFENDERS); + OUT(" - Ferry", AIT_FERRY); + OUT(" - Rampage", AIT_RAMPAGE); + OUT(" - Bodyguard", AIT_BODYGUARD); + OUT(" - Recover", AIT_RECOVER); + OUT(" - Caravan", AIT_CARAVAN); + OUT(" - Hunter", AIT_HUNTER); + OUT(" - Airlift", AIT_AIRLIFT); + OUT(" - Diplomat", AIT_DIPLOMAT); + OUT(" - Air", AIT_AIRUNIT); + OUT(" - Explore", AIT_EXPLORER); + OUT("fstk", AIT_FSTK); + OUT("Settlers", AIT_SETTLERS); + OUT("Workers", AIT_WORKERS); + OUT("Government", AIT_GOVERNMENT); + OUT("Taxes", AIT_TAXES); + OUT("Cities", AIT_CITIES); + OUT(" - Buildings", AIT_BUILDINGS); + OUT(" - Danger", AIT_DANGER); + OUT(" - Worker want", AIT_CITY_TERRAIN); + OUT(" - Military want", AIT_CITY_MILITARY); + OUT(" - Settler want", AIT_CITY_SETTLERS); + OUT("Citizen arrange", AIT_CITIZEN_ARRANGE); + OUT("Tech", AIT_TECH); } Index: ai/ailog.h =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/ailog.h,v retrieving revision 1.11 diff -u -r1.11 ailog.h --- ai/ailog.h 20 Mar 2005 09:08:48 -0000 1.11 +++ ai/ailog.h 12 Apr 2005 14:04:58 -0000 @@ -32,6 +32,45 @@ #define LOGLEVEL_PLAYER LOG_DEBUG #define LOGLEVEL_TECH LOG_DEBUG +enum ai_timer { + AIT_ALL, + AIT_MOVEMAP, + AIT_UNITS, + AIT_SETTLERS, + AIT_WORKERS, + AIT_AIDATA, + AIT_GOVERNMENT, + AIT_TAXES, + AIT_CITIES, + AIT_CITIZEN_ARRANGE, + AIT_BUILDINGS, + AIT_DANGER, + AIT_TECH, + AIT_FSTK, + AIT_DEFENDERS, + AIT_CARAVAN, + AIT_HUNTER, + AIT_AIRLIFT, + AIT_DIPLOMAT, + AIT_AIRUNIT, + AIT_EXPLORER, + AIT_EMERGENCY, + AIT_CITY_MILITARY, + AIT_CITY_TERRAIN, + AIT_CITY_SETTLERS, + AIT_ATTACK, + AIT_MILITARY, + AIT_RECOVER, + AIT_BODYGUARD, + AIT_FERRY, + AIT_RAMPAGE, + AIT_LAST +}; + +enum ai_timer_activity { + TIMER_START, TIMER_STOP +}; + void TECH_LOG(int level, struct player *pplayer, Tech_Type_id id, const char *msg, ...) fc__attribute((format (printf, 4, 5))); @@ -43,6 +82,7 @@ void UNIT_LOG(int level, struct unit *punit, const char *msg, ...) fc__attribute((format (printf, 3, 4))); void BODYGUARD_LOG(int level, struct unit *punit, const char *msg); -void TIMING_LOG(int level, struct player *pplayer, const char *msg); +void TIMING_LOG(enum ai_timer timer, enum ai_timer_activity activity); +void TIMING_RESULTS(void); #endif /* FC__AILOG_H */ Index: ai/aitools.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/aitools.c,v retrieving revision 1.143 diff -u -r1.143 aitools.c --- ai/aitools.c 5 Apr 2005 20:36:09 -0000 1.143 +++ ai/aitools.c 12 Apr 2005 14:04:58 -0000 @@ -296,7 +296,7 @@ /* Dead unit shouldn't reach this point */ CHECK_UNIT(punit); - + return (same_pos(punit->tile, dest_tile) || is_tiles_adjacent(punit->tile, dest_tile)); } Index: ai/aiunit.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/aiunit.c,v retrieving revision 1.351 diff -u -r1.351 aiunit.c --- ai/aiunit.c 5 Apr 2005 20:36:09 -0000 1.351 +++ ai/aiunit.c 12 Apr 2005 14:04:58 -0000 @@ -699,7 +699,8 @@ { int count = punit->moves_left + 1; /* break any infinite loops */ struct pf_path *path = NULL; - + + TIMING_LOG(AIT_RAMPAGE, TIMER_START); CHECK_UNIT(punit); assert(thresh_adj <= thresh_move); @@ -718,6 +719,7 @@ assert(!path); + TIMING_LOG(AIT_RAMPAGE, TIMER_STOP); return (count >= 0); } @@ -985,6 +987,7 @@ return; } + TIMING_LOG(AIT_BODYGUARD, TIMER_START); if (unit_role_defender(punit->type)) { /* * This is a defending unit that doesn't need to stay put. @@ -1002,14 +1005,13 @@ ai_unit_new_role(punit, AIUNIT_ESCORT, acity->tile); punit->ai.charge = acity->id; BODYGUARD_LOG(LOG_DEBUG, punit, "going to defend city"); - return; } else if (aunit) { ai_unit_new_role(punit, AIUNIT_ESCORT, aunit->tile); punit->ai.charge = aunit->id; BODYGUARD_LOG(LOG_DEBUG, punit, "going to defend unit"); - return; } } + TIMING_LOG(AIT_BODYGUARD, TIMER_STOP); } /********************************************************************** @@ -1243,6 +1245,8 @@ return 0; } + TIMING_LOG(AIT_FSTK, TIMER_START); + /*** Part 1: Calculate targets ***/ /* This horrible piece of code attempts to calculate the attractiveness of * enemy cities as targets for our units, by checking how many units are @@ -1574,6 +1578,8 @@ } unit_list_iterate_end; } players_iterate_end; + TIMING_LOG(AIT_FSTK, TIMER_STOP); + return(best); } @@ -1926,6 +1932,7 @@ we must make sure that previously reserved ferry is freed. */ aiferry_clear_boat(punit); + TIMING_LOG(AIT_HUNTER, TIMER_START); /* Try hunting with this unit */ if (ai_hunter_qualify(pplayer, punit)) { int result, sanity = punit->id; @@ -1933,12 +1940,15 @@ UNIT_LOG(LOGLEVEL_HUNT, punit, "is qualified as hunter"); result = ai_hunter_manage(pplayer, punit); if (!find_unit_by_id(sanity)) { + TIMING_LOG(AIT_HUNTER, TIMER_STOP); return; /* died */ } if (result == -1) { (void) ai_hunter_manage(pplayer, punit); /* More carnage */ + TIMING_LOG(AIT_HUNTER, TIMER_STOP); return; } else if (result >= 1) { + TIMING_LOG(AIT_HUNTER, TIMER_STOP); return; /* Done moving */ } else if (punit->ai.ai_role == AIUNIT_HUNTER) { /* This should be very rare */ @@ -1947,6 +1957,7 @@ } else if (punit->ai.ai_role == AIUNIT_HUNTER) { ai_unit_new_role(punit, AIUNIT_NONE, NULL); } + TIMING_LOG(AIT_HUNTER, TIMER_STOP); /* Do we have a specific job for this unit? If not, we default * to attack. */ @@ -1958,20 +1969,28 @@ assert(FALSE); /* This is not the place for this role */ break; case AIUNIT_DEFEND_HOME: + TIMING_LOG(AIT_DEFENDERS, TIMER_START); ai_military_defend(pplayer, punit); + TIMING_LOG(AIT_DEFENDERS, TIMER_STOP); break; case AIUNIT_ATTACK: case AIUNIT_NONE: + TIMING_LOG(AIT_ATTACK, TIMER_START); ai_military_attack(pplayer, punit); + TIMING_LOG(AIT_ATTACK, TIMER_STOP); break; case AIUNIT_ESCORT: + TIMING_LOG(AIT_BODYGUARD, TIMER_START); ai_military_bodyguard(pplayer, punit); + TIMING_LOG(AIT_BODYGUARD, TIMER_STOP); break; case AIUNIT_EXPLORE: punit->ai.done = !(ai_manage_explorer(punit) && punit->moves_left > 0); break; case AIUNIT_RECOVER: + TIMING_LOG(AIT_RECOVER, TIMER_START); ai_manage_hitpoint_recovery(punit); + TIMING_LOG(AIT_RECOVER, TIMER_STOP); break; case AIUNIT_HUNTER: assert(FALSE); /* dealt with above */ @@ -2071,7 +2090,9 @@ if ((unit_flag(punit, F_DIPLOMAT)) || (unit_flag(punit, F_SPY))) { + TIMING_LOG(AIT_DIPLOMAT, TIMER_START); ai_manage_diplomat(pplayer, punit); + TIMING_LOG(AIT_DIPLOMAT, TIMER_STOP); return; } else if (unit_flag(punit, F_SETTLERS) ||unit_flag(punit, F_CITIES)) { @@ -2079,7 +2100,9 @@ return; } else if (unit_flag(punit, F_TRADE_ROUTE) || unit_flag(punit, F_HELP_WONDER)) { + TIMING_LOG(AIT_CARAVAN, TIMER_START); ai_manage_caravan(pplayer, punit); + TIMING_LOG(AIT_CARAVAN, TIMER_STOP); return; } else if (unit_has_role(punit->type, L_BARBARIAN_LEADER)) { ai_manage_barbarian_leader(pplayer, punit); @@ -2087,11 +2110,15 @@ } else if (get_transporter_capacity(punit) > 0 && !unit_flag(punit, F_MISSILE_CARRIER) && punit->ai.ai_role != AIUNIT_HUNTER) { + TIMING_LOG(AIT_FERRY, TIMER_START); ai_manage_ferryboat(pplayer, punit); + TIMING_LOG(AIT_FERRY, TIMER_STOP); return; } else if (is_air_unit(punit) && punit->ai.ai_role != AIUNIT_ESCORT) { + TIMING_LOG(AIT_AIRUNIT, TIMER_START); ai_manage_airunit(pplayer, punit); + TIMING_LOG(AIT_AIRUNIT, TIMER_STOP); return; } else if (is_heli_unit(punit)) { /* TODO: We can try using air-unit code for helicopters, just @@ -2099,7 +2126,9 @@ punit->ai.done = TRUE; /* we did our best, which was ... nothing */ return; } else if (is_military_unit(punit)) { + TIMING_LOG(AIT_MILITARY, TIMER_START); ai_manage_military(pplayer,punit); + TIMING_LOG(AIT_MILITARY, TIMER_STOP); return; } else { int id = punit->id; @@ -2176,7 +2205,9 @@ **************************************************************************/ void ai_manage_units(struct player *pplayer) { + TIMING_LOG(AIT_AIRLIFT, TIMER_START); ai_airlift(pplayer); + TIMING_LOG(AIT_AIRLIFT, TIMER_STOP); /* Clear previous orders, if desirable, here. */ unit_list_iterate(pplayer->units, punit) { Index: server/cityturn.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/cityturn.c,v retrieving revision 1.300 diff -u -r1.300 cityturn.c --- server/cityturn.c 18 Mar 2005 11:26:24 -0000 1.300 +++ server/cityturn.c 12 Apr 2005 14:04:59 -0000 @@ -188,6 +188,7 @@ pcity->server.needs_arrange = TRUE; return; } + TIMING_LOG(AIT_CITIZEN_ARRANGE, TIMER_START); /* Freeze the workers and make sure all the tiles around the city * are up to date. Then thaw, but hackishly make sure that thaw @@ -273,6 +274,7 @@ sanity_check_city(pcity); city_refresh(pcity); + TIMING_LOG(AIT_CITIZEN_ARRANGE, TIMER_STOP); } /************************************************************************** Index: server/settlers.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/settlers.c,v retrieving revision 1.223 diff -u -r1.223 settlers.c --- server/settlers.c 21 Mar 2005 12:28:00 -0000 1.223 +++ server/settlers.c 12 Apr 2005 14:04:59 -0000 @@ -1085,14 +1085,18 @@ /*** Try find some work ***/ if (unit_flag(punit, F_SETTLERS)) { + TIMING_LOG(AIT_WORKERS, TIMER_START); best_impr = evaluate_improvements(punit, &best_act, &best_tile); + TIMING_LOG(AIT_WORKERS, TIMER_STOP); } if (unit_flag(punit, F_CITIES) && pplayer->ai.control) { /* may use a boat: */ + TIMING_LOG(AIT_SETTLERS, TIMER_START); find_best_city_placement(punit, &result, TRUE, FALSE); UNIT_LOG(LOG_SETTLER, punit, "city want %d (impr want %d)", result.result, best_impr); + TIMING_LOG(AIT_SETTLERS, TIMER_STOP); if (result.result > best_impr) { if (map_get_city(result.tile)) { UNIT_LOG(LOG_SETTLER, punit, "immigrates to %s (%d, %d)", Index: server/srv_main.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/srv_main.c,v retrieving revision 1.242 diff -u -r1.242 srv_main.c --- server/srv_main.c 5 Apr 2005 20:40:47 -0000 1.242 +++ server/srv_main.c 12 Apr 2005 14:04:59 -0000 @@ -193,8 +193,6 @@ srvarg.auth_allow_guests = FALSE; srvarg.auth_allow_newusers = FALSE; - srvarg.timing_debug = FALSE; - /* initialize teams */ team_init(); Index: server/srv_main.h =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/srv_main.h,v retrieving revision 1.28 diff -u -r1.28 srv_main.h --- server/srv_main.h 22 Mar 2005 04:03:35 -0000 1.28 +++ server/srv_main.h 12 Apr 2005 14:05:00 -0000 @@ -49,8 +49,6 @@ bool auth_enabled; /* defaults to FALSE */ bool auth_allow_guests; /* defaults to TRUE */ bool auth_allow_newusers; /* defaults to TRUE */ - - bool timing_debug; }; void init_game_seed(void); Index: server/stdinhand.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/stdinhand.c,v retrieving revision 1.392 diff -u -r1.392 stdinhand.c --- server/stdinhand.c 31 Mar 2005 17:48:34 -0000 1.392 +++ server/stdinhand.c 12 Apr 2005 14:05:00 -0000 @@ -2342,13 +2342,7 @@ } } unit_list_iterate_end; } else if (strcmp(arg[0], "timing") == 0) { - if (srvarg.timing_debug) { - cmd_reply(CMD_DEBUG, caller, C_OK, _("AI timing deactivated")); - srvarg.timing_debug = FALSE; - } else { - srvarg.timing_debug = TRUE; - cmd_reply(CMD_DEBUG, caller, C_OK, _("AI timing activated")); - } + TIMING_RESULTS(); } else if (strcmp(arg[0], "unit") == 0) { int id; struct unit *punit;