// Copyright 2012 The Freetype-Go Authors. All rights reserved. // Use of this source code is governed by your choice of either the // FreeType License or the GNU General Public License version 2 (or // any later version), both of which can be found in the LICENSE file. package freetype import ( "image" "image/draw" "io/ioutil" "runtime" "strings" "testing" ) func BenchmarkDrawString(b *testing.B) { data, err := ioutil.ReadFile("../licenses/gpl.txt") if err != nil { b.Fatal(err) } lines := strings.Split(string(data), "\n") data, err = ioutil.ReadFile("../luxi-fonts/luxisr.ttf") if err != nil { b.Fatal(err) } font, err := ParseFont(data) if err != nil { b.Fatal(err) } dst := image.NewRGBA(image.Rect(0, 0, 800, 600)) draw.Draw(dst, dst.Bounds(), image.White, image.ZP, draw.Src) c := NewContext() c.SetDst(dst) c.SetClip(dst.Bounds()) c.SetSrc(image.Black) c.SetFont(font) var ms runtime.MemStats runtime.ReadMemStats(&ms) mallocs := ms.Mallocs b.ResetTimer() for i := 0; i < b.N; i++ { for j, line := range lines { _, err := c.DrawString(line, Pt(0, (j*16)%600)) if err != nil { b.Fatal(err) } } } b.StopTimer() runtime.ReadMemStats(&ms) mallocs = ms.Mallocs - mallocs b.Logf("%d iterations, %d mallocs per iteration\n", b.N, int(mallocs)/b.N) }