surfaceflinger: fix display id selection
This change fixes display ID selection so that it never chooses negative numbers as display IDs. Change-Id: I5af1acc7b1270b371595e096b18e2a6ad250c7ba
This commit is contained in:
parent
490aee0fc5
commit
0bceb84773
@ -162,6 +162,24 @@ sp<ISurfaceComposerClient> SurfaceFlinger::createConnection()
|
||||
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()
|
||||
{
|
||||
class DisplayToken : public BBinder {
|
||||
@ -181,7 +199,8 @@ sp<IBinder> SurfaceFlinger::createDisplay()
|
||||
sp<BBinder> token = new DisplayToken(this);
|
||||
|
||||
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);
|
||||
|
||||
return token;
|
||||
|
@ -363,6 +363,11 @@ private:
|
||||
return mProtectedTexName;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
* Display management
|
||||
*/
|
||||
int32_t chooseNewDisplayIdLocked() const;
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
* Debugging & dumpsys
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user