mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 21:31:04 +00:00
Bug 1443187 - Avoid crashing if a previously-uncomposited layer tree gets adopted. r=botond
MozReview-Commit-ID: FZYwS7IwdKq --HG-- extra : rebase_source : ea7b093df17887af841cb4ccdd64d47a69c016ad
This commit is contained in:
parent
5110d9e202
commit
ff4a47d56e
@ -254,14 +254,15 @@ APZCTreeManager::NotifyLayerTreeAdopted(uint64_t aLayersId,
|
|||||||
{
|
{
|
||||||
APZThreadUtils::AssertOnSamplerThread();
|
APZThreadUtils::AssertOnSamplerThread();
|
||||||
|
|
||||||
MOZ_ASSERT(aOldApzcTreeManager);
|
if (aOldApzcTreeManager) {
|
||||||
aOldApzcTreeManager->mFocusState.RemoveFocusTarget(aLayersId);
|
aOldApzcTreeManager->mFocusState.RemoveFocusTarget(aLayersId);
|
||||||
// While we could move the focus target information from the old APZC tree
|
// While we could move the focus target information from the old APZC tree
|
||||||
// manager into this one, it's safer to not do that, as we'll probably have
|
// manager into this one, it's safer to not do that, as we'll probably have
|
||||||
// that information repopulated soon anyway (on the next layers update).
|
// that information repopulated soon anyway (on the next layers update).
|
||||||
|
}
|
||||||
|
|
||||||
UniquePtr<APZTestData> adoptedData;
|
UniquePtr<APZTestData> adoptedData;
|
||||||
{ // scope lock for removal on oldApzcTreeManager
|
if (aOldApzcTreeManager) {
|
||||||
MutexAutoLock lock(aOldApzcTreeManager->mTestDataLock);
|
MutexAutoLock lock(aOldApzcTreeManager->mTestDataLock);
|
||||||
auto it = aOldApzcTreeManager->mTestData.find(aLayersId);
|
auto it = aOldApzcTreeManager->mTestData.find(aLayersId);
|
||||||
if (it != aOldApzcTreeManager->mTestData.end()) {
|
if (it != aOldApzcTreeManager->mTestData.end()) {
|
||||||
|
@ -66,8 +66,7 @@ APZSampler::NotifyLayerTreeAdopted(uint64_t aLayersId,
|
|||||||
const RefPtr<APZSampler>& aOldSampler)
|
const RefPtr<APZSampler>& aOldSampler)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread());
|
MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread());
|
||||||
MOZ_ASSERT(aOldSampler);
|
mApz->NotifyLayerTreeAdopted(aLayersId, aOldSampler ? aOldSampler->mApz : nullptr);
|
||||||
mApz->NotifyLayerTreeAdopted(aLayersId, aOldSampler->mApz);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1743,10 +1743,15 @@ CompositorBridgeParent::RecvAdoptChild(const uint64_t& child)
|
|||||||
parent = sIndirectLayerTrees[child].mApzcTreeManagerParent;
|
parent = sIndirectLayerTrees[child].mApzcTreeManagerParent;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't support moving a child from a APZ-enabled compositor to a
|
if (oldApzSampler) {
|
||||||
// APZ-disabled compostior. The mOptions assertion above should already
|
// We don't support moving a child from an APZ-enabled compositor to a
|
||||||
// ensure this, since APZ-ness is one of the things in mOptions.
|
// APZ-disabled compositor. The mOptions assertion above should already
|
||||||
MOZ_ASSERT((oldApzSampler != nullptr) == (mApzSampler != nullptr));
|
// ensure this, since APZ-ness is one of the things in mOptions. Note
|
||||||
|
// however it is possible for mApzSampler to be non-null here with
|
||||||
|
// oldApzSampler null, because the child may not have been previously
|
||||||
|
// composited.
|
||||||
|
MOZ_ASSERT(mApzSampler);
|
||||||
|
}
|
||||||
if (mApzSampler) {
|
if (mApzSampler) {
|
||||||
if (parent) {
|
if (parent) {
|
||||||
MOZ_ASSERT(mApzcTreeManager);
|
MOZ_ASSERT(mApzcTreeManager);
|
||||||
|
Loading…
Reference in New Issue
Block a user