Freeciv-3.2
Loading...
Searching...
No Matches
srv_log.c
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12***********************************************************************/
13
14#ifdef HAVE_CONFIG_H
15#include <fc_config.h>
16#endif
17
18#include <stdarg.h>
19
20/* utility */
21#include "astring.h"
22#include "log.h"
23#include "shared.h"
24#include "support.h"
25#include "timing.h"
26
27/* common */
28#include "ai.h"
29#include "city.h"
30#include "game.h"
31#include "map.h"
32#include "nation.h"
33#include "unit.h"
34
35/* server */
36#include "notify.h"
37#include "srv_main.h"
38
39/* server/advisors */
40#include "advdata.h"
41
42#include "srv_log.h"
43
44static struct timer *aitimer[AIT_LAST][2];
45static int recursion[AIT_LAST];
46
47/* General AI logging functions */
48
49/**********************************************************************/
53void real_city_log(const char *file, const char *function, int line,
54 enum log_level level, bool notify,
55 const struct city *pcity, const char *msg, ...)
56{
57 char buffer[500];
58 char buffer2[500];
59 va_list ap;
60 char aibuf[500] = "\0";
61
62 CALL_PLR_AI_FUNC(log_fragment_city, city_owner(pcity), aibuf, sizeof(aibuf), pcity);
63
64 fc_snprintf(buffer, sizeof(buffer), "%s %s(%d,%d) (s%d) {%s} ",
66 city_name_get(pcity),
67 TILE_XY(pcity->tile), city_size_get(pcity),
68 aibuf);
69
70 va_start(ap, msg);
71 fc_vsnprintf(buffer2, sizeof(buffer2), msg, ap);
72 va_end(ap);
73
74 cat_snprintf(buffer, sizeof(buffer), "%s", buffer2);
75 if (notify) {
76 notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
77 }
78 do_log(file, function, line, FALSE, level, "%s", buffer);
79}
80
81/**********************************************************************/
87void real_unit_log(const char *file, const char *function, int line,
88 enum log_level level, bool notify,
89 const struct unit *punit, const char *msg, ...)
90{
91 char buffer[500];
92 char buffer2[500];
93 va_list ap;
94 int gx, gy;
95 char aibuf[500] = "\0";
96
97 CALL_PLR_AI_FUNC(log_fragment_unit, unit_owner(punit), aibuf, sizeof(aibuf), punit);
98
99 if (punit->goto_tile) {
101 } else {
102 gx = gy = -1;
103 }
104
105 fc_snprintf(buffer, sizeof(buffer),
106 "%s %s(%d) %s (%d,%d)->(%d,%d){%s} ",
109 punit->id,
112 gx, gy, aibuf);
113
114 va_start(ap, msg);
115 fc_vsnprintf(buffer2, sizeof(buffer2), msg, ap);
116 va_end(ap);
117
118 cat_snprintf(buffer, sizeof(buffer), "%s", buffer2);
119 if (notify) {
120 notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
121 }
122 do_log(file, function, line, FALSE, level, "%s", buffer);
123}
124
125/**********************************************************************/
130{
131 static int turn = -1;
132
133 if (game.info.turn != turn) {
134 int i;
135
136 turn = game.info.turn;
137 for (i = 0; i < AIT_LAST; i++) {
138 timer_clear(aitimer[i][0]);
139 }
140 fc_assert(activity == TIMER_START);
141 }
142
143 if (activity == TIMER_START && recursion[timer] == 0) {
146 recursion[timer]++;
147 } else if (activity == TIMER_STOP && recursion[timer] == 1) {
150 recursion[timer]--;
151 }
152}
153
154/**********************************************************************/
158{
159 char buf[200];
160
161#ifdef LOG_TIMERS
162
163#define AILOG_OUT(text, which) \
164 fc_snprintf(buf, sizeof(buf), " %s: %g sec turn, %g sec game", text, \
165 timer_read_seconds(aitimer[which][0]), \
166 timer_read_seconds(aitimer[which][1])); \
167 log_test("%s", buf); \
168 notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buf);
169
170 log_test(" --- AI timing results ---");
171
172#else /* LOG_TIMERS */
173
174#define AILOG_OUT(text, which) \
175 fc_snprintf(buf, sizeof(buf), " %s: %g sec turn, %g sec game", text, \
176 timer_read_seconds(aitimer[which][0]), \
177 timer_read_seconds(aitimer[which][1])); \
178 notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buf);
179
180#endif /* LOG_TIMERS */
181
183 " --- AI timing results ---");
184 AILOG_OUT("Total AI time", AIT_ALL);
185 AILOG_OUT("Movemap", AIT_MOVEMAP);
186 AILOG_OUT("Units", AIT_UNITS);
187 AILOG_OUT(" - Military", AIT_MILITARY);
188 AILOG_OUT(" - Attack", AIT_ATTACK);
189 AILOG_OUT(" - Defense", AIT_DEFENDERS);
190 AILOG_OUT(" - Ferry", AIT_FERRY);
191 AILOG_OUT(" - Rampage", AIT_RAMPAGE);
192 AILOG_OUT(" - Bodyguard", AIT_BODYGUARD);
193 AILOG_OUT(" - Recover", AIT_RECOVER);
194 AILOG_OUT(" - Caravan", AIT_CARAVAN);
195 AILOG_OUT(" - Hunter", AIT_HUNTER);
196 AILOG_OUT(" - Airlift", AIT_AIRLIFT);
197 AILOG_OUT(" - Diplomat", AIT_DIPLOMAT);
198 AILOG_OUT(" - Air", AIT_AIRUNIT);
199 AILOG_OUT(" - Explore", AIT_EXPLORER);
200 AILOG_OUT("fstk", AIT_FSTK);
201 AILOG_OUT("Settlers", AIT_SETTLERS);
202 AILOG_OUT("Workers", AIT_WORKERS);
203 AILOG_OUT("Government", AIT_GOVERNMENT);
204 AILOG_OUT("Taxes", AIT_TAXES);
205 AILOG_OUT("Cities", AIT_CITIES);
206 AILOG_OUT(" - Buildings", AIT_BUILDINGS);
207 AILOG_OUT(" - Danger", AIT_DANGER);
208 AILOG_OUT(" - Worker want", AIT_CITY_TERRAIN);
209 AILOG_OUT(" - Military want", AIT_CITY_MILITARY);
210 AILOG_OUT(" - Settler want", AIT_CITY_SETTLERS);
211 AILOG_OUT("Citizen arrange", AIT_CITIZEN_ARRANGE);
212 AILOG_OUT("Tech", AIT_TECH);
213}
214
215/**********************************************************************/
219{
220 int i;
221
222 for (i = 0; i < AIT_LAST; i++) {
223 char buf[60];
224
225 fc_snprintf(buf, sizeof(buf), "AI type %d turn", i);
227 fc_snprintf(buf, sizeof(buf), "AI type %d game", i);
229 recursion[i] = 0;
230 }
231}
232
233/**********************************************************************/
237{
238 int i;
239
240 for (i = 0; i < AIT_LAST; i++) {
243 }
244}
#define CALL_PLR_AI_FUNC(_func, _player,...)
Definition ai.h:377
const char * city_name_get(const struct city *pcity)
Definition city.c:1137
static citizens city_size_get(const struct city *pcity)
Definition city.h:569
#define city_owner(_pcity_)
Definition city.h:563
char * incite_cost
Definition comments.c:75
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit * punit
Definition dialogs_g.h:74
const struct ft_color ftc_log
struct civ_game game
Definition game.c:62
void do_log(const char *file, const char *function, int line, bool print_from_where, enum log_level level, const char *message,...)
Definition log.c:514
#define log_test
Definition log.h:136
#define fc_assert(condition)
Definition log.h:176
log_level
Definition log.h:28
#define index_to_map_pos(pmap_x, pmap_y, mindex)
Definition map.h:233
const char * nation_rule_name(const struct nation_type *pnation)
Definition nation.c:138
struct nation_type * nation_of_unit(const struct unit *punit)
Definition nation.c:463
struct nation_type * nation_of_city(const struct city *pcity)
Definition nation.c:454
void notify_conn(struct conn_list *dest, const struct tile *ptile, enum event_type event, const struct ft_color color, const char *format,...)
Definition notify.c:238
struct setting_list * level[OLEVELS_NUM]
Definition settings.c:190
void timing_log_init(void)
Definition srv_log.c:218
void real_city_log(const char *file, const char *function, int line, enum log_level level, bool notify, const struct city *pcity, const char *msg,...)
Definition srv_log.c:53
static struct timer * aitimer[AIT_LAST][2]
Definition srv_log.c:44
static int recursion[AIT_LAST]
Definition srv_log.c:45
void real_unit_log(const char *file, const char *function, int line, enum log_level level, bool notify, const struct unit *punit, const char *msg,...)
Definition srv_log.c:87
void timing_log_free(void)
Definition srv_log.c:236
void timing_results_real(void)
Definition srv_log.c:157
#define AILOG_OUT(text, which)
void timing_log_real(enum ai_timer timer, enum ai_timer_activity activity)
Definition srv_log.c:129
ai_timer
Definition srv_log.h:40
@ AIT_RECOVER
Definition srv_log.h:68
@ AIT_FSTK
Definition srv_log.h:54
@ AIT_GOVERNMENT
Definition srv_log.h:47
@ AIT_CARAVAN
Definition srv_log.h:56
@ AIT_RAMPAGE
Definition srv_log.h:71
@ AIT_CITY_MILITARY
Definition srv_log.h:63
@ AIT_BUILDINGS
Definition srv_log.h:51
@ AIT_TAXES
Definition srv_log.h:48
@ AIT_ATTACK
Definition srv_log.h:66
@ AIT_HUNTER
Definition srv_log.h:57
@ AIT_BODYGUARD
Definition srv_log.h:69
@ AIT_DEFENDERS
Definition srv_log.h:55
@ AIT_SETTLERS
Definition srv_log.h:44
@ AIT_UNITS
Definition srv_log.h:43
@ AIT_CITIES
Definition srv_log.h:49
@ AIT_AIRUNIT
Definition srv_log.h:60
@ AIT_EXPLORER
Definition srv_log.h:61
@ AIT_TECH
Definition srv_log.h:53
@ AIT_CITY_TERRAIN
Definition srv_log.h:64
@ AIT_FERRY
Definition srv_log.h:70
@ AIT_MILITARY
Definition srv_log.h:67
@ AIT_ALL
Definition srv_log.h:41
@ AIT_MOVEMAP
Definition srv_log.h:42
@ AIT_WORKERS
Definition srv_log.h:45
@ AIT_DIPLOMAT
Definition srv_log.h:59
@ AIT_LAST
Definition srv_log.h:72
@ AIT_AIRLIFT
Definition srv_log.h:58
@ AIT_CITIZEN_ARRANGE
Definition srv_log.h:50
@ AIT_CITY_SETTLERS
Definition srv_log.h:65
@ AIT_DANGER
Definition srv_log.h:52
ai_timer_activity
Definition srv_log.h:75
@ TIMER_STOP
Definition srv_log.h:76
@ TIMER_START
Definition srv_log.h:76
Definition city.h:320
struct tile * tile
Definition city.h:322
struct packet_game_info info
Definition game.h:89
Definition timing.c:81
Definition unit.h:138
enum unit_activity activity
Definition unit.h:157
int id
Definition unit.h:145
struct tile * goto_tile
Definition unit.h:155
int fc_snprintf(char *str, size_t n, const char *format,...)
Definition support.c:974
int cat_snprintf(char *str, size_t n, const char *format,...)
Definition support.c:1000
int fc_vsnprintf(char *str, size_t n, const char *format, va_list ap)
Definition support.c:900
#define FALSE
Definition support.h:47
#define tile_index(_pt_)
Definition tile.h:88
#define TILE_XY(ptile)
Definition tile.h:43
void timer_clear(struct timer *t)
Definition timing.c:252
void timer_destroy(struct timer *t)
Definition timing.c:208
void timer_start(struct timer *t)
Definition timing.c:264
void timer_stop(struct timer *t)
Definition timing.c:308
struct timer * timer_new(enum timer_timetype type, enum timer_use use, const char *name)
Definition timing.c:160
@ TIMER_ACTIVE
Definition timing.h:46
@ TIMER_CPU
Definition timing.h:41
const char * get_activity_text(enum unit_activity activity)
Definition unit.c:614
#define unit_tile(_pu)
Definition unit.h:397
#define unit_owner(_pu)
Definition unit.h:396
const char * unit_rule_name(const struct unit *punit)
Definition unittype.c:1587