Index: ui/surface/accelerated_surface_win.cc |
diff --git a/ui/surface/accelerated_surface_win.cc b/ui/surface/accelerated_surface_win.cc |
index be55b6fbd567139272c2d88208beeb3359710611..199d9b9ccc09ce3728d04bb77109e35783556d3d 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> |
@@ -861,6 +862,24 @@ void AcceleratedPresenter::DoReleaseSurface() { |
source_texture_.Release(); |
} |
+void AcceleratedPresenter::GetPresentationStats(base::TimeTicks* timebase, |
+ uint32* interval_numerator, |
+ uint32* interval_denominator) { |
+ lock_.AssertAcquired(); |
+ |
+ DWM_TIMING_INFO timing_info; |
+ timing_info.cbSize = sizeof(timing_info); |
+ HRESULT result = DwmGetCompositionTimingInfo(window_, &timing_info); |
+ if (result != S_OK) |
+ return; |
+ |
+ *timebase = base::TimeTicks::FromQPCValue( |
+ static_cast<LONGLONG>(timing_info.qpcVBlank)); |
+ // Swap the numerator/denominator to convert frequency to period. |
+ *interval_numerator = timing_info.rateRefresh.uiDenominator; |
+ *interval_denominator = timing_info.rateRefresh.uiNumerator; |
+} |
+ |
AcceleratedSurface::AcceleratedSurface(gfx::NativeWindow window) |
: presenter_(g_accelerated_presenter_map.Pointer()->CreatePresenter( |
window)) { |