Skip to content

Commit e88d2d6

Browse files
committed
build_release_files: name the prediction variables for what they hold
prediction, predict_flash and usage were three near-identical names for three different things, and two of them were tuples read by index. Name them by their role instead: baseline_flash and flash_region for what the first language's build establishes, baseline_translation_bytes and translation_growth for the translation data, predicted_flash and actual_flash for the two sides of the check. flash_usage() returns two values so every caller unpacks them. Say flash size in the messages too: Predicted flash size for itsybitsy_m0_express es: 253527 of 253696 bytes (169 free, +1479 vs en_US) -> build Flash size check itsybitsy_m0_express es: predicted 253527, actual 253504, error +23
1 parent a09cc62 commit e88d2d6

1 file changed

Lines changed: 33 additions & 30 deletions

File tree

tools/build_release_files.py

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,13 @@
6161

6262

6363
def flash_usage(port, build_dir):
64-
"""Return (used, region) bytes of the firmware flash region, or None if unknown."""
64+
"""Return (used, region) bytes of the firmware flash region, or (None, None) if unknown."""
6565
try:
6666
with open(f"../ports/{port}/{build_dir}/firmware.size.json", "r") as f:
6767
firmware = json.load(f)
6868
return firmware["used_flash"], firmware["firmware_region"]
6969
except FileNotFoundError:
70-
return None
70+
return None, None
7171

7272

7373
def c_array_bytes(path):
@@ -157,10 +157,12 @@ def generate_translation(port, board, build_dir, language):
157157
languages.remove(LANGUAGE_FIRST)
158158
languages.insert(0, LANGUAGE_FIRST)
159159

160-
# Set after the first language when its flash usage is known and too tight to skip
161-
# the other languages outright.
162-
predict_flash = None
163-
first_language_bytes = 0
160+
# Set after the first language's build when its flash usage is known and too tight to
161+
# skip the other languages outright: the flash that build used, the flash the region
162+
# holds, and how many of the used bytes are translation data.
163+
baseline_flash = None
164+
flash_region = 0
165+
baseline_translation_bytes = 0
164166

165167
for language in languages:
166168
bin_directory = "../bin/{board}/{language}".format(board=board, language=language)
@@ -191,25 +193,25 @@ def generate_translation(port, board, build_dir, language):
191193

192194
artifacts = [os.path.join(build_dir, "firmware." + extension) for extension in extensions]
193195

194-
prediction = None
195-
if predict_flash is not None and language != LANGUAGE_FIRST and not clean_build:
196+
predicted_flash = None
197+
if baseline_flash is not None and language != LANGUAGE_FIRST and not clean_build:
196198
if generate_translation(board_info["port"], board, build_dir, language):
197-
delta = (
199+
translation_growth = (
198200
translation_bytes(board_info["port"], build_dir, language)
199-
- first_language_bytes
201+
- baseline_translation_bytes
200202
)
201-
predicted = predict_flash[0] + delta
202-
fits = predicted + LANGUAGE_MARGIN <= predict_flash[1]
203+
predicted_flash = baseline_flash + translation_growth
204+
fits = predicted_flash + LANGUAGE_MARGIN <= flash_region
203205
skip = fits and LANGUAGE_PREDICT == "skip"
204-
prediction = predicted
205206
print(
206-
"Predict {board} for {language}: {predicted} of {region} bytes ({free} free, {delta:+d} vs {first}) -> {action}".format(
207+
"Predicted flash size for {board} {language}: {predicted} of {region} bytes"
208+
" ({free} free, {growth:+d} vs {first}) -> {action}".format(
207209
board=board,
208210
language=language,
209-
predicted=predicted,
210-
region=predict_flash[1],
211-
free=predict_flash[1] - predicted,
212-
delta=delta,
211+
predicted=predicted_flash,
212+
region=flash_region,
213+
free=flash_region - predicted_flash,
214+
growth=translation_growth,
213215
first=LANGUAGE_FIRST,
214216
action="skip" if skip else "build",
215217
),
@@ -273,32 +275,33 @@ def generate_translation(port, board, build_dir, language):
273275
print(make_result.stdout.decode("utf-8"))
274276
print(other_output)
275277

276-
if prediction is not None and make_result.returncode == 0:
277-
usage = flash_usage(board_info["port"], build_dir)
278-
if usage is not None:
278+
if predicted_flash is not None and make_result.returncode == 0:
279+
actual_flash, _ = flash_usage(board_info["port"], build_dir)
280+
if actual_flash is not None:
279281
print(
280-
"Predict check {board} for {language}: predicted {predicted}, actual {actual}, error {error:+d}".format(
282+
"Flash size check {board} {language}: predicted {predicted},"
283+
" actual {actual}, error {error:+d}".format(
281284
board=board,
282285
language=language,
283-
predicted=prediction,
284-
actual=usage[0],
285-
error=prediction - usage[0],
286+
predicted=predicted_flash,
287+
actual=actual_flash,
288+
error=predicted_flash - actual_flash,
286289
)
287290
)
288291

289292
# Flush so we will see something before 10 minutes has passed.
290293
print(flush=True)
291294

292295
if (not build_all) and (language == LANGUAGE_FIRST) and (exit_status == 0):
293-
usage = flash_usage(board_info["port"], build_dir)
294-
if usage is None:
296+
used_flash, flash_region = flash_usage(board_info["port"], build_dir)
297+
if used_flash is None:
295298
print("Flash usage unknown, building all languages")
296-
elif usage[0] + LANGUAGE_THRESHOLD < usage[1]:
299+
elif used_flash + LANGUAGE_THRESHOLD < flash_region:
297300
print("Skipping languages")
298301
break
299302
elif LANGUAGE_PREDICT != "off" and board_info["port"] != "zephyr-cp":
300-
predict_flash = usage
301-
first_language_bytes = translation_bytes(
303+
baseline_flash = used_flash
304+
baseline_translation_bytes = translation_bytes(
302305
board_info["port"], build_dir, LANGUAGE_FIRST
303306
)
304307

0 commit comments

Comments
 (0)