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