Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03e40727 authored by Mathias Agopian's avatar Mathias Agopian
Browse files

set vsync power hint

Change-Id: I28c2faf9ff584df3e74392712971cbcf75eb9e98
parent 627f4718
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ LOCAL_SRC_FILES:= \
    DisplayHardware/DisplayHardware.cpp     \
    DisplayHardware/DisplayHardwareBase.cpp \
    DisplayHardware/HWComposer.cpp          \
    DisplayHardware/PowerHAL.cpp            \
    GLExtensions.cpp                        \
    MessageQueue.cpp                        \
    SurfaceFlinger.cpp                      \
+7 −0
Original line number Diff line number Diff line
@@ -358,6 +358,13 @@ void DisplayHardware::setVSyncHandler(const sp<VSyncHandler>& handler) {
    mVSyncHandler = handler;
}

void DisplayHardware::eventControl(int event, int enabled) {
    if (event == EVENT_VSYNC) {
        mPowerHAL.vsyncHint(enabled);
    }
    mHwc->eventControl(event, enabled);
}

void DisplayHardware::onVSyncReceived(int dpy, nsecs_t timestamp) {
    sp<VSyncHandler> handler;
    { // scope for the lock
+9 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@

#include "DisplayHardware/DisplayHardwareBase.h"
#include "HWComposer.h"
#include "PowerHAL.h"

namespace android {

@@ -86,6 +87,12 @@ public:

    void setVSyncHandler(const sp<VSyncHandler>& handler);

    enum {
        EVENT_VSYNC = HWC_EVENT_VSYNC
    };

    void eventControl(int event, int enabled);


    uint32_t getPageFlipCount() const;
    EGLDisplay getEGLDisplay() const { return mDisplay; }
@@ -129,6 +136,8 @@ private:

    // constant once set
    HWComposer*     mHwc;
    PowerHAL        mPowerHAL;


    mutable Mutex   mLock;

+5 −3
Original line number Diff line number Diff line
@@ -125,19 +125,21 @@ void HWComposer::vsync(int dpy, int64_t timestamp) {
    mEventHandler.onVSyncReceived(dpy, timestamp);
}

status_t HWComposer::eventControl(int event, int enabled) {
void HWComposer::eventControl(int event, int enabled) {
    status_t err = NO_ERROR;
    if (mHwc && mHwc->common.version >= HWC_DEVICE_API_VERSION_0_3) {
        if (!mDebugForceFakeVSync) {
            err = mHwc->methods->eventControl(mHwc, event, enabled);
            // error here should not happen -- not sure what we should
            // do if it does.
            ALOGE_IF(err, "eventControl(%d, %d) failed %s",
                    event, enabled, strerror(-err));
        }
    }

    if (err == NO_ERROR && mVSyncThread != NULL) {
        mVSyncThread->setEnabled(enabled);
    }

    return err;
}

void HWComposer::setFrameBuffer(EGLDisplay dpy, EGLSurface sur) {
+1 −1
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ public:
        EVENT_VSYNC = HWC_EVENT_VSYNC
    };

    status_t eventControl(int event, int enabled);
    void eventControl(int event, int enabled);

    // this class is only used to fake the VSync event on systems that don't
    // have it.
Loading