- # TODO: Avoid overwriting earlier analysis if it's better.
- atomic_set_contents($filename, $encoded);
+ # Overwrite old analysis (assuming it exists at all) if we're
+ # using a different engine, or if we've calculated deeper.
+ # nodes is used as a tiebreaker. Don't bother about Multi-PV
+ # data; it's not that important.
+ my ($old_engine, $old_depth, $old_nodes) = get_json_analysis_stats($filename);
+ my $new_depth = $json->{'depth'} // 0;
+ my $new_nodes = $json->{'nodes'} // 0;
+ if (!defined($old_engine) ||
+ $old_engine ne $json->{'id'}{'name'} ||
+ $new_depth > $old_depth ||
+ ($new_depth == $old_depth && $new_nodes >= $old_nodes)) {
+ atomic_set_contents($filename, $encoded);
+ }