Update blake3 to v1.5.1.bcr.1
This brings AVX-512 support on Linux.
Also adds a JMH benchmark pitting BLAKE3 against SHA2-256.
Results with `-f 1` (single JVM fork) and for `hashBytesOneShot` only:
<details>
<summary>Intel Core i5-8520U, Linux: BLAKE3 has ~8x the throughput on large inputs</summary>
<pre>
Benchmark (size) (type) Mode Cnt Score Error Units
BazelHashFunctionsBenchmark.hashBytesOneShot 1 BLAKE3 thrpt 5 3897193.109 ± 104089.759 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1 SHA2_256 thrpt 5 9773250.840 ± 919565.969 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16 BLAKE3 thrpt 5 4058401.127 ± 69345.382 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16 SHA2_256 thrpt 5 9338184.696 ± 575903.627 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 128 BLAKE3 thrpt 5 3883335.405 ± 197131.021 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 128 SHA2_256 thrpt 5 3931746.804 ± 111963.068 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 512 BLAKE3 thrpt 5 3165886.130 ± 105001.405 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 512 SHA2_256 thrpt 5 1689377.092 ± 67006.025 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1024 BLAKE3 thrpt 5 2137151.012 ± 71425.961 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1024 SHA2_256 thrpt 5 971335.403 ± 43622.796 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 4096 BLAKE3 thrpt 5 1266551.855 ± 77312.865 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 4096 SHA2_256 thrpt 5 271217.035 ± 15770.310 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16384 BLAKE3 thrpt 5 562124.458 ± 47243.736 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16384 SHA2_256 thrpt 5 72281.652 ± 10734.186 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1048576 BLAKE3 thrpt 5 9800.524 ± 230.269 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1048576 SHA2_256 thrpt 5 1124.542 ± 40.938 ops/s
</pre>
</details>
<details>
<summary>MacBook Pro with M3 Max, macOS: BLAKE3 has ~0.75x the throughput on large inputs</summary>
<pre>
Benchmark (size) (type) Mode Cnt Score Error Units
BazelHashFunctionsBenchmark.hashBytesOneShot 1 BLAKE3 thrpt 5 9262824.819 ± 12194.067 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1 SHA2_256 thrpt 5 76557346.275 ± 548738.127 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16 BLAKE3 thrpt 5 9254500.192 ± 22138.081 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16 SHA2_256 thrpt 5 81029076.629 ± 748425.519 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 128 BLAKE3 thrpt 5 8304084.839 ± 20398.724 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 128 SHA2_256 thrpt 5 41460273.256 ± 106648.234 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1024 BLAKE3 thrpt 5 3092086.580 ± 1301.806 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1024 SHA2_256 thrpt 5 9355426.285 ± 7352.032 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 4096 BLAKE3 thrpt 5 1670833.346 ± 1809.726 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 4096 SHA2_256 thrpt 5 2562509.914 ± 29303.110 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16384 BLAKE3 thrpt 5 484960.116 ± 146.961 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16384 SHA2_256 thrpt 5 658392.748 ± 3364.324 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1048576 BLAKE3 thrpt 5 7987.472 ± 19.194 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1048576 SHA2_256 thrpt 5 10380.444 ± 8.804 ops/s
</pre>
</details>
<details>
<summary>AMD Ryzen 7 PRO 5850U, Windows: BLAKE3 has ~1.5x the throughput on large inputs</summary>
<pre>
BazelHashFunctionsBenchmark.hashBytesOneShot 1 BLAKE3 thrpt 5 5569003,683 ± 125621,794 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1 SHA2_256 thrpt 5 21202138,257 ± 458127,205 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16 BLAKE3 thrpt 5 5539298,273 ± 77378,097 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16 SHA2_256 thrpt 5 21618815,496 ± 208338,556 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 128 BLAKE3 thrpt 5 5047579,827 ± 118690,537 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 128 SHA2_256 thrpt 5 15806244,512 ± 258848,826 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 512 BLAKE3 thrpt 5 3300538,392 ± 53754,778 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 512 SHA2_256 thrpt 5 8353887,852 ± 47076,094 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1024 BLAKE3 thrpt 5 2062144,084 ± 14557,116 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1024 SHA2_256 thrpt 5 5120693,705 ± 30640,599 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 4096 BLAKE3 thrpt 5 1437595,889 ± 34088,637 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 4096 SHA2_256 thrpt 5 1552307,356 ± 25584,819 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16384 BLAKE3 thrpt 5 558955,757 ± 8647,716 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 16384 SHA2_256 thrpt 5 411619,868 ± 1179,203 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1048576 BLAKE3 thrpt 5 9576,940 ± 460,875 ops/s
BazelHashFunctionsBenchmark.hashBytesOneShot 1048576 SHA2_256 thrpt 5 6470,682 ± 41,223 ops/s
</pre>
</details>
Closes #22017.
PiperOrigin-RevId: 628330908
Change-Id: Ic635027d020d60b79d2e498fcebb0cc42fae712b
diff --git a/MODULE.bazel b/MODULE.bazel
index 766e484..215e7f2 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -20,7 +20,7 @@
bazel_dep(name = "rules_pkg", version = "0.9.1")
bazel_dep(name = "stardoc", version = "0.5.6", repo_name = "io_bazel_skydoc")
bazel_dep(name = "zstd-jni", version = "1.5.2-3.bcr.1")
-bazel_dep(name = "blake3", version = "1.3.3.bcr.1")
+bazel_dep(name = "blake3", version = "1.5.1.bcr.1")
bazel_dep(name = "sqlite3", version = "3.42.0.bcr.1")
bazel_dep(name = "zlib", version = "1.3")
bazel_dep(name = "rules_cc", version = "0.0.9")
@@ -31,6 +31,7 @@
bazel_dep(name = "rules_python", version = "0.28.0")
bazel_dep(name = "rules_testing", version = "0.6.0")
bazel_dep(name = "googletest", version = "1.14.0", repo_name = "com_google_googletest")
+bazel_dep(name = "with_cfg.bzl", version = "0.2.4")
# TODO(pcloudy): Add remoteapis and googleapis as Bazel modules in the BCR.
bazel_dep(name = "remoteapis", version = "")
@@ -104,7 +105,7 @@
"com.google.http-client:google-http-client-gson:1.42.0",
"com.google.http-client:google-http-client:1.42.0",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.turbine:turbine:0.6.0",
+ "com.google.turbine:turbine:0.5.0",
"com.ryanharter.auto.value:auto-value-gson-extension:1.3.1",
"com.ryanharter.auto.value:auto-value-gson-runtime:1.3.1",
"com.ryanharter.auto.value:auto-value-gson-factory:1.3.1",
diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock
index 83889a8..fb051f5 100644
--- a/MODULE.bazel.lock
+++ b/MODULE.bazel.lock
@@ -1,6 +1,6 @@
{
"lockFileVersion": 6,
- "moduleFileHash": "41e97ab73eab5fafef6cd8f9b4696823e31384219a6356a052cab52245e1193c",
+ "moduleFileHash": "a46ff64f51b56ec85fed41a5464644ab6c23f3696a14f9cd171b38495a4cbe2f",
"flags": {
"cmdRegistries": [
"https://bcr.bazel.build/"
@@ -39,7 +39,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 75,
+ "line": 76,
"column": 22
},
"imports": {
@@ -83,7 +83,7 @@
"com.google.http-client:google-http-client-gson:1.42.0",
"com.google.http-client:google-http-client:1.42.0",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.turbine:turbine:0.6.0",
+ "com.google.turbine:turbine:0.5.0",
"com.ryanharter.auto.value:auto-value-gson-extension:1.3.1",
"com.ryanharter.auto.value:auto-value-gson-runtime:1.3.1",
"com.ryanharter.auto.value:auto-value-gson-factory:1.3.1",
@@ -168,7 +168,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 76,
+ "line": 77,
"column": 14
}
},
@@ -183,7 +183,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 199,
+ "line": 200,
"column": 19
}
},
@@ -198,7 +198,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 199,
+ "line": 200,
"column": 19
}
},
@@ -213,7 +213,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 199,
+ "line": 200,
"column": 19
}
},
@@ -228,7 +228,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 199,
+ "line": 200,
"column": 19
}
},
@@ -243,7 +243,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 199,
+ "line": 200,
"column": 19
}
},
@@ -258,7 +258,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 199,
+ "line": 200,
"column": 19
}
},
@@ -273,7 +273,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 199,
+ "line": 200,
"column": 19
}
},
@@ -288,7 +288,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 199,
+ "line": 200,
"column": 19
}
},
@@ -303,7 +303,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 199,
+ "line": 200,
"column": 19
}
},
@@ -331,7 +331,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 339,
+ "line": 340,
"column": 22
}
}
@@ -345,7 +345,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 220,
+ "line": 221,
"column": 32
},
"imports": {
@@ -385,7 +385,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 254,
+ "line": 255,
"column": 23
},
"imports": {},
@@ -399,7 +399,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 255,
+ "line": 256,
"column": 17
}
}
@@ -413,7 +413,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 257,
+ "line": 258,
"column": 20
},
"imports": {
@@ -431,7 +431,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 258,
+ "line": 259,
"column": 10
}
}
@@ -445,7 +445,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 269,
+ "line": 270,
"column": 33
},
"imports": {
@@ -476,7 +476,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 290,
+ "line": 291,
"column": 29
},
"imports": {
@@ -493,7 +493,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 293,
+ "line": 294,
"column": 20
},
"imports": {
@@ -512,7 +512,7 @@
"devDependency": false,
"location": {
"file": "@@//:MODULE.bazel",
- "line": 294,
+ "line": 295,
"column": 12
}
}
@@ -526,7 +526,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 306,
+ "line": 307,
"column": 32
},
"imports": {
@@ -545,7 +545,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 314,
+ "line": 315,
"column": 31
},
"imports": {
@@ -562,7 +562,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 317,
+ "line": 318,
"column": 48
},
"imports": {
@@ -579,7 +579,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 361,
+ "line": 362,
"column": 35
},
"imports": {
@@ -596,7 +596,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 364,
+ "line": 365,
"column": 42
},
"imports": {
@@ -614,7 +614,7 @@
"usingModule": "<root>",
"location": {
"file": "@@//:MODULE.bazel",
- "line": 367,
+ "line": 368,
"column": 45
},
"imports": {
@@ -635,7 +635,7 @@
"rules_pkg": "rules_pkg@0.9.1",
"io_bazel_skydoc": "stardoc@0.5.6",
"zstd-jni": "zstd-jni@1.5.2-3.bcr.1",
- "blake3": "blake3@1.3.3.bcr.1",
+ "blake3": "blake3@1.5.1.bcr.1",
"sqlite3": "sqlite3@3.42.0.bcr.1",
"zlib": "zlib@1.3",
"rules_cc": "rules_cc@0.0.9",
@@ -646,6 +646,7 @@
"rules_python": "rules_python@0.28.0",
"rules_testing": "rules_testing@0.6.0",
"com_google_googletest": "googletest@1.14.0",
+ "with_cfg.bzl": "with_cfg.bzl@0.2.4",
"remoteapis": "remoteapis@_",
"googleapis": "googleapis@_",
"apple_support": "apple_support@1.8.1",
@@ -1008,10 +1009,10 @@
}
}
},
- "blake3@1.3.3.bcr.1": {
+ "blake3@1.5.1.bcr.1": {
"name": "blake3",
- "version": "1.3.3.bcr.1",
- "key": "blake3@1.3.3.bcr.1",
+ "version": "1.5.1.bcr.1",
+ "key": "blake3@1.5.1.bcr.1",
"repoName": "blake3",
"executionPlatformsToRegister": [],
"toolchainsToRegister": [],
@@ -1026,13 +1027,14 @@
"ruleClassName": "http_archive",
"attributes": {
"urls": [
- "https://github.com/BLAKE3-team/BLAKE3/archive/refs/tags/1.3.3.tar.gz"
+ "https://github.com/BLAKE3-team/BLAKE3/archive/refs/tags/1.5.1.tar.gz"
],
- "integrity": "sha256-J9K8TuWUW6dUNIWVIQQslJRj7nUU/xeq7zKOI++D/sA=",
- "strip_prefix": "BLAKE3-1.3.3",
+ "integrity": "sha256-gizTf3AVLlmFQz0sUMj2suyDqvEaoxvp/nFIapF0Tzc=",
+ "strip_prefix": "BLAKE3-1.5.1",
"remote_patches": {
- "https://bcr.bazel.build/modules/blake3/1.3.3.bcr.1/patches/add_build_file.patch": "sha256-lKVoznUHSqWywOo27+g4J0csjL8lH3FEXjAFRJN5+Kw=",
- "https://bcr.bazel.build/modules/blake3/1.3.3.bcr.1/patches/module_dot_bazel.patch": "sha256-4M/MRHdDFjS8iyVaKqy6QIc5Qea9pblUz7oj6I5aHfg="
+ "https://bcr.bazel.build/modules/blake3/1.5.1.bcr.1/patches/add_build_file.patch": "sha256-BmZOqWOTfHup68uNZXOh2mP+b971CWY3QufbkIe6eEM=",
+ "https://bcr.bazel.build/modules/blake3/1.5.1.bcr.1/patches/module_dot_bazel.patch": "sha256-dKnHpXqvNwW2m7vYxnfWEoBhphBysqbeBxAMVX3b5a0=",
+ "https://bcr.bazel.build/modules/blake3/1.5.1.bcr.1/patches/fix_windows_arm_build_pr_389.patch": "sha256-9G3QDBp5OuyYP7vwPKjqK+uTUZmjhLpKSE7nshz8guc="
},
"remote_patch_strip": 0
}
@@ -1814,6 +1816,35 @@
}
}
},
+ "with_cfg.bzl@0.2.4": {
+ "name": "with_cfg.bzl",
+ "version": "0.2.4",
+ "key": "with_cfg.bzl@0.2.4",
+ "repoName": "with_cfg.bzl",
+ "executionPlatformsToRegister": [],
+ "toolchainsToRegister": [],
+ "extensionUsages": [],
+ "deps": {
+ "bazel_skylib": "bazel_skylib@1.5.0",
+ "bazel_tools": "bazel_tools@_",
+ "local_config_platform": "local_config_platform@_"
+ },
+ "repoSpec": {
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+ "ruleClassName": "http_archive",
+ "attributes": {
+ "urls": [
+ "https://github.com/fmeum/with_cfg.bzl/releases/download/v0.2.4/with_cfg.bzl-v0.2.4.tar.gz"
+ ],
+ "integrity": "sha256-BqKxtWpYxHGrQNivFmxNUfCYLhxrxGN1uAWRWz/AZY4=",
+ "strip_prefix": "with_cfg.bzl-0.2.4",
+ "remote_patches": {
+ "https://bcr.bazel.build/modules/with_cfg.bzl/0.2.4/patches/module_dot_bazel_version.patch": "sha256-nMJ63F1h826i8AWSmXwz9pZYDwKfOnM5QdrZqyCLYMo="
+ },
+ "remote_patch_strip": 1
+ }
+ }
+ },
"remoteapis@_": {
"name": "remoteapis",
"version": "",
@@ -2883,7 +2914,7 @@
"general": {
"bzlTransitiveDigest": "tunTSmgwd2uvTzkCLtdbuCp0AI+WR+ftiPNqZ0rmcZk=",
"recordedFileInputs": {
- "@@//MODULE.bazel": "41e97ab73eab5fafef6cd8f9b4696823e31384219a6356a052cab52245e1193c",
+ "@@//MODULE.bazel": "a46ff64f51b56ec85fed41a5464644ab6c23f3696a14f9cd171b38495a4cbe2f",
"@@//src/test/tools/bzlmod/MODULE.bazel.lock": "e6b22f35c7bce99c0677f24a19c7aee829f97e7b1b5cc31e600c7cc9b408a292"
},
"recordedDirentsInputs": {},
@@ -5388,7 +5419,7 @@
"recordedFileInputs": {
"@@//src/tools/android/maven_android_install.json": "09bff3e33d291336046f7c9201630fb5e014f0e60b78b6f09b84e4f5f73ed04f",
"@@rules_jvm_external~//rules_jvm_external_deps_install.json": "cafb5d2d8119391eb2b322ce3840d3352ea82d496bdb8cbd4b6779ec4d044dda",
- "@@//maven_install.json": "112e83df70ed9983987adeadea45a3ac179484234285c832ed87514ca7499583"
+ "@@//maven_install.json": "0333a28500b745188bd05d1a64e2facce6883d600ab41b58a0d93c0fc402c893"
},
"recordedDirentsInputs": {},
"envVariables": {},
@@ -6003,7 +6034,7 @@
"{ \"group\": \"com.google.http-client\", \"artifact\": \"google-http-client-gson\", \"version\": \"1.42.0\" }",
"{ \"group\": \"com.google.http-client\", \"artifact\": \"google-http-client\", \"version\": \"1.42.0\" }",
"{ \"group\": \"com.google.j2objc\", \"artifact\": \"j2objc-annotations\", \"version\": \"1.3\" }",
- "{ \"group\": \"com.google.turbine\", \"artifact\": \"turbine\", \"version\": \"0.6.0\" }",
+ "{ \"group\": \"com.google.turbine\", \"artifact\": \"turbine\", \"version\": \"0.5.0\" }",
"{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-extension\", \"version\": \"1.3.1\" }",
"{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-runtime\", \"version\": \"1.3.1\" }",
"{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-factory\", \"version\": \"1.3.1\" }",
@@ -6467,6 +6498,17 @@
"downloaded_file_path": "v1/com/android/tools/common/30.1.3/common-30.1.3.jar"
}
},
+ "com_google_turbine_turbine_0_5_0": {
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+ "ruleClassName": "http_file",
+ "attributes": {
+ "sha256": "3bb883977330ec99dd11d8bba0c9c9084b356189807920903984215a466c81ac",
+ "urls": [
+ "https://repo1.maven.org/maven2/com/google/turbine/turbine/0.5.0/turbine-0.5.0.jar"
+ ],
+ "downloaded_file_path": "v1/com/google/turbine/turbine/0.5.0/turbine-0.5.0.jar"
+ }
+ },
"io_grpc_grpc_auth_1_48_1": {
"bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
"ruleClassName": "http_file",
@@ -6907,17 +6949,6 @@
"downloaded_file_path": "v1/com/google/code/java-allocation-instrumenter/java-allocation-instrumenter/3.3.0/java-allocation-instrumenter-3.3.0.jar"
}
},
- "com_google_turbine_turbine_0_6_0": {
- "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
- "ruleClassName": "http_file",
- "attributes": {
- "sha256": "277b6d59934dc8af95675a6cf6f054e9f43e0708344b08ba2aa927a578174950",
- "urls": [
- "https://repo1.maven.org/maven2/com/google/turbine/turbine/0.6.0/turbine-0.6.0.jar"
- ],
- "downloaded_file_path": "v1/com/google/turbine/turbine/0.6.0/turbine-0.6.0.jar"
- }
- },
"org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_32": {
"bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
"ruleClassName": "http_file",
@@ -8583,7 +8614,7 @@
"{ \"group\": \"com.google.http-client\", \"artifact\": \"google-http-client-gson\", \"version\": \"1.42.0\" }",
"{ \"group\": \"com.google.http-client\", \"artifact\": \"google-http-client\", \"version\": \"1.42.0\" }",
"{ \"group\": \"com.google.j2objc\", \"artifact\": \"j2objc-annotations\", \"version\": \"1.3\" }",
- "{ \"group\": \"com.google.turbine\", \"artifact\": \"turbine\", \"version\": \"0.6.0\" }",
+ "{ \"group\": \"com.google.turbine\", \"artifact\": \"turbine\", \"version\": \"0.5.0\" }",
"{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-extension\", \"version\": \"1.3.1\" }",
"{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-runtime\", \"version\": \"1.3.1\" }",
"{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-factory\", \"version\": \"1.3.1\" }",
diff --git a/maven_install.json b/maven_install.json
index ecdce76..1ced30e 100644
--- a/maven_install.json
+++ b/maven_install.json
@@ -1,7 +1,7 @@
{
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
- "__INPUT_ARTIFACTS_HASH": 1164989950,
- "__RESOLVED_ARTIFACTS_HASH": -1287912278,
+ "__INPUT_ARTIFACTS_HASH": 1516511089,
+ "__RESOLVED_ARTIFACTS_HASH": -1733639136,
"conflict_resolution": {
"com.google.auto.value:auto-value-annotations:1.9": "com.google.auto.value:auto-value-annotations:1.10.4",
"com.google.code.gson:gson:2.8.9": "com.google.code.gson:gson:2.9.0",
@@ -284,9 +284,9 @@
},
"com.google.turbine:turbine": {
"shasums": {
- "jar": "277b6d59934dc8af95675a6cf6f054e9f43e0708344b08ba2aa927a578174950"
+ "jar": "3bb883977330ec99dd11d8bba0c9c9084b356189807920903984215a466c81ac"
},
- "version": "0.6.0"
+ "version": "0.5.0"
},
"com.ryanharter.auto.value:auto-value-gson-extension": {
"shasums": {
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/bazel/BUILD b/src/test/java/com/google/devtools/build/lib/vfs/bazel/BUILD
index f1d34ce..4307662 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/bazel/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/vfs/bazel/BUILD
@@ -1,4 +1,5 @@
load("@rules_java//java:defs.bzl", "java_library", "java_test")
+load(":java_opt_binary.bzl", "java_opt_binary")
package(
default_applicable_licenses = ["//:license"],
@@ -19,6 +20,9 @@
[
"*.java",
],
+ exclude = [
+ "BazelHashFunctionsBenchmark.java",
+ ],
),
deps = [
"//src/main/java/com/google/devtools/build/lib/vfs/bazel",
@@ -40,3 +44,26 @@
"//src/test/java/com/google/devtools/build/lib:test_runner",
],
)
+
+java_opt_binary(
+ name = "BazelHashFunctionsBenchmark",
+ srcs = ["BazelHashFunctionsBenchmark.java"],
+ main_class = "org.openjdk.jmh.Main",
+ deps = [
+ ":jmh",
+ "//src/main/java/com/google/devtools/build/lib/vfs/bazel",
+ "//third_party:guava",
+ ],
+)
+
+java_library(
+ name = "jmh",
+ exported_plugins = [":jmh_benchmark_processor"],
+ exports = ["@maven//:org_openjdk_jmh_jmh_core"],
+)
+
+java_plugin(
+ name = "jmh_benchmark_processor",
+ processor_class = "org.openjdk.jmh.generators.BenchmarkProcessor",
+ deps = ["@maven//:org_openjdk_jmh_jmh_generator_annprocess"],
+)
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/bazel/BazelHashFunctionsBenchmark.java b/src/test/java/com/google/devtools/build/lib/vfs/bazel/BazelHashFunctionsBenchmark.java
new file mode 100644
index 0000000..54c1b98
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/vfs/bazel/BazelHashFunctionsBenchmark.java
@@ -0,0 +1,80 @@
+// Copyright 2024 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.vfs.bazel;
+
+import com.google.common.hash.HashCode;
+import com.google.common.hash.HashFunction;
+import com.google.common.hash.Hashing;
+import java.security.SecureRandom;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Level;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+
+@BenchmarkMode(Mode.Throughput)
+@State(Scope.Benchmark)
+public class BazelHashFunctionsBenchmark {
+
+ static {
+ BazelHashFunctions.ensureRegistered();
+ }
+
+ public enum HashFunctionType {
+ BLAKE3(new Blake3HashFunction()),
+ SHA2_256(Hashing.sha256());
+
+ final HashFunction hashFunction;
+
+ HashFunctionType(HashFunction hashFunction) {
+ this.hashFunction = hashFunction;
+ }
+ }
+
+ public enum Size {
+ B,
+ KB,
+ MB,
+ GB;
+
+ final int bytes;
+
+ Size() {
+ bytes = 1 << (ordinal() * 10);
+ }
+ }
+
+ @Param({"BLAKE3", "SHA2_256"})
+ public HashFunctionType type;
+
+ @Param({"B", "KB", "MB", "GB"})
+ public Size size;
+
+ private byte[] data;
+
+ @Setup(Level.Iteration)
+ public void setup() {
+ data = new byte[size.bytes];
+ new SecureRandom().nextBytes(data);
+ }
+
+ @Benchmark
+ public HashCode hashBytesOneShot() {
+ return type.hashFunction.hashBytes(data);
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/bazel/java_opt_binary.bzl b/src/test/java/com/google/devtools/build/lib/vfs/bazel/java_opt_binary.bzl
new file mode 100644
index 0000000..cac1de2
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/vfs/bazel/java_opt_binary.bzl
@@ -0,0 +1,23 @@
+# Copyright 2024 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+A wrapper around java_binary that forces it to be built with `-c opt`.
+
+This is useful for benchmark targets.
+"""
+
+load("@with_cfg.bzl", "with_cfg")
+
+java_opt_binary, _java_opt_binary = with_cfg(native.java_binary).set("compilation_mode", "opt").build()