Well in my opinion maybe you can try not refreshing immediately. Just record the position in a fifo and return. You can get yourself another thread which looks through the fifo and draws, so the handler may return faster, and missing fewer. Well...in fact I am not very sure of this....