18b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol/* 28b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Copyright (c) 2014 Intel Corporation 38b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 48b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Licensed under the Apache License, Version 2.0 (the "License"); 58b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// you may not use this file except in compliance with the License. 68b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// You may obtain a copy of the License at 78b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 88b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// http://www.apache.org/licenses/LICENSE-2.0 98b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Unless required by applicable law or agreed to in writing, software 118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// distributed under the License is distributed on an "AS IS" BASIS, 128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// See the License for the specific language governing permissions and 148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// limitations under the License. 158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol*/ 168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <HwcTrace.h> 188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <IDisplayDevice.h> 198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <DisplayQuery.h> 208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <BufferManager.h> 218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <DisplayPlaneManager.h> 228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <Hwcomposer.h> 238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <VsyncManager.h> 248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 268b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace android { 278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace intel { 288b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin PujolVsyncManager::VsyncManager(Hwcomposer &hwc) 308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol :mHwc(hwc), 318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mInitialized(false), 328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mEnableDynamicVsync(true), 338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mEnabled(false), 348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mVsyncSource(IDisplayDevice::DEVICE_COUNT), 358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mLock() 368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin PujolVsyncManager::~VsyncManager() 408b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WARN_IF_NOT_DEINIT(); 428b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 438b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 448b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolbool VsyncManager::initialize() 458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mEnabled = false; 488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mVsyncSource = IDisplayDevice::DEVICE_COUNT; 498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mEnableDynamicVsync = !scUsePrimaryVsyncOnly; 508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mInitialized = true; 518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return true; 528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolvoid VsyncManager::deinitialize() 558b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 568b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (mEnabled) { 578b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("vsync is still enabled"); 588b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 598b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 608b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mVsyncSource = IDisplayDevice::DEVICE_COUNT; 618b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mEnabled = false; 628b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mEnableDynamicVsync = !scUsePrimaryVsyncOnly; 638b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mInitialized = false; 648b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 658b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 668b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolbool VsyncManager::handleVsyncControl(int disp, bool enabled) 678b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 688b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Mutex::Autolock l(mLock); 698b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 708b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (disp != IDisplayDevice::DEVICE_PRIMARY) { 718b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("vsync control on non-primary device %d", disp); 728b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return false; 738b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 748b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 758b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (mEnabled == enabled) { 768b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("vsync state %d is not changed", enabled); 778b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return true; 788b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 798b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 808b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (!enabled) { 818b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol disableVsync(); 828b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mEnabled = false; 838b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return true; 848b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } else { 858b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mEnabled = enableVsync(getCandidate()); 868b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return mEnabled; 878b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 888b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 898b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return false; 908b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 918b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 928b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolvoid VsyncManager::resetVsyncSource() 938b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 948b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Mutex::Autolock l(mLock); 958b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 968b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (!mEnableDynamicVsync) { 978b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ITRACE("dynamic vsync source switch is not supported"); 988b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return; 998b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1008b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1018b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (!mEnabled) { 1028b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return; 1038b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1048b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1058b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int vsyncSource = getCandidate(); 1068b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (vsyncSource == mVsyncSource) { 1078b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return; 1088b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1098b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol disableVsync(); 1118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol enableVsync(vsyncSource); 1128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 1138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolint VsyncManager::getVsyncSource() 1158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 1168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return mVsyncSource; 1178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 1188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolvoid VsyncManager::enableDynamicVsync(bool enable) 1208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 1218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Mutex::Autolock l(mLock); 1228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (scUsePrimaryVsyncOnly) { 1238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("dynamic vsync is not supported"); 1248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return; 1258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1268b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mEnableDynamicVsync = enable; 1288b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (!mEnabled) { 1308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return; 1318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int vsyncSource = getCandidate(); 1348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (vsyncSource == mVsyncSource) { 1358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return; 1368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol disableVsync(); 1398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol enableVsync(vsyncSource); 1408b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 1418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1428b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin PujolIDisplayDevice* VsyncManager::getDisplayDevice(int dispType ) { 1438b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return mHwc.getDisplayDevice(dispType); 1448b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 1458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolint VsyncManager::getCandidate() 1478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 1488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (!mEnableDynamicVsync) { 1498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return IDisplayDevice::DEVICE_PRIMARY; 1508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol IDisplayDevice *device = NULL; 1538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // use HDMI vsync when connected 1548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol device = getDisplayDevice(IDisplayDevice::DEVICE_EXTERNAL); 1558b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (device && device->isConnected()) { 1568b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return IDisplayDevice::DEVICE_EXTERNAL; 1578b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1588b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1598b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // use vsync from virtual display when video extended mode is entered 1608b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (Hwcomposer::getInstance().getDisplayAnalyzer()->isVideoExtModeActive()) { 1618b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol device = getDisplayDevice(IDisplayDevice::DEVICE_VIRTUAL); 1628b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (device && device->isConnected()) { 1638b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return IDisplayDevice::DEVICE_VIRTUAL; 1648b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1658b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("Could not use vsync from secondary device"); 1668b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1678b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return IDisplayDevice::DEVICE_PRIMARY; 1688b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 1698b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1708b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolbool VsyncManager::enableVsync(int candidate) 1718b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 1728b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (mVsyncSource != IDisplayDevice::DEVICE_COUNT) { 1738b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("vsync has been enabled on %d", mVsyncSource); 1748b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return true; 1758b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1768b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1778b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol IDisplayDevice *device = getDisplayDevice(candidate); 1788b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (!device) { 1798b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ETRACE("invalid vsync source candidate %d", candidate); 1808b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return false; 1818b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1828b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1838b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (device->vsyncControl(true)) { 1848b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mVsyncSource = candidate; 1858b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return true; 1868b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1878b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1888b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (candidate != IDisplayDevice::DEVICE_PRIMARY) { 1898b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("failed to enable vsync on display %d, fall back to primary", candidate); 1908b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol device = getDisplayDevice(IDisplayDevice::DEVICE_PRIMARY); 1918b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (device && device->vsyncControl(true)) { 1928b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mVsyncSource = IDisplayDevice::DEVICE_PRIMARY; 1938b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return true; 1948b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1958b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1968b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ETRACE("failed to enable vsync on the primary display"); 1978b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return false; 1988b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 1998b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2008b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolvoid VsyncManager::disableVsync() 2018b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 2028b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (mVsyncSource == IDisplayDevice::DEVICE_COUNT) { 2038b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("vsync has been disabled"); 2048b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return; 2058b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 2068b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2078b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol IDisplayDevice *device = getDisplayDevice(mVsyncSource); 2088b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (device && !device->vsyncControl(false)) { 2098b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("failed to disable vsync on device %d", mVsyncSource); 2108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 2118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mVsyncSource = IDisplayDevice::DEVICE_COUNT; 2128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 2138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} // namespace intel 2158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} // namespace android 2168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 217