Keep stable output path for TraceProcessorProbe When merging profile symbols we created a new symbolize_trace.zip file and removed merged_trace.zip which breaks running trace_processor queries. This CL ensures we only ever and up with a merged_trace.zip file when we have a symbolized trace. Change-Id: I29465c066b43cfd40af629cae5772065ee0482f4 Reviewed-on: https://chromium-review.googlesource.com/c/crossbench/+/7532109 Commit-Queue: Camillo Bruni <cbruni@chromium.org> Reviewed-by: Patrick Thier <pthier@chromium.org> Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
diff --git a/crossbench/probes/trace_processor/context/base.py b/crossbench/probes/trace_processor/context/base.py index a5f4030..0f4561f 100644 --- a/crossbench/probes/trace_processor/context/base.py +++ b/crossbench/probes/trace_processor/context/base.py
@@ -142,5 +142,5 @@ return self.local_result_path / "merged_trace.zip" @property - def symbolized_trace_path(self) -> pth.LocalPath: + def _symbolized_trace_path(self) -> pth.LocalPath: return self.local_result_path / "symbolized_trace.zip"
diff --git a/crossbench/probes/trace_processor/context/symbolizing.py b/crossbench/probes/trace_processor/context/symbolizing.py index 7b4ab4e..fa13eae 100644 --- a/crossbench/probes/trace_processor/context/symbolizing.py +++ b/crossbench/probes/trace_processor/context/symbolizing.py
@@ -17,6 +17,7 @@ TraceProcessorProbeContext if TYPE_CHECKING: + from crossbench import path as pth from crossbench.probes.results import LocalProbeResult KB = 1024 @@ -67,15 +68,23 @@ logging.error("Could not generate valid symbols file: %s", symbols_result) return result - with zipfile.ZipFile(self.symbolized_trace_path, "w") as zip_file: + return self._maybe_symbolized_result(result, symbols_result) + + def _maybe_symbolized_result( + self, result: LocalProbeResult, + symbols_result: pth.LocalPath) -> LocalProbeResult: + with zipfile.ZipFile(self._symbolized_trace_path, "w") as zip_file: for f in (*result.perfetto_list, symbols_result): zip_file.write(f, arcname=f.relative_to(self.run.out_dir)) - self._cleanup() - return self.local_result(perfetto=(self.symbolized_trace_path,)) - def _cleanup(self) -> None: - # If we have a successfully symbolized trace file we don't need the merged - # one anymore. - if (self.host_platform.file_size(self.symbolized_trace_path) - > self.host_platform.file_size(self.merged_trace_path)): - self.host_platform.rm(self.merged_trace_path) + if (self.host_platform.file_size(self._symbolized_trace_path) + < self.host_platform.file_size(self.merged_trace_path)): + logging.error("Failed to generated symbolized trace file") + return result + + # If we have a successfully symbolized trace file we can replace + # the original merged_trace.zip. + self.host_platform.rm(self.merged_trace_path) + self.host_platform.rename(self._symbolized_trace_path, + self.merged_trace_path) + return self.local_result(perfetto=(self.merged_trace_path,))