Bug 725925 - ShadowableThebesLayer does useless extra composite into 1x1 fake surface. r=cjones

This commit is contained in:
Oleg Romashin 2012-02-10 11:22:21 -08:00
Родитель 88598366da
Коммит 9de30fca2d
2 изменённых файлов: 20 добавлений и 10 удалений

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

@ -763,7 +763,9 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext,
if (BasicManager()->IsTransactionIncomplete())
return;
if (!IsHidden()) {
gfxRect clipExtents;
clipExtents = aContext->GetClipExtents();
if (!IsHidden() && !clipExtents.IsEmpty()) {
AutoSetOperator setOperator(aContext, GetOperator());
mBuffer.DrawTo(this, aContext, opacity);
}
@ -1946,6 +1948,11 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget,
NS_ABORT_IF_FALSE(untransformedSurface,
"We should always allocate an untransformed surface with 3d transforms!");
// Temporary fast fix for bug 725886
// Revert these changes when 725886 is ready
gfxRect clipExtents;
clipExtents = aTarget->GetClipExtents();
if (!clipExtents.IsEmpty()) {
gfxPoint offset;
bool dontBlit = needsClipToVisibleRegion || mTransactionIncomplete ||
aLayer->GetEffectiveOpacity() != 1.0f;
@ -1958,6 +1965,7 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget,
aTarget->SetSource(result, offset);
}
}
}
// If we're doing our own double-buffering, we need to avoid drawing
// the results of an incomplete transaction to the destination surface ---
// that could cause flicker. Double-buffering is implemented using a

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

@ -530,6 +530,8 @@ PuppetWidget::DispatchPaintEvent()
DispatchEvent(&event, status);
} else {
nsRefPtr<gfxContext> ctx = new gfxContext(mSurface);
ctx->Rectangle(gfxRect(0,0,0,0));
ctx->Clip();
AutoLayerManagerSetup setupLayerManager(this, ctx,
BasicLayerManager::BUFFER_NONE);
DispatchEvent(&event, status);