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:
Jamie Gennis 2012-08-23 20:19:38 -07:00 committed by Android (Google) Code Review
parent 490aee0fc5
commit 0bceb84773
2 changed files with 25 additions and 1 deletions

View File

@ -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;

View File

@ -363,6 +363,11 @@ private:
return mProtectedTexName;
}
/* ------------------------------------------------------------------------
* Display management
*/
int32_t chooseNewDisplayIdLocked() const;
/* ------------------------------------------------------------------------
* Debugging & dumpsys
*/