summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2017-07-20 18:49:46 -0700
committer Romain Guy <romainguy@google.com> 2017-07-21 12:09:26 -0700
commitc53d3558d55dfd1d1c424b0d632fea693113e83e (patch)
tree550645c9773a0fa4142292b8d22f4593818ef4d7 /services/surfaceflinger/SurfaceFlinger.cpp
parent349abaf55fe201a99f75eff5060d81b783819951 (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
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp28
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);
+ }
}
}