diff options
| author | 2017-07-20 18:49:46 -0700 | |
|---|---|---|
| committer | 2017-07-21 12:09:26 -0700 | |
| commit | c53d3558d55dfd1d1c424b0d632fea693113e83e (patch) | |
| tree | 550645c9773a0fa4142292b8d22f4593818ef4d7 | |
| parent | 349abaf55fe201a99f75eff5060d81b783819951 (diff) | |
Postpone color mode change until after boot animation
sRGB is only set by SurfaceFlinger when the default display is
wide color capable. Since we compute the best color mode on
every frame anyway for wide color capable displays, we can
simply move the sRGB set to the end of the boot animation.
Bug: 63823274
Test: Manual
Change-Id: I11bb6095acb63e66bcf7dff9e3f7b36588e371c1
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index d30f2e24d7..63f260a958 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -354,7 +354,6 @@ void SurfaceFlinger::bootFinished() const nsecs_t now = systemTime(); const nsecs_t duration = now - mBootTime; ALOGI("Boot is finished (%ld ms)", long(ns2ms(duration)) ); - mBootFinished = true; // wait patiently for the window manager death const String16 name("window"); @@ -376,10 +375,19 @@ void SurfaceFlinger::bootFinished() LOG_EVENT_LONG(LOGTAG_SF_STOP_BOOTANIM, ns2ms(systemTime(SYSTEM_TIME_MONOTONIC))); - sp<LambdaMessage> readProperties = new LambdaMessage([&]() { + sp<LambdaMessage> bootFinished = new LambdaMessage([&]() { + mBootFinished = true; + readPersistentProperties(); + +#ifdef USE_HWC2 + sp<DisplayDevice> hw(getDisplayDevice(mBuiltinDisplays[DisplayDevice::DISPLAY_PRIMARY])); + if (hw->getWideColorSupport()) { + setActiveColorModeInternal(hw, HAL_COLOR_MODE_SRGB); + } +#endif }); - postMessageAsync(readProperties); + postMessageAsync(bootFinished); } void SurfaceFlinger::deleteTextureAsync(uint32_t texture) { @@ -544,7 +552,7 @@ void SurfaceFlinger::init() { ALOGI( "SurfaceFlinger's main thread ready to run. " "Initializing graphics H/W..."); - ALOGI("Phase offest NS: %" PRId64 "", vsyncPhaseOffsetNs); + ALOGI("Phase offset NS: %" PRId64 "", vsyncPhaseOffsetNs); { // Autolock scope Mutex::Autolock _l(mStateLock); @@ -1213,11 +1221,7 @@ void SurfaceFlinger::createDefaultDisplayDevice() { token, fbs, producer, mRenderEngine->getEGLConfig(), hasWideColorModes && hasWideColorDisplay); mDisplays.add(token, hw); - android_color_mode defaultColorMode = HAL_COLOR_MODE_NATIVE; - if (hasWideColorModes && hasWideColorDisplay) { - defaultColorMode = HAL_COLOR_MODE_SRGB; - } - setActiveColorModeInternal(hw, defaultColorMode); + setActiveColorModeInternal(hw, HAL_COLOR_MODE_NATIVE); } void SurfaceFlinger::onHotplugReceived(HWComposer* composer, int32_t disp, bool connected) { @@ -1863,7 +1867,11 @@ void SurfaceFlinger::setUpHWComposer() { } newColorMode = pickColorMode(newDataSpace); - setActiveColorModeInternal(displayDevice, newColorMode); + // We want the color mode of the boot animation to match that of the bootloader + // To achieve this we suppress color mode changes until after the boot animation + if (mBootFinished) { + setActiveColorModeInternal(displayDevice, newColorMode); + } } } |