Bug 1393376 - (Part 1) Paint the item when its type is TYPE_FILTER during WebRenderFallbackData generating; r=jrmuizel

MozReview-Commit-ID: JxNa1OGrSVb

--HG--
extra : rebase_source : 0d8bc8aeac1f120bb9eb873f9b9c36ba155d5dda
This commit is contained in:
Kevin Chen 2017-09-11 15:07:26 +08:00
Родитель 248b760c2d
Коммит 92bb8afb2a
1 изменённых файлов: 13 добавлений и 5 удалений

Просмотреть файл

@ -554,11 +554,18 @@ WebRenderLayerManager::GenerateFallbackData(nsDisplayItem* aItem,
} }
aOffset = RoundedToInt(bounds.TopLeft()); aOffset = RoundedToInt(bounds.TopLeft());
nsRegion invalidRegion;
bool needPaint = true;
nsAutoPtr<nsDisplayItemGeometry> geometry = fallbackData->GetGeometry(); nsAutoPtr<nsDisplayItemGeometry> geometry = fallbackData->GetGeometry();
if (geometry) {
// nsDisplayFilter is rendered via BasicLayerManager which means the invalidate
// region is unknown until we traverse the displaylist contained by it.
if (geometry && !fallbackData->IsInvalid() &&
aItem->GetType() != DisplayItemType::TYPE_FILTER) {
nsRect invalid; nsRect invalid;
nsRegion invalidRegion;
if (aItem->IsInvalid(invalid)) { if (aItem->IsInvalid(invalid)) {
invalidRegion.OrWith(clippedBounds); invalidRegion.OrWith(clippedBounds);
} else { } else {
@ -574,11 +581,12 @@ WebRenderLayerManager::GenerateFallbackData(nsDisplayItem* aItem,
invalidRegion.OrWith(clippedBounds); invalidRegion.OrWith(clippedBounds);
} }
} }
needPaint = !invalidRegion.IsEmpty();
} }
if (needPaint) {
gfx::SurfaceFormat format = aItem->GetType() == DisplayItemType::TYPE_MASK ? gfx::SurfaceFormat format = aItem->GetType() == DisplayItemType::TYPE_MASK ?
gfx::SurfaceFormat::A8 : gfx::SurfaceFormat::B8G8R8A8; gfx::SurfaceFormat::A8 : gfx::SurfaceFormat::B8G8R8A8;
if (!geometry || !invalidRegion.IsEmpty() || fallbackData->IsInvalid()) {
if (gfxPrefs::WebRenderBlobImages()) { if (gfxPrefs::WebRenderBlobImages()) {
bool snapped; bool snapped;
bool isOpaque = aItem->GetOpaqueRegion(aDisplayListBuilder, &snapped).Contains(clippedBounds); bool isOpaque = aItem->GetOpaqueRegion(aDisplayListBuilder, &snapped).Contains(clippedBounds);