author | Timothy Nikkel <tnikkel@gmail.com> |
Sun, 31 May 2015 14:44:41 -0500 | |
changeset 246468 | 44a885179fc3c484c730cdc2d6564cb6d574abd8 |
parent 246467 | b04610020a55c4bb0b68dfa837142e985aa8eff2 |
child 246469 | 1f0fdd3b400729b94902a4913aec196e6a0d26c0 |
push id | 28830 |
push user | cbook@mozilla.com |
push date | Mon, 01 Jun 2015 13:02:44 +0000 |
treeherder | mozilla-central@39c85ec2d644 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | botond |
bugs | 1168630, 1158424 |
milestone | 41.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/layers/apz/src/APZCTreeManager.cpp +++ b/gfx/layers/apz/src/APZCTreeManager.cpp @@ -448,28 +448,28 @@ APZCTreeManager::PrepareNodeForLayer(con // For testing, log the parent scroll id of every APZC that has a // parent. This allows test code to reconstruct the APZC tree. // Note that we currently only do this for APZCs in the layer tree // that originated the update, because the only identifying information // we are logging about APZCs is the scroll id, and otherwise we could // confuse APZCs from different layer trees with the same scroll id. if (aLayersId == aState.mOriginatingLayersId) { - if (apzc->IsRootForLayersId()) { + if (apzc->HasNoParentWithSameLayersId()) { aState.mPaintLogger.LogTestData(aMetrics.GetScrollId(), - "isRootForLayersId", true); + "hasNoParentWithSameLayersId", true); } else { MOZ_ASSERT(apzc->GetParent()); aState.mPaintLogger.LogTestData(aMetrics.GetScrollId(), "parentScrollId", apzc->GetParent()->GetGuid().mScrollId); } } if (newApzc) { - if (apzc->IsRootForLayersId()) { + if (apzc->HasNoParentWithSameLayersId()) { // If we just created a new apzc that is the root for its layers ID, then // we need to update its zoom constraints which might have arrived before this // was created ZoomConstraints constraints; if (state->mController->GetRootZoomConstraints(&constraints)) { apzc->UpdateZoomConstraints(constraints); } } else { @@ -1035,34 +1035,34 @@ APZCTreeManager::UpdateZoomConstraints(c const ZoomConstraints& aConstraints) { MonitorAutoLock lock(mTreeLock); nsRefPtr<HitTestingTreeNode> node = GetTargetNode(aGuid, nullptr); MOZ_ASSERT(!node || node->GetApzc()); // any node returned must have an APZC // For a given layers id, non-root APZCs inherit the zoom constraints // of their root. - if (node && node->GetApzc()->IsRootForLayersId()) { + if (node && node->GetApzc()->HasNoParentWithSameLayersId()) { UpdateZoomConstraintsRecursively(node.get(), aConstraints); } } void APZCTreeManager::UpdateZoomConstraintsRecursively(HitTestingTreeNode* aNode, const ZoomConstraints& aConstraints) { mTreeLock.AssertCurrentThreadOwns(); if (aNode->IsPrimaryHolder()) { MOZ_ASSERT(aNode->GetApzc()); aNode->GetApzc()->UpdateZoomConstraints(aConstraints); } for (HitTestingTreeNode* child = aNode->GetLastChild(); child; child = child->GetPrevSibling()) { // We can have subtrees with their own layers id - leave those alone. - if (child->GetApzc() && child->GetApzc()->IsRootForLayersId()) { + if (child->GetApzc() && child->GetApzc()->HasNoParentWithSameLayersId()) { continue; } UpdateZoomConstraintsRecursively(child, aConstraints); } } void APZCTreeManager::FlushRepaintsToClearScreenToGeckoTransform() @@ -1339,17 +1339,17 @@ APZCTreeManager::BuildOverscrollHandoffC // but do not follow the expected layer tree structure. If there are no // scroll parent links we just walk up the tree to find the scroll parent. OverscrollHandoffChain* result = new OverscrollHandoffChain; AsyncPanZoomController* apzc = aInitialTarget; while (apzc != nullptr) { result->Add(apzc); if (apzc->GetScrollHandoffParentId() == FrameMetrics::NULL_SCROLL_ID) { - if (!apzc->IsRootForLayersId()) { + if (!apzc->HasNoParentWithSameLayersId()) { // This probably indicates a bug or missed case in layout code NS_WARNING("Found a non-root APZ with no handoff parent"); } apzc = apzc->GetParent(); continue; } // Guard against a possible infinite-loop condition. If we hit this, the @@ -1357,17 +1357,17 @@ APZCTreeManager::BuildOverscrollHandoffC MOZ_ASSERT(apzc->GetScrollHandoffParentId() != apzc->GetGuid().mScrollId); // Find the AsyncPanZoomController instance with a matching layersId and // the scroll id that matches apzc->GetScrollHandoffParentId(). To do this // search the subtree with the same layersId for the apzc with the specified // scroll id. AsyncPanZoomController* scrollParent = nullptr; AsyncPanZoomController* parent = apzc; - while (!parent->IsRootForLayersId()) { + while (!parent->HasNoParentWithSameLayersId()) { parent = parent->GetParent(); // While walking up to find the root of the subtree, if we encounter the // handoff parent, we don't actually need to do the search so we can // just abort here. if (parent->GetGuid().mScrollId == apzc->GetScrollHandoffParentId()) { scrollParent = parent; break; } @@ -1700,16 +1700,16 @@ APZCTreeManager::CommonAncestor(AsyncPan return ancestor.forget(); } already_AddRefed<AsyncPanZoomController> APZCTreeManager::RootAPZCForLayersId(AsyncPanZoomController* aApzc) const { MonitorAutoLock lock(mTreeLock); nsRefPtr<AsyncPanZoomController> apzc = aApzc; - while (apzc && !apzc->IsRootForLayersId()) { + while (apzc && !apzc->HasNoParentWithSameLayersId()) { apzc = apzc->GetParent(); } return apzc.forget(); } } }
--- a/gfx/layers/apz/src/AsyncPanZoomController.h +++ b/gfx/layers/apz/src/AsyncPanZoomController.h @@ -894,19 +894,20 @@ public: mParent = aParent; } AsyncPanZoomController* GetParent() const { return mParent; } /* Returns true if there is no APZC higher in the tree with the same - * layers id. + * layers id. Deprecated. New code shouldn't use this. Old code should be + * updated to not use this. */ - bool IsRootForLayersId() const { + bool HasNoParentWithSameLayersId() const { return !mParent || (mParent->mLayersId != mLayersId); } private: // This is a raw pointer to avoid introducing a reference cycle between // AsyncPanZoomController and APZCTreeManager. Since these objects don't // live on the main thread, we can't use the cycle collector with them. // The APZCTreeManager owns the lifetime of the APZCs, so nulling this
--- a/gfx/layers/apz/test/apz_test_utils.js +++ b/gfx/layers/apz/test/apz_test_utils.js @@ -86,16 +86,16 @@ function addRoot(root, id) { // content process that triggered the paint, is reconstructed (as // the APZ test data only contains information abot this subtree). function buildApzcTree(paint) { // The APZC tree can potentially have multiple root nodes, // so we invent a node that is the parent of all roots. // This 'root' does not correspond to an APZC. var root = makeNode(-1); for (var scrollId in paint) { - if ("isRootForLayersId" in paint[scrollId]) { + if ("hasNoParentWithSameLayersId" in paint[scrollId]) { addRoot(root, scrollId); } else if ("parentScrollId" in paint[scrollId]) { addLink(root, scrollId, paint[scrollId]["parentScrollId"]); } } return root; }