static void android_view_RenderNode_setDisplayList(JNIEnv* env, jobject clazz, jlong renderNodePtr, jlong displayListPtr) { class RemovedObserver : public TreeObserver { public: virtual void onMaybeRemovedFromTree(RenderNode* node) override { maybeRemovedNodes.insert(sp<RenderNode>(node)); } std::set< sp<RenderNode> > maybeRemovedNodes; }; RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); DisplayList* newData = reinterpret_cast<DisplayList*>(displayListPtr); RemovedObserver observer; renderNode->setStagingDisplayList(newData, &observer); for (auto& node : observer.maybeRemovedNodes) { if (node->hasParents()) continue; onRenderNodeRemoved(env, node.get()); } }
static void android_view_RenderNode_setDisplayListData(JNIEnv* env, jobject clazz, jlong renderNodePtr, jlong newDataPtr) { RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); DisplayListData* newData = reinterpret_cast<DisplayListData*>(newDataPtr); renderNode->setStagingDisplayList(newData); }