tree cdb898e57428c2d325798b6922b2b61376b4f2e6
parent 86e54b07373040f16b365a631a5b7ea3cf4db65c
author Jake Wharton <jakew@google.com> 1587756231 -0400
committer Jake Wharton <jakew@google.com> 1587757425 -0400

Reduce bytecode impact of mixed requirement views

When mixing optional and required views we used to skip storing into the 'id' local for optional views.

    id = R.id.one;
    View one = root.findViewById(id);
    if (one == null) break missingId;

    View two = root.findViewById(R.id.two);

This uses separate registers for R.id.one and R.id.two requiring one more register in total for the method.

    .registers 4

    const v0, 0x102001a

    .line 19
    invoke-virtual {p0, v0}, Landroid/view/View;->findViewById(I)Landroid/view/View;

    move-result-object v1

    if-nez v1, :cond_a

    goto :goto_1f

    :cond_a
    const v2, 0x102003c

    .line 22
    invoke-virtual {p0, v2}, Landroid/view/View;->findViewById(I)Landroid/view/View;

When the 'id' local is present, unconditionally storing the next ID into that local allows the register to be reused.

    id = R.id.one;
    View one = root.findViewById(id);
    if (one == null) break missingId;

    id = R.id.two;
    View two = root.findViewById(id);

Produces:

    .registers 3

    const v0, 0x102001a

    .line 19
    invoke-virtual {p0, v0}, Landroid/view/View;->findViewById(I)Landroid/view/View;

    move-result-object v1

    if-nez v1, :cond_a

    goto :goto_1f

    :cond_a
    const v0, 0x102003c

    .line 22
    invoke-virtual {p0, v0}, Landroid/view/View;->findViewById(I)Landroid/view/View;

Bug: 128314294
Test: ../base/bazel/bazel test //tools/base/build-system/integration-test/databinding:tests //tools/data-binding/...
Change-Id: I6408d214ba549c443d3743151636eef391083d26
