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