From db3ab25b9a96b47dc0018ec356c07f98bc5d5faf Mon Sep 17 00:00:00 2001 From: dulanting Date: Mon, 13 Oct 2025 15:59:34 +0800 Subject: [PATCH] refactor: use b.Loop() to simplify the code and improve performance Signed-off-by: dulanting --- pkg/decoders/base64_test.go | 6 +-- pkg/decoders/escaped_unicode_bench_test.go | 46 +++++++++------------- pkg/decoders/utf16_test.go | 2 +- pkg/decoders/utf8_test.go | 2 +- 4 files changed, 23 insertions(+), 33 deletions(-) diff --git a/pkg/decoders/base64_test.go b/pkg/decoders/base64_test.go index 153837f757b5..e4a42cef8f68 100644 --- a/pkg/decoders/base64_test.go +++ b/pkg/decoders/base64_test.go @@ -155,7 +155,7 @@ func BenchmarkFromChunkSmall(b *testing.B) { d := Base64{} data := detectors.MustGetBenchmarkData()["small"] - for n := 0; n < b.N; n++ { + for b.Loop() { d.FromChunk(&sources.Chunk{Data: data}) } } @@ -164,7 +164,7 @@ func BenchmarkFromChunkMedium(b *testing.B) { d := Base64{} data := detectors.MustGetBenchmarkData()["medium"] - for n := 0; n < b.N; n++ { + for b.Loop() { d.FromChunk(&sources.Chunk{Data: data}) } } @@ -173,7 +173,7 @@ func BenchmarkFromChunkLarge(b *testing.B) { d := Base64{} data := detectors.MustGetBenchmarkData()["big"] - for n := 0; n < b.N; n++ { + for b.Loop() { d.FromChunk(&sources.Chunk{Data: data}) } } diff --git a/pkg/decoders/escaped_unicode_bench_test.go b/pkg/decoders/escaped_unicode_bench_test.go index 0ae4ae998424..752e2056f985 100644 --- a/pkg/decoders/escaped_unicode_bench_test.go +++ b/pkg/decoders/escaped_unicode_bench_test.go @@ -60,49 +60,49 @@ var ( // Benchmark individual decoder functions func BenchmarkDecodeOriginalEscape(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decodeEscaped(originalUnicodeData) } } func BenchmarkDecodeCodePoint(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decodeCodePoint(codePointData) } } func BenchmarkDecodeBraceEscape(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decodeBraceEscape(braceEscapeData) } } func BenchmarkDecodeLongEscape(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decodeLongEscape(longEscapeData) } } func BenchmarkDecodePerlEscape(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decodePerlEscape(perlEscapeData) } } func BenchmarkDecodeCssEscape(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decodeCssEscape(cssEscapeData) } } func BenchmarkDecodeHtmlEscape(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decodeHtmlEscape(htmlEscapeData) } } func BenchmarkDecodePercentEscape(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decodePercentEscape(percentEscapeData) } } @@ -118,8 +118,7 @@ func BenchmarkFromChunk_OriginalFormat(b *testing.B) { decoder := &EscapedUnicode{} chunk := &sources.Chunk{Data: originalUnicodeData} - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decoder.FromChunk(chunk) } } @@ -128,8 +127,7 @@ func BenchmarkFromChunk_BraceFormat(b *testing.B) { decoder := &EscapedUnicode{} chunk := &sources.Chunk{Data: braceEscapeData} - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decoder.FromChunk(chunk) } } @@ -138,8 +136,7 @@ func BenchmarkFromChunk_LongFormat(b *testing.B) { decoder := &EscapedUnicode{} chunk := &sources.Chunk{Data: longEscapeData} - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decoder.FromChunk(chunk) } } @@ -148,8 +145,7 @@ func BenchmarkFromChunk_HtmlFormat(b *testing.B) { decoder := &EscapedUnicode{} chunk := &sources.Chunk{Data: htmlEscapeData} - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decoder.FromChunk(chunk) } } @@ -158,8 +154,7 @@ func BenchmarkFromChunk_MixedContent(b *testing.B) { decoder := &EscapedUnicode{} chunk := &sources.Chunk{Data: mixedContentData} - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decoder.FromChunk(chunk) } } @@ -168,8 +163,7 @@ func BenchmarkFromChunk_NoUnicode(b *testing.B) { decoder := &EscapedUnicode{} chunk := &sources.Chunk{Data: noUnicodeData} - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decoder.FromChunk(chunk) } } @@ -178,8 +172,7 @@ func BenchmarkFromChunk_LargeData(b *testing.B) { decoder := &EscapedUnicode{} chunk := &sources.Chunk{Data: largeData} - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { _ = decoder.FromChunk(chunk) } } @@ -188,8 +181,7 @@ func BenchmarkFromChunk_LargeData(b *testing.B) { func BenchmarkRegexMatching_AllPatterns(b *testing.B) { testData := mixedContentData - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { // Simulate the pattern matching in FromChunk _ = longEscapePat.Match(testData) _ = braceEscapePat.Match(testData) @@ -206,8 +198,7 @@ func BenchmarkRegexMatching_AllPatterns(b *testing.B) { func BenchmarkRegexMatching_NoMatch(b *testing.B) { testData := noUnicodeData - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { // Simulate the pattern matching in FromChunk on data with no matches _ = longEscapePat.Match(testData) _ = braceEscapePat.Match(testData) @@ -226,9 +217,8 @@ func BenchmarkFromChunk_MemoryAllocation(b *testing.B) { decoder := &EscapedUnicode{} chunk := &sources.Chunk{Data: mixedContentData} - b.ResetTimer() b.ReportAllocs() - for i := 0; i < b.N; i++ { + for b.Loop() { result := decoder.FromChunk(chunk) if result != nil { // Prevent compiler optimization diff --git a/pkg/decoders/utf16_test.go b/pkg/decoders/utf16_test.go index 1d06b3764cc2..ffaed19a5404 100644 --- a/pkg/decoders/utf16_test.go +++ b/pkg/decoders/utf16_test.go @@ -100,7 +100,7 @@ func BenchmarkUtf16ToUtf8(b *testing.B) { // Example UTF-16LE encoded data data := []byte{72, 0, 101, 0, 108, 0, 108, 0, 111, 0, 32, 0, 87, 0, 111, 0, 114, 0, 108, 0, 100, 0} - for n := 0; n < b.N; n++ { + for b.Loop() { _, _ = utf16ToUTF8(data) } } diff --git a/pkg/decoders/utf8_test.go b/pkg/decoders/utf8_test.go index 7d1c0c86af62..9a605ff24ad9 100644 --- a/pkg/decoders/utf8_test.go +++ b/pkg/decoders/utf8_test.go @@ -375,7 +375,7 @@ go away.`) func Benchmark_extractSubstrings(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { extractSubstrings(testBytes) } }