The current implementation starts a render synchronously whenever one of the
inputs change. Often, multiple inputs change together, and the current
behavior causes unncessary rerenders (and cancels half way through).
This change instead schedules the rerendering asynchronously on the next
microtask, and debounces them so that multiple renders collapse into
one.
Change-Id: Id5e823a53ecfa9c542d81835bf67556dcab14d4a