bool
HwcComposer2D::Commit()
{
    hwc_display_contents_1_t *displays[HWC_NUM_DISPLAY_TYPES] = { nullptr };
    displays[HWC_DISPLAY_PRIMARY] = mList;

    for (uint32_t j=0; j < (mList->numHwLayers - 1); j++) {
        mList->hwLayers[j].acquireFenceFd = -1;
        if (mHwcLayerMap.IsEmpty() ||
            (mList->hwLayers[j].compositionType == HWC_FRAMEBUFFER)) {
            continue;
        }
        LayerRenderState state = mHwcLayerMap[j]->GetLayer()->GetRenderState();
        if (!state.mTexture) {
            continue;
        }
        TextureHostOGL* texture = state.mTexture->AsHostOGL();
        if (!texture) {
            continue;
        }
        sp<Fence> fence = texture->GetAndResetAcquireFence();
        if (fence.get() && fence->isValid()) {
            mList->hwLayers[j].acquireFenceFd = fence->dup();
        }
    }

    int err = mHwc->set(mHwc, HWC_NUM_DISPLAY_TYPES, displays);

    mPrevDisplayFence = mPrevRetireFence;
    mPrevRetireFence = Fence::NO_FENCE;

    for (uint32_t j=0; j < (mList->numHwLayers - 1); j++) {
        if (mList->hwLayers[j].releaseFenceFd >= 0) {
            int fd = mList->hwLayers[j].releaseFenceFd;
            mList->hwLayers[j].releaseFenceFd = -1;
            sp<Fence> fence = new Fence(fd);

            LayerRenderState state = mHwcLayerMap[j]->GetLayer()->GetRenderState();
            if (!state.mTexture) {
                continue;
            }
            TextureHostOGL* texture = state.mTexture->AsHostOGL();
            if (!texture) {
                continue;
            }
            texture->SetReleaseFence(fence);
       }
   }

    if (mList->retireFenceFd >= 0) {
        mPrevRetireFence = new Fence(mList->retireFenceFd);
    }

    mPrepared = false;
    return !err;
}
void
TiledLayerBufferComposite::SetReleaseFence(const android::sp<android::Fence>& aReleaseFence)
{
  for (size_t i = 0; i < mRetainedTiles.Length(); i++) {
    if (!mRetainedTiles[i].mTextureHost) {
      continue;
    }
    TextureHostOGL* texture = mRetainedTiles[i].mTextureHost->AsHostOGL();
    if (!texture) {
      continue;
    }
    texture->SetReleaseFence(new android::Fence(aReleaseFence->dup()));
  }
}