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

Commit 641601d3 authored by Andy McFadden's avatar Andy McFadden Committed by Android Git Automerger
Browse files

am 13a082e1: Added display initialization method

* commit '13a082e1':
  Added display initialization method
parents f81fa528 13a082e1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -261,7 +261,7 @@ status_t HWComposer::createWorkList(int32_t id, size_t numLayers) {

    if (mHwc) {
        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)
                    + numLayers * sizeof(hwc_layer_1_t);
            free(disp.list);
+35 −9
Original line number 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.

    // 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);
    // restore initial conditions (default device unblank, etc)
    initializeDisplays();

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

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

    // start boot animation
    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() {
    ALOGD("Screen about to return, flinger = %p", this);
    sp<const DisplayDevice> hw(getDefaultDisplayDevice()); // XXX: this should be per DisplayDevice
+7 −2
Original line number Diff line number Diff line
@@ -231,9 +231,11 @@ private:
    void signalLayerUpdate();
    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();
    // called on the main thread in response to screenAcquired()
    // called on the main thread in response to unblank()
    void onScreenAcquired();

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

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