298 if not validate_args(args):
299 return 1
300
301 after_json = read_malioc_tree(args.after)
302 if not bool(after_json):
303 print(
'Did not find any malioc results under {}.'.
format(args.after))
304 return 1
305
306 if args.update:
307
308 with open(args.before, 'w') as file:
309 json.dump(after_json, file, sort_keys=True, indent=2)
310 return 0
311
312 with open(args.before, 'r') as file:
313 before_json = json.load(file)
314
315 changed = False
316 for filename, shaders in before_json.items():
317 if filename not in after_json.keys():
318 print(
'Shader "{}" has been removed.'.
format(filename))
319 changed = True
320 continue
321 for core, before_shader in shaders.items():
322 if core not in after_json[filename].keys():
323 continue
324 after_shader = after_json[filename][core]
325 if compare_shaders(args.after, before_shader, after_shader):
326 changed = True
327
328 for filename, shaders in after_json.items():
329 if filename not in before_json:
331 changed = True
332
333 if changed:
335 'There are new shaders, shaders have been removed, or performance '
336 'changes to existing shaders. The golden file must be updated after a '
337 'build of android_debug_unopt using the --malioc-path flag to the '
338 'flutter/tools/gn script.\n\n'
339 '$ ./flutter/impeller/tools/malioc_diff.py --before {} --after {} --update'.
format(
340 args.before, args.after
341 )
342 )
343 if args.print_diff:
344 before_lines = json.dumps(before_json, sort_keys=True, indent=2).splitlines(keepends=True)
345 after_lines = json.dumps(after_json, sort_keys=True, indent=2).splitlines(keepends=True)
346 before_path = os.path.relpath(os.path.abspath(args.before), start=SRC_ROOT)
347 diff = difflib.unified_diff(before_lines, after_lines, fromfile=before_path)
348 print(
'\nYou can alternately apply the diff below:')
349 print(
'patch -p0 <<DONE')
352
353 return 1 if changed else 0
354
355
static void parse_args(int argc, char *argv[], Args *args)