Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Xamarin.Android.Build.Tasks] _CopyIntermediateAssemblies uses CopyIfChanged #2128

Merged

Conversation

jonathanpeppers
Copy link
Member

Context: #2088

970da9e was a good step towards "correctness" in building
incrementally in the following scenario:

  • File | New Xamarin.Forms project | NetStandard library
  • Build
  • Change XAML
  • Build

In this scenario, there is now a new target rising to the surface we
can improve:

276 ms  _CopyIntermediateAssemblies                1 calls

Looking at the target, it seems we could use the CopyIfChanged task
here more effectively. This task will automaticaly set the timestamps
of files that have been copied, and so we don't need any subsequent
<ItemGroup /> or <Touch /> elements. It was also touching all
files instead of just the ones that were changed.

After this change:

33 ms  _CopyIntermediateAssemblies                1 calls

The overall build went from 7.058s to 6.652s, so there must be some
other targets that benefit from the timestamps not changing on all
of these files.

…Changed

Context: dotnet#2088

970da9e was a good step towards "correctness" in building
incrementally in the following scenario:
- File | New Xamarin.Forms project | NetStandard library
- Build
- Change XAML
- Build

In this scenario, there is now a new target rising to the surface we
can improve:

    276 ms  _CopyIntermediateAssemblies                1 calls

Looking at the target, it seems we could use the `CopyIfChanged` task
here more effectively. This task will automaticaly set the timestamps
of files that have been copied, and so we don't need any subsequent
`<ItemGroup />` or `<Touch />` elements. It was also touching *all*
files instead of just the ones that were changed.

After this change:

    33 ms  _CopyIntermediateAssemblies                1 calls

The overall build went from 7.058s to 6.652s, so there must be some
other targets that benefit from the timestamps not changing on *all*
of these files.
@jonathanpeppers
Copy link
Member Author

Build logs here: CopyIntermediateAssemblies.zip

@dellis1972 dellis1972 merged commit c2d3681 into dotnet:master Sep 3, 2018
jonathanpeppers added a commit to jonathanpeppers/xamarin-android that referenced this pull request Oct 16, 2018
Context: dotnet#2247
Context: dotnet#2128

The `_CopyIntermediateAssemblies` target has a bug for incremental
builds, reproduced by the following:
- Build a Xamarin.Android app project
- `touch` the project's assembly in `$(IntermediateOutputPath)`
- Build a second time. `_CopyIntermediateAssemblies` will run as
  expected.
- Build a third time. `_CopyIntermediateAssemblies` will still run!

When in this state, `_CopyIntermediateAssemblies` will always run.
This is bad because it triggers other expensive targets like
`_UpdateAndroidResgen` _every time_.

I believe I introduced this in dotnet#2128, which was when I saw
`_CopyIntermediateAssemblies` taking more time than it used to. It was
a good tradeoff though, since it prevented `_UpdateAndroidResgen` from
running too often. 15.9 does not have dotnet#2128.

To fix this problem properly, I introduced a new
`_copyintermediate.stamp` file to be used as the `Outputs` of the
target. In addition to fixing our incremental build here, there should
be performance gains in only verifying the timestamp of one file in
`Outputs`.

The `Inputs` of the `_CopyIntermediateAssemblies` were also incorrect,
as it was not using the "satellite" assembly files as an input.

This does not fully complete dotnet#2247, as there are two other targets
listed I need to investigate further. These are likely unrelated to
the changes in dotnet#2128.
@github-actions github-actions bot locked and limited conversation to collaborators Feb 2, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants