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

Commit 0bceb847 authored by Jamie Gennis's avatar Jamie Gennis Committed by Android (Google) Code Review
Browse files

surfaceflinger: fix display id selection

This change fixes display ID selection so that it never chooses negative
numbers as display IDs.

Change-Id: I5af1acc7b1270b371595e096b18e2a6ad250c7ba
parent 490aee0f
Loading
Loading
Loading
Loading
+20 −1
Original line number Original line Diff line number Diff line
@@ -162,6 +162,24 @@ sp<ISurfaceComposerClient> SurfaceFlinger::createConnection()
    return bclient;
    return bclient;
}
}


int32_t SurfaceFlinger::chooseNewDisplayIdLocked() const
{
    int32_t id = DisplayDevice::DISPLAY_ID_COUNT - 1;
    bool available;
    do {
        id++;
        available = true;
        for (size_t i = 0; i < mCurrentState.displays.size(); i++) {
            const DisplayDeviceState& dds(mCurrentState.displays.valueAt(i));
            if (dds.id == id) {
                available = false;
                break;
            }
        }
    } while (!available);
    return id;
}

sp<IBinder> SurfaceFlinger::createDisplay()
sp<IBinder> SurfaceFlinger::createDisplay()
{
{
    class DisplayToken : public BBinder {
    class DisplayToken : public BBinder {
@@ -181,7 +199,8 @@ sp<IBinder> SurfaceFlinger::createDisplay()
    sp<BBinder> token = new DisplayToken(this);
    sp<BBinder> token = new DisplayToken(this);


    Mutex::Autolock _l(mStateLock);
    Mutex::Autolock _l(mStateLock);
    DisplayDeviceState info(intptr_t(token.get())); // FIXME: we shouldn't use the address for the id
    int32_t id = chooseNewDisplayIdLocked();
    DisplayDeviceState info(id);
    mCurrentState.displays.add(token, info);
    mCurrentState.displays.add(token, info);


    return token;
    return token;
+5 −0
Original line number Original line Diff line number Diff line
@@ -363,6 +363,11 @@ private:
        return mProtectedTexName;
        return mProtectedTexName;
    }
    }


    /* ------------------------------------------------------------------------
     * Display management
     */
    int32_t chooseNewDisplayIdLocked() const;

    /* ------------------------------------------------------------------------
    /* ------------------------------------------------------------------------
     * Debugging & dumpsys
     * Debugging & dumpsys
     */
     */