Index: ui/surface/accelerated_surface_win.cc |
diff --git a/ui/surface/accelerated_surface_win.cc b/ui/surface/accelerated_surface_win.cc |
index 698f5fcd3d3dbb53c5c241514b1bb8c9de93187c..a3a7b86fbc8a0252bab306a77124158d887f6c18 100644 |
--- a/ui/surface/accelerated_surface_win.cc |
+++ b/ui/surface/accelerated_surface_win.cc |
@@ -4,6 +4,7 @@ |
#include "ui/surface/accelerated_surface_win.h" |
+#include <dwmapi.h> |
#include <windows.h> |
#include <algorithm> |
@@ -843,6 +844,24 @@ void AcceleratedPresenter::DoReleaseSurface() { |
source_texture_.Release(); |
} |
+void AcceleratedPresenter::GetPresentationStats(base::TimeTicks* timebase, |
+ uint32* interval_numerator, |
+ uint32* interval_denominator) { |
+ lock_.AssertAcquired(); |
+ |
+ DWM_TIMING_INFO timingInfo; |
+ timingInfo.cbSize = sizeof(timingInfo); |
+ HRESULT gctiResult = DwmGetCompositionTimingInfo(window_, &timingInfo); |
+ if (gctiResult != S_OK) |
+ return; |
+ |
+ *timebase = base::TimeTicks::FromQPCValue( |
+ static_cast<LONGLONG>(timingInfo.qpcVBlank)); |
+ // Swap the numerator/denominator to convert frequency to period. |
+ *interval_numerator = timingInfo.rateRefresh.uiDenominator; |
+ *interval_denominator = timingInfo.rateRefresh.uiNumerator; |
+} |
+ |
AcceleratedSurface::AcceleratedSurface(gfx::NativeWindow window) |
: presenter_(g_accelerated_presenter_map.Pointer()->CreatePresenter( |
window)) { |