diff options
author | Greg Estren <gregce@google.com> | 2016-12-14 19:46:48 +0000 |
---|---|---|
committer | John Cater <jcater@google.com> | 2016-12-14 20:18:29 +0000 |
commit | 86045da94fcee214576d858328787db307a4f4d3 (patch) | |
tree | 54a3a7e6702ed45174ff12185a077be8eb76b322 /BUILD | |
parent | 0bba4c910f774dedbf39d3f8cad32862be725a41 (diff) |
Fix an analysis phase performance regression with dynamic configurations.
The short story is that env.valuesMissing() returns true without regard
for which Skyframe evaluation missed values. In other words, given:
env.getValues(missingValues); // Not all values ready.
env.getValues(presentValues); // All value ready.
if (env.valuesMissing()) { return null; }
this returns null even if "env.getValues(presentValues)" has all its
results.
This doesn't have correctness consequences, but it does have (major)
performance consequences, particularly in ConfiguredTargetFunction.
The quick reason is that the successful call can still do useful
followup work, but that gets short-circuited if the function nulls
out early. See the code changes for full details.
This eliminates a 30% hit on analysis time with dynamic configurations.
With this change, that goes down to 0.
The takeaway: ConfiguredTargetFunction
is both unintuitively complex and performance-critical. C'est la vie.
--
PiperOrigin-RevId: 142044069
MOS_MIGRATED_REVID=142044069
Diffstat (limited to 'BUILD')
0 files changed, 0 insertions, 0 deletions