void GPURegisterHeap::MemoryHeapRegs::revoke() { MemoryHeapPmem::revoke(); #if HAVE_ANDROID_OS if (heapID() > 0) { //LOGD("ioctl(HW3D_REVOKE_GPU)"); int err = ioctl(heapID(), HW3D_REVOKE_GPU, base()); LOGE_IF(err, "HW3D_REVOKE_GPU failed (%s), mFD=%d, base=%p", strerror(errno), heapID(), base()); } #endif }
sp<MemoryHeapPmem::MemoryPmem> MemoryHeapPmem::createMemory( size_t offset, size_t size) { sp<SubRegionMemory> memory; if (heapID() > 0) memory = new SubRegionMemory(this, offset, size); return memory; }
sp<MemoryHeapPmem::MemoryPmem> GPURegisterHeap::MemoryHeapRegs::createMemory( size_t offset, size_t size) { sp<GPUHandle> memory; sp<GPUHardware> gpu = mGPU.promote(); if (heapID()>0 && gpu!=0) { #if HAVE_ANDROID_OS /* this is where the GPU is powered on and the registers are mapped * in the client */ //LOGD("ioctl(HW3D_GRANT_GPU)"); int err = ioctl(heapID(), HW3D_GRANT_GPU, base()); if (err) { // it can happen if the master heap has been closed already // in which case the GPU already is revoked (app crash for // instance). LOGW("HW3D_GRANT_GPU failed (%s), mFD=%d, base=%p", strerror(errno), heapID(), base()); } memory = new GPUHandle(gpu, this); #endif } return memory; }