зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1535029 - Store the render root rect as a ScreenRect. r=dthayer
The main change here is removing some rounding so that we can do more accurate hit-testing in APZ. Instead of rounding both the rect and the point, we just store both as unrounded values. mRenderRootRects is also changed to be of a Screen type as that better reflects what it's being used for, and there is a legitimate justification for converting it from LayoutDevice. Depends on D25239 Differential Revision: https://phabricator.services.mozilla.com/D25240 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
bc956607f9
Коммит
82e8cfa38b
|
@ -3198,8 +3198,7 @@ already_AddRefed<wr::WebRenderAPI> APZCTreeManager::GetWebRenderAPIAtPoint(
|
||||||
CompositorBridgeParent::CallWithIndirectShadowTree(
|
CompositorBridgeParent::CallWithIndirectShadowTree(
|
||||||
mRootLayersId, [&](LayerTreeState& aState) -> void {
|
mRootLayersId, [&](LayerTreeState& aState) -> void {
|
||||||
if (aState.mWrBridge) {
|
if (aState.mWrBridge) {
|
||||||
IntPoint point = RoundedToInt(aPoint).ToUnknownPoint();
|
api = aState.mWrBridge->GetWebRenderAPIAtPoint(aPoint);
|
||||||
api = aState.mWrBridge->GetWebRenderAPIAtPoint(point);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return api.forget();
|
return api.forget();
|
||||||
|
|
|
@ -914,7 +914,8 @@ bool WebRenderBridgeParent::SetDisplayList(
|
||||||
if (IsRootWebRenderBridgeParent()) {
|
if (IsRootWebRenderBridgeParent()) {
|
||||||
if (aRenderRoot != wr::RenderRoot::Default) {
|
if (aRenderRoot != wr::RenderRoot::Default) {
|
||||||
MutexAutoLock lock(mRenderRootRectMutex);
|
MutexAutoLock lock(mRenderRootRectMutex);
|
||||||
mRenderRootRects[aRenderRoot] = RoundedToInt(aRect).ToUnknownRect();
|
mRenderRootRects[aRenderRoot] = ViewAs<ScreenPixel>(
|
||||||
|
aRect, PixelCastJustification::LayoutDeviceIsScreenForTabDims);
|
||||||
}
|
}
|
||||||
LayoutDeviceIntSize widgetSize = mWidget->GetClientSize();
|
LayoutDeviceIntSize widgetSize = mWidget->GetClientSize();
|
||||||
LayoutDeviceIntRect rect = RoundedToInt(aRect);
|
LayoutDeviceIntRect rect = RoundedToInt(aRect);
|
||||||
|
@ -2019,7 +2020,7 @@ void WebRenderBridgeParent::HoldPendingTransactionId(
|
||||||
}
|
}
|
||||||
|
|
||||||
already_AddRefed<wr::WebRenderAPI>
|
already_AddRefed<wr::WebRenderAPI>
|
||||||
WebRenderBridgeParent::GetWebRenderAPIAtPoint(const gfx::IntPoint& aPoint) {
|
WebRenderBridgeParent::GetWebRenderAPIAtPoint(const ScreenPoint& aPoint) {
|
||||||
MutexAutoLock lock(mRenderRootRectMutex);
|
MutexAutoLock lock(mRenderRootRectMutex);
|
||||||
for (auto renderRoot : wr::kNonDefaultRenderRoots) {
|
for (auto renderRoot : wr::kNonDefaultRenderRoots) {
|
||||||
if (mRenderRootRects[renderRoot].Contains(aPoint)) {
|
if (mRenderRootRects[renderRoot].Contains(aPoint)) {
|
||||||
|
|
|
@ -80,7 +80,7 @@ class WebRenderBridgeParent final
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
already_AddRefed<wr::WebRenderAPI> GetWebRenderAPIAtPoint(
|
already_AddRefed<wr::WebRenderAPI> GetWebRenderAPIAtPoint(
|
||||||
const gfx::IntPoint& aPoint);
|
const ScreenPoint& aPoint);
|
||||||
already_AddRefed<wr::WebRenderAPI> GetWebRenderAPI(
|
already_AddRefed<wr::WebRenderAPI> GetWebRenderAPI(
|
||||||
wr::RenderRoot aRenderRoot) {
|
wr::RenderRoot aRenderRoot) {
|
||||||
if ((size_t)aRenderRoot >= mApis.Length()) {
|
if ((size_t)aRenderRoot >= mApis.Length()) {
|
||||||
|
@ -468,7 +468,7 @@ class WebRenderBridgeParent final
|
||||||
// Kind of clunky, but I can't sort out a more elegant way of getting this to
|
// Kind of clunky, but I can't sort out a more elegant way of getting this to
|
||||||
// work.
|
// work.
|
||||||
Mutex mRenderRootRectMutex;
|
Mutex mRenderRootRectMutex;
|
||||||
wr::NonDefaultRenderRootArray<IntRect> mRenderRootRects;
|
wr::NonDefaultRenderRootArray<ScreenRect> mRenderRootRects;
|
||||||
|
|
||||||
wr::RenderRoot mRenderRoot;
|
wr::RenderRoot mRenderRoot;
|
||||||
bool mPaused;
|
bool mPaused;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче