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

Commit 01e29054 authored by Jesse Hall's avatar Jesse Hall
Browse files

Init displays to null layer stack

When a display is added, initialize it to use an empty layer stack, so
if it is somehow visible it will show black. It will be assigned the
real layer stack -- along with a projection and other properties -- by
window manager soon. Normally a display remains blanked until window
manager has decided what to show on it, but for HDMI connected at boot
that isn't currently the case.

Bug: 7258935
Change-Id: Ic9bb25f7a9b8d9d3772b097ab1d6fa03bc8780a1
parent a9a1b006
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ DisplayDevice::DisplayDevice(
      mIsSecure(isSecure),
      mSecureLayerVisible(false),
      mScreenAcquired(false),
      mLayerStack(0),
      mLayerStack(NO_LAYER_STACK),
      mOrientation()
{
    init(config);
+5 −1
Original line number Diff line number Diff line
@@ -65,6 +65,10 @@ public:
        SWAP_RECTANGLE  = 0x00080000,
    };

    enum {
        NO_LAYER_STACK = 0xFFFFFFFF,
    };

    DisplayDevice(
            const sp<SurfaceFlinger>& flinger,
            DisplayType type,
+6 −4
Original line number Diff line number Diff line
@@ -1347,7 +1347,7 @@ void SurfaceFlinger::computeVisibleRegions(
        // start with the whole surface at its current location
        const Layer::State& s(layer->drawingState());

        // only consider the layers on the given later stack
        // only consider the layers on the given layer stack
        if (s.layerStack != layerStack)
            continue;

@@ -2072,12 +2072,14 @@ status_t SurfaceFlinger::onLayerDestroyed(const wp<LayerBaseClient>& layer)
// ---------------------------------------------------------------------------

void SurfaceFlinger::onInitializeDisplays() {
    // reset screen orientation
    // reset screen orientation and use primary layer stack
    Vector<ComposerState> state;
    Vector<DisplayState> displays;
    DisplayState d;
    d.what = DisplayState::eDisplayProjectionChanged;
    d.what = DisplayState::eDisplayProjectionChanged |
             DisplayState::eLayerStackChanged;
    d.token = mBuiltinDisplays[DisplayDevice::DISPLAY_PRIMARY];
    d.layerStack = 0;
    d.orientation = DisplayState::eOrientationDefault;
    d.frame.makeInvalid();
    d.viewport.makeInvalid();
@@ -2901,7 +2903,7 @@ SurfaceFlinger::DisplayDeviceState::DisplayDeviceState()
}

SurfaceFlinger::DisplayDeviceState::DisplayDeviceState(DisplayDevice::DisplayType type)
    : type(type), layerStack(0), orientation(0) {
    : type(type), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0) {
    viewport.makeInvalid();
    frame.makeInvalid();
}