| Index: cc/trees/layer_tree_host_impl_unittest.cc
 | 
| diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
 | 
| index 64758be799b5d6319c6d597a32076180bd23ee42..fb23ba64c651e32c1b4279ee512be0c305915eb3 100644
 | 
| --- a/cc/trees/layer_tree_host_impl_unittest.cc
 | 
| +++ b/cc/trees/layer_tree_host_impl_unittest.cc
 | 
| @@ -4,6 +4,7 @@
 | 
|  
 | 
|  #include "cc/trees/layer_tree_host_impl.h"
 | 
|  
 | 
| +#include <algorithm>
 | 
|  #include <cmath>
 | 
|  
 | 
|  #include "base/bind.h"
 | 
| @@ -7443,47 +7444,64 @@ TEST_F(LayerTreeHostImplTest, ScrollAnimated) {
 | 
|  
 | 
|  TEST_F(LayerTreeHostImplTest, GetPictureLayerImplPairs) {
 | 
|    host_impl_->CreatePendingTree();
 | 
| +  host_impl_->pending_tree()->SetRootLayer(
 | 
| +      PictureLayerImpl::Create(host_impl_->pending_tree(), 10));
 | 
| +
 | 
| +  LayerTreeImpl* pending_tree = host_impl_->pending_tree();
 | 
| +  LayerImpl* pending_layer = pending_tree->root_layer();
 | 
| +
 | 
| +  std::vector<PictureLayerImpl::Pair> layer_pairs;
 | 
| +  host_impl_->GetPictureLayerImplPairs(&layer_pairs);
 | 
| +  EXPECT_EQ(1u, layer_pairs.size());
 | 
| +  EXPECT_EQ(pending_layer, layer_pairs[0].pending);
 | 
| +  EXPECT_EQ(nullptr, layer_pairs[0].active);
 | 
| +
 | 
|    host_impl_->ActivateSyncTree();
 | 
| -  host_impl_->CreatePendingTree();
 | 
|  
 | 
|    LayerTreeImpl* active_tree = host_impl_->active_tree();
 | 
| -  LayerTreeImpl* pending_tree = host_impl_->pending_tree();
 | 
| +  LayerImpl* active_layer = active_tree->root_layer();
 | 
|    EXPECT_NE(active_tree, pending_tree);
 | 
| +  EXPECT_NE(active_layer, pending_layer);
 | 
| +  EXPECT_NE(nullptr, active_tree);
 | 
| +  EXPECT_NE(nullptr, active_layer);
 | 
|  
 | 
| -  scoped_ptr<FakePictureLayerImpl> active_layer =
 | 
| -      FakePictureLayerImpl::Create(active_tree, 10);
 | 
| -  scoped_ptr<FakePictureLayerImpl> pending_layer =
 | 
| -      FakePictureLayerImpl::Create(pending_tree, 10);
 | 
| +  host_impl_->CreatePendingTree();
 | 
|  
 | 
| -  std::vector<PictureLayerImpl::Pair> layer_pairs;
 | 
| +  layer_pairs.clear();
 | 
|    host_impl_->GetPictureLayerImplPairs(&layer_pairs);
 | 
| +  EXPECT_EQ(1u, layer_pairs.size());
 | 
| +  EXPECT_EQ(active_layer, layer_pairs[0].active);
 | 
| +  EXPECT_EQ(pending_layer, layer_pairs[0].pending);
 | 
|  
 | 
| -  EXPECT_EQ(2u, layer_pairs.size());
 | 
| -  if (layer_pairs[0].active) {
 | 
| -    EXPECT_EQ(active_layer.get(), layer_pairs[0].active);
 | 
| -    EXPECT_EQ(NULL, layer_pairs[0].pending);
 | 
| -  } else {
 | 
| -    EXPECT_EQ(pending_layer.get(), layer_pairs[0].pending);
 | 
| -    EXPECT_EQ(NULL, layer_pairs[0].active);
 | 
| -  }
 | 
| +  // Activate, the active layer has no twin now.
 | 
| +  host_impl_->ActivateSyncTree();
 | 
|  
 | 
| -  if (layer_pairs[1].active) {
 | 
| -    EXPECT_EQ(active_layer.get(), layer_pairs[1].active);
 | 
| -    EXPECT_EQ(NULL, layer_pairs[1].pending);
 | 
| -  } else {
 | 
| -    EXPECT_EQ(pending_layer.get(), layer_pairs[1].pending);
 | 
| -    EXPECT_EQ(NULL, layer_pairs[1].active);
 | 
| -  }
 | 
| +  layer_pairs.clear();
 | 
| +  host_impl_->GetPictureLayerImplPairs(&layer_pairs);
 | 
| +  EXPECT_EQ(1u, layer_pairs.size());
 | 
| +  EXPECT_EQ(active_layer, layer_pairs[0].active);
 | 
| +  EXPECT_EQ(nullptr, layer_pairs[0].pending);
 | 
| +
 | 
| +  // Create another layer in the pending tree that's not in the active tree. We
 | 
| +  // should get two pairs.
 | 
| +  host_impl_->CreatePendingTree();
 | 
| +  host_impl_->pending_tree()->root_layer()->AddChild(
 | 
| +      PictureLayerImpl::Create(host_impl_->pending_tree(), 11));
 | 
|  
 | 
| -  active_layer->set_twin_layer(pending_layer.get());
 | 
| -  pending_layer->set_twin_layer(active_layer.get());
 | 
| +  LayerImpl* new_pending_layer = pending_tree->root_layer()->children()[0];
 | 
|  
 | 
|    layer_pairs.clear();
 | 
|    host_impl_->GetPictureLayerImplPairs(&layer_pairs);
 | 
| -  EXPECT_EQ(1u, layer_pairs.size());
 | 
| +  EXPECT_EQ(2u, layer_pairs.size());
 | 
| +
 | 
| +  // The pair ordering is flaky, so make it consistent.
 | 
| +  if (layer_pairs[0].active != active_layer)
 | 
| +    std::swap(layer_pairs[0], layer_pairs[1]);
 | 
|  
 | 
| -  EXPECT_EQ(active_layer.get(), layer_pairs[0].active);
 | 
| -  EXPECT_EQ(pending_layer.get(), layer_pairs[0].pending);
 | 
| +  EXPECT_EQ(active_layer, layer_pairs[0].active);
 | 
| +  EXPECT_EQ(pending_layer, layer_pairs[0].pending);
 | 
| +  EXPECT_EQ(new_pending_layer, layer_pairs[1].pending);
 | 
| +  EXPECT_EQ(nullptr, layer_pairs[1].active);
 | 
|  }
 | 
|  
 | 
|  TEST_F(LayerTreeHostImplTest, DidBecomeActive) {
 | 
| 
 |