diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-10-27 03:22:35 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-10-27 03:22:35 +0000 |
commit | 8011923e4023ce84db4336b953128c037a6bb5a0 (patch) | |
tree | fdf4acb9512d97a10a6b24228a70af3cdf597496 | |
parent | 26828b3c319af3caf16a9ef523c04dd4de0c6832 (diff) | |
parent | a6d4907712e30bf82f905cdf70d975b5c8e8aaa2 (diff) | |
download | native-oreo-dr1-release.tar.gz |
Merge cherrypicks of [3131624, 3131640, 3132432, 3132435, 3132438, 3132441, 3132444, 3132447, 3131929, 3131930, 3131931, 3132492, 3132493, 3132033] into oc-dr1-releaseandroid-8.0.0_r33oreo-dr1-release
Change-Id: Id794b1d2e4a60a197f611b0ab4ee13282b13666b
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 42 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 1 |
2 files changed, 35 insertions, 8 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 8ed6686ebf..8c90c39245 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -645,6 +645,12 @@ void SurfaceFlinger::readPersistentProperties() { property_get("persist.sys.sf.color_saturation", value, "1.0"); mSaturation = atof(value); ALOGV("Saturation is set to %.2f", mSaturation); + + property_get("persist.sys.sf.native_mode", value, "0"); + mForceNativeColorMode = atoi(value) == 1; + if (mForceNativeColorMode) { + ALOGV("Forcing native color mode"); + } } void SurfaceFlinger::startBootAnim() { @@ -1210,12 +1216,13 @@ void SurfaceFlinger::createDefaultDisplayDevice() { break; } } + bool useWideColorMode = hasWideColorModes && hasWideColorDisplay && !mForceNativeColorMode; sp<DisplayDevice> hw = new DisplayDevice(this, DisplayDevice::DISPLAY_PRIMARY, type, isSecure, token, fbs, producer, mRenderEngine->getEGLConfig(), - hasWideColorModes && hasWideColorDisplay); + useWideColorMode); mDisplays.add(token, hw); android_color_mode defaultColorMode = HAL_COLOR_MODE_NATIVE; - if (hasWideColorModes && hasWideColorDisplay) { + if (useWideColorMode) { defaultColorMode = HAL_COLOR_MODE_SRGB; } setActiveColorModeInternal(hw, defaultColorMode); @@ -1731,6 +1738,10 @@ mat4 SurfaceFlinger::computeSaturationMatrix() const { // pickColorMode translates a given dataspace into the best available color mode. // Currently only support sRGB and Display-P3. android_color_mode SurfaceFlinger::pickColorMode(android_dataspace dataSpace) const { + if (mForceNativeColorMode) { + return HAL_COLOR_MODE_NATIVE; + } + switch (dataSpace) { // treat Unknown as regular SRGB buffer, since that's what the rest of the // system expects. @@ -2568,8 +2579,10 @@ bool SurfaceFlinger::doComposeSurfaces( ALOGV("hasClientComposition"); #ifdef USE_HWC2 - mRenderEngine->setWideColor(displayDevice->getWideColorSupport()); - mRenderEngine->setColorMode(displayDevice->getActiveColorMode()); + mRenderEngine->setWideColor( + displayDevice->getWideColorSupport() && !mForceNativeColorMode); + mRenderEngine->setColorMode(mForceNativeColorMode ? + HAL_COLOR_MODE_NATIVE : displayDevice->getActiveColorMode()); #endif if (!displayDevice->makeCurrent(mEGLDisplay, mEGLContext)) { ALOGW("DisplayDevice::makeCurrent failed. Aborting surface composition for display %s", @@ -3607,6 +3620,7 @@ void SurfaceFlinger::dumpBufferingStats(String8& result) const { void SurfaceFlinger::dumpWideColorInfo(String8& result) const { result.appendFormat("hasWideColorDisplay: %d\n", hasWideColorDisplay); + result.appendFormat("forceNativeColorMode: %d\n", mForceNativeColorMode); // TODO: print out if wide-color mode is active or not @@ -4059,6 +4073,17 @@ status_t SurfaceFlinger::onTransact( repaintEverything(); return NO_ERROR; } + case 1023: { // Set native mode + mForceNativeColorMode = data.readInt32() == 1; + + invalidateHwcGeometry(); + repaintEverything(); + return NO_ERROR; + } + case 1024: { // Is wide color gamut rendering/color management supported? + reply->writeBool(hasWideColorDisplay); + return NO_ERROR; + } } } return err; @@ -4210,8 +4235,9 @@ status_t SurfaceFlinger::captureScreen(const sp<IBinder>& display, WindowDisconnector disconnector(window, NATIVE_WINDOW_API_EGL); ANativeWindowBuffer* buffer = nullptr; - result = getWindowBuffer(window, reqWidth, reqHeight, hasWideColorDisplay, - getRenderEngine().usesWideColor(), &buffer); + result = getWindowBuffer(window, reqWidth, reqHeight, + hasWideColorDisplay && !mForceNativeColorMode, + getRenderEngine().usesWideColor(), &buffer); if (result != NO_ERROR) { return result; } @@ -4313,8 +4339,8 @@ void SurfaceFlinger::renderScreenImplLocked( } #ifdef USE_HWC2 - engine.setWideColor(hw->getWideColorSupport()); - engine.setColorMode(hw->getActiveColorMode()); + engine.setWideColor(hw->getWideColorSupport() && !mForceNativeColorMode); + engine.setColorMode(mForceNativeColorMode ? HAL_COLOR_MODE_NATIVE : hw->getActiveColorMode()); #endif // make sure to clear all GL error flags diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index acfad46526..e75d9dcdde 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -772,6 +772,7 @@ private: #endif float mSaturation = 1.0f; + bool mForceNativeColorMode = false; }; }; // namespace android |