This repository was archived by the owner on Mar 4, 2025. It is now read-only.
Description Based on profiling my application, image processing is the most CPU-intensive, with parsepngstream using a good bit of the time. Is there an opportunity to optimize this function? Perhaps using image/png from the standard library
Here is my profile:
File: ppdfdeck
Type: cpu
Time: May 23, 2024 at 3:11pm (EDT)
Duration: 4.11s, Total samples = 3.91s (95.24%)
Showing nodes accounting for 3.83s, 97.95% of 3.91s total
Dropped 36 nodes (cum <= 0.02s)
flat flat% sum% cum cum%
0.64s 16.37% 16.37% 0.64s 16.37% github.com/go-pdf/fpdf.(*wbuffer).u8 (inline)
0.36s 9.21% 25.58% 0.36s 9.21% compress/flate.(*deflateFast).matchLen
0.36s 9.21% 34.78% 0.36s 9.21% hash/adler32.update
0.27s 6.91% 41.69% 0.27s 6.91% runtime.memmove
0.26s 6.65% 48.34% 0.77s 19.69% compress/flate.(*deflateFast).encode
0.24s 6.14% 54.48% 0.29s 7.42% compress/flate.(*decompressor).huffSym
0.23s 5.88% 60.36% 0.76s 19.44% compress/flate.(*decompressor).huffmanBlock
0.21s 5.37% 65.73% 0.21s 5.37% runtime.memclrNoHeapPointers
0.19s 4.86% 70.59% 0.37s 9.46% compress/flate.(*huffmanBitWriter).writeTokens
0.18s 4.60% 75.19% 3.67s 93.86% github.com/go-pdf/fpdf.(*Fpdf).parsepngstream
0.10s 2.56% 77.75% 0.11s 2.81% compress/flate.(*huffmanBitWriter).writeCode
0.08s 2.05% 79.80% 0.33s 8.44% compress/flate.(*huffmanBitWriter).indexTokens
0.07s 1.79% 81.59% 0.09s 2.30% compress/flate.(*huffmanEncoder).bitCounts
0.06s 1.53% 83.12% 0.14s 3.58% compress/flate.(*dictDecoder).tryWriteCopy (inline)
0.06s 1.53% 84.65% 0.06s 1.53% compress/flate.load32 (inline)
0.05s 1.28% 85.93% 0.05s 1.28% bytes.(*Reader).ReadByte
0.04s 1.02% 86.96% 0.04s 1.02% compress/flate.(*decompressor).moreBits
0.04s 1.02% 87.98% 0.04s 1.02% compress/flate.(*dictDecoder).writeByte (inline)
0.04s 1.02% 89.00% 0.04s 1.02% compress/flate.(*huffmanBitWriter).writeBits
0.04s 1.02% 90.03% 0.04s 1.02% compress/flate.load64 (inline)
0.04s 1.02% 91.05% 0.04s 1.02% compress/flate.token.length (inline)
0.04s 1.02% 92.07% 0.04s 1.02% runtime/internal/syscall.Syscall6
0.04s 1.02% 93.09% 0.05s 1.28% sort.insertionSort
0.03s 0.77% 93.86% 0.03s 0.77% crypto/sha1.blockAVX2
0.03s 0.77% 94.63% 0.04s 1.02% sort.partition
0.02s 0.51% 95.14% 0.02s 0.51% compress/flate.(*dictDecoder).histSize (inline)
0.02s 0.51% 95.65% 0.02s 0.51% compress/flate.(*huffmanBitWriter).writeDynamicHeader
0.02s 0.51% 96.16% 0.02s 0.51% compress/flate.byLiteral.Less
0.02s 0.51% 96.68% 0.02s 0.51% compress/flate.lengthCode (inline)
0.02s 0.51% 97.19% 0.02s 0.51% compress/flate.token.offset (inline)
0.02s 0.51% 97.70% 0.02s 0.51% runtime.procyield
0.01s 0.26% 97.95% 0.20s 5.12% compress/flate.(*huffmanEncoder).generate
0 0% 97.95% 1.10s 28.13% bytes.(*Buffer).ReadFrom
0 0% 97.95% 0.06s 1.53% bytes.(*Buffer).WriteString
0 0% 97.95% 0.16s 4.09% bytes.(*Buffer).grow
0 0% 97.95% 0.16s 4.09% bytes.growSlice
0 0% 97.95% 1.53s 39.13% compress/flate.(*Writer).Write (inline)
0 0% 97.95% 0.07s 1.79% compress/flate.(*byFreq).sort (inline)
0 0% 97.95% 0.03s 0.77% compress/flate.(*byLiteral).sort (inline)
0 0% 97.95% 1.51s 38.62% compress/flate.(*compressor).encSpeed
0 0% 97.95% 0.02s 0.51% compress/flate.(*compressor).fillStore
0 0% 97.95% 0.02s 0.51% compress/flate.(*compressor).init
0 0% 97.95% 1.53s 39.13% compress/flate.(*compressor).write
0 0% 97.95% 0.83s 21.23% compress/flate.(*decompressor).Read
0 0% 97.95% 0.14s 3.58% compress/flate.(*decompressor).nextBlock
0 0% 97.95% 0.74s 18.93% compress/flate.(*huffmanBitWriter).writeBlockDynamic
0 0% 97.95% 0.03s 0.77% compress/flate.(*huffmanEncoder).assignEncodingAndSize
0 0% 97.95% 0.04s 1.02% compress/flate.NewWriter (inline)
0 0% 97.95% 0.04s 1.02% compress/flate.NewWriterDict
0 0% 97.95% 1.78s 45.52% compress/zlib.(*Writer).Write
0 0% 97.95% 0.04s 1.02% compress/zlib.(*Writer).writeHeader
0 0% 97.95% 0.98s 25.06% compress/zlib.(*reader).Read
0 0% 97.95% 0.03s 0.77% crypto/sha1.(*digest).Write
0 0% 97.95% 0.03s 0.77% crypto/sha1.block
0 0% 97.95% 0.09s 2.30% github.com/go-pdf/fpdf.(*Fpdf).Close
0 0% 97.95% 3.77s 96.42% github.com/go-pdf/fpdf.(*Fpdf).ImageOptions
0 0% 97.95% 0.10s 2.56% github.com/go-pdf/fpdf.(*Fpdf).Output
0 0% 97.95% 3.77s 96.42% github.com/go-pdf/fpdf.(*Fpdf).RegisterImageOptions
0 0% 97.95% 3.77s 96.42% github.com/go-pdf/fpdf.(*Fpdf).RegisterImageOptionsReader
0 0% 97.95% 0.09s 2.30% github.com/go-pdf/fpdf.(*Fpdf).enddoc
0 0% 97.95% 0.06s 1.53% github.com/go-pdf/fpdf.(*Fpdf).out
0 0% 97.95% 3.73s 95.40% github.com/go-pdf/fpdf.(*Fpdf).parsepng
0 0% 97.95% 0.08s 2.05% github.com/go-pdf/fpdf.(*Fpdf).putimage
0 0% 97.95% 0.08s 2.05% github.com/go-pdf/fpdf.(*Fpdf).putimages
0 0% 97.95% 0.08s 2.05% github.com/go-pdf/fpdf.(*Fpdf).putresources
0 0% 97.95% 0.07s 1.79% github.com/go-pdf/fpdf.(*Fpdf).putstream
0 0% 97.95% 0.03s 0.77% github.com/go-pdf/fpdf.(*idEncoder).bytes (inline)
0 0% 97.95% 1.79s 45.78% github.com/go-pdf/fpdf.(*xmempool).compress
0 0% 97.95% 1.03s 26.34% github.com/go-pdf/fpdf.(*xmempool).uncompress
0 0% 97.95% 0.03s 0.77% github.com/go-pdf/fpdf.generateImageID
0 0% 97.95% 0.06s 1.53% github.com/go-pdf/fpdf.newRBuffer
0 0% 97.95% 0.36s 9.21% hash/adler32.(*digest).Write
0 0% 97.95% 0.03s 0.77% internal/poll.(*FD).Read
0 0% 97.95% 0.04s 1.02% internal/poll.ignoringEINTRIO (inline)
0 0% 97.95% 3.87s 98.98% main.dodeck
0 0% 97.95% 3.77s 96.42% main.doslides
0 0% 97.95% 3.87s 98.98% main.main
0 0% 97.95% 3.77s 96.42% main.pdfslide
0 0% 97.95% 0.03s 0.77% os.(*File).Read
0 0% 97.95% 0.03s 0.77% os.(*File).read (inline)
0 0% 97.95% 0.03s 0.77% runtime.gcBgMarkWorker
0 0% 97.95% 0.03s 0.77% runtime.gcBgMarkWorker.func2
0 0% 97.95% 0.03s 0.77% runtime.gcDrain
0 0% 97.95% 0.03s 0.77% runtime.gcDrainMarkWorkerDedicated (inline)
0 0% 97.95% 0.02s 0.51% runtime.growslice
0 0% 97.95% 3.87s 98.98% runtime.main
0 0% 97.95% 0.04s 1.02% runtime.makeslice
0 0% 97.95% 0.06s 1.53% runtime.mallocgc
0 0% 97.95% 0.03s 0.77% runtime.markroot
0 0% 97.95% 0.03s 0.77% runtime.markroot.func1
0 0% 97.95% 0.03s 0.77% runtime.memclrNoHeapPointersChunked
0 0% 97.95% 0.02s 0.51% runtime.newobject
0 0% 97.95% 0.03s 0.77% runtime.suspendG
0 0% 97.95% 0.04s 1.02% runtime.systemstack
0 0% 97.95% 0.10s 2.56% sort.Sort
0 0% 97.95% 0.10s 2.56% sort.pdqsort
0 0% 97.95% 0.04s 1.02% syscall.RawSyscall6
0 0% 97.95% 0.03s 0.77% syscall.Read (inline)
0 0% 97.95% 0.04s 1.02% syscall.Syscall
0 0% 97.95% 0.03s 0.77% syscall.read
Reactions are currently unavailable
Based on profiling my application, image processing is the most CPU-intensive, with parsepngstream using a good bit of the time. Is there an opportunity to optimize this function? Perhaps using image/png from the standard library
Here is my profile: