gpu: Use swap chain frame statistics for presentation feedback

Use swap chain's frame statistics to issue presentation callbacks. Frame
statistics provides accurate information about presentation time while
the current implementation only uses the GPU completion and vsync time
to guess when presentation happens. The current implementation uses GPU
disjoint timer queries which are expensive (seen on sampling profiler).
Preliminary power measurements show an ~10% power reduction with a video
underlay test page on a Surface Laptop 2.

Frame statistics are collected after every Present() and used to retire
pending presentation callbacks. Frame statistics are also checked after
vsync using the the new gpu vsync mechanism in case client stops calling
SwapBuffers(). Enabling frame statistics also forces root surface to
always use swap chains instead of switching to dcomp surfaces when
overlays are used.

Can be enabled with --enable-featues=SwapChainFrameStatistics.

Change-Id: Ibbb86597c5b13a7b131b32a97bed541bd72ee68f
Bug: 892874
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1607420
Commit-Queue: Sunny Sachanandani <sunnyps@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#661451}
6 files changed