10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "ui/ozone/platform/dri/dri_vsync_provider.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/time/time.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/ozone/platform/dri/dri_window_delegate.h" 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "ui/ozone/platform/dri/hardware_display_controller.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace ui { 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDriVSyncProvider::DriVSyncProvider(DriWindowDelegate* window_delegate) 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : window_delegate_(window_delegate) { 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)DriVSyncProvider::~DriVSyncProvider() {} 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void DriVSyncProvider::GetVSyncParameters(const UpdateVSyncCallback& callback) { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HardwareDisplayController* controller = window_delegate_->GetController(); 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!controller) 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The value is invalid, so we can't update the parameters. 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (controller->get_time_of_last_flip() == 0 || 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci controller->get_mode().vrefresh == 0) 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Stores the time of the last refresh. 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::TimeTicks timebase = 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeTicks::FromInternalValue(controller->get_time_of_last_flip()); 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Stores the refresh rate. 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::TimeDelta interval = 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta::FromSeconds(1) / controller->get_mode().vrefresh; 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback.Run(timebase, interval); 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace ui 40