I think the optimal behavior here does require waiting to see if the TouchStart is handled, but what we currently do is nowhere close to optimal.
A gesture falls into one of 4 categories:
1. Cancelling non-preventDefaulted
2. Cancelling preventDefaulted
3. Non-cancelling non-preventDefaulted
4. Non-cancelling preventDefaulted
I think ideally we would cancel the fling in every case except case 3. In order to do this, we need to know whether or not the events were preventDefaulted. I believe that our current approach is to cancel the fling in case 1 only.
If we ignore the touch disposition, we could cancel the fling in cases 1 and 2, which seems like it's more correct than what we do now, and has better performance implications.