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

Commit f8e2372a authored by Ricardo Cerqueira's avatar Ricardo Cerqueira Committed by Steve Kondik
Browse files

surfaceflinger: Consolidate display orientation compensation hooks

Dedupe rotation calculation code and make rotation a statically
available property in the DisplayDevice

Change-Id: Ic517ab0d2c05026cd6fa46d664aab7926be17b62
parent 3904525b
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ DisplayDevice::DisplayDevice(
      mIsSecure(isSecure),
      mSecureLayerVisible(false),
      mLayerStack(NO_LAYER_STACK),
      mHardwareOrientation(0),
      mOrientation(),
      mPowerMode(HWC_POWER_MODE_OFF),
      mActiveConfig(0)
@@ -131,7 +132,12 @@ DisplayDevice::DisplayDevice(
    // was created with createDisplay().
    switch (mType) {
        case DISPLAY_PRIMARY:
            char value[PROPERTY_VALUE_MAX];
            mDisplayName = "Built-in Screen";

            /* hwrotation applies only to the primary display */
            property_get("ro.sf.hwrotation", value, "0");
            mHardwareOrientation = atoi(value);
            break;
        case DISPLAY_EXTERNAL:
            mDisplayName = "HDMI Screen";
@@ -392,9 +398,7 @@ status_t DisplayDevice::orientationToTransfrom(
        int orientation, int w, int h, Transform* tr)
{
    uint32_t flags = 0;
    char value[PROPERTY_VALUE_MAX];
    property_get("ro.sf.hwrotation", value, "0");
    int additionalRot = atoi(value);
    int additionalRot = this->getHardwareOrientation();

    if (additionalRot) {
        additionalRot /= 90;
@@ -466,11 +470,7 @@ void DisplayDevice::setProjection(int orientation,
    if (!frame.isValid()) {
        // the destination frame can be invalid if it has never been set,
        // in that case we assume the whole display frame.
        char value[PROPERTY_VALUE_MAX];
        property_get("ro.sf.hwrotation", value, "0");
        int additionalRot = atoi(value);

        if (additionalRot == 90 || additionalRot == 270) {
        if ((mHardwareOrientation/90) & DisplayState::eOrientationSwapMask) {
            frame = Rect(h, w);
        } else {
            frame = Rect(w, h);
@@ -529,6 +529,10 @@ void DisplayDevice::setProjection(int orientation,
    mFrame = frame;
}

int DisplayDevice::getHardwareOrientation() {
    return mHardwareOrientation;
}

void DisplayDevice::dump(String8& result) const {
    const Transform& tr(mGlobalTransform);
    result.appendFormat(
+2 −0
Original line number Diff line number Diff line
@@ -173,6 +173,7 @@ public:
     */
    uint32_t getPageFlipCount() const;
    void dump(String8& result) const;
    int getHardwareOrientation();

private:
    /*
@@ -217,6 +218,7 @@ private:
            int w, int h, Transform* tr);

    uint32_t mLayerStack;
    int mHardwareOrientation;
    int mOrientation;
    // user-provided visible area of the layer stack
    Rect mViewport;
+1 −3
Original line number Diff line number Diff line
@@ -641,9 +641,7 @@ status_t SurfaceFlinger::getDisplayConfigs(const sp<IBinder>& display,
            info.orientation = 0;
        }

        char value[PROPERTY_VALUE_MAX];
        property_get("ro.sf.hwrotation", value, "0");
        int additionalRot = atoi(value) / 90;
        int additionalRot = mDisplays[0]->getHardwareOrientation() / 90;
        if ((type == DisplayDevice::DISPLAY_PRIMARY) && (additionalRot & DisplayState::eOrientationSwapMask)) {
            info.h = hwConfig.width;
            info.w = hwConfig.height;