sp<SurfaceComposerClient> SurfaceComposerClient::clientForConnection(const sp<IBinder>& conn) { sp<SurfaceComposerClient> client; { // scope for lock Mutex::Autolock _l(gLock); client = gActiveConnections.valueFor(conn).promote(); } if (client == 0) { // Need to make a new client. sp<ISurfaceComposer> sm(getComposerService()); client = new SurfaceComposerClient(sm, conn); if (client != 0 && client->initCheck() == NO_ERROR) { Mutex::Autolock _l(gLock); gActiveConnections.add(conn, client); //LOGD("we have %d connections", gActiveConnections.size()); } else { client.clear(); } } return client; }
status_t SurfaceComposerClient::linkToComposerDeath( const sp<IBinder::DeathRecipient>& recipient, void* cookie, uint32_t flags) { sp<ISurfaceComposer> sm(getComposerService()); return sm->asBinder()->linkToDeath(recipient, cookie, flags); }
void SurfaceComposerClient::onFirstRef() { sp<ISurfaceComposer> sm(getComposerService()); if (sm != 0) { sp<ISurfaceComposerClient> conn = sm->createConnection(); if (conn != 0) { mClient = conn; mStatus = NO_ERROR; } } }
static volatile surface_flinger_cblk_t const * get_cblk() { if (gServerCblk == 0) { sp<ISurfaceComposer> sm(getComposerService()); Mutex::Autolock _l(gLock); if (gServerCblk == 0) { gServerCblkMemory = sm->getCblk(); LOGE_IF(gServerCblkMemory==0, "Can't get server control block"); gServerCblk = (surface_flinger_cblk_t *)gServerCblkMemory->getBase(); LOGE_IF(gServerCblk==0, "Can't get server control block address"); } } return gServerCblk; }
SurfaceComposerClient::SurfaceComposerClient() { sp<ISurfaceComposer> sm(getComposerService()); if (sm == 0) { _init(0, 0); return; } _init(sm, sm->createConnection()); if (mClient != 0) { Mutex::Autolock _l(gLock); VERBOSE("Adding client %p to map", this); gActiveConnections.add(mClient->asBinder(), this); } }
void SurfaceComposerClient::closeGlobalTransaction() { gLock.lock(); SortedVector< sp<SurfaceComposerClient> > clients(gOpenTransactions); gOpenTransactions.clear(); gLock.unlock(); const size_t N = clients.size(); VERBOSE("closeGlobalTransaction (%ld clients)", N); sp<ISurfaceComposer> sm(getComposerService()); sm->openGlobalTransaction(); for (size_t i=0; i<N; i++) { clients[i]->closeTransaction(); } sm->closeGlobalTransaction(); }
void SurfaceComposerClient::enableExternalDisplay(int disp_type, int enable) { sp<ISurfaceComposer> sm(getComposerService()); return sm->enableExternalDisplay(disp_type, enable); }
int SurfaceComposerClient::setOrientation(DisplayID dpy, int orientation, uint32_t flags) { sp<ISurfaceComposer> sm(getComposerService()); return sm->setOrientation(dpy, orientation, flags); }
status_t SurfaceComposerClient::unfreezeDisplay(DisplayID dpy, uint32_t flags) { sp<ISurfaceComposer> sm(getComposerService()); return sm->unfreezeDisplay(dpy, flags); }