summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-24 21:33:15 +0200
committerPaul Buetow <paul@buetow.org>2026-02-24 21:33:15 +0200
commit66850d3350faae19a495a6668035239b6df7c0a8 (patch)
treede641f9254cef80f52336dc3c0b85558528656b6
parent32b4bda555ff39e60dbd46a9b373ec40e30030e6 (diff)
flamegraph: stream gob decode in loadFromFile
-rw-r--r--internal/flamegraph/iordata.go14
1 files changed, 13 insertions, 1 deletions
diff --git a/internal/flamegraph/iordata.go b/internal/flamegraph/iordata.go
index 71de6ec..af4ad9d 100644
--- a/internal/flamegraph/iordata.go
+++ b/internal/flamegraph/iordata.go
@@ -140,11 +140,23 @@ func (iod *iorData) loadFromFile(filename string) error {
decoder := zstd.NewReader(file)
defer decoder.Close()
+ var records map[recordKey]Counter
+ if err := gob.NewDecoder(decoder).Decode(&records); err == nil && len(records) > 0 {
+ iod.records = records
+ return nil
+ }
+
+ // Fallback path for legacy payloads and empty-map ambiguity.
+ if _, err := file.Seek(0, io.SeekStart); err != nil {
+ return err
+ }
+ decoder = zstd.NewReader(file)
+ defer decoder.Close()
+
var buffer bytes.Buffer
if _, err = io.Copy(&buffer, decoder); err != nil {
return err
}
-
return iod.deserialize(&buffer)
}