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#ifndef VSYNC_MANAGER_H 178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#define VSYNC_MANAGER_H 188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <IDisplayDevice.h> 208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <utils/threads.h> 218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace android { 238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace intel { 248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 268b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolclass Hwcomposer; 278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 288b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolclass VsyncManager { 298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolpublic: 308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol VsyncManager(Hwcomposer& hwc); 318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual ~VsyncManager(); 328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolpublic: 348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool initialize(); 358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void deinitialize(); 368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool handleVsyncControl(int disp, bool enabled); 378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void resetVsyncSource(); 388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int getVsyncSource(); 398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void enableDynamicVsync(bool enable); 408b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprivate: 428b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol inline int getCandidate(); 438b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol inline bool enableVsync(int candidate); 448b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol inline void disableVsync(); 458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol IDisplayDevice* getDisplayDevice(int dispType); 468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprivate: 488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Hwcomposer &mHwc; 498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mInitialized; 508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mEnableDynamicVsync; 518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mEnabled; 528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mVsyncSource; 538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Mutex mLock; 548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 558b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprivate: 568b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // toggle this constant to use primary vsync only or enable dynamic vsync. 578b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol static const bool scUsePrimaryVsyncOnly = false; 588b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol}; 598b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 608b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} // namespace intel 618b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} // namespace android 628b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 638b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 648b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 658b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#endif /* VSYNC_MANAGER_H */ 66