void DisplayPlaneManager::disableReclaimedPlanes() { int i, j; bool ret; RETURN_VOID_IF_NOT_INIT(); for (i = 0; i < DisplayPlane::PLANE_MAX; i++) { // disable reclaimed planes if (mReclaimedPlanes[i]) { for (j = 0; j < mPlaneCount[i]; j++) { int bit = (1 << j); if (mReclaimedPlanes[i] & bit) { DisplayPlane* plane = mPlanes[i].itemAt(j); // check plane state first ret = plane->isDisabled(); // reset plane if (ret) ret = plane->reset(); if (ret) { // only merge into free bitmap if it is successfully disabled and reset // otherwise, plane will be disabled and reset again. mFreePlanes[i] |=bit; mReclaimedPlanes[i] &= ~bit; } } } } } }
void Hwcomposer::vsync(int disp, int64_t timestamp) { RETURN_VOID_IF_NOT_INIT(); // if (mProcs && mProcs->vsync) { // VLOGTRACE("report vsync on disp %d, timestamp %llu", disp, timestamp); // // workaround to pretend vsync is from primary display // // Display will freeze if vsync is from external display. // mProcs->vsync(const_cast<hwc_procs_t*>(mProcs), IDisplayDevice::DEVICE_PRIMARY, timestamp); // } }
void BufferManager::freeGrallocBuffer(uint32_t handle) { RETURN_VOID_IF_NOT_INIT(); if (!mGralloc) { WLOGTRACE("Alloc device is not available"); return; } if (handle) gralloc_device_free_img(mGralloc, (buffer_handle_t)handle); }
void DisplayPlane::invalidateBufferCache() { BufferManager *bm = Hwcomposer::getInstance().getBufferManager(); BufferMapper* mapper; RETURN_VOID_IF_NOT_INIT(); for (size_t i = 0; i < mDataBuffers.size(); i++) { mapper = mDataBuffers.valueAt(i); bm->unmap(mapper); } mDataBuffers.clear(); // reset current buffer mCurrentDataBuffer = 0; }
void DisplayPlaneManager::putPlane(int dsp, DisplayPlane& plane) { int index; int type; RETURN_VOID_IF_NOT_INIT(); index = plane.getIndex(); type = plane.getType(); if (type < 0 || type >= DisplayPlane::PLANE_MAX) { ETRACE("Invalid plane type %d", type); return; } putPlane(index, mFreePlanes[type]); }
void DisplayPlane::invalidateActiveBuffers() { BufferManager *bm = Hwcomposer::getInstance().getBufferManager(); BufferMapper* mapper; RETURN_VOID_IF_NOT_INIT(); VLOGTRACE("invalidating active buffers"); for (size_t i = 0; i < mActiveBuffers.size(); i++) { mapper = mActiveBuffers.itemAt(i); // unmap it bm->unmap(mapper); } // clear recorded data buffers mActiveBuffers.clear(); }
void DisplayPlaneManager::reclaimPlane(int dsp, DisplayPlane& plane) { RETURN_VOID_IF_NOT_INIT(); int index = plane.getIndex(); int type = plane.getType(); ATRACE("reclaimPlane = %d, type = %d", index, plane.getType()); if (type < 0 || type >= DisplayPlane::PLANE_MAX) { ETRACE("Invalid plane type %d", type); return; } putPlane(index, mReclaimedPlanes[type]); // NOTE: don't invalidate plane's data cache here because the reclaimed // plane might be re-assigned to the same layer later }
void BufferManager::freeFrameBuffer(uint32_t fbHandle) { RETURN_VOID_IF_NOT_INIT(); if (!mGralloc) { WLOGTRACE("Alloc device is not available"); return; } ssize_t index = mFrameBuffers.indexOfKey(fbHandle); if (index < 0) { ELOGTRACE("invalid kernel handle"); return; } BufferMapper *mapper = mFrameBuffers.valueAt(index); uint32_t handle = mapper->getHandle(); mapper->putFbHandle(); delete mapper; mFrameBuffers.removeItem(fbHandle); gralloc_device_free_img(mGralloc, (buffer_handle_t)handle); }