github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/imaging/decode_bench_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package imaging 5 6 import ( 7 "fmt" 8 "os" 9 "runtime" 10 "sync" 11 "testing" 12 13 "github.com/masterhung0112/hk_server/v5/utils/fileutils" 14 15 "github.com/stretchr/testify/require" 16 ) 17 18 func BenchmarkDecoderDecode(b *testing.B) { 19 n := runtime.NumCPU() 20 for k := 1; k <= n; k++ { 21 b.Run(fmt.Sprintf("%d concurrency", k), func(b *testing.B) { 22 d, err := NewDecoder(DecoderOptions{ 23 ConcurrencyLevel: k, 24 }) 25 require.NotNil(b, d) 26 require.NoError(b, err) 27 28 imgDir, ok := fileutils.FindDir("tests") 29 require.True(b, ok) 30 31 b.ResetTimer() 32 33 var wg sync.WaitGroup 34 for i := 0; i < b.N; i++ { 35 b.StopTimer() 36 wg.Add(1) 37 imgFile, err := os.Open(imgDir + "/fill_test_opaque.png") 38 require.NoError(b, err) 39 defer imgFile.Close() 40 b.StartTimer() 41 go func() { 42 defer wg.Done() 43 img, _, err := d.Decode(imgFile) 44 require.NoError(b, err) 45 require.NotNil(b, img) 46 }() 47 } 48 49 wg.Wait() 50 }) 51 } 52 } 53 54 func BenchmarkDecoderDecodeMemBounded(b *testing.B) { 55 n := runtime.NumCPU() 56 for k := 1; k <= n; k++ { 57 b.Run(fmt.Sprintf("%d concurrency", k), func(b *testing.B) { 58 d, err := NewDecoder(DecoderOptions{ 59 ConcurrencyLevel: k, 60 }) 61 require.NotNil(b, d) 62 require.NoError(b, err) 63 64 imgDir, ok := fileutils.FindDir("tests") 65 require.True(b, ok) 66 67 b.ResetTimer() 68 69 var wg sync.WaitGroup 70 for i := 0; i < b.N; i++ { 71 b.StopTimer() 72 wg.Add(1) 73 imgFile, err := os.Open(imgDir + "/fill_test_opaque.png") 74 require.NoError(b, err) 75 defer imgFile.Close() 76 b.StartTimer() 77 go func() { 78 defer wg.Done() 79 img, _, release, err := d.DecodeMemBounded(imgFile) 80 require.NoError(b, err) 81 require.NotNil(b, img) 82 release() 83 }() 84 } 85 86 wg.Wait() 87 }) 88 } 89 }