| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/ozone/platform/dri/dri_vsync_provider.h" |
| |
| #include "base/time/time.h" |
| #include "ui/ozone/platform/dri/dri_window_delegate.h" |
| #include "ui/ozone/platform/dri/hardware_display_controller.h" |
| |
| namespace ui { |
| |
| DriVSyncProvider::DriVSyncProvider(DriWindowDelegate* window_delegate) |
| : window_delegate_(window_delegate) { |
| } |
| |
| DriVSyncProvider::~DriVSyncProvider() {} |
| |
| void DriVSyncProvider::GetVSyncParameters(const UpdateVSyncCallback& callback) { |
| HardwareDisplayController* controller = window_delegate_->GetController(); |
| if (!controller) |
| return; |
| |
| // The value is invalid, so we can't update the parameters. |
| if (controller->GetTimeOfLastFlip() == 0 || |
| controller->get_mode().vrefresh == 0) |
| return; |
| |
| // Stores the time of the last refresh. |
| base::TimeTicks timebase = |
| base::TimeTicks::FromInternalValue(controller->GetTimeOfLastFlip()); |
| // Stores the refresh rate. |
| base::TimeDelta interval = |
| base::TimeDelta::FromSeconds(1) / controller->get_mode().vrefresh; |
| |
| callback.Run(timebase, interval); |
| } |
| |
| } // namespace ui |