зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1053992 - Add a red square in the top-right corner of FPS display for unused APZ transforms (i.e. when content is sync-scrolling). r=BenWa
This commit is contained in:
Родитель
1d0db0076b
Коммит
39c367463c
|
@ -424,6 +424,24 @@ ContainerRender(ContainerT* aContainer,
|
|||
RenderLayers(aContainer, aManager, RenderTargetPixel::FromUntyped(aClipRect));
|
||||
}
|
||||
aContainer->mPrepared = nullptr;
|
||||
|
||||
// If it is a scrollable container layer with no child layers, and one of the APZCs
|
||||
// attached to it has a nonempty async transform, then that transform is not applied
|
||||
// to any visible content. Display a warning box (conditioned on the FPS display being
|
||||
// enabled).
|
||||
if (gfxPrefs::LayersDrawFPS() && aContainer->IsScrollInfoLayer()) {
|
||||
// Since aContainer doesn't have any children we can just iterate from the top metrics
|
||||
// on it down to the bottom using GetFirstChild and not worry about walking onto another
|
||||
// underlying layer.
|
||||
for (LayerMetricsWrapper i(aContainer); i; i = i.GetFirstChild()) {
|
||||
if (AsyncPanZoomController* apzc = i.GetApzc()) {
|
||||
if (!Matrix4x4(apzc->GetCurrentAsyncTransform()).IsIdentity()) {
|
||||
aManager->UnusedApzTransformWarning();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ContainerLayerComposite::ContainerLayerComposite(LayerManagerComposite *aManager)
|
||||
|
|
|
@ -103,7 +103,9 @@ LayerManagerComposite::ClearCachedResources(Layer* aSubtree)
|
|||
* LayerManagerComposite
|
||||
*/
|
||||
LayerManagerComposite::LayerManagerComposite(Compositor* aCompositor)
|
||||
: mCompositor(aCompositor)
|
||||
: mWarningLevel(0.0f)
|
||||
, mUnusedApzTransformWarning(false)
|
||||
, mCompositor(aCompositor)
|
||||
, mInTransaction(false)
|
||||
, mIsCompositorReady(false)
|
||||
, mDebugOverlayWantsNextFrame(false)
|
||||
|
@ -346,11 +348,11 @@ LayerManagerComposite::RenderDebugOverlay(const Rect& aBounds)
|
|||
mFPS = MakeUnique<FPSState>();
|
||||
}
|
||||
|
||||
float alpha = 1;
|
||||
#ifdef ANDROID
|
||||
// Draw a translation delay warning overlay
|
||||
int width;
|
||||
int border;
|
||||
float alpha = 1;
|
||||
if ((now - mWarnTime).ToMilliseconds() < kVisualWarningDuration) {
|
||||
EffectChain effects;
|
||||
|
||||
|
@ -385,6 +387,18 @@ LayerManagerComposite::RenderDebugOverlay(const Rect& aBounds)
|
|||
|
||||
float fillRatio = mCompositor->GetFillRatio();
|
||||
mFPS->DrawFPS(now, drawFrameColorBars ? 10 : 0, 0, unsigned(fillRatio), mCompositor);
|
||||
|
||||
if (mUnusedApzTransformWarning) {
|
||||
// If we have an unused APZ transform on this composite, draw a 20x20 red box
|
||||
// in the top-right corner
|
||||
EffectChain effects;
|
||||
effects.mPrimaryEffect = new EffectSolidColor(gfx::Color(1, 0, 0, 1));
|
||||
mCompositor->DrawQuad(gfx::Rect(aBounds.width - 20, 0, aBounds.width, 20),
|
||||
aBounds, effects, alpha, gfx::Matrix4x4());
|
||||
|
||||
mUnusedApzTransformWarning = false;
|
||||
SetDebugOverlayWantsNextFrame(true);
|
||||
}
|
||||
} else {
|
||||
mFPS = nullptr;
|
||||
}
|
||||
|
|
|
@ -257,6 +257,10 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void UnusedApzTransformWarning() {
|
||||
mUnusedApzTransformWarning = true;
|
||||
}
|
||||
|
||||
private:
|
||||
/** Region we're clipping our current drawing to. */
|
||||
nsIntRegion mClippingRegion;
|
||||
|
@ -297,6 +301,7 @@ private:
|
|||
|
||||
float mWarningLevel;
|
||||
mozilla::TimeStamp mWarnTime;
|
||||
bool mUnusedApzTransformWarning;
|
||||
RefPtr<Compositor> mCompositor;
|
||||
UniquePtr<LayerProperties> mClonedLayerTreeProperties;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче