diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-24 21:33:15 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-24 21:33:15 +0200 |
| commit | 66850d3350faae19a495a6668035239b6df7c0a8 (patch) | |
| tree | de641f9254cef80f52336dc3c0b85558528656b6 /internal | |
| parent | 32b4bda555ff39e60dbd46a9b373ec40e30030e6 (diff) | |
flamegraph: stream gob decode in loadFromFile
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/flamegraph/iordata.go | 14 |
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) } |
