| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // +build !build_with_native_toolchain |
| |
| package main |
| |
| import ( |
| "encoding/hex" |
| "fmt" |
| "math/rand" |
| "strings" |
| ) |
| |
| // genString generates a random UTF8 string with a byte length equal or just |
| // over targetLen. |
| func genString(maxRune int, seed int64, targetLen int) string { |
| random := rand.New(rand.NewSource(seed)) |
| var r rune |
| var b strings.Builder |
| for b.Len() < targetLen { |
| r = rune(random.Intn(maxRune)) |
| b.WriteRune(r) |
| } |
| return b.String() |
| } |
| |
| const hexPerLine int = 32 |
| |
| func print(name, src string) { |
| dst := make([]byte, hex.EncodedLen(len(src))) |
| hex.Encode(dst, []byte(src)) |
| |
| fmt.Printf("const char %s_S_%d[] = \n", name, len(src)) |
| for i := 0; i < len(dst); i += 2 { |
| if i%hexPerLine == 0 { |
| fmt.Printf("\"") |
| } |
| fmt.Printf("\\x%s", dst[i:i+2]) |
| if i != len(dst)-2 && i%hexPerLine == hexPerLine-2 { |
| fmt.Printf("\"\n") |
| } |
| } |
| fmt.Printf("\";\n") |
| } |
| |
| func main() { |
| fmt.Print(top) |
| // Seeds must be set to preserve benchmark size. |
| for _, s := range []struct { |
| seed int64 |
| size int |
| }{ |
| { |
| seed: 45, |
| size: 257, |
| }, |
| { |
| seed: 23, |
| size: 1024, |
| }, |
| { |
| seed: 34, |
| size: 4097, |
| }, |
| { |
| seed: 2, |
| size: 16384, |
| }, |
| { |
| seed: 118, |
| size: 65535, |
| }, |
| } { |
| s := genString(0x1fffff, s.seed, s.size) |
| print("Utf8", s) |
| } |
| for _, size := range []int{ |
| 258, |
| 1025, |
| 4098, |
| 16385, |
| 65536, |
| } { |
| s := genString(128, 0, size) |
| print("Ascii", s) |
| } |
| fmt.Print(bottom) |
| } |
| |
| const top = `// Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Code generated by "gen.go"; DO NOT EDIT. |
| // |
| // go run src/tests/benchmarks/fidl/lib-fidl/gen.go > src/tests/benchmarks/fidl/lib-fidl/data.h |
| // fx format-code --files=src/tests/benchmarks/fidl/lib-fidl/data.h |
| |
| #ifndef SRC_TESTS_BENCHMARKS_FIDL_LIB_FIDL_DATA_H_ |
| #define SRC_TESTS_BENCHMARKS_FIDL_LIB_FIDL_DATA_H_ |
| |
| namespace lib_fidl_microbenchmarks { |
| |
| ` |
| |
| const bottom = ` |
| |
| } // namespace lib_fidl_microbenchmarks |
| |
| #endif // SRC_TESTS_BENCHMARKS_FIDL_LIB_FIDL_DATA_H_ |
| ` |