Skip to content

Commit b15a708

Browse files
sshanespektor56
authored andcommitted
process replay: clean up common code (commaai#24855)
* regen and process replay clean up * test_fuzzy actually uses fingerprint hardcoding fix * revert * revert * this can be a url or path so just print full variable
1 parent 6695d3a commit b15a708

File tree

4 files changed

+24
-47
lines changed

4 files changed

+24
-47
lines changed

selfdrive/test/process_replay/process_replay.py

+14-21
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ def replay_process(cfg, lr, fingerprint=None):
344344
else:
345345
return cpp_replay_process(cfg, lr, fingerprint)
346346

347-
def setup_env(simulation=False):
347+
def setup_env(simulation=False, CP=None):
348348
params = Params()
349349
params.clear_all()
350350
params.put_bool("OpenpilotEnabledToggle", True)
@@ -355,12 +355,22 @@ def setup_env(simulation=False):
355355

356356
os.environ["NO_RADAR_SLEEP"] = "1"
357357
os.environ["REPLAY"] = "1"
358+
os.environ['SKIP_FW_QUERY'] = ""
359+
os.environ['FINGERPRINT'] = ""
358360

359361
if simulation:
360362
os.environ["SIMULATION"] = "1"
361363
elif "SIMULATION" in os.environ:
362364
del os.environ["SIMULATION"]
363365

366+
# Regen or python process
367+
if CP is not None:
368+
if CP.fingerprintSource == "fw" and CP.carFingerprint in FW_VERSIONS:
369+
params.put("CarParamsCache", CP.as_builder().to_bytes())
370+
else:
371+
os.environ['SKIP_FW_QUERY'] = "1"
372+
os.environ['FINGERPRINT'] = CP.carFingerprint
373+
364374
def python_replay_process(cfg, lr, fingerprint=None):
365375
sub_sockets = [s for _, sub in cfg.pub_sub.items() for s in sub]
366376
pub_sockets = [s for s in cfg.pub_sub.keys() if s != 'can']
@@ -375,30 +385,13 @@ def python_replay_process(cfg, lr, fingerprint=None):
375385
all_msgs = sorted(lr, key=lambda msg: msg.logMonoTime)
376386
pub_msgs = [msg for msg in all_msgs if msg.which() in list(cfg.pub_sub.keys())]
377387

378-
setup_env()
379-
380-
# TODO: remove after getting new route for civic & accord
381-
migration = {
382-
"HONDA CIVIC 2016 TOURING": "HONDA CIVIC 2016",
383-
"HONDA ACCORD 2018 SPORT 2T": "HONDA ACCORD 2018",
384-
"HONDA ACCORD 2T 2018": "HONDA ACCORD 2018",
385-
"Mazda CX-9 2021": "MAZDA CX-9 2021",
386-
}
387-
388388
if fingerprint is not None:
389389
os.environ['SKIP_FW_QUERY'] = "1"
390390
os.environ['FINGERPRINT'] = fingerprint
391+
setup_env()
391392
else:
392-
os.environ['SKIP_FW_QUERY'] = ""
393-
os.environ['FINGERPRINT'] = ""
394-
for msg in lr:
395-
if msg.which() == 'carParams':
396-
car_fingerprint = migration.get(msg.carParams.carFingerprint, msg.carParams.carFingerprint)
397-
if msg.carParams.fingerprintSource == "fw" and (car_fingerprint in FW_VERSIONS):
398-
Params().put("CarParamsCache", msg.carParams.as_builder().to_bytes())
399-
else:
400-
os.environ['SKIP_FW_QUERY'] = "1"
401-
os.environ['FINGERPRINT'] = car_fingerprint
393+
CP = [m for m in lr if m.which() == 'carParams'][0].carParams
394+
setup_env(CP=CP)
402395

403396
assert(type(managed_processes[cfg.proc_name]) is PythonProcess)
404397
managed_processes[cfg.proc_name].prepare()

selfdrive/test/process_replay/regen.py

+1-18
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
from common.params import Params
1616
from common.realtime import Ratekeeper, DT_MDL, DT_DMON, sec_since_boot
1717
from common.transformations.camera import eon_f_frame_size, eon_d_frame_size, tici_f_frame_size, tici_d_frame_size
18-
from selfdrive.car.fingerprints import FW_VERSIONS
1918
from selfdrive.manager.process import ensure_running
2019
from selfdrive.manager.process_config import managed_processes
2120
from selfdrive.test.process_replay.process_replay import FAKEDATA, setup_env, check_enabled
@@ -183,28 +182,12 @@ def regen_segment(lr, frs=None, outdir=FAKEDATA, disable_tqdm=False):
183182
if frs is None:
184183
frs = dict()
185184

186-
setup_env()
187185
params = Params()
188-
189186
os.environ["LOG_ROOT"] = outdir
190-
os.environ['SKIP_FW_QUERY'] = ""
191-
os.environ['FINGERPRINT'] = ""
192-
193-
# TODO: remove after getting new route for Mazda
194-
fp_migration = {
195-
"Mazda CX-9 2021": "MAZDA CX-9 2021",
196-
}
197-
# TODO: remove after getting new route for Subaru
198-
fingerprint_problem = ["SUBARU IMPREZA LIMITED 2019"]
199187

200188
for msg in lr:
201189
if msg.which() == 'carParams':
202-
car_fingerprint = fp_migration.get(msg.carParams.carFingerprint, msg.carParams.carFingerprint)
203-
if len(msg.carParams.carFw) and (car_fingerprint in FW_VERSIONS) and (car_fingerprint not in fingerprint_problem):
204-
params.put("CarParamsCache", msg.carParams.as_builder().to_bytes())
205-
else:
206-
os.environ['SKIP_FW_QUERY'] = "1"
207-
os.environ['FINGERPRINT'] = car_fingerprint
190+
setup_env(CP=msg.carParams)
208191
elif msg.which() == 'liveCalibration':
209192
params.put("CalibrationParams", msg.as_builder().to_bytes())
210193

selfdrive/test/process_replay/regen_all.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,28 @@
88
from selfdrive.test.process_replay.helpers import OpenpilotPrefix
99
from selfdrive.test.process_replay.regen import regen_and_save
1010
from selfdrive.test.process_replay.test_processes import FAKEDATA, original_segments as segments
11+
from tools.lib.route import SegmentName
1112

12-
def regen_job(segment):
13+
14+
def regen_job(segment, disable_tqdm):
1315
with OpenpilotPrefix():
14-
route = segment[1].rsplit('--', 1)[0]
15-
sidx = int(segment[1].rsplit('--', 1)[1])
16-
fake_dongle_id = 'regen' + ''.join(random.choice('0123456789ABCDEF') for i in range(11))
16+
sn = SegmentName(segment[1])
17+
fake_dongle_id = 'regen' + ''.join(random.choice('0123456789ABCDEF') for _ in range(11))
1718
try:
18-
relr = regen_and_save(route, sidx, upload=True, use_route_meta=False, outdir=os.path.join(FAKEDATA, fake_dongle_id), disable_tqdm=True)
19+
relr = regen_and_save(sn.route_name.canonical_name, sn.segment_num, upload=True, use_route_meta=False, outdir=os.path.join(FAKEDATA, fake_dongle_id), disable_tqdm=disable_tqdm)
1920
relr = '|'.join(relr.split('/')[-2:])
2021
return f' ("{segment[0]}", "{relr}"), '
2122
except Exception as e:
2223
return f" {segment} failed: {str(e)}"
2324

25+
2426
if __name__ == "__main__":
2527
parser = argparse.ArgumentParser(description="Generate new segments from old ones")
2628
parser.add_argument("-j", "--jobs", type=int, default=1)
2729
args = parser.parse_args()
2830

2931
with concurrent.futures.ProcessPoolExecutor(max_workers=args.jobs) as pool:
30-
p = list(pool.map(regen_job, segments))
32+
p = list(pool.map(regen_job, segments, [args.jobs > 1] * args.jobs))
3133
msg = "Copy these new segments into test_processes.py:"
3234
for seg in tqdm(p, desc="Generating segments"):
3335
msg += "\n" + str(seg)

selfdrive/test/process_replay/test_processes.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ def test_process(cfg, lr, ref_log_path, ignore_fields=None, ignore_msgs=None):
9393
# check to make sure openpilot is engaged in the route
9494
if cfg.proc_name == "controlsd":
9595
if not check_enabled(log_msgs):
96-
segment = os.path.basename(ref_log_path).split("/")[-1].split("_")[0]
97-
raise Exception(f"Route never enabled: {segment}")
96+
raise Exception(f"Route never enabled: {ref_log_path}")
9897

9998
try:
10099
return compare_logs(ref_log_msgs, log_msgs, ignore_fields + cfg.ignore, ignore_msgs, cfg.tolerance), log_msgs

0 commit comments

Comments
 (0)