Skip to content

Commit

Permalink
Memoize the hashCode of BindingDeclaration implementations
Browse files Browse the repository at this point in the history
This has a pretty big win: at least 11% for a large internal component (5s/build), but looking at the profile diffbase, it looks like certain areas got even faster, and some areas that remain unchanged could have been slower in the profiles that were run. Either way, it's a big win for little cost.

RELNOTES=Build performance improvements for large components

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=231440006
  • Loading branch information
ronshapiro committed Jan 31, 2019
1 parent e572371 commit 39456a4
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 0 deletions.
8 changes: 8 additions & 0 deletions java/dagger/internal/codegen/DelegateDeclaration.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.google.auto.common.MoreElements;
import com.google.auto.common.MoreTypes;
import com.google.auto.value.AutoValue;
import com.google.auto.value.extension.memoized.Memoized;
import com.google.common.base.Equivalence;
import com.google.common.collect.Iterables;
import dagger.Binds;
Expand All @@ -45,6 +46,13 @@ abstract class DelegateDeclaration extends BindingDeclaration implements HasCont

abstract Optional<Equivalence.Wrapper<AnnotationMirror>> wrappedMapKey();

@Memoized
@Override
public abstract int hashCode();

@Override
public abstract boolean equals(Object obj);

static final class Factory {
private final DaggerTypes types;
private final KeyFactory keyFactory;
Expand Down
8 changes: 8 additions & 0 deletions java/dagger/internal/codegen/MembersInjectionBinding.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,14 @@ boolean requiresModuleInstance() {
return false;
}

@Memoized
@Override
public abstract int hashCode();

// TODO(ronshapiro,dpb): simplify the equality semantics
@Override
public abstract boolean equals(Object obj);

@AutoValue
abstract static class InjectionSite {
enum Kind {
Expand Down
8 changes: 8 additions & 0 deletions java/dagger/internal/codegen/MultibindingDeclaration.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import com.google.auto.common.MoreTypes;
import com.google.auto.value.AutoValue;
import com.google.auto.value.extension.memoized.Memoized;
import dagger.internal.codegen.ContributionType.HasContributionType;
import dagger.model.Key;
import dagger.multibindings.Multibinds;
Expand Down Expand Up @@ -56,6 +57,13 @@ abstract class MultibindingDeclaration extends BindingDeclaration implements Has
@Override
public abstract ContributionType contributionType();

@Memoized
@Override
public abstract int hashCode();

@Override
public abstract boolean equals(Object obj);

/**
* A factory for {@link MultibindingDeclaration}s.
*/
Expand Down
8 changes: 8 additions & 0 deletions java/dagger/internal/codegen/OptionalBindingDeclaration.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import static com.google.common.base.Preconditions.checkArgument;

import com.google.auto.value.AutoValue;
import com.google.auto.value.extension.memoized.Memoized;
import dagger.BindsOptionalOf;
import dagger.model.Key;
import java.util.Optional;
Expand All @@ -41,6 +42,13 @@ abstract class OptionalBindingDeclaration extends BindingDeclaration {
@Override
public abstract Key key();

@Memoized
@Override
public abstract int hashCode();

@Override
public abstract boolean equals(Object obj);

static class Factory {
private final KeyFactory keyFactory;

Expand Down
8 changes: 8 additions & 0 deletions java/dagger/internal/codegen/ProductionBinding.java
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,14 @@ static Builder builder() {
.thrownTypes(ImmutableList.<TypeMirror>of());
}

@Memoized
@Override
public abstract int hashCode();

// TODO(ronshapiro,dpb): simplify the equality semantics
@Override
public abstract boolean equals(Object obj);

@AutoValue.Builder
@CanIgnoreReturnValue
abstract static class Builder extends ContributionBinding.Builder<ProductionBinding, Builder> {
Expand Down
8 changes: 8 additions & 0 deletions java/dagger/internal/codegen/ProvisionBinding.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,14 @@ boolean requiresModuleInstance() {
return super.requiresModuleInstance();
}

@Memoized
@Override
public abstract int hashCode();

// TODO(ronshapiro,dpb): simplify the equality semantics
@Override
public abstract boolean equals(Object obj);

@AutoValue.Builder
@CanIgnoreReturnValue
abstract static class Builder extends ContributionBinding.Builder<ProvisionBinding, Builder> {
Expand Down
8 changes: 8 additions & 0 deletions java/dagger/internal/codegen/SubcomponentDeclaration.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import static dagger.internal.codegen.ConfigurationAnnotations.getSubcomponentCreator;

import com.google.auto.value.AutoValue;
import com.google.auto.value.extension.memoized.Memoized;
import com.google.common.collect.ImmutableSet;
import dagger.model.Key;
import java.util.Optional;
Expand Down Expand Up @@ -49,6 +50,13 @@ abstract class SubcomponentDeclaration extends BindingDeclaration {
/** The module annotation. */
abstract ModuleAnnotation moduleAnnotation();

@Memoized
@Override
public abstract int hashCode();

@Override
public abstract boolean equals(Object obj);

static class Factory {
private final KeyFactory keyFactory;

Expand Down

0 comments on commit 39456a4

Please sign in to comment.