Merge "Fix setPositionListener race condition" into qt-dev
This commit is contained in:
@@ -264,6 +264,12 @@ void RenderNode::syncProperties() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RenderNode::pushStagingPropertiesChanges(TreeInfo& info) {
|
void RenderNode::pushStagingPropertiesChanges(TreeInfo& info) {
|
||||||
|
if (mPositionListenerDirty) {
|
||||||
|
mPositionListener = std::move(mStagingPositionListener);
|
||||||
|
mStagingPositionListener = nullptr;
|
||||||
|
mPositionListenerDirty = false;
|
||||||
|
}
|
||||||
|
|
||||||
// Push the animators first so that setupStartValueIfNecessary() is called
|
// Push the animators first so that setupStartValueIfNecessary() is called
|
||||||
// before properties() is trampled by stagingProperties(), as they are
|
// before properties() is trampled by stagingProperties(), as they are
|
||||||
// required by some animators.
|
// required by some animators.
|
||||||
|
|||||||
@@ -188,11 +188,9 @@ public:
|
|||||||
virtual void onPositionLost(RenderNode& node, const TreeInfo* info) = 0;
|
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) {
|
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
|
// This is only modified in MODE_FULL, so it can be safely accessed
|
||||||
@@ -275,6 +273,8 @@ private:
|
|||||||
// mDisplayList, not mStagingDisplayList.
|
// mDisplayList, not mStagingDisplayList.
|
||||||
uint32_t mParentCount;
|
uint32_t mParentCount;
|
||||||
|
|
||||||
|
bool mPositionListenerDirty = false;
|
||||||
|
sp<PositionListener> mStagingPositionListener;
|
||||||
sp<PositionListener> mPositionListener;
|
sp<PositionListener> mPositionListener;
|
||||||
|
|
||||||
UsageHint mUsageHint = UsageHint::Unknown;
|
UsageHint mUsageHint = UsageHint::Unknown;
|
||||||
|
|||||||
Reference in New Issue
Block a user