import changes from `dev' branch of rmottola/Arctic-Fox:

- Bug 1144012 - Part 1: Create HwcDevice wrapper. r=sotaro (dcb5bca6c)
- Bug 1143522 - Convert cliprect coordinate in gonk code. r=botond (4b5bfe61b)
- Bug 1144012 - Part 2: Use wrapper in HwcComposer2D. r=sotaro (783cbca1a)
- Bug 1169093 - Do not use HWC when a region of layer is too small r=mattwoodrow (bf77e1a55)
- Bug 1155797 - P1: extract format BPP util function. r=mwu (06f3b96f5)
- Bug 1155797 - P2: show a black solid color frame if we don't have the bootAnim. r=mwu (2e6dda6d2)
- Bug 1153395 - Disable Hardware Vsync on Non Kit-Kat devices. r=mwu (e7ec09cee)
- Bug 1151489. Enable software vsync on all b2g versions. r=kats (597cdc85f)
- Bug 1155797 - P3: turn on vsync for kk, l and up. r=mwu (3e8187e50)
- Bug 1144012 - Part 3: Wrap vsync code. r=sotaro (4eb4af3d8)
- Bug 1144012 - Part 4: Remove the usage of mHwc from GonkDisplayICS. r=sotaro (ad5e257f0)
- Bug 1187048 - Code clean up around nsScreenGonk's EGLSurface handling r=mwu (eecdaf1ef)
- Bug 1188877 - Fix LayerComposite::SetClearRect() calling r=mwu (d748f2c50)
- Bug 1180657 - Use hwc directly on GonkDisplayICS. r=sotaro (55d2699aa)
- Bug 1163905 - b2g.neterror.url should use a relative URL. r=fabrice (abefb3d0b)
- Bug 1186000 - Support screen mirroring to HDMI display on gonk r=mwu,mattwoodrow (3df30f9dd)
- Bug 1186031 - Fix SetDispAcquireFence() calling r=nical (d561ef18c)
- Bug 1191457 - Revert SetDispAcquireFence() calling change r=nical (46bc14d4c)
- Bug 1192352 - Fix fence handling of display mirroring r=nical (fb686f922)
- Bug 1170966 - Check quad's effective region before drawing. r=nical, a=me (d85277b8e)
- Bug 1186236 - Fix drawQuad culling bug. r=nical (4fd64fb71)
- Bug 1192192 - fix quad culling method. r=nical (03c59a942)
- Bug 1179933, add Layer::ReplaceEffectiveTransform for temporary transform changes; r=mstange (c9e0c919a)
- Bug 1151937; [webvr] change deviceId/hardwareId to simple values; r=jrmuizel CLOSED TREE (f4f2332ab)
- Bug 1151904; fix Linux OVR library typo to use lowercase lib; r=me (7580c527b)
- Bug 1179944, [webvr] support Oculus 0.6.0 runtime and rendering; r=mstange (954bbb49c)
- Bug 633097 - Fix jittering animated text by disallowing flattening into a container layer that has animated text. r=mwoodrow (7eada20c4)
- Bug 914457 - Part 1: Use an empty clip rect for layers with an empty visible region (7b2462a5f)
- Bug 914457 - Part 2: Implement Crashtest (f6f6fcfaa)
- Bug 1149923 - Let 2D mask effect can check whether to use IntermediateSurface or not in its own logic. r=roc (f90c6f19c)
- Bug 1177018 - When finding a painted layer for a display item, include event regions in a layer's visible region. r=tn (ccedfcc38)
- Bug 1200158 - Define PaintedLayerData::AccumulateEventRegions() out of line. r=mstange (8fcfe35fd)
- Bug 1200158 - Avoid expensive computations involving the maybe-hit region in hot code paths. r=mstange (871c0944c)
- Bug 1201548 - When testing whether the visible rect intersects event regions in FindPaintedLayerFor(), only use the bounds of the event regions. r=mstange (976798e33)
- Bug 1180295 - Rip out call to setContentDocumentFixedPositionMargins. r=rbarker (c24ed7a7f)
- Bug 1166301 - Use the correct format flags for printing fixed position data in the layers dump. r=kats (a51d7b42a)
- Bug 1166301 - Store a flag on Layer to tell fixed background layers apart from fixed position layers. r=mattwoodrow (c9d1c1c63)
- Bug 1166301 - Annotate fixed background layers with scroll metadata for the animated geometry root of the frame they're the background of. r=mattwoodrow (0f3f8a715)
- Bug 1097464 - Part 6: Handle preserves-3d by compositor. r=roc (b231219b9)
- Hoist scroll info items above inactive blur containers. (bug 1193557 part 1, r=mstange) (d6212d65c)
- Ensure scroll info layers have a dispatch-to-content region. (bug 1193557 part 2, r=kats) (97fe0e4d7)
- Bug 1145143 - Check if buffer size is correct before calling the update. r=nical (fc4019b45)
- Bug 1145143 - When we fail to UpdateRenderTarget, report the size as well. r=bas (885668a28)
- Bug 1161670, cache D3D11 ShaderResourceView on TextureSourceD3D11; r=bas,jrmuizel (5fbd7d741)
- Bug 1188700, [webvr] Fix VR distortion compositing in d3d11/gl to take into account rendertarget size and transform; r=kip (47a73c37a)
- Allow wheel tests finer control over the refresh driver. (bug 1140293, r=mstange) (c47d17d0a)
- Bug 1164274 - Disable the wheel-scroll test on Mulet for intermittent failures. r=mstange (24ba31ab6)
- Bug 1172648 - Full-stack APZ mochitest for bug 1151667. r=kats (19b3fbd74)
- Bug 1173580 - Full-stack APZ layerization mochitest. r=kats (df7d6efc1)
- Bug 1175585 - Full-stack mochitest for wheel transactions. r=kats (b2e00b916)
- Bug 961289 - Add an initial mochitest (for bug 982141) that exercises the APZ testing framework. r=ehsan,kats,BenWa,ted (9e0eea39f)
- Bug 1151663 - Extract some helper functions for writing APZ mochitests into a separate file. r=kats (e0a565ca4)
- remaining  Bug 1151663 - Fix reconstruction of APZC tree structure in APZ mochitests. r=kats (f9836eb45)
- part of Bug 1139155 - Add a basic sanity test to exercise touch-based scrolling on B2G. r=botond (0b1673810)
- part of Add a test case for bug 1193557, r=kats. (157e5d8d0)
- Bug 1166649 - Fix GrallocTextureClient.cpp unified build bustage. r=nical (42d01ef5e)
- namespace (0096c7a24)
- Bug 1181085 - Don't accumulate ImageCompositeNotifications when we're compositing to a DrawTarget. r=nical (e7ad9e485)
- Bug 1186159 - Add an APZ minimap. r=kats (576b74a94)
- Bug 1167215 - Composite on every vsync until the scheduled one. r=roc (6ff8f84ca)
This commit is contained in:
2022-01-04 09:29:39 +08:00
parent 8ef963eef1
commit f553544f33
87 changed files with 4424 additions and 1243 deletions
+62 -7
View File
@@ -812,7 +812,15 @@ BasicLayerManager::PaintSelfOrChildren(PaintLayerContext& aPaintContext,
nsAutoTArray<Layer*, 12> children;
container->SortChildrenBy3DZOrder(children);
for (uint32_t i = 0; i < children.Length(); i++) {
PaintLayer(aGroupTarget, children.ElementAt(i), aPaintContext.mCallback,
Layer* layer = children.ElementAt(i);
if (layer->IsBackfaceHidden()) {
continue;
}
if (!layer->AsContainerLayer() && !layer->IsVisible()) {
continue;
}
PaintLayer(aGroupTarget, layer, aPaintContext.mCallback,
aPaintContext.mCallbackData);
if (mTransactionIncomplete)
break;
@@ -846,6 +854,41 @@ BasicLayerManager::FlushGroup(PaintLayerContext& aPaintContext, bool aNeedsClipT
}
}
/**
* Install the clip applied to the layer on the given gfxContext. The
* given gfxContext is the buffer that the layer will be painted to.
*/
static void
InstallLayerClipPreserves3D(gfxContext* aTarget, Layer* aLayer)
{
const Maybe<ParentLayerIntRect> &clipRect = aLayer->GetEffectiveClipRect();
if (!clipRect) {
return;
}
Layer* parent = aLayer->GetParent();
Matrix4x4 transform3d =
parent && parent->Extend3DContext() ?
parent->GetEffectiveTransform() :
Matrix4x4();
Matrix transform;
if (!transform3d.CanDraw2D(&transform)) {
MOZ_CRASH("We should not have a 3D transform that CanDraw2D() is false!");
return;
}
gfxMatrix oldTransform = aTarget->CurrentMatrix();
transform *= ToMatrix(oldTransform);
aTarget->SetMatrix(ThebesMatrix(transform));
aTarget->NewPath();
aTarget->SnappedRectangle(gfxRect(clipRect->x, clipRect->y,
clipRect->width, clipRect->height));
aTarget->Clip();
aTarget->SetMatrix(oldTransform);
}
void
BasicLayerManager::PaintLayer(gfxContext* aTarget,
Layer* aLayer,
@@ -883,17 +926,24 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget,
gfxMatrix transform;
// Will return an identity matrix for 3d transforms, and is handled separately below.
bool is2D = paintLayerContext.Setup2DTransform();
MOZ_ASSERT(is2D || needsGroup || !container, "Must PushGroup for 3d transforms!");
MOZ_ASSERT(is2D || needsGroup || !container ||
container->Extend3DContext() ||
container->Is3DContextLeaf(),
"Must PushGroup for 3d transforms!");
Layer* parent = aLayer->GetParent();
bool inPreserves3DChain = parent && parent->Extend3DContext();
bool needsSaveRestore =
needsGroup || clipRect || needsClipToVisibleRegion || !is2D;
needsGroup || clipRect || needsClipToVisibleRegion || !is2D ||
inPreserves3DChain;
if (needsSaveRestore) {
contextSR.SetContext(aTarget);
if (clipRect) {
aTarget->NewPath();
aTarget->SnappedRectangle(gfxRect(clipRect->x, clipRect->y, clipRect->width, clipRect->height));
aTarget->Clip();
// The clips on ancestors on the preserved3d chain should be
// installed on the aTarget before painting the layer.
InstallLayerClipPreserves3D(aTarget, aLayer);
for (Layer* l = parent; l && l->Extend3DContext(); l = l->GetParent()) {
InstallLayerClipPreserves3D(aTarget, l);
}
}
@@ -928,6 +978,11 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget,
PaintSelfOrChildren(paintLayerContext, aTarget);
}
} else {
if (!needsGroup && container) {
PaintSelfOrChildren(paintLayerContext, aTarget);
return;
}
const IntRect& bounds = visibleRegion.GetBounds();
RefPtr<DrawTarget> untransformedDT =
gfxPlatform::GetPlatform()->CreateOffscreenContentDrawTarget(IntSize(bounds.width, bounds.height),