Improve logging of vehicle details in CheckCaches

This commit is contained in:
Jonathan G Rennison
2019-09-18 00:46:37 +01:00
parent be0ea1b03f
commit ef9f6f769e

View File

@@ -1372,6 +1372,32 @@ void CheckCaches(bool force_check, std::function<void(const char *)> log)
} \ } \
} }
auto output_veh_info = [&](char *&p, const Vehicle *u, const Vehicle *v, uint length) {
p += seprintf(p, lastof(cclog_buffer), ": type %i, vehicle %i (%i), company %i, unit number %i, wagon %i, engine: ",
(int)u->type, u->index, v->index, (int)u->owner, v->unitnumber, length);
SetDParam(0, u->engine_type);
p = GetString(p, STR_ENGINE_NAME, lastof(cclog_buffer));
uint32 grfid = u->GetGRFID();
if (grfid) {
p += seprintf(p, lastof(cclog_buffer), ", GRF: %08X", BSWAP32(grfid));
GRFConfig *grfconfig = GetGRFConfig(grfid);
if (grfconfig) {
p += seprintf(p, lastof(cclog_buffer), ", %s, %s", grfconfig->GetName(), grfconfig->filename);
}
}
};
#define CCLOGV(...) { \
char *p = cclog_buffer + seprintf(cclog_buffer, lastof(cclog_buffer), __VA_ARGS__); \
output_veh_info(p, u, v, length); \
DEBUG(desync, 0, "%s", cclog_buffer); \
if (log) { \
log(cclog_buffer); \
} else { \
LogDesyncMsg(cclog_buffer); \
} \
}
/* Check the town caches. */ /* Check the town caches. */
std::vector<TownCache> old_town_caches; std::vector<TownCache> old_town_caches;
std::vector<CargoTypes> old_town_cargo_accepted_totals; std::vector<CargoTypes> old_town_cargo_accepted_totals;
@@ -1506,13 +1532,13 @@ void CheckCaches(bool force_check, std::function<void(const char *)> log)
uint length = 0; uint length = 0;
for (const Vehicle *u = v; u != nullptr; u = u->Next()) { for (const Vehicle *u = v; u != nullptr; u = u->Next()) {
if (u->IsGroundVehicle() && (HasBit(u->GetGroundVehicleFlags(), GVF_GOINGUP_BIT) || HasBit(u->GetGroundVehicleFlags(), GVF_GOINGDOWN_BIT)) && u->GetGroundVehicleCache()->cached_slope_resistance && HasBit(v->vcache.cached_veh_flags, VCF_GV_ZERO_SLOPE_RESIST)) { if (u->IsGroundVehicle() && (HasBit(u->GetGroundVehicleFlags(), GVF_GOINGUP_BIT) || HasBit(u->GetGroundVehicleFlags(), GVF_GOINGDOWN_BIT)) && u->GetGroundVehicleCache()->cached_slope_resistance && HasBit(v->vcache.cached_veh_flags, VCF_GV_ZERO_SLOPE_RESIST)) {
CCLOG("VCF_GV_ZERO_SLOPE_RESIST set incorrectly (1): type %i, vehicle %i, company %i, unit number %i, wagon %i", (int)v->type, v->index, (int)v->owner, v->unitnumber, length); CCLOGV("VCF_GV_ZERO_SLOPE_RESIST set incorrectly (1)");
} }
if (u->type == VEH_TRAIN && u->breakdown_ctr != 0 && !HasBit(Train::From(v)->flags, VRF_CONSIST_BREAKDOWN)) { if (u->type == VEH_TRAIN && u->breakdown_ctr != 0 && !HasBit(Train::From(v)->flags, VRF_CONSIST_BREAKDOWN)) {
CCLOG("VRF_CONSIST_BREAKDOWN incorrectly not set: type %i, vehicle %i, company %i, unit number %i, wagon %i", (int)v->type, v->index, (int)v->owner, v->unitnumber, length); CCLOGV("VRF_CONSIST_BREAKDOWN incorrectly not set");
} }
if (u->type == VEH_TRAIN && ((Train::From(u)->track & TRACK_BIT_WORMHOLE && !(Train::From(u)->vehstatus & VS_HIDDEN)) || Train::From(u)->track == TRACK_BIT_DEPOT) && !HasBit(Train::From(v)->flags, VRF_CONSIST_SPEED_REDUCTION)) { if (u->type == VEH_TRAIN && ((Train::From(u)->track & TRACK_BIT_WORMHOLE && !(Train::From(u)->vehstatus & VS_HIDDEN)) || Train::From(u)->track == TRACK_BIT_DEPOT) && !HasBit(Train::From(v)->flags, VRF_CONSIST_SPEED_REDUCTION)) {
CCLOG("VRF_CONSIST_SPEED_REDUCTION incorrectly not set: type %i, vehicle %i, company %i, unit number %i, wagon %i", (int)v->type, v->index, (int)v->owner, v->unitnumber, length); CCLOGV("VRF_CONSIST_SPEED_REDUCTION incorrectly not set");
} }
length++; length++;
} }
@@ -1566,70 +1592,69 @@ void CheckCaches(bool force_check, std::function<void(const char *)> log)
for (const Vehicle *u = v; u != nullptr; u = u->Next()) { for (const Vehicle *u = v; u != nullptr; u = u->Next()) {
FillNewGRFVehicleCache(u); FillNewGRFVehicleCache(u);
if (memcmp(&grf_cache[length], &u->grf_cache, sizeof(NewGRFCache)) != 0) { if (memcmp(&grf_cache[length], &u->grf_cache, sizeof(NewGRFCache)) != 0) {
CCLOG("newgrf cache mismatch: type %i, vehicle %i, company %i, unit number %i, wagon %i", (int)v->type, v->index, (int)v->owner, v->unitnumber, length); CCLOGV("newgrf cache mismatch");
} }
if (veh_cache[length].cached_max_speed != u->vcache.cached_max_speed || veh_cache[length].cached_cargo_age_period != u->vcache.cached_cargo_age_period || if (veh_cache[length].cached_max_speed != u->vcache.cached_max_speed || veh_cache[length].cached_cargo_age_period != u->vcache.cached_cargo_age_period ||
veh_cache[length].cached_vis_effect != u->vcache.cached_vis_effect || HasBit(veh_cache[length].cached_veh_flags ^ u->vcache.cached_veh_flags, VCF_LAST_VISUAL_EFFECT)) { veh_cache[length].cached_vis_effect != u->vcache.cached_vis_effect || HasBit(veh_cache[length].cached_veh_flags ^ u->vcache.cached_veh_flags, VCF_LAST_VISUAL_EFFECT)) {
CCLOG("vehicle cache mismatch: %c%c%c%c, type %i, vehicle %i, company %i, unit number %i, wagon %i", CCLOGV("vehicle cache mismatch: %c%c%c%c",
veh_cache[length].cached_max_speed != u->vcache.cached_max_speed ? 'm' : '-', veh_cache[length].cached_max_speed != u->vcache.cached_max_speed ? 'm' : '-',
veh_cache[length].cached_cargo_age_period != u->vcache.cached_cargo_age_period ? 'c' : '-', veh_cache[length].cached_cargo_age_period != u->vcache.cached_cargo_age_period ? 'c' : '-',
veh_cache[length].cached_vis_effect != u->vcache.cached_vis_effect ? 'v' : '-', veh_cache[length].cached_vis_effect != u->vcache.cached_vis_effect ? 'v' : '-',
HasBit(veh_cache[length].cached_veh_flags ^ u->vcache.cached_veh_flags, VCF_LAST_VISUAL_EFFECT) ? 'l' : '-', HasBit(veh_cache[length].cached_veh_flags ^ u->vcache.cached_veh_flags, VCF_LAST_VISUAL_EFFECT) ? 'l' : '-');
(int)v->type, v->index, (int)v->owner, v->unitnumber, length);
} }
if (u->IsGroundVehicle() && (HasBit(u->GetGroundVehicleFlags(), GVF_GOINGUP_BIT) || HasBit(u->GetGroundVehicleFlags(), GVF_GOINGDOWN_BIT)) && u->GetGroundVehicleCache()->cached_slope_resistance && HasBit(v->vcache.cached_veh_flags, VCF_GV_ZERO_SLOPE_RESIST)) { if (u->IsGroundVehicle() && (HasBit(u->GetGroundVehicleFlags(), GVF_GOINGUP_BIT) || HasBit(u->GetGroundVehicleFlags(), GVF_GOINGDOWN_BIT)) && u->GetGroundVehicleCache()->cached_slope_resistance && HasBit(v->vcache.cached_veh_flags, VCF_GV_ZERO_SLOPE_RESIST)) {
CCLOG("VCF_GV_ZERO_SLOPE_RESIST set incorrectly (2): type %i, vehicle %i, company %i, unit number %i, wagon %i", (int)v->type, v->index, (int)v->owner, v->unitnumber, length); CCLOGV("VCF_GV_ZERO_SLOPE_RESIST set incorrectly (2)");
} }
if (veh_old[length]->acceleration != u->acceleration) { if (veh_old[length]->acceleration != u->acceleration) {
CCLOG("acceleration mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("acceleration mismatch");
} }
if (veh_old[length]->breakdown_chance != u->breakdown_chance) { if (veh_old[length]->breakdown_chance != u->breakdown_chance) {
CCLOG("breakdown_chance mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("breakdown_chance mismatch");
} }
if (veh_old[length]->breakdown_ctr != u->breakdown_ctr) { if (veh_old[length]->breakdown_ctr != u->breakdown_ctr) {
CCLOG("breakdown_ctr mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("breakdown_ctr mismatch");
} }
if (veh_old[length]->breakdown_delay != u->breakdown_delay) { if (veh_old[length]->breakdown_delay != u->breakdown_delay) {
CCLOG("breakdown_delay mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("breakdown_delay mismatch");
} }
if (veh_old[length]->breakdowns_since_last_service != u->breakdowns_since_last_service) { if (veh_old[length]->breakdowns_since_last_service != u->breakdowns_since_last_service) {
CCLOG("breakdowns_since_last_service mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("breakdowns_since_last_service mismatch");
} }
if (veh_old[length]->breakdown_severity != u->breakdown_severity) { if (veh_old[length]->breakdown_severity != u->breakdown_severity) {
CCLOG("breakdown_severity mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("breakdown_severity mismatch");
} }
if (veh_old[length]->breakdown_type != u->breakdown_type) { if (veh_old[length]->breakdown_type != u->breakdown_type) {
CCLOG("breakdown_type mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("breakdown_type mismatch");
} }
if (veh_old[length]->vehicle_flags != u->vehicle_flags) { if (veh_old[length]->vehicle_flags != u->vehicle_flags) {
CCLOG("vehicle_flags mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("vehicle_flags mismatch");
} }
switch (u->type) { switch (u->type) {
case VEH_TRAIN: case VEH_TRAIN:
if (memcmp(&gro_cache[length], &Train::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) { if (memcmp(&gro_cache[length], &Train::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) {
CCLOG("train ground vehicle cache mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("train ground vehicle cache mismatch");
} }
if (memcmp(&tra_cache[length], &Train::From(u)->tcache, sizeof(TrainCache)) != 0) { if (memcmp(&tra_cache[length], &Train::From(u)->tcache, sizeof(TrainCache)) != 0) {
CCLOG("train cache mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("train cache mismatch");
} }
if (Train::From(veh_old[length])->railtype != Train::From(u)->railtype) { if (Train::From(veh_old[length])->railtype != Train::From(u)->railtype) {
CCLOG("railtype mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("railtype mismatch");
} }
if (Train::From(veh_old[length])->compatible_railtypes != Train::From(u)->compatible_railtypes) { if (Train::From(veh_old[length])->compatible_railtypes != Train::From(u)->compatible_railtypes) {
CCLOG("compatible_railtypes mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("compatible_railtypes mismatch");
} }
if (Train::From(veh_old[length])->flags != Train::From(u)->flags) { if (Train::From(veh_old[length])->flags != Train::From(u)->flags) {
CCLOG("flags mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("train flags mismatch");
} }
break; break;
case VEH_ROAD: case VEH_ROAD:
if (memcmp(&gro_cache[length], &RoadVehicle::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) { if (memcmp(&gro_cache[length], &RoadVehicle::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) {
CCLOG("road vehicle ground vehicle cache mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("road vehicle ground vehicle cache mismatch");
} }
break; break;
case VEH_AIRCRAFT: case VEH_AIRCRAFT:
if (memcmp(&air_cache[length], &Aircraft::From(u)->acache, sizeof(AircraftCache)) != 0) { if (memcmp(&air_cache[length], &Aircraft::From(u)->acache, sizeof(AircraftCache)) != 0) {
CCLOG("Aircraft vehicle cache mismatch: vehicle %i, company %i, unit number %i, wagon %i", v->index, (int)v->owner, v->unitnumber, length); CCLOGV("Aircraft vehicle cache mismatch");
} }
break; break;
default: default:
@@ -1702,6 +1727,7 @@ void CheckCaches(bool force_check, std::function<void(const char *)> log)
CCLOG("Order destination refcount map not valid"); CCLOG("Order destination refcount map not valid");
} }
#undef CCLOGV
#undef CCLOG #undef CCLOG
} }