Skip to content

Commit bd0e370

Browse files
committed
all: migrate to go-pdf/fpdf
Migrating to go-fpdf/fpdf@v0.4.0 improves somewhat plotting performances: ``` name old time/op new time/op delta Canvas-8 221µs ± 2% 181µs ± 4% -18.25% (p=0.000 n=30+29) CanvasImage-8 72.0ms ± 4% 72.3ms ± 4% ~ (p=0.406 n=27+29) name old alloc/op new alloc/op delta Canvas-8 111kB ± 1% 109kB ± 1% -1.79% (p=0.000 n=27+23) CanvasImage-8 2.94MB ± 0% 2.69MB ± 0% -8.64% (p=0.000 n=29+29) name old allocs/op new allocs/op delta Canvas-8 1.48k ± 0% 0.87k ± 0% -41.09% (p=0.000 n=30+30) CanvasImage-8 121 ± 0% 84 ± 0% -30.58% (p=0.000 n=26+27) ``` Fixes #697.
1 parent e208a50 commit bd0e370

5 files changed

Lines changed: 64 additions & 11 deletions

File tree

cmpimg/cmpimg.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
"reflect"
1717
"strings"
1818

19-
"github.com/phpdave11/gofpdf"
19+
"github.com/go-pdf/fpdf"
2020

2121
_ "image/jpeg"
2222
_ "image/png"
@@ -90,7 +90,7 @@ func EqualApprox(typ string, raw1, raw2 []byte, delta float64) (bool, error) {
9090
}
9191

9292
func cmpPdf(pdf1, pdf2 []byte) bool {
93-
return gofpdf.CompareBytes(pdf1, pdf1, false) == nil
93+
return fpdf.CompareBytes(pdf1, pdf1, false) == nil
9494
}
9595

9696
func cmpImg(v1, v2 image.Image, delta float64) bool {

go.mod

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ require (
88
github.com/fogleman/gg v1.3.0
99
github.com/go-fonts/liberation v0.1.1
1010
github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07
11-
github.com/phpdave11/gofpdf v1.4.2
11+
github.com/go-pdf/fpdf v0.4.0
1212
golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3
13-
golang.org/x/image v0.0.0-20210216034530-4410531fe030
14-
golang.org/x/text v0.3.5 // indirect
13+
golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9
1514
gonum.org/v1/gonum v0.8.2
1615
)

go.sum

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym
55
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af h1:wVe6/Ea46ZMeNkQjjBW6xcqyQA/j5e0D6GytH95g0gQ=
66
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
77
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
8+
github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
89
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
910
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
1011
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
@@ -18,17 +19,20 @@ github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmn
1819
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
1920
github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07 h1:OTlfMvwR1rLyf9goVmXfuS5AJn80+Vmj4rTf4n46SOs=
2021
github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U=
22+
github.com/go-pdf/fpdf v0.4.0 h1:1+bMcVeIfseu+fRoanK10qw+WlrL69W6ZLpgYXCWN0U=
23+
github.com/go-pdf/fpdf v0.4.0/go.mod h1:Zv67d0wluNY8KnOYFHNR21BRjHJrMFE78sa1GPegzXQ=
2124
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
2225
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
2326
github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
2427
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
25-
github.com/phpdave11/gofpdf v1.4.2 h1:KPKiIbfwbvC/wOncwhrpRdXVj2CZTCFlw4wnoyjtHfQ=
2628
github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
2729
github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
30+
github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
2831
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
2932
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
3033
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
3134
github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
35+
github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk=
3236
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
3337
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
3438
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -46,8 +50,8 @@ golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+o
4650
golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
4751
golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
4852
golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
49-
golang.org/x/image v0.0.0-20210216034530-4410531fe030 h1:lP9pYkih3DUSC641giIXa2XqfTIbbbRr0w2EOTA7wHA=
50-
golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
53+
golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9 h1:D0iM1dTCbD5Dg1CbuvLC/v/agLc79efSj/L35Q3Vqhs=
54+
golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
5155
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
5256
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
5357
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -59,8 +63,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
5963
golang.org/x/sys v0.0.0-20210304124612-50617c2ba197 h1:7+SpRyhoo46QjKkYInQXpcfxx3TYFEYkn131lwGE9/0=
6064
golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6165
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
62-
golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
63-
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
66+
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
67+
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
6468
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
6569
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
6670
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

vg/vgpdf/vgpdf.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"path/filepath"
2222
"sync"
2323

24-
pdf "github.com/phpdave11/gofpdf"
24+
pdf "github.com/go-pdf/fpdf"
2525
stdfnt "golang.org/x/image/font"
2626

2727
"gonum.org/v1/plot/font"

vg/vgpdf/vgpdf_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"bytes"
99
"fmt"
1010
"image/color"
11+
"image/png"
1112
"io/ioutil"
1213
"log"
1314
"os"
@@ -16,6 +17,7 @@ import (
1617
"gonum.org/v1/plot"
1718
"gonum.org/v1/plot/cmpimg"
1819
"gonum.org/v1/plot/plotter"
20+
"gonum.org/v1/plot/vg"
1921
"gonum.org/v1/plot/vg/draw"
2022
"gonum.org/v1/plot/vg/vgpdf"
2123
)
@@ -207,3 +209,51 @@ func TestIssue540(t *testing.T) {
207209
t.Fatalf("images differ")
208210
}
209211
}
212+
213+
func BenchmarkCanvas(b *testing.B) {
214+
p := plot.New()
215+
216+
xys := plotter.XYs{
217+
plotter.XY{X: 0, Y: 0},
218+
plotter.XY{X: 1, Y: 1},
219+
plotter.XY{X: 2, Y: 2},
220+
}
221+
222+
p.Title.Text = "My title"
223+
p.X.Tick.Label.Font.Size = 0 // hide X-axis labels
224+
p.Y.Tick.Label.Font.Size = 0 // hide Y-axis labels
225+
226+
lines, points, err := plotter.NewLinePoints(xys)
227+
if err != nil {
228+
log.Fatal(err)
229+
}
230+
lines.Color = color.RGBA{B: 255, A: 255}
231+
232+
p.Add(lines, points)
233+
p.Add(plotter.NewGrid())
234+
235+
c := vgpdf.New(5*vg.Centimeter, 5*vg.Centimeter)
236+
d := draw.New(c)
237+
238+
b.ResetTimer()
239+
for i := 0; i < b.N; i++ {
240+
p.Draw(d)
241+
}
242+
}
243+
244+
func BenchmarkCanvasImage(b *testing.B) {
245+
c := vgpdf.New(5*vg.Centimeter, 5*vg.Centimeter)
246+
raw, err := ioutil.ReadFile("../../plotter/testdata/gopher.png")
247+
if err != nil {
248+
b.Fatalf("could not read test image: %+v", err)
249+
}
250+
img, err := png.Decode(bytes.NewReader(raw))
251+
if err != nil {
252+
b.Fatalf("could not decode test image: %+v", err)
253+
}
254+
255+
b.ResetTimer()
256+
for i := 0; i < b.N; i++ {
257+
c.DrawImage(vg.Rectangle{Max: vg.Point{X: 2, Y: 2}}, img)
258+
}
259+
}

0 commit comments

Comments
 (0)