void TiledContentHost::ProcessUploadQueue(nsIntRegion* aNewValidRegion, TiledLayerProperties* aLayerProperties) { if (!mPendingUpload) return; // If we coalesce uploads while the layers' valid region is changing we will // end up trying to upload area outside of the valid region. (bug 756555) mRegionToUpload.And(mRegionToUpload, mMainMemoryTiledBuffer.GetValidRegion()); mVideoMemoryTiledBuffer.Upload(&mMainMemoryTiledBuffer, mMainMemoryTiledBuffer.GetValidRegion(), mRegionToUpload, aLayerProperties->mEffectiveResolution); *aNewValidRegion = mVideoMemoryTiledBuffer.GetValidRegion(); mMainMemoryTiledBuffer.ReadUnlock(); // Release all the tiles by replacing the tile buffer with an empty // tiled buffer. This will prevent us from doing a double unlock when // calling ~TiledThebesLayerComposite. // XXX: This wont be needed when we do progressive upload and lock // tile by tile. mMainMemoryTiledBuffer = BasicTiledLayerBuffer(); mRegionToUpload = nsIntRegion(); mPendingUpload = false; }
void TiledContentHost::ProcessLowPrecisionUploadQueue() { if (!mPendingLowPrecisionUpload) { return; } mLowPrecisionRegionToUpload.And(mLowPrecisionRegionToUpload, mLowPrecisionMainMemoryTiledBuffer.GetValidRegion()); mLowPrecisionVideoMemoryTiledBuffer.SetResolution( mLowPrecisionMainMemoryTiledBuffer.GetResolution()); // It's assumed that the video memory tiled buffer has an up-to-date // frame resolution. As it's always updated first when zooming, this // should always be true. mLowPrecisionVideoMemoryTiledBuffer.Upload(&mLowPrecisionMainMemoryTiledBuffer, mLowPrecisionMainMemoryTiledBuffer.GetValidRegion(), mLowPrecisionRegionToUpload, mVideoMemoryTiledBuffer.GetFrameResolution()); nsIntRegion validRegion = mLowPrecisionVideoMemoryTiledBuffer.GetValidRegion(); mLowPrecisionMainMemoryTiledBuffer.ReadUnlock(); mLowPrecisionMainMemoryTiledBuffer = BasicTiledLayerBuffer(); mLowPrecisionRegionToUpload = nsIntRegion(); mPendingLowPrecisionUpload = false; }
void TiledContentHost::ProcessUploadQueue(nsIntRegion* aNewValidRegion, TiledLayerProperties* aLayerProperties) { if (!mPendingUpload) return; // If we coalesce uploads while the layers' valid region is changing we will // end up trying to upload area outside of the valid region. (bug 756555) mRegionToUpload.And(mRegionToUpload, mMainMemoryTiledBuffer.GetValidRegion()); mVideoMemoryTiledBuffer.Upload(&mMainMemoryTiledBuffer, mMainMemoryTiledBuffer.GetValidRegion(), mRegionToUpload, aLayerProperties->mEffectiveResolution); *aNewValidRegion = mVideoMemoryTiledBuffer.GetValidRegion(); // Release all the tiles by replacing the tile buffer with an empty // tiled buffer. mMainMemoryTiledBuffer = BasicTiledLayerBuffer(); mRegionToUpload = nsIntRegion(); mPendingUpload = false; }