From 03f3b25a73ca13d1032289697a88b30be01fddc4 Mon Sep 17 00:00:00 2001 From: Googler Date: Fri, 20 Sep 2024 08:13:19 -0700 Subject: [PATCH] Avoid allocations from varargs arrays and boxing in `BzlLoadValue.Key` hashcodes. PiperOrigin-RevId: 676849257 Change-Id: Iea560a9bbfffe2c5cfaaf6d467d1c6edaf49a996 --- .../com/google/devtools/build/lib/skyframe/BUILD | 1 + .../devtools/build/lib/skyframe/BzlLoadValue.java | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD index e202195f312e36..01467d8eac1c34 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD @@ -2664,6 +2664,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/packages:bzl_visibility", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization", + "//src/main/java/com/google/devtools/build/lib/util:hash_codes", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", "//src/main/java/net/starlark/java/eval", diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java index b340b6458a59e3..c6d70e7885b284 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java @@ -29,6 +29,7 @@ import com.google.devtools.build.lib.skyframe.serialization.LeafSerializationContext; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization; +import com.google.devtools.build.lib.util.HashCodes; import com.google.devtools.build.lib.vfs.Root; import com.google.devtools.build.lib.vfs.RootedPath; import com.google.devtools.build.skyframe.SkyFunctionName; @@ -39,7 +40,6 @@ import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; import java.io.IOException; -import java.util.Objects; import net.starlark.java.eval.Module; /** @@ -190,7 +190,10 @@ public boolean equals(Object obj) { @Override public int hashCode() { - return Objects.hash(getClass(), getLabel(), isBuildPrelude(), isBuiltins()); + int result = HashCodes.hashObjects(getClass(), getLabel()); + result = 31 * result + Boolean.hashCode(isBuildPrelude()); + result = 31 * result + Boolean.hashCode(isBuiltins()); + return result; } protected final MoreObjects.ToStringHelper toStringHelper() { @@ -316,7 +319,10 @@ public boolean equals(Object obj) { @Override public int hashCode() { - return Objects.hash(super.hashCode(), workspaceChunk, workspacePath); + int result = super.hashCode(); + result = 31 * result + Integer.hashCode(workspaceChunk); + result = 31 * result + workspacePath.hashCode(); + return result; } }