Bug 1441916 - Introduce the notion of the APZ sampler thread. r?botond
The sampler thread is similar to the controller thread in that it doesn't
correspond to a particular actual thread, but instead introduces an
abstraction that allows us to reason about code flow and data ownership
that is logically grouped on a single thread. For now the sampler thread
remains mapped to the compositor thread, but eventually we will allow
it to be render backend thread when webrender is enabled.
MozReview-Commit-ID: D6i2t5lDvkv
--- a/gfx/layers/Compositor.cpp
+++ b/gfx/layers/Compositor.cpp
@@ -56,24 +56,16 @@ Compositor::Destroy()
void
Compositor::EndFrame()
{
ReadUnlockTextures();
mLastCompositionEndTime = TimeStamp::Now();
}
-/* static */ void
-Compositor::AssertOnCompositorThread()
-{
- MOZ_ASSERT(!CompositorThreadHolder::Loop() ||
- CompositorThreadHolder::Loop() == MessageLoop::current(),
- "Can only call this from the compositor thread!");
-}
-
bool
Compositor::ShouldDrawDiagnostics(DiagnosticFlags aFlags)
{
if ((aFlags & DiagnosticFlags::TILE) && !(mDiagnosticTypes & DiagnosticTypes::TILE_BORDERS)) {
return false;
}
if ((aFlags & DiagnosticFlags::BIGIMAGE) &&
!(mDiagnosticTypes & DiagnosticTypes::BIGIMAGE_BORDERS)) {
--- a/gfx/layers/Compositor.h
+++ b/gfx/layers/Compositor.h
@@ -492,22 +492,16 @@ public:
virtual void ForcePresent() { }
virtual bool IsPendingComposite() { return false; }
virtual void FinishPendingComposite() {}
widget::CompositorWidget* GetWidget() const { return mWidget; }
- /**
- * Debug-build assertion that can be called to ensure code is running on the
- * compositor thread.
- */
- static void AssertOnCompositorThread();
-
// Return statistics for the most recent frame we computed statistics for.
virtual void GetFrameStats(GPUStats* aStats);
ScreenRotation GetScreenRotation() const {
return mScreenRotation;
}
void SetScreenRotation(ScreenRotation aRotation) {
mScreenRotation = aRotation;
--- a/gfx/layers/apz/public/IAPZCTreeManager.cpp
+++ b/gfx/layers/apz/public/IAPZCTreeManager.cpp
@@ -4,17 +4,17 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/layers/IAPZCTreeManager.h"
#include "gfxPrefs.h" // for gfxPrefs
#include "InputData.h" // for InputData, etc
#include "mozilla/EventStateManager.h" // for WheelPrefs
-#include "mozilla/layers/APZThreadUtils.h" // for AssertOnCompositorThread, etc
+#include "mozilla/layers/APZThreadUtils.h" // for AssertOnControllerThread, etc
#include "mozilla/MouseEvents.h" // for WidgetMouseEvent
#include "mozilla/TextEvents.h" // for WidgetKeyboardEvent
#include "mozilla/TouchEvents.h" // for WidgetTouchEvent
#include "mozilla/WheelHandlingHelper.h" // for AutoWheelDeltaAdjuster
namespace mozilla {
namespace layers {
--- a/gfx/layers/apz/public/IAPZCTreeManager.h
+++ b/gfx/layers/apz/public/IAPZCTreeManager.h
@@ -108,17 +108,17 @@ public:
/**
* Set the keyboard shortcuts to use for translating keyboard events.
*/
virtual void SetKeyboardMap(const KeyboardMap& aKeyboardMap) = 0;
/**
* Kicks an animation to zoom to a rect. This may be either a zoom out or zoom
- * in. The actual animation is done on the compositor thread after being set
+ * in. The actual animation is done on the sampler thread after being set
* up. |aRect| must be given in CSS pixels, relative to the document.
* |aFlags| is a combination of the ZoomToRectBehavior enum values.
*/
virtual void ZoomToRect(
const ScrollableLayerGuid& aGuid,
const CSSRect& aRect,
const uint32_t aFlags = DEFAULT_BEHAVIOR) = 0;
--- a/gfx/layers/apz/src/APZCTreeManager.cpp
+++ b/gfx/layers/apz/src/APZCTreeManager.cpp
@@ -15,17 +15,17 @@
#include "InputBlockState.h" // for InputBlockState
#include "InputData.h" // for InputData, etc
#include "Layers.h" // for Layer, etc
#include "mozilla/dom/Touch.h" // for Touch
#include "mozilla/gfx/gfxVars.h" // for gfxVars
#include "mozilla/gfx/GPUParent.h" // for GPUParent
#include "mozilla/gfx/Logging.h" // for gfx::TreeLog
#include "mozilla/gfx/Point.h" // for Point
-#include "mozilla/layers/APZThreadUtils.h" // for AssertOnCompositorThread, etc
+#include "mozilla/layers/APZThreadUtils.h" // for AssertOnControllerThread, etc
#include "mozilla/layers/AsyncCompositionManager.h" // for ViewTransform
#include "mozilla/layers/AsyncDragMetrics.h" // for AsyncDragMetrics
#include "mozilla/layers/CompositorBridgeParent.h" // for CompositorBridgeParent, etc
#include "mozilla/layers/FocusState.h" // for FocusState
#include "mozilla/layers/LayerMetricsWrapper.h"
#include "mozilla/layers/WebRenderScrollDataWrapper.h"
#include "mozilla/MouseEvents.h"
#include "mozilla/mozalloc.h" // for operator new
@@ -264,17 +264,17 @@ APZCTreeManager::InitializeGlobalState()
MOZ_ASSERT(NS_IsMainThread());
AsyncPanZoomController::InitializeGlobalState();
}
void
APZCTreeManager::NotifyLayerTreeAdopted(uint64_t aLayersId,
const RefPtr<APZCTreeManager>& aOldApzcTreeManager)
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
MOZ_ASSERT(aOldApzcTreeManager);
aOldApzcTreeManager->mFocusState.RemoveFocusTarget(aLayersId);
// 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
// that information repopulated soon anyway (on the next layers update).
UniquePtr<APZTestData> adoptedData;
@@ -290,17 +290,17 @@ APZCTreeManager::NotifyLayerTreeAdopted(
MutexAutoLock lock(mTestDataLock);
mTestData[aLayersId] = Move(adoptedData);
}
}
void
APZCTreeManager::NotifyLayerTreeRemoved(uint64_t aLayersId)
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
mFocusState.RemoveFocusTarget(aLayersId);
{ // scope lock
MutexAutoLock lock(mTestDataLock);
mTestData.erase(aLayersId);
}
}
@@ -328,17 +328,17 @@ APZCTreeManager::SetAllowedTouchBehavior
template<class ScrollNode> void // ScrollNode is a LayerMetricsWrapper or a WebRenderScrollDataWrapper
APZCTreeManager::UpdateHitTestingTreeImpl(uint64_t aRootLayerTreeId,
const ScrollNode& aRoot,
bool aIsFirstPaint,
uint64_t aOriginatingLayersId,
uint32_t aPaintSequenceNumber)
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
RecursiveMutexAutoLock lock(mTreeLock);
// For testing purposes, we log some data to the APZTestData associated with
// the layers id that originated this update.
APZTestData* testData = nullptr;
if (gfxPrefs::APZTestLoggingEnabled()) {
MutexAutoLock lock(mTestDataLock);
@@ -523,17 +523,17 @@ APZCTreeManager::UpdateHitTestingTree(ui
aOriginatingLayersId, aPaintSequenceNumber);
}
bool
APZCTreeManager::PushStateToWR(wr::TransactionBuilder& aTxn,
const TimeStamp& aSampleTime,
nsTArray<wr::WrTransformProperty>& aTransformArray)
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
RecursiveMutexAutoLock lock(mTreeLock);
// During the first pass through the tree, we build a cache of guid->HTTN so
// that we can find the relevant APZC instances quickly in subsequent passes,
// such as the one below to generate scrollbar transforms. Without this, perf
// could end up being O(n^2) instead of O(n log n) because we'd have to search
// the tree to find the corresponding APZC every time we hit a thumb node.
@@ -2977,17 +2977,17 @@ APZCTreeManager::GetContentController(ui
});
return controller.forget();
}
bool
APZCTreeManager::GetAPZTestData(uint64_t aLayersId,
APZTestData* aOutData)
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
MutexAutoLock lock(mTestDataLock);
auto it = mTestData.find(aLayersId);
if (it == mTestData.end()) {
return false;
}
*aOutData = *(it->second);
return true;
}
--- a/gfx/layers/apz/src/APZCTreeManager.h
+++ b/gfx/layers/apz/src/APZCTreeManager.h
@@ -72,17 +72,17 @@ struct AncestorTransform;
*
* **************************************************************************
*/
/**
* This class manages the tree of AsyncPanZoomController instances. There is one
* instance of this class owned by each CompositorBridgeParent, and it contains as
* many AsyncPanZoomController instances as there are scrollable container layers.
- * This class generally lives on the compositor thread, although some functions
+ * This class generally lives on the sampler thread, although some functions
* may be called from other threads as noted; thread safety is ensured internally.
*
* The bulk of the work of this class happens as part of the UpdateHitTestingTree
* function, which is when a layer tree update is received by the compositor.
* This function walks through the layer tree and creates a tree of
* HitTestingTreeNode instances to match the layer tree and for use in
* hit-testing on the controller thread. APZC instances may be preserved across
* calls to this function if the corresponding layers are still present in the layer
@@ -121,27 +121,27 @@ public:
static void InitializeGlobalState();
/**
* Notifies this APZCTreeManager that the associated compositor is now
* responsible for managing another layers id, which got moved over from
* some other compositor. That other compositor's APZCTreeManager is also
* provided. This allows APZCTreeManager to transfer any necessary state
* from the old APZCTreeManager related to that layers id.
- * This function must be called on the compositor thread.
+ * This function must be called on the sampler thread.
*/
void NotifyLayerTreeAdopted(uint64_t aLayersId,
const RefPtr<APZCTreeManager>& aOldTreeManager);
/**
* Notifies this APZCTreeManager that a layer tree being managed by the
* associated compositor has been removed/destroyed. Note that this does
* NOT get called during shutdown situations, when the root layer tree is
* also getting destroyed.
- * This function must be called on the compositor thread.
+ * This function must be called on the sampler thread.
*/
void NotifyLayerTreeRemoved(uint64_t aLayersId);
/**
* Rebuild the focus state based on the focus target from the layer tree update
* that just occurred.
*
* @param aRootLayerTreeId The layer tree ID of the root layer corresponding
@@ -153,17 +153,17 @@ public:
uint64_t aOriginatingLayersId,
const FocusTarget& aFocusTarget);
/**
* Rebuild the hit-testing tree based on the layer update that just came up.
* Preserve nodes and APZC instances where possible, but retire those whose
* layers are no longer in the layer tree.
*
- * This must be called on the compositor thread as it walks the layer tree.
+ * This must be called on the sampler thread as it walks the layer tree.
*
* @param aRootLayerTreeId The layer tree ID of the root layer corresponding
* to this APZCTreeManager
* @param aRoot The root of the (full) layer tree
* @param aFirstPaintLayersId The layers id of the subtree to which aIsFirstPaint
* applies.
* @param aIsFirstPaint True if the layers update that this is called in response
* to included a first-paint. If this is true, the part of
@@ -188,17 +188,17 @@ public:
*/
void UpdateHitTestingTree(uint64_t aRootLayerTreeId,
const WebRenderScrollData& aScrollData,
bool aIsFirstPaint,
uint64_t aOriginatingLayersId,
uint32_t aPaintSequenceNumber);
/**
- * Called when webrender is enabled, from the compositor thread. This function
+ * Called when webrender is enabled, from the sampler thread. This function
* walks through the tree of APZC instances and tells webrender about the
* async scroll position. It also advances APZ animations to the specified
* sample time. In effect it is the webrender equivalent of (part of) the
* code in AsyncCompositionManager. If scrollbar transforms need updating
* to reflect the async scroll position, the updated transforms are appended
* to the provided aTransformArray.
* Returns true if any APZ animations are in progress and we need to keep
* compositing.
@@ -255,17 +255,17 @@ public:
/**
* Set the keyboard shortcuts to use for translating keyboard events.
*/
void SetKeyboardMap(const KeyboardMap& aKeyboardMap) override;
/**
* Kicks an animation to zoom to a rect. This may be either a zoom out or zoom
- * in. The actual animation is done on the compositor thread after being set
+ * in. The actual animation is done on the sampler thread after being set
* up. |aRect| must be given in CSS pixels, relative to the document.
* |aFlags| is a combination of the ZoomToRectBehavior enum values.
*/
void ZoomToRect(
const ScrollableLayerGuid& aGuid,
const CSSRect& aRect,
const uint32_t aFlags = DEFAULT_BEHAVIOR) override;
--- a/gfx/layers/apz/src/AsyncPanZoomController.cpp
+++ b/gfx/layers/apz/src/AsyncPanZoomController.cpp
@@ -829,17 +829,17 @@ AsyncPanZoomController::GetGestureEventL
const RefPtr<InputQueue>&
AsyncPanZoomController::GetInputQueue() const {
return mInputQueue;
}
void
AsyncPanZoomController::Destroy()
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
CancelAnimation(CancelAnimationFlags::ScrollSnap);
{ // scope the lock
MonitorAutoLock lock(mRefPtrMonitor);
mGeckoContentController = nullptr;
mGestureEventListener = nullptr;
}
@@ -3426,17 +3426,17 @@ AsyncPanZoomController::RequestContentRe
controller->RequestContentRepaint(aFrameMetrics);
mExpectedGeckoMetrics = aFrameMetrics;
mLastPaintRequestMetrics = aFrameMetrics;
}
bool AsyncPanZoomController::UpdateAnimation(const TimeStamp& aSampleTime,
nsTArray<RefPtr<Runnable>>* aOutDeferredTasks)
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
// This function may get called multiple with the same sample time, because
// there may be multiple layers with this APZC, and each layer invokes this
// function during composition. However we only want to do one animation step
// per composition so we need to deduplicate these calls first.
if (mLastSampleTime == aSampleTime) {
return false;
}
@@ -3485,17 +3485,17 @@ AsyncPanZoomController::GetOverscrollTra
// The overscroll effect is a simple translation by the overscroll offset.
ParentLayerPoint overscrollOffset(-mX.GetOverscroll(), -mY.GetOverscroll());
return AsyncTransformComponentMatrix()
.PostTranslate(overscrollOffset.x, overscrollOffset.y, 0);
}
bool AsyncPanZoomController::AdvanceAnimations(const TimeStamp& aSampleTime)
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
// Don't send any state-change notifications until the end of the function,
// because we may go through some intermediate states while we finish
// animations and start new ones.
StateChangeNotificationBlocker blocker(this);
// The eventual return value of this function. The compositor needs to know
// whether or not to advance by a frame as soon as it can. For example, if a
@@ -3764,17 +3764,17 @@ bool AsyncPanZoomController::IsCurrently
this, Stringify(painted).c_str(), Stringify(visible).c_str());
return true;
}
void AsyncPanZoomController::NotifyLayersUpdated(const ScrollMetadata& aScrollMetadata,
bool aIsFirstPaint,
bool aThisLayerTreeUpdated)
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
RecursiveMutexAutoLock lock(mRecursiveMutex);
bool isDefault = mScrollMetadata.IsDefault();
const FrameMetrics& aLayerMetrics = aScrollMetadata.GetMetrics();
if ((aScrollMetadata == mLastContentPaintMetadata) && !isDefault) {
// No new information here, skip it.
@@ -4382,17 +4382,17 @@ void AsyncPanZoomController::UpdateShare
mSharedLock->Lock();
*frame = mFrameMetrics;
mSharedLock->Unlock();
}
}
void AsyncPanZoomController::ShareCompositorFrameMetrics()
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
// Only create the shared memory buffer if it hasn't already been created,
// we are using progressive tile painting, and we have a
// controller to pass the shared memory back to the content process/thread.
if (!mSharedFrameMetricsBuffer && mMetricsSharingController && gfxPrefs::ProgressivePaint()) {
// Create shared memory and initialize it with the current FrameMetrics value
mSharedFrameMetricsBuffer = new ipc::SharedMemoryBasic;
--- a/gfx/layers/apz/src/AsyncPanZoomController.h
+++ b/gfx/layers/apz/src/AsyncPanZoomController.h
@@ -185,17 +185,17 @@ public:
static void InitializeGlobalState();
// --------------------------------------------------------------------------
// These methods must only be called on the controller/UI thread.
//
/**
* Kicks an animation to zoom to a rect. This may be either a zoom out or zoom
- * in. The actual animation is done on the compositor thread after being set
+ * in. The actual animation is done on the sampler thread after being set
* up.
*/
void ZoomToRect(CSSRect aRect, const uint32_t aFlags);
/**
* Updates any zoom constraints contained in the <meta name="viewport"> tag.
*/
void UpdateZoomConstraints(const ZoomConstraints& aConstraints);
@@ -208,17 +208,17 @@ public:
/**
* Schedules a runnable to run on the controller/UI thread at some time
* in the future.
*/
void PostDelayedTask(already_AddRefed<Runnable> aTask, int aDelayMs);
// --------------------------------------------------------------------------
- // These methods must only be called on the compositor thread.
+ // These methods must only be called on the sampler thread.
//
/**
* Advances any animations currently running to the given timestamp.
* This may be called multiple times with the same timestamp.
*
* The return value indicates whether or not any currently running animation
* should continue. If true, the compositor should schedule another composite.
@@ -771,17 +771,17 @@ protected:
void OnTouchEndOrCancel();
uint64_t mLayersId;
RefPtr<CompositorController> mCompositorController;
RefPtr<MetricsSharingController> mMetricsSharingController;
/* Access to the following two fields is protected by the mRefPtrMonitor,
since they are accessed on the UI thread but can be cleared on the
- compositor thread. */
+ sampler thread. */
RefPtr<GeckoContentController> mGeckoContentController;
RefPtr<GestureEventListener> mGestureEventListener;
mutable Monitor mRefPtrMonitor;
// 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/src/HitTestingTreeNode.cpp
+++ b/gfx/layers/apz/src/HitTestingTreeNode.cpp
@@ -5,17 +5,17 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "HitTestingTreeNode.h"
#include "AsyncPanZoomController.h" // for AsyncPanZoomController
#include "gfxPrefs.h"
#include "LayersLogging.h" // for Stringify
#include "mozilla/gfx/Point.h" // for Point4D
-#include "mozilla/layers/APZThreadUtils.h" // for AssertOnCompositorThread
+#include "mozilla/layers/APZThreadUtils.h" // for AssertOnSamplerThread
#include "mozilla/layers/APZUtils.h" // for CompleteAsyncTransform
#include "mozilla/layers/AsyncCompositionManager.h" // for ViewTransform::operator Matrix4x4()
#include "mozilla/layers/AsyncDragMetrics.h" // for AsyncDragMetrics
#include "nsPrintfCString.h" // for nsPrintfCString
#include "UnitTransforms.h" // for ViewAs
namespace mozilla {
namespace layers {
@@ -54,17 +54,17 @@ HitTestingTreeNode::RecycleWith(AsyncPan
HitTestingTreeNode::~HitTestingTreeNode()
{
}
void
HitTestingTreeNode::Destroy()
{
- APZThreadUtils::AssertOnCompositorThread();
+ APZThreadUtils::AssertOnSamplerThread();
mPrevSibling = nullptr;
mLastChild = nullptr;
mParent = nullptr;
if (mApzc) {
if (mIsPrimaryApzcHolder) {
mApzc->Destroy();
--- a/gfx/layers/apz/src/OverscrollHandoffState.h
+++ b/gfx/layers/apz/src/OverscrollHandoffState.h
@@ -30,17 +30,17 @@ class AsyncPanZoomController;
* adjusting for scrollgrab.
*/
class OverscrollHandoffChain
{
protected:
// Reference-counted classes cannot have public destructors.
~OverscrollHandoffChain();
public:
- // Threadsafe so that the controller and compositor threads can both maintain
+ // Threadsafe so that the controller and sampler threads can both maintain
// nsRefPtrs to the same handoff chain.
// Mutable so that we can pass around the class by
// RefPtr<const OverscrollHandoffChain> and thus enforce that, once built,
// the chain is not modified.
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(OverscrollHandoffChain)
/*
* Methods for building the handoff chain.
--- a/gfx/layers/apz/util/APZThreadUtils.cpp
+++ b/gfx/layers/apz/util/APZThreadUtils.cpp
@@ -1,17 +1,17 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/layers/APZThreadUtils.h"
-#include "mozilla/layers/Compositor.h"
+#include "mozilla/layers/CompositorThread.h"
namespace mozilla {
namespace layers {
static bool sThreadAssertionsEnabled = true;
static MessageLoop* sControllerThread;
/*static*/ void
@@ -38,20 +38,20 @@ APZThreadUtils::AssertOnControllerThread
if (!GetThreadAssertionsEnabled()) {
return;
}
MOZ_ASSERT(sControllerThread == MessageLoop::current());
}
/*static*/ void
-APZThreadUtils::AssertOnCompositorThread()
+APZThreadUtils::AssertOnSamplerThread()
{
if (GetThreadAssertionsEnabled()) {
- Compositor::AssertOnCompositorThread();
+ MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread());
}
}
/*static*/ void
APZThreadUtils::RunOnControllerThread(already_AddRefed<Runnable> aTask)
{
RefPtr<Runnable> task = aTask;
--- a/gfx/layers/apz/util/APZThreadUtils.h
+++ b/gfx/layers/apz/util/APZThreadUtils.h
@@ -37,20 +37,20 @@ public:
* This can be used to assert that the current thread is the
* controller/UI thread (on which input events are received).
* This does nothing if thread assertions are disabled.
*/
static void AssertOnControllerThread();
/**
* This can be used to assert that the current thread is the
- * compositor thread (which applies the async transform).
+ * sampler thread (which samples the async transform).
* This does nothing if thread assertions are disabled.
*/
- static void AssertOnCompositorThread();
+ static void AssertOnSamplerThread();
/**
* Run the given task on the APZ "controller thread" for this platform. If
* this function is called from the controller thread itself then the task is
* run immediately without getting queued.
*/
static void RunOnControllerThread(already_AddRefed<Runnable> aTask);
--- a/gfx/layers/ipc/CompositorBridgeParent.cpp
+++ b/gfx/layers/ipc/CompositorBridgeParent.cpp
@@ -2091,19 +2091,18 @@ UpdateIndirectTree(uint64_t aId, Layer*
MonitorAutoLock lock(*sIndirectLayerTreesLock);
sIndirectLayerTrees[aId].mRoot = aRoot;
sIndirectLayerTrees[aId].mTargetConfig = aTargetConfig;
}
/* static */ CompositorBridgeParent::LayerTreeState*
CompositorBridgeParent::GetIndirectShadowTree(uint64_t aId)
{
- // Only the compositor thread should use this method variant, however it is
- // safe to be called on the main thread during APZ gtests.
- APZThreadUtils::AssertOnCompositorThread();
+ // Only the compositor thread should use this method variant
+ MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread());
MonitorAutoLock lock(*sIndirectLayerTreesLock);
LayerTreeMap::iterator cit = sIndirectLayerTrees.find(aId);
if (sIndirectLayerTrees.end() == cit) {
return nullptr;
}
return &cit->second;
}