Index: chrome/browser/android/compositor/compositor_view.cc |
diff --git a/chrome/browser/android/compositor/compositor_view.cc b/chrome/browser/android/compositor/compositor_view.cc |
index 69580802f389cc954c9c8ee991c79ef5aca21126..83e9fe65f3bf5a2d42cd75fbde2153ef1badbdfe 100644 |
--- a/chrome/browser/android/compositor/compositor_view.cc |
+++ b/chrome/browser/android/compositor/compositor_view.cc |
@@ -214,9 +214,12 @@ void CompositorView::SetSceneLayer(JNIEnv* env, |
SceneLayer* scene_layer = SceneLayer::FromJavaObject(env, jscene_layer); |
if (scene_layer_ != scene_layer) { |
- // Old tree provider is being detached. |
- if (scene_layer_ != nullptr) |
+ // The old tree should be detached only if it is not the cached layer or |
+ // the cached layer is not somewhere in the new root. |
+ if (scene_layer_ != nullptr |
+ && !scene_layer_->layer()->HasAncestor(scene_layer->layer().get())) { |
scene_layer_->OnDetach(); |
+ } |
scene_layer_ = scene_layer; |