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

Commit 13a082e1 authored by Andy McFadden's avatar Andy McFadden
Browse files

Added display initialization method

The primary display device was being configured to "blank" by
default, which prevented the boot animation from appearing
(unless you got lucky with the hardware composer state).

Bug 6975688

Change-Id: I0fa52e9e719c6e997c5725a7baf15d9718461b78
parent 0bceb847
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -261,7 +261,7 @@ status_t HWComposer::createWorkList(int32_t id, size_t numLayers) {


    if (mHwc) {
    if (mHwc) {
        DisplayData& disp(mDisplayData[id]);
        DisplayData& disp(mDisplayData[id]);
        if (disp.capacity < numLayers) {
        if (disp.capacity < numLayers || disp.list == NULL) {
            const size_t size = sizeof(hwc_display_contents_1_t)
            const size_t size = sizeof(hwc_display_contents_1_t)
                    + numLayers * sizeof(hwc_layer_1_t);
                    + numLayers * sizeof(hwc_layer_1_t);
            free(disp.list);
            free(disp.list);
+35 −9
Original line number Original line Diff line number Diff line
@@ -137,15 +137,8 @@ void SurfaceFlinger::binderDied(const wp<IBinder>& who)
{
{
    // the window manager died on us. prepare its eulogy.
    // the window manager died on us. prepare its eulogy.


    // reset screen orientation
    // restore initial conditions (default device unblank, etc)
    Vector<ComposerState> state;
    initializeDisplays();
    Vector<DisplayState> displays;
    DisplayState d;
    d.what = DisplayState::eOrientationChanged;
    d.token = mDefaultDisplays[DisplayDevice::DISPLAY_ID_MAIN];
    d.orientation = DisplayState::eOrientationDefault;
    displays.add(d);
    setTransactionState(state, displays, 0);


    // restart the boot-animation
    // restart the boot-animation
    startBootAnim();
    startBootAnim();
@@ -451,6 +444,9 @@ status_t SurfaceFlinger::readyToRun()
    // We're now ready to accept clients...
    // We're now ready to accept clients...
    mReadyToRunBarrier.open();
    mReadyToRunBarrier.open();


    // set initial conditions (e.g. unblank default device)
    initializeDisplays();

    // start boot animation
    // start boot animation
    startBootAnim();
    startBootAnim();


@@ -1729,6 +1725,36 @@ status_t SurfaceFlinger::onLayerDestroyed(const wp<LayerBaseClient>& layer)


// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------


void SurfaceFlinger::onInitializeDisplays() {
    // reset screen orientation
    Vector<ComposerState> state;
    Vector<DisplayState> displays;
    DisplayState d;
    d.what = DisplayState::eOrientationChanged;
    d.token = mDefaultDisplays[DisplayDevice::DISPLAY_ID_MAIN];
    d.orientation = DisplayState::eOrientationDefault;
    displays.add(d);
    setTransactionState(state, displays, 0);

    // XXX: this should init default device to "unblank" and all other devices to "blank"
    onScreenAcquired();
}

void SurfaceFlinger::initializeDisplays() {
    class MessageScreenInitialized : public MessageBase {
        SurfaceFlinger* flinger;
    public:
        MessageScreenInitialized(SurfaceFlinger* flinger) : flinger(flinger) { }
        virtual bool handler() {
            flinger->onInitializeDisplays();
            return true;
        }
    };
    sp<MessageBase> msg = new MessageScreenInitialized(this);
    postMessageAsync(msg);  // we may be called from main thread, use async message
}


void SurfaceFlinger::onScreenAcquired() {
void SurfaceFlinger::onScreenAcquired() {
    ALOGD("Screen about to return, flinger = %p", this);
    ALOGD("Screen about to return, flinger = %p", this);
    sp<const DisplayDevice> hw(getDefaultDisplayDevice()); // XXX: this should be per DisplayDevice
    sp<const DisplayDevice> hw(getDefaultDisplayDevice()); // XXX: this should be per DisplayDevice
+7 −2
Original line number Original line Diff line number Diff line
@@ -231,9 +231,11 @@ private:
    void signalLayerUpdate();
    void signalLayerUpdate();
    void signalRefresh();
    void signalRefresh();


    // called on the main thread in response to screenReleased()
    // called on the main thread in response to initializeDisplays()
    void onInitializeDisplays();
    // called on the main thread in response to blank()
    void onScreenReleased();
    void onScreenReleased();
    // called on the main thread in response to screenAcquired()
    // called on the main thread in response to unblank()
    void onScreenAcquired();
    void onScreenAcquired();


    void handleMessageTransaction();
    void handleMessageTransaction();
@@ -321,6 +323,9 @@ private:
    /* ------------------------------------------------------------------------
    /* ------------------------------------------------------------------------
     * Display and layer stack management
     * Display and layer stack management
     */
     */
    // called when starting, or restarting after system_server death
    void initializeDisplays();

    sp<const DisplayDevice> getDisplayDevice(DisplayID dpy) const {
    sp<const DisplayDevice> getDisplayDevice(DisplayID dpy) const {
        return mDisplays.valueFor(dpy);
        return mDisplays.valueFor(dpy);
    }
    }