Merge "Fix setPositionListener race condition" into qt-dev am: 2c52298236

am: 76925e1210

Change-Id: I5dc7565f6fb7faae96e54bafcfa2a1bdcf3b389e
This commit is contained in:
John Reck
2019-06-12 18:14:51 -07:00
committed by android-build-merger
2 changed files with 10 additions and 4 deletions

View File

@@ -264,6 +264,12 @@ void RenderNode::syncProperties() {
}
void RenderNode::pushStagingPropertiesChanges(TreeInfo& info) {
if (mPositionListenerDirty) {
mPositionListener = std::move(mStagingPositionListener);
mStagingPositionListener = nullptr;
mPositionListenerDirty = false;
}
// Push the animators first so that setupStartValueIfNecessary() is called
// before properties() is trampled by stagingProperties(), as they are
// required by some animators.

View File

@@ -188,11 +188,9 @@ public:
virtual void onPositionLost(RenderNode& node, const TreeInfo* info) = 0;
};
// Note this is not thread safe, this needs to be called
// before the RenderNode is used for drawing.
// RenderNode takes ownership of the pointer
ANDROID_API void setPositionListener(PositionListener* listener) {
mPositionListener = listener;
mStagingPositionListener = listener;
mPositionListenerDirty = true;
}
// This is only modified in MODE_FULL, so it can be safely accessed
@@ -275,6 +273,8 @@ private:
// mDisplayList, not mStagingDisplayList.
uint32_t mParentCount;
bool mPositionListenerDirty = false;
sp<PositionListener> mStagingPositionListener;
sp<PositionListener> mPositionListener;
UsageHint mUsageHint = UsageHint::Unknown;