From d63fd945a53f94e2c89e5f3fb97289e74ee8a1b1 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 27 Aug 2018 14:38:14 -0700 Subject: surfaceflinger: make mPrimaryDisplayOrientation static The convention is to store configstore values in static variables. Bug: 113041375 Test: take screenshot, rotate screen, screencap Change-Id: I085178803bc897e3e9201fd10bd8731cc5b617c1 Merged-In: I085178803bc897e3e9201fd10bd8731cc5b617c1 --- services/surfaceflinger/DisplayDevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'services/surfaceflinger/DisplayDevice.cpp') diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 309fd0a791..30322a8b67 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -610,7 +610,7 @@ void DisplayDevice::setProjection(int orientation, // need to take care of primary display rotation for mGlobalTransform // for case if the panel is not installed aligned with device orientation if (mType == DisplayType::DISPLAY_PRIMARY) { - int primaryDisplayOrientation = mFlinger->getPrimaryDisplayOrientation(); + int primaryDisplayOrientation = SurfaceFlinger::primaryDisplayOrientation; DisplayDevice::orientationToTransfrom( (orientation + primaryDisplayOrientation) % (DisplayState::eOrientation270 + 1), w, h, &R); -- cgit v1.2.3-59-g8ed1b From 690a76f15c4f267076ba8a70aff0c120e996a115 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 27 Aug 2018 14:38:23 -0700 Subject: surfaceflinger: add install orientation to DisplayDevice Rather than querying it from SurfaceFlinger, initialize DisplayDevice with the install orientation. Bug: 113041375 Test: take screenshot, rotate screen, screencap Change-Id: Ibffe47033276e938388af775749c56f170fe8c77 Merged-In: Ibffe47033276e938388af775749c56f170fe8c77 --- services/surfaceflinger/DisplayDevice.cpp | 5 +++-- services/surfaceflinger/DisplayDevice.h | 3 +++ services/surfaceflinger/SurfaceFlinger.cpp | 7 +++++-- services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h | 9 +++++---- 4 files changed, 16 insertions(+), 8 deletions(-) (limited to 'services/surfaceflinger/DisplayDevice.cpp') diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 30322a8b67..65c3839141 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -224,6 +224,7 @@ DisplayDevice::DisplayDevice( std::unique_ptr renderSurface, int displayWidth, int displayHeight, + int displayInstallOrientation, bool hasWideColorGamut, const HdrCapabilities& hdrCapabilities, const int32_t supportedPerFrameMetadata, @@ -239,6 +240,7 @@ DisplayDevice::DisplayDevice( mSurface{std::move(renderSurface)}, mDisplayWidth(displayWidth), mDisplayHeight(displayHeight), + mDisplayInstallOrientation(displayInstallOrientation), mPageFlipCount(0), mIsSecure(isSecure), mLayerStack(NO_LAYER_STACK), @@ -610,9 +612,8 @@ void DisplayDevice::setProjection(int orientation, // need to take care of primary display rotation for mGlobalTransform // for case if the panel is not installed aligned with device orientation if (mType == DisplayType::DISPLAY_PRIMARY) { - int primaryDisplayOrientation = SurfaceFlinger::primaryDisplayOrientation; DisplayDevice::orientationToTransfrom( - (orientation + primaryDisplayOrientation) % (DisplayState::eOrientation270 + 1), + (orientation + mDisplayInstallOrientation) % (DisplayState::eOrientation270 + 1), w, h, &R); } diff --git a/services/surfaceflinger/DisplayDevice.h b/services/surfaceflinger/DisplayDevice.h index 6e0ab578cf..21af37f043 100644 --- a/services/surfaceflinger/DisplayDevice.h +++ b/services/surfaceflinger/DisplayDevice.h @@ -87,6 +87,7 @@ public: std::unique_ptr renderSurface, int displayWidth, int displayHeight, + int displayInstallOrientation, bool hasWideColorGamut, const HdrCapabilities& hdrCapabilities, const int32_t supportedPerFrameMetadata, @@ -110,6 +111,7 @@ public: int getWidth() const; int getHeight() const; + int getInstallOrientation() const { return mDisplayInstallOrientation; } void setVisibleLayersSortedByZ(const Vector< sp >& layers); const Vector< sp >& getVisibleLayersSortedByZ() const; @@ -233,6 +235,7 @@ private: std::unique_ptr mSurface; int mDisplayWidth; int mDisplayHeight; + const int mDisplayInstallOrientation; mutable uint32_t mPageFlipCount; String8 mDisplayName; bool mIsSecure; diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index f51e71382c..a503bba23b 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -2417,6 +2417,9 @@ sp SurfaceFlinger::setupNewDisplayDeviceInternal( nativeWindow->setSwapInterval(nativeWindow.get(), 0); } + const int displayInstallOrientation = state.type == DisplayDevice::DISPLAY_PRIMARY ? + primaryDisplayOrientation : DisplayState::eOrientationDefault; + // virtual displays are always considered enabled auto initialPowerMode = (state.type >= DisplayDevice::DISPLAY_VIRTUAL) ? HWC_POWER_MODE_NORMAL : HWC_POWER_MODE_OFF; @@ -2424,7 +2427,7 @@ sp SurfaceFlinger::setupNewDisplayDeviceInternal( sp hw = new DisplayDevice(this, state.type, hwcId, state.isSecure, display, nativeWindow, dispSurface, std::move(renderSurface), displayWidth, displayHeight, - hasWideColorGamut, hdrCapabilities, + displayInstallOrientation, hasWideColorGamut, hdrCapabilities, supportedPerFrameMetadata, hwcColorModes, initialPowerMode); if (maxFrameBufferAcquiredBuffers >= 3) { @@ -4874,7 +4877,7 @@ status_t SurfaceFlinger::captureScreen(const sp& display, spgetViewport().height()); } - // XXX primaryDisplayOrientation is ignored + // XXX display->getInstallOrientation() is ignored } DisplayRenderArea renderArea(device, sourceCrop, reqWidth, reqHeight, renderAreaRotation); diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h index 61b0e42310..4c5fa9953e 100644 --- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h +++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h @@ -320,10 +320,11 @@ public: sp inject() { std::unordered_map> hdrAndRenderIntents; sp device = - new DisplayDevice(mFlinger.mFlinger.get(), mType, mHwcId, mSecure, mDisplayToken, - mNativeWindow, mDisplaySurface, std::move(mRenderSurface), 0, - 0, false, HdrCapabilities(), 0, hdrAndRenderIntents, - HWC_POWER_MODE_NORMAL); + new DisplayDevice(mFlinger.mFlinger.get(), mType, mHwcId, mSecure, + mDisplayToken, mNativeWindow, mDisplaySurface, + std::move(mRenderSurface), 0, 0, + DisplayState::eOrientationDefault, false, HdrCapabilities(), + 0, hdrAndRenderIntents, HWC_POWER_MODE_NORMAL); mFlinger.mutableDisplays().add(mDisplayToken, device); DisplayDeviceState state(mType, mSecure); -- cgit v1.2.3-59-g8ed1b