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  }