Rollup merge of #37231 - jonas-schievink:obligation-forest-the-quest-for-performance, r=arielb1

[Obligation Forest] Don't process cycles when stalled

This improves the `inflate-0.1.0` benchmark by about 10% for me.

/me hopes this is sound
This commit is contained in:
Eduard-Mihai Burtescu 2016-10-19 08:00:03 +03:00 committed by GitHub
commit 6ae80c6ac4

View File

@ -333,6 +333,7 @@ impl<O: ForestObligation> ObligationForest<O> {
}
}
Err(err) => {
stalled = false;
let backtrace = self.error_at(index);
errors.push(Error {
error: err,
@ -342,6 +343,16 @@ impl<O: ForestObligation> ObligationForest<O> {
}
}
if stalled {
// There's no need to perform marking, cycle processing and compression when nothing
// changed.
return Outcome {
completed: vec![],
errors: errors,
stalled: stalled,
};
}
self.mark_as_waiting();
self.process_cycles(processor);