Make RenderPass::Id an isolated class

Move RenderPass::Id out of RenderPass and make it an isolated class
called RenderPassId, so RenderPassDrawQuad and AppendQuadsData will not
need to depend on entire RenderPass class.

BUG=344962

Review URL: https://codereview.chromium.org/404563005

Cr-Commit-Position: refs/heads/master@{#291403}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@291403 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index fb4c1f2d..4f97e0e 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -298,6 +298,8 @@
     "quads/render_pass.h",
     "quads/render_pass_draw_quad.cc",
     "quads/render_pass_draw_quad.h",
+    "quads/render_pass_id.cc",
+    "quads/render_pass_id.h",
     "quads/shared_quad_state.cc",
     "quads/shared_quad_state.h",
     "quads/solid_color_draw_quad.cc",
diff --git a/cc/cc.gyp b/cc/cc.gyp
index 04f8a913..b9b72908 100644
--- a/cc/cc.gyp
+++ b/cc/cc.gyp
@@ -326,6 +326,8 @@
         'quads/render_pass.h',
         'quads/render_pass_draw_quad.cc',
         'quads/render_pass_draw_quad.h',
+        'quads/render_pass_id.cc',
+        'quads/render_pass_id.h',
         'quads/shared_quad_state.cc',
         'quads/shared_quad_state.h',
         'quads/solid_color_draw_quad.cc',
diff --git a/cc/layers/append_quads_data.h b/cc/layers/append_quads_data.h
index 6326bbb8..ffe0dd9 100644
--- a/cc/layers/append_quads_data.h
+++ b/cc/layers/append_quads_data.h
@@ -6,7 +6,7 @@
 #define CC_LAYERS_APPEND_QUADS_DATA_H_
 
 #include "base/basictypes.h"
-#include "cc/quads/render_pass.h"
+#include "cc/quads/render_pass_id.h"
 
 namespace cc {
 
@@ -18,7 +18,7 @@
         approximated_visible_content_area(0),
         render_pass_id(0, 0) {}
 
-  explicit AppendQuadsData(RenderPass::Id render_pass_id)
+  explicit AppendQuadsData(RenderPassId render_pass_id)
       : num_incomplete_tiles(0),
         num_missing_tiles(0),
         visible_content_area(0),
@@ -34,7 +34,7 @@
   // Set by the layer appending quads.
   int64 approximated_visible_content_area;
   // Given to the layer appending quads.
-  const RenderPass::Id render_pass_id;
+  const RenderPassId render_pass_id;
 };
 
 }  // namespace cc
diff --git a/cc/layers/delegated_frame_provider_unittest.cc b/cc/layers/delegated_frame_provider_unittest.cc
index 88936d7..5e946a5 100644
--- a/cc/layers/delegated_frame_provider_unittest.cc
+++ b/cc/layers/delegated_frame_provider_unittest.cc
@@ -26,7 +26,7 @@
     scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData);
 
     scoped_ptr<RenderPass> root_pass(RenderPass::Create());
-    root_pass->SetNew(RenderPass::Id(1, 1),
+    root_pass->SetNew(RenderPassId(1, 1),
                       root_output_rect,
                       root_damage_rect,
                       gfx::Transform());
diff --git a/cc/layers/delegated_renderer_layer_impl.cc b/cc/layers/delegated_renderer_layer_impl.cc
index 9032fad..199a15bb 100644
--- a/cc/layers/delegated_renderer_layer_impl.cc
+++ b/cc/layers/delegated_renderer_layer_impl.cc
@@ -165,7 +165,7 @@
     RenderPassList::iterator to_take =
         render_passes_in_draw_order->begin() + i;
     render_passes_index_by_id_.insert(
-        std::pair<RenderPass::Id, int>((*to_take)->id, i));
+        std::pair<RenderPassId, int>((*to_take)->id, i));
     scoped_ptr<RenderPass> taken_render_pass =
         render_passes_in_draw_order->take(to_take);
     render_passes_in_draw_order_.push_back(taken_render_pass.Pass());
@@ -194,20 +194,19 @@
 static inline int IndexToId(int index) { return index + 1; }
 static inline int IdToIndex(int id) { return id - 1; }
 
-RenderPass::Id DelegatedRendererLayerImpl::FirstContributingRenderPassId()
-    const {
-  return RenderPass::Id(id(), IndexToId(0));
+RenderPassId DelegatedRendererLayerImpl::FirstContributingRenderPassId() const {
+  return RenderPassId(id(), IndexToId(0));
 }
 
-RenderPass::Id DelegatedRendererLayerImpl::NextContributingRenderPassId(
-    RenderPass::Id previous) const {
-  return RenderPass::Id(previous.layer_id, previous.index + 1);
+RenderPassId DelegatedRendererLayerImpl::NextContributingRenderPassId(
+    RenderPassId previous) const {
+  return RenderPassId(previous.layer_id, previous.index + 1);
 }
 
 bool DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId(
-    RenderPass::Id delegated_render_pass_id,
-    RenderPass::Id* output_render_pass_id) const {
-  base::hash_map<RenderPass::Id, int>::const_iterator found =
+    RenderPassId delegated_render_pass_id,
+    RenderPassId* output_render_pass_id) const {
+  base::hash_map<RenderPassId, int>::const_iterator found =
       render_passes_index_by_id_.find(delegated_render_pass_id);
   if (found == render_passes_index_by_id_.end()) {
     // Be robust against a RenderPass id that isn't part of the frame.
@@ -215,7 +214,7 @@
   }
   unsigned delegated_render_pass_index = found->second;
   *output_render_pass_id =
-      RenderPass::Id(id(), IndexToId(delegated_render_pass_index));
+      RenderPassId(id(), IndexToId(delegated_render_pass_index));
   return true;
 }
 
@@ -231,7 +230,7 @@
                                           inverse_device_scale_factor_);
 
   for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) {
-    RenderPass::Id output_render_pass_id(-1, -1);
+    RenderPassId output_render_pass_id(-1, -1);
     bool present =
         ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id,
                                      &output_render_pass_id);
@@ -266,7 +265,7 @@
   if (render_passes_in_draw_order_.empty())
     return;
 
-  RenderPass::Id target_render_pass_id = append_quads_data->render_pass_id;
+  RenderPassId target_render_pass_id = append_quads_data->render_pass_id;
 
   const RenderPass* root_delegated_render_pass =
       render_passes_in_draw_order_.back();
@@ -456,9 +455,9 @@
           delegated_quad, output_shared_quad_state);
       output_quad->visible_rect = quad_visible_rect;
     } else {
-      RenderPass::Id delegated_contributing_render_pass_id =
+      RenderPassId delegated_contributing_render_pass_id =
           RenderPassDrawQuad::MaterialCast(delegated_quad)->render_pass_id;
-      RenderPass::Id output_contributing_render_pass_id(-1, -1);
+      RenderPassId output_contributing_render_pass_id(-1, -1);
 
       bool present =
           ConvertDelegatedRenderPassId(delegated_contributing_render_pass_id,
diff --git a/cc/layers/delegated_renderer_layer_impl.h b/cc/layers/delegated_renderer_layer_impl.h
index e26450d..1f3c881 100644
--- a/cc/layers/delegated_renderer_layer_impl.h
+++ b/cc/layers/delegated_renderer_layer_impl.h
@@ -28,9 +28,9 @@
       OVERRIDE;
   virtual bool HasDelegatedContent() const OVERRIDE;
   virtual bool HasContributingDelegatedRenderPasses() const OVERRIDE;
-  virtual RenderPass::Id FirstContributingRenderPassId() const OVERRIDE;
-  virtual RenderPass::Id NextContributingRenderPassId(
-      RenderPass::Id previous) const OVERRIDE;
+  virtual RenderPassId FirstContributingRenderPassId() const OVERRIDE;
+  virtual RenderPassId NextContributingRenderPassId(
+      RenderPassId previous) const OVERRIDE;
   virtual void ReleaseResources() OVERRIDE;
   virtual bool WillDraw(DrawMode draw_mode,
                         ResourceProvider* resource_provider) OVERRIDE;
@@ -75,9 +75,8 @@
 
   // Returns |true| if the delegated_render_pass_id is part of the current
   // frame and can be converted.
-  bool ConvertDelegatedRenderPassId(
-      RenderPass::Id delegated_render_pass_id,
-      RenderPass::Id* output_render_pass_id) const;
+  bool ConvertDelegatedRenderPassId(RenderPassId delegated_render_pass_id,
+                                    RenderPassId* output_render_pass_id) const;
 
   void AppendRenderPassQuads(
       RenderPass* render_pass,
@@ -92,7 +91,7 @@
   bool have_render_passes_to_push_;
   float inverse_device_scale_factor_;
   RenderPassList render_passes_in_draw_order_;
-  base::hash_map<RenderPass::Id, int> render_passes_index_by_id_;
+  base::hash_map<RenderPassId, int> render_passes_index_by_id_;
   ResourceProvider::ResourceIdArray resources_;
 
   int child_id_;
diff --git a/cc/layers/delegated_renderer_layer_impl_unittest.cc b/cc/layers/delegated_renderer_layer_impl_unittest.cc
index 69f54f9..94ba6c7 100644
--- a/cc/layers/delegated_renderer_layer_impl_unittest.cc
+++ b/cc/layers/delegated_renderer_layer_impl_unittest.cc
@@ -92,18 +92,18 @@
 
     RenderPassList delegated_render_passes;
     TestRenderPass* pass1 = AddRenderPass(&delegated_render_passes,
-                                          RenderPass::Id(9, 6),
+                                          RenderPassId(9, 6),
                                           gfx::Rect(6, 6, 6, 6),
                                           gfx::Transform(1, 0, 0, 1, 5, 6));
     AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u);
     TestRenderPass* pass2 = AddRenderPass(&delegated_render_passes,
-                                          RenderPass::Id(9, 7),
+                                          RenderPassId(9, 7),
                                           gfx::Rect(7, 7, 7, 7),
                                           gfx::Transform(1, 0, 0, 1, 7, 8));
     AddQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u);
     AddRenderPassQuad(pass2, pass1);
     TestRenderPass* pass3 = AddRenderPass(&delegated_render_passes,
-                                          RenderPass::Id(9, 8),
+                                          RenderPassId(9, 8),
                                           gfx::Rect(0, 0, 8, 8),
                                           gfx::Transform(1, 0, 0, 1, 9, 10));
     AddRenderPassQuad(pass3, pass2);
@@ -214,7 +214,7 @@
   ASSERT_EQ(5u, frame.render_passes.size());
 
   // The layer's target is the RenderPass from layer_after_.
-  EXPECT_EQ(RenderPass::Id(3, 0), frame.render_passes[3]->id);
+  EXPECT_EQ(RenderPassId(3, 0), frame.render_passes[3]->id);
 
   // The DelegatedRendererLayer should have added copies of quads in its root
   // RenderPass to its target RenderPass. The layer_after_ also adds one quad.
@@ -438,7 +438,7 @@
   ASSERT_EQ(6u, frame.render_passes.size());
 
   // The layer's target is the RenderPass owned by itself.
-  EXPECT_EQ(RenderPass::Id(4, 0), frame.render_passes[3]->id);
+  EXPECT_EQ(RenderPassId(4, 0), frame.render_passes[3]->id);
 
   // The DelegatedRendererLayer should have added copies of quads in its root
   // RenderPass to its target RenderPass.
@@ -520,11 +520,10 @@
     bool child_pass_clipped = false;
 
     {
-      TestRenderPass* pass = AddRenderPass(
-          &delegated_render_passes,
-          RenderPass::Id(10, 7),
-          child_pass_rect,
-          gfx::Transform());
+      TestRenderPass* pass = AddRenderPass(&delegated_render_passes,
+                                           RenderPassId(10, 7),
+                                           child_pass_rect,
+                                           gfx::Transform());
       SharedQuadState* shared_quad_state =
           pass->CreateAndAppendSharedQuadState();
       shared_quad_state->SetAll(child_pass_transform,
@@ -560,11 +559,10 @@
     gfx::Rect root_pass_clip_rect(10, 10, 35, 35);
     bool root_pass_clipped = root_delegated_render_pass_is_clipped_;
 
-    TestRenderPass* pass = AddRenderPass(
-        &delegated_render_passes,
-        RenderPass::Id(9, 6),
-        root_pass_rect,
-        gfx::Transform());
+    TestRenderPass* pass = AddRenderPass(&delegated_render_passes,
+                                         RenderPassId(9, 6),
+                                         root_pass_rect,
+                                         gfx::Transform());
     SharedQuadState* shared_quad_state = pass->CreateAndAppendSharedQuadState();
     shared_quad_state->SetAll(root_pass_transform,
                               root_pass_content_bounds,
@@ -577,16 +575,15 @@
 
     RenderPassDrawQuad* render_pass_quad =
         pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
-    render_pass_quad->SetNew(
-        shared_quad_state,
-        gfx::Rect(5, 5, 7, 7),  // quad_rect
-        gfx::Rect(5, 5, 7, 7),  // visible_rect
-        RenderPass::Id(10, 7),  // render_pass_id
-        0,                      // mask_resource_id
-        gfx::RectF(),           // mask_uv_rect
-        FilterOperations(),     // filters
-        gfx::Vector2dF(),       // filters_scale
-        FilterOperations());    // background_filters
+    render_pass_quad->SetNew(shared_quad_state,
+                             gfx::Rect(5, 5, 7, 7),  // quad_rect
+                             gfx::Rect(5, 5, 7, 7),  // visible_rect
+                             RenderPassId(10, 7),    // render_pass_id
+                             0,                      // mask_resource_id
+                             gfx::RectF(),           // mask_uv_rect
+                             FilterOperations(),     // filters
+                             gfx::Vector2dF(),       // filters_scale
+                             FilterOperations());    // background_filters
 
     SolidColorDrawQuad* color_quad;
     color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
@@ -957,11 +954,10 @@
     bool child_pass_clipped = false;
 
     {
-      TestRenderPass* pass = AddRenderPass(
-          &delegated_render_passes,
-          RenderPass::Id(10, 7),
-          child_pass_rect,
-          gfx::Transform());
+      TestRenderPass* pass = AddRenderPass(&delegated_render_passes,
+                                           RenderPassId(10, 7),
+                                           child_pass_rect,
+                                           gfx::Transform());
       SharedQuadState* shared_quad_state =
           pass->CreateAndAppendSharedQuadState();
       shared_quad_state->SetAll(child_pass_transform,
@@ -995,11 +991,10 @@
     gfx::Rect root_pass_clip_rect(5, 5, 40, 40);
     bool root_pass_clipped = root_delegated_render_pass_is_clipped_;
 
-    TestRenderPass* pass = AddRenderPass(
-        &delegated_render_passes,
-        RenderPass::Id(9, 6),
-        root_pass_rect,
-        gfx::Transform());
+    TestRenderPass* pass = AddRenderPass(&delegated_render_passes,
+                                         RenderPassId(9, 6),
+                                         root_pass_rect,
+                                         gfx::Transform());
     SharedQuadState* shared_quad_state = pass->CreateAndAppendSharedQuadState();
     shared_quad_state->SetAll(root_pass_transform,
                               root_pass_content_bounds,
@@ -1012,16 +1007,15 @@
 
     RenderPassDrawQuad* render_pass_quad =
         pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
-    render_pass_quad->SetNew(
-        shared_quad_state,
-        gfx::Rect(5, 5, 7, 7),  // quad_rect
-        gfx::Rect(5, 5, 7, 7),  // visible_quad_rect
-        RenderPass::Id(10, 7),  // render_pass_id
-        0,                      // mask_resource_id
-        gfx::RectF(),           // mask_uv_rect
-        FilterOperations(),     // filters
-        gfx::Vector2dF(),       // filters_scale
-        FilterOperations());    // background_filters
+    render_pass_quad->SetNew(shared_quad_state,
+                             gfx::Rect(5, 5, 7, 7),  // quad_rect
+                             gfx::Rect(5, 5, 7, 7),  // visible_quad_rect
+                             RenderPassId(10, 7),    // render_pass_id
+                             0,                      // mask_resource_id
+                             gfx::RectF(),           // mask_uv_rect
+                             FilterOperations(),     // filters
+                             gfx::Vector2dF(),       // filters_scale
+                             FilterOperations());    // background_filters
 
     SolidColorDrawQuad* color_quad;
     color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
@@ -1339,16 +1333,15 @@
   delegated_renderer_layer->SetDrawsContent(true);
 
   RenderPassList delegated_render_passes;
-  TestRenderPass* pass1 = AddRenderPass(
-      &delegated_render_passes,
-      RenderPass::Id(9, 6),
-      gfx::Rect(0, 0, 10, 10),
-      gfx::Transform());
+  TestRenderPass* pass1 = AddRenderPass(&delegated_render_passes,
+                                        RenderPassId(9, 6),
+                                        gfx::Rect(0, 0, 10, 10),
+                                        gfx::Transform());
   AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u);
 
   // This render pass isn't part of the frame.
   scoped_ptr<TestRenderPass> missing_pass(TestRenderPass::Create());
-  missing_pass->SetNew(RenderPass::Id(9, 7),
+  missing_pass->SetNew(RenderPassId(9, 7),
                        gfx::Rect(7, 7, 7, 7),
                        gfx::Rect(7, 7, 7, 7),
                        gfx::Transform());
@@ -1397,13 +1390,13 @@
   RenderPassList delegated_render_passes;
   // pass2 is just the size of the quad. It contributes to |pass1| with a
   // translation of (11,0).
-  RenderPass::Id pass2_id =
+  RenderPassId pass2_id =
       delegated_renderer_layer_impl->FirstContributingRenderPassId();
   TestRenderPass* pass2 =
       AddRenderPass(&delegated_render_passes, pass2_id, quad_rect, transform);
   AddQuad(pass2, gfx::Rect(quad_rect.size()), SK_ColorRED);
   // |pass1| covers the whole layer.
-  RenderPass::Id pass1_id = RenderPass::Id(impl.root_layer()->id(), 0);
+  RenderPassId pass1_id = RenderPassId(impl.root_layer()->id(), 0);
   TestRenderPass* pass1 = AddRenderPass(&delegated_render_passes,
                                         pass1_id,
                                         gfx::Rect(layer_size),
@@ -1549,7 +1542,7 @@
 
   RenderPassList delegated_render_passes;
   // |pass1| covers the whole layer.
-  RenderPass::Id pass1_id = RenderPass::Id(5, 0);
+  RenderPassId pass1_id = RenderPassId(5, 0);
   AddRenderPass(&delegated_render_passes,
                 pass1_id,
                 gfx::Rect(layer_size),
diff --git a/cc/layers/delegated_renderer_layer_unittest.cc b/cc/layers/delegated_renderer_layer_unittest.cc
index b997a26..3805f18 100644
--- a/cc/layers/delegated_renderer_layer_unittest.cc
+++ b/cc/layers/delegated_renderer_layer_unittest.cc
@@ -36,10 +36,8 @@
  public:
   DelegatedRendererLayerTestSimple() : DelegatedRendererLayerTest() {
     scoped_ptr<RenderPass> root_pass(RenderPass::Create());
-    root_pass->SetNew(RenderPass::Id(1, 1),
-                      gfx::Rect(1, 1),
-                      gfx::Rect(1, 1),
-                      gfx::Transform());
+    root_pass->SetNew(
+        RenderPassId(1, 1), gfx::Rect(1, 1), gfx::Rect(1, 1), gfx::Transform());
     scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData);
     frame_data->render_pass_list.push_back(root_pass.Pass());
     resources_ = new DelegatedFrameResourceCollection;
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
index df9f3bc..14ffa6f8 100644
--- a/cc/layers/layer_impl.cc
+++ b/cc/layers/layer_impl.cc
@@ -21,6 +21,7 @@
 #include "cc/layers/painted_scrollbar_layer_impl.h"
 #include "cc/output/copy_output_request.h"
 #include "cc/quads/debug_border_draw_quad.h"
+#include "cc/quads/render_pass.h"
 #include "cc/trees/layer_tree_host_common.h"
 #include "cc/trees/layer_tree_impl.h"
 #include "cc/trees/layer_tree_settings.h"
@@ -340,13 +341,12 @@
   return false;
 }
 
-RenderPass::Id LayerImpl::FirstContributingRenderPassId() const {
-  return RenderPass::Id(0, 0);
+RenderPassId LayerImpl::FirstContributingRenderPassId() const {
+  return RenderPassId(0, 0);
 }
 
-RenderPass::Id LayerImpl::NextContributingRenderPassId(RenderPass::Id id)
-    const {
-  return RenderPass::Id(0, 0);
+RenderPassId LayerImpl::NextContributingRenderPassId(RenderPassId id) const {
+  return RenderPassId(0, 0);
 }
 
 ResourceProvider::ResourceId LayerImpl::ContentsResourceId() const {
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h
index 7d7af370e..8af8c3de 100644
--- a/cc/layers/layer_impl.h
+++ b/cc/layers/layer_impl.h
@@ -24,7 +24,6 @@
 #include "cc/layers/layer_position_constraint.h"
 #include "cc/layers/render_surface_impl.h"
 #include "cc/output/filter_operations.h"
-#include "cc/quads/render_pass.h"
 #include "cc/quads/shared_quad_state.h"
 #include "cc/resources/resource_provider.h"
 #include "skia/ext/refptr.h"
@@ -52,6 +51,8 @@
 class MicroBenchmarkImpl;
 template <typename LayerType>
 class OcclusionTracker;
+class RenderPass;
+class RenderPassId;
 class Renderer;
 class ScrollbarAnimationController;
 class ScrollbarLayerImplBase;
@@ -200,8 +201,8 @@
 
   virtual bool HasDelegatedContent() const;
   virtual bool HasContributingDelegatedRenderPasses() const;
-  virtual RenderPass::Id FirstContributingRenderPassId() const;
-  virtual RenderPass::Id NextContributingRenderPassId(RenderPass::Id id) const;
+  virtual RenderPassId FirstContributingRenderPassId() const;
+  virtual RenderPassId NextContributingRenderPassId(RenderPassId id) const;
 
   virtual void UpdateTiles(
       const OcclusionTracker<LayerImpl>* occlusion_tracker) {}
diff --git a/cc/layers/render_surface_impl.cc b/cc/layers/render_surface_impl.cc
index 2cc67af45..c0e4a82 100644
--- a/cc/layers/render_surface_impl.cc
+++ b/cc/layers/render_surface_impl.cc
@@ -107,11 +107,11 @@
   contributing_delegated_render_pass_layer_list_.clear();
 }
 
-RenderPass::Id RenderSurfaceImpl::RenderPassId() {
+RenderPassId RenderSurfaceImpl::GetRenderPassId() {
   int layer_id = owning_layer_->id();
   int sub_id = 0;
   DCHECK_GT(layer_id, 0);
-  return RenderPass::Id(layer_id, sub_id);
+  return RenderPassId(layer_id, sub_id);
 }
 
 void RenderSurfaceImpl::AppendRenderPasses(RenderPassSink* pass_sink) {
@@ -124,7 +124,7 @@
   }
 
   scoped_ptr<RenderPass> pass = RenderPass::Create(layer_list_.size());
-  pass->SetNew(RenderPassId(),
+  pass->SetNew(GetRenderPassId(),
                content_rect_,
                gfx::IntersectRects(content_rect_,
                                    damage_tracker_->current_damage_rect()),
@@ -137,7 +137,7 @@
     const OcclusionTracker<LayerImpl>& occlusion_tracker,
     AppendQuadsData* append_quads_data,
     bool for_replica,
-    RenderPass::Id render_pass_id) {
+    RenderPassId render_pass_id) {
   DCHECK(!for_replica || owning_layer_->has_replica());
 
   const gfx::Transform& draw_transform =
diff --git a/cc/layers/render_surface_impl.h b/cc/layers/render_surface_impl.h
index 27da840..52e4f386 100644
--- a/cc/layers/render_surface_impl.h
+++ b/cc/layers/render_surface_impl.h
@@ -24,6 +24,7 @@
 class DelegatedRendererLayerImpl;
 template <typename LayerType>
 class OcclusionTracker;
+class RenderPassId;
 class RenderPassSink;
 class LayerImpl;
 template <typename LayerType>
@@ -131,14 +132,14 @@
 
   DamageTracker* damage_tracker() const { return damage_tracker_.get(); }
 
-  RenderPass::Id RenderPassId();
+  RenderPassId GetRenderPassId();
 
   void AppendRenderPasses(RenderPassSink* pass_sink);
   void AppendQuads(RenderPass* render_pass,
                    const OcclusionTracker<LayerImpl>& occlusion_tracker,
                    AppendQuadsData* append_quads_data,
                    bool for_replica,
-                   RenderPass::Id render_pass_id);
+                   RenderPassId render_pass_id);
 
  private:
   LayerImpl* owning_layer_;
diff --git a/cc/layers/render_surface_unittest.cc b/cc/layers/render_surface_unittest.cc
index 0c1646f..e2aca7d 100644
--- a/cc/layers/render_surface_unittest.cc
+++ b/cc/layers/render_surface_unittest.cc
@@ -116,7 +116,7 @@
                               occlusion_tracker,
                               &append_quads_data,
                               for_replica,
-                              RenderPass::Id(2, 0));
+                              RenderPassId(2, 0));
 
   ASSERT_EQ(1u, render_pass->shared_quad_state_list.size());
   SharedQuadState* shared_quad_state = render_pass->shared_quad_state_list[0];
@@ -176,7 +176,7 @@
   ASSERT_EQ(1u, pass_sink.RenderPasses().size());
   RenderPass* pass = pass_sink.RenderPasses()[0];
 
-  EXPECT_EQ(RenderPass::Id(2, 0), pass->id);
+  EXPECT_EQ(RenderPassId(2, 0), pass->id);
   EXPECT_RECT_EQ(content_rect, pass->output_rect);
   EXPECT_EQ(origin, pass->transform_to_root_target);
 }
diff --git a/cc/output/delegating_renderer_unittest.cc b/cc/output/delegating_renderer_unittest.cc
index f8e4b69b..99dc395 100644
--- a/cc/output/delegating_renderer_unittest.cc
+++ b/cc/output/delegating_renderer_unittest.cc
@@ -95,19 +95,17 @@
     frame->render_passes.clear();
     frame->render_passes_by_id.clear();
 
-    TestRenderPass* child_pass = AddRenderPass(
-        &frame->render_passes,
-        RenderPass::Id(2, 1),
-        gfx::Rect(3, 3, 10, 10),
-        gfx::Transform());
-    child_pass->AppendOneOfEveryQuadType(
-        host_impl->resource_provider(), RenderPass::Id(0, 0));
+    TestRenderPass* child_pass = AddRenderPass(&frame->render_passes,
+                                               RenderPassId(2, 1),
+                                               gfx::Rect(3, 3, 10, 10),
+                                               gfx::Transform());
+    child_pass->AppendOneOfEveryQuadType(host_impl->resource_provider(),
+                                         RenderPassId(0, 0));
 
-    TestRenderPass* pass = AddRenderPass(
-        &frame->render_passes,
-        RenderPass::Id(1, 1),
-        gfx::Rect(3, 3, 10, 10),
-        gfx::Transform());
+    TestRenderPass* pass = AddRenderPass(&frame->render_passes,
+                                         RenderPassId(1, 1),
+                                         gfx::Rect(3, 3, 10, 10),
+                                         gfx::Transform());
     pass->AppendOneOfEveryQuadType(
         host_impl->resource_provider(), child_pass->id);
     return draw_result;
diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc
index eed0229..b068da0d 100644
--- a/cc/output/direct_renderer.cc
+++ b/cc/output/direct_renderer.cc
@@ -148,19 +148,19 @@
   if (!resource_provider_)
     return;
 
-  base::hash_map<RenderPass::Id, gfx::Size> render_passes_in_frame;
+  base::hash_map<RenderPassId, gfx::Size> render_passes_in_frame;
   for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i)
-    render_passes_in_frame.insert(std::pair<RenderPass::Id, gfx::Size>(
+    render_passes_in_frame.insert(std::pair<RenderPassId, gfx::Size>(
         render_passes_in_draw_order[i]->id,
         RenderPassTextureSize(render_passes_in_draw_order[i])));
 
-  std::vector<RenderPass::Id> passes_to_delete;
-  base::ScopedPtrHashMap<RenderPass::Id, ScopedResource>::const_iterator
+  std::vector<RenderPassId> passes_to_delete;
+  base::ScopedPtrHashMap<RenderPassId, ScopedResource>::const_iterator
       pass_iter;
   for (pass_iter = render_pass_textures_.begin();
        pass_iter != render_pass_textures_.end();
        ++pass_iter) {
-    base::hash_map<RenderPass::Id, gfx::Size>::const_iterator it =
+    base::hash_map<RenderPassId, gfx::Size>::const_iterator it =
         render_passes_in_frame.find(pass_iter->first);
     if (it == render_passes_in_frame.end()) {
       passes_to_delete.push_back(pass_iter->first);
@@ -415,8 +415,7 @@
   return BindFramebufferToTexture(frame, texture, render_pass->output_rect);
 }
 
-bool DirectRenderer::HasAllocatedResourcesForTesting(RenderPass::Id id)
-    const {
+bool DirectRenderer::HasAllocatedResourcesForTesting(RenderPassId id) const {
   ScopedResource* texture = render_pass_textures_.get(id);
   return texture && texture->id();
 }
diff --git a/cc/output/direct_renderer.h b/cc/output/direct_renderer.h
index dab93f9..f13ed37 100644
--- a/cc/output/direct_renderer.h
+++ b/cc/output/direct_renderer.h
@@ -27,8 +27,7 @@
 
   virtual void DecideRenderPassAllocationsForFrame(
       const RenderPassList& render_passes_in_draw_order) OVERRIDE;
-  virtual bool HasAllocatedResourcesForTesting(RenderPass::Id id) const
-      OVERRIDE;
+  virtual bool HasAllocatedResourcesForTesting(RenderPassId id) const OVERRIDE;
   virtual void DrawFrame(RenderPassList* render_passes_in_draw_order,
                          float device_scale_factor,
                          const gfx::Rect& device_viewport_rect,
@@ -115,7 +114,7 @@
       DrawingFrame* frame,
       scoped_ptr<CopyOutputRequest> request) = 0;
 
-  base::ScopedPtrHashMap<RenderPass::Id, ScopedResource> render_pass_textures_;
+  base::ScopedPtrHashMap<RenderPassId, ScopedResource> render_pass_textures_;
   OutputSurface* output_surface_;
   ResourceProvider* resource_provider_;
   scoped_ptr<OverlayProcessor> overlay_processor_;
diff --git a/cc/output/gl_renderer_unittest.cc b/cc/output/gl_renderer_unittest.cc
index 5566d6bb..2ca7444f 100644
--- a/cc/output/gl_renderer_unittest.cc
+++ b/cc/output/gl_renderer_unittest.cc
@@ -314,7 +314,7 @@
   EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count());
 
   AddRenderPass(&render_passes_in_draw_order_,
-                RenderPass::Id(1, 0),
+                RenderPassId(1, 0),
                 viewport_rect,
                 gfx::Transform());
 
@@ -337,7 +337,7 @@
   output_surface_->set_has_external_stencil_test(true);
 
   TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
-                                            RenderPass::Id(1, 0),
+                                            RenderPassId(1, 0),
                                             viewport_rect,
                                             gfx::Transform());
   root_pass->has_transparent_background = false;
@@ -556,7 +556,7 @@
 
   gfx::Rect viewport_rect(1, 1);
   TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
-                                            RenderPass::Id(1, 0),
+                                            RenderPassId(1, 0),
                                             viewport_rect,
                                             gfx::Transform());
   root_pass->has_transparent_background = false;
@@ -602,7 +602,7 @@
 
   gfx::Rect viewport_rect(1, 1);
   TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
-                                            RenderPass::Id(1, 0),
+                                            RenderPassId(1, 0),
                                             viewport_rect,
                                             gfx::Transform());
   root_pass->has_transparent_background = true;
@@ -641,7 +641,7 @@
 
   gfx::Rect viewport_rect(1, 1);
   AddRenderPass(&render_passes_in_draw_order_,
-                RenderPass::Id(1, 0),
+                RenderPassId(1, 0),
                 viewport_rect,
                 gfx::Transform());
 
@@ -722,7 +722,7 @@
 
   gfx::Rect viewport_rect(1, 1);
   AddRenderPass(&render_passes_in_draw_order_,
-                RenderPass::Id(1, 0),
+                RenderPassId(1, 0),
                 viewport_rect,
                 gfx::Transform());
 
@@ -788,11 +788,11 @@
   // During initialization we are allowed to set any texture parameters.
   EXPECT_CALL(*context, texParameteri(_, _, _)).Times(AnyNumber());
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   TestRenderPass* root_pass = AddRenderPass(
       &render_passes_in_draw_order_, id, gfx::Rect(100, 100), gfx::Transform());
   root_pass->AppendOneOfEveryQuadType(resource_provider.get(),
-                                      RenderPass::Id(2, 1));
+                                      RenderPassId(2, 1));
 
   renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
 
@@ -874,14 +874,14 @@
 
   gfx::Rect viewport_rect(10, 10);
 
-  RenderPass::Id root_pass_id(1, 0);
+  RenderPassId root_pass_id(1, 0);
   TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
                                             root_pass_id,
                                             viewport_rect,
                                             gfx::Transform());
   AddQuad(root_pass, viewport_rect, SK_ColorGREEN);
 
-  RenderPass::Id child_pass_id(2, 0);
+  RenderPassId child_pass_id(2, 0);
   TestRenderPass* child_pass = AddRenderPass(&render_passes_in_draw_order_,
                                              child_pass_id,
                                              viewport_rect,
@@ -966,7 +966,7 @@
   gfx::Rect viewport_rect(1, 1);
 
   gfx::Rect grand_child_rect(25, 25);
-  RenderPass::Id grand_child_pass_id(3, 0);
+  RenderPassId grand_child_pass_id(3, 0);
   TestRenderPass* grand_child_pass =
       AddRenderPass(&render_passes_in_draw_order_,
                     grand_child_pass_id,
@@ -975,14 +975,14 @@
   AddClippedQuad(grand_child_pass, grand_child_rect, SK_ColorYELLOW);
 
   gfx::Rect child_rect(50, 50);
-  RenderPass::Id child_pass_id(2, 0);
+  RenderPassId child_pass_id(2, 0);
   TestRenderPass* child_pass = AddRenderPass(&render_passes_in_draw_order_,
                                              child_pass_id,
                                              child_rect,
                                              gfx::Transform());
   AddQuad(child_pass, child_rect, SK_ColorBLUE);
 
-  RenderPass::Id root_pass_id(1, 0);
+  RenderPassId root_pass_id(1, 0);
   TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
                                             root_pass_id,
                                             viewport_rect,
@@ -1062,7 +1062,7 @@
 
   {
     // Partial frame, should not discard.
-    RenderPass::Id root_pass_id(1, 0);
+    RenderPassId root_pass_id(1, 0);
     TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
                                               root_pass_id,
                                               viewport_rect,
@@ -1081,7 +1081,7 @@
   }
   {
     // Full frame, should discard.
-    RenderPass::Id root_pass_id(1, 0);
+    RenderPassId root_pass_id(1, 0);
     TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
                                               root_pass_id,
                                               viewport_rect,
@@ -1101,7 +1101,7 @@
   {
     // Full frame, external scissor is set, should not discard.
     output_surface->set_has_external_stencil_test(true);
-    RenderPass::Id root_pass_id(1, 0);
+    RenderPassId root_pass_id(1, 0);
     TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
                                               root_pass_id,
                                               viewport_rect,
@@ -1123,7 +1123,7 @@
   {
     // Full frame, clipped, should not discard.
     clip_rect = gfx::Rect(10, 10, 10, 10);
-    RenderPass::Id root_pass_id(1, 0);
+    RenderPassId root_pass_id(1, 0);
     TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
                                               root_pass_id,
                                               viewport_rect,
@@ -1143,7 +1143,7 @@
   {
     // Full frame, doesn't cover the surface, should not discard.
     viewport_rect = gfx::Rect(10, 10, 10, 10);
-    RenderPass::Id root_pass_id(1, 0);
+    RenderPassId root_pass_id(1, 0);
     TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
                                               root_pass_id,
                                               viewport_rect,
@@ -1164,7 +1164,7 @@
     // Full frame, doesn't cover the surface (no offset), should not discard.
     clip_rect = gfx::Rect(100, 100);
     viewport_rect = gfx::Rect(50, 50);
-    RenderPass::Id root_pass_id(1, 0);
+    RenderPassId root_pass_id(1, 0);
     TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
                                               root_pass_id,
                                               viewport_rect,
@@ -1245,7 +1245,7 @@
   gfx::Rect viewport_rect(device_viewport_rect.size());
   gfx::Rect quad_rect = gfx::Rect(20, 20, 20, 20);
 
-  RenderPass::Id root_pass_id(1, 0);
+  RenderPassId root_pass_id(1, 0);
   TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
                                             root_pass_id,
                                             viewport_rect,
@@ -1264,10 +1264,10 @@
   gfx::Rect viewport_rect(1, 1);
 
   gfx::Rect child_rect(50, 50);
-  RenderPass::Id child_pass_id(2, 0);
+  RenderPassId child_pass_id(2, 0);
   TestRenderPass* child_pass;
 
-  RenderPass::Id root_pass_id(1, 0);
+  RenderPassId root_pass_id(1, 0);
   TestRenderPass* root_pass;
 
   ResourceProvider::ResourceId mask = resource_provider_->CreateResource(
@@ -1494,11 +1494,11 @@
 // project incorrectly by the given transform, because of w<0 clipping.
 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) {
   gfx::Rect child_rect(50, 50);
-  RenderPass::Id child_pass_id(2, 0);
+  RenderPassId child_pass_id(2, 0);
   TestRenderPass* child_pass;
 
   gfx::Rect viewport_rect(1, 1);
-  RenderPass::Id root_pass_id(1, 0);
+  RenderPassId root_pass_id(1, 0);
   TestRenderPass* root_pass;
 
   gfx::Transform transform_preventing_aa;
@@ -1539,7 +1539,7 @@
 
 TEST_F(GLRendererShaderTest, DrawSolidColorShader) {
   gfx::Rect viewport_rect(1, 1);
-  RenderPass::Id root_pass_id(1, 0);
+  RenderPassId root_pass_id(1, 0);
   TestRenderPass* root_pass;
 
   gfx::Transform pixel_aligned_transform_causing_aa;
@@ -1619,7 +1619,7 @@
 
   void DrawFrame(float device_scale_factor,
                  const gfx::Rect& device_viewport_rect) {
-    RenderPass::Id render_pass_id(1, 0);
+    RenderPassId render_pass_id(1, 0);
     TestRenderPass* render_pass = AddRenderPass(&render_passes_in_draw_order_,
                                                 render_pass_id,
                                                 device_viewport_rect,
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc
index ab2a46af..0e28b22 100644
--- a/cc/output/overlay_unittest.cc
+++ b/cc/output/overlay_unittest.cc
@@ -105,7 +105,7 @@
 };
 
 scoped_ptr<RenderPass> CreateRenderPass() {
-  RenderPass::Id id(1, 0);
+  RenderPassId id(1, 0);
   gfx::Rect output_rect(0, 0, 256, 256);
   bool has_transparent_background = true;
 
diff --git a/cc/output/renderer.cc b/cc/output/renderer.cc
index 2de4630..2a330288 100644
--- a/cc/output/renderer.cc
+++ b/cc/output/renderer.cc
@@ -4,9 +4,11 @@
 
 #include "cc/output/renderer.h"
 
+#include "cc/quads/render_pass_id.h"
+
 namespace cc {
 
-bool Renderer::HasAllocatedResourcesForTesting(RenderPass::Id id) const {
+bool Renderer::HasAllocatedResourcesForTesting(RenderPassId id) const {
   return false;
 }
 
diff --git a/cc/output/renderer.h b/cc/output/renderer.h
index 3b68749..da0ddc1 100644
--- a/cc/output/renderer.h
+++ b/cc/output/renderer.h
@@ -7,16 +7,20 @@
 
 #include "base/basictypes.h"
 #include "cc/base/cc_export.h"
-#include "cc/quads/render_pass.h"
+#include "cc/base/scoped_ptr_vector.h"
 #include "cc/trees/layer_tree_host.h"
 
 namespace cc {
 
 class CompositorFrameAck;
 class CompositorFrameMetadata;
+class RenderPass;
+class RenderPassId;
 class ScopedResource;
 class Task;
 
+typedef ScopedPtrVector<RenderPass> RenderPassList;
+
 struct RendererCapabilitiesImpl {
   RendererCapabilitiesImpl();
   ~RendererCapabilitiesImpl();
@@ -50,7 +54,7 @@
 
   virtual void DecideRenderPassAllocationsForFrame(
       const RenderPassList& render_passes_in_draw_order) {}
-  virtual bool HasAllocatedResourcesForTesting(RenderPass::Id id) const;
+  virtual bool HasAllocatedResourcesForTesting(RenderPassId id) const;
 
   // This passes ownership of the render passes to the renderer. It should
   // consume them, and empty the list. The parameters here may change from frame
diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
index cc72967..a22540db 100644
--- a/cc/output/renderer_pixeltest.cc
+++ b/cc/output/renderer_pixeltest.cc
@@ -27,7 +27,7 @@
 namespace {
 
 #if !defined(OS_ANDROID)
-scoped_ptr<RenderPass> CreateTestRootRenderPass(RenderPass::Id id,
+scoped_ptr<RenderPass> CreateTestRootRenderPass(RenderPassId id,
                                                 const gfx::Rect& rect) {
   scoped_ptr<RenderPass> pass = RenderPass::Create();
   const gfx::Rect output_rect = rect;
@@ -38,7 +38,7 @@
 }
 
 scoped_ptr<RenderPass> CreateTestRenderPass(
-    RenderPass::Id id,
+    RenderPassId id,
     const gfx::Rect& rect,
     const gfx::Transform& transform_to_root_target) {
   scoped_ptr<RenderPass> pass = RenderPass::Create();
@@ -96,7 +96,7 @@
 
 void CreateTestRenderPassDrawQuad(const SharedQuadState* shared_state,
                                   const gfx::Rect& rect,
-                                  RenderPass::Id pass_id,
+                                  RenderPassId pass_id,
                                   RenderPass* render_pass) {
   RenderPassDrawQuad* quad =
       render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
@@ -207,7 +207,7 @@
 TYPED_TEST(RendererPixelTest, SimpleGreenRect) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
@@ -230,7 +230,7 @@
   gfx::Rect rect(this->device_viewport_size_);
   gfx::Rect small_rect(100, 100);
 
-  RenderPass::Id child_id(2, 1);
+  RenderPassId child_id(2, 1);
   scoped_ptr<RenderPass> child_pass =
       CreateTestRenderPass(child_id, small_rect, gfx::Transform());
 
@@ -241,7 +241,7 @@
       child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(child_shared_state, rect, rect, SK_ColorGREEN, false);
 
-  RenderPass::Id root_id(1, 1);
+  RenderPassId root_id(1, 1);
   scoped_ptr<RenderPass> root_pass =
       CreateTestRenderPass(root_id, rect, gfx::Transform());
 
@@ -267,7 +267,7 @@
 TYPED_TEST(RendererPixelTest, PremultipliedTextureWithoutBackground) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
@@ -297,7 +297,7 @@
 TYPED_TEST(RendererPixelTest, PremultipliedTextureWithBackground) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* texture_quad_state =
@@ -331,7 +331,7 @@
 TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithoutBackground) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
@@ -362,7 +362,7 @@
 TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithBackground) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* texture_quad_state =
@@ -546,7 +546,7 @@
 TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
@@ -570,7 +570,7 @@
 TEST_F(VideoGLRendererPixelTest, OffsetYUVRect) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
@@ -595,7 +595,7 @@
 TEST_F(VideoGLRendererPixelTest, SimpleYUVRectBlack) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
@@ -624,7 +624,7 @@
 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
@@ -651,7 +651,7 @@
 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRectGrey) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
@@ -679,7 +679,7 @@
 TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
@@ -707,7 +707,7 @@
 TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
@@ -735,11 +735,11 @@
 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) {
   gfx::Rect viewport_rect(this->device_viewport_size_);
 
-  RenderPass::Id root_pass_id(1, 1);
+  RenderPassId root_pass_id(1, 1);
   scoped_ptr<RenderPass> root_pass =
       CreateTestRootRenderPass(root_pass_id, viewport_rect);
 
-  RenderPass::Id child_pass_id(2, 2);
+  RenderPassId child_pass_id(2, 2);
   gfx::Rect pass_rect(this->device_viewport_size_);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> child_pass =
@@ -826,11 +826,11 @@
 TYPED_TEST(RendererPixelTest, FastPassSaturateFilter) {
   gfx::Rect viewport_rect(this->device_viewport_size_);
 
-  RenderPass::Id root_pass_id(1, 1);
+  RenderPassId root_pass_id(1, 1);
   scoped_ptr<RenderPass> root_pass =
       CreateTestRootRenderPass(root_pass_id, viewport_rect);
 
-  RenderPass::Id child_pass_id(2, 2);
+  RenderPassId child_pass_id(2, 2);
   gfx::Rect pass_rect(this->device_viewport_size_);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> child_pass =
@@ -895,11 +895,11 @@
 TYPED_TEST(RendererPixelTest, FastPassFilterChain) {
   gfx::Rect viewport_rect(this->device_viewport_size_);
 
-  RenderPass::Id root_pass_id(1, 1);
+  RenderPassId root_pass_id(1, 1);
   scoped_ptr<RenderPass> root_pass =
       CreateTestRootRenderPass(root_pass_id, viewport_rect);
 
-  RenderPass::Id child_pass_id(2, 2);
+  RenderPassId child_pass_id(2, 2);
   gfx::Rect pass_rect(this->device_viewport_size_);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> child_pass =
@@ -965,11 +965,11 @@
 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) {
   gfx::Rect viewport_rect(this->device_viewport_size_);
 
-  RenderPass::Id root_pass_id(1, 1);
+  RenderPassId root_pass_id(1, 1);
   scoped_ptr<RenderPass> root_pass =
       CreateTestRootRenderPass(root_pass_id, viewport_rect);
 
-  RenderPass::Id child_pass_id(2, 2);
+  RenderPassId child_pass_id(2, 2);
   gfx::Rect pass_rect(this->device_viewport_size_);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> child_pass =
@@ -1060,11 +1060,11 @@
 TYPED_TEST(RendererPixelTest, EnlargedRenderPassTexture) {
   gfx::Rect viewport_rect(this->device_viewport_size_);
 
-  RenderPass::Id root_pass_id(1, 1);
+  RenderPassId root_pass_id(1, 1);
   scoped_ptr<RenderPass> root_pass =
       CreateTestRootRenderPass(root_pass_id, viewport_rect);
 
-  RenderPass::Id child_pass_id(2, 2);
+  RenderPassId child_pass_id(2, 2);
   gfx::Rect pass_rect(this->device_viewport_size_);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> child_pass =
@@ -1109,11 +1109,11 @@
 TYPED_TEST(RendererPixelTest, EnlargedRenderPassTextureWithAntiAliasing) {
   gfx::Rect viewport_rect(this->device_viewport_size_);
 
-  RenderPass::Id root_pass_id(1, 1);
+  RenderPassId root_pass_id(1, 1);
   scoped_ptr<RenderPass> root_pass =
       CreateTestRootRenderPass(root_pass_id, viewport_rect);
 
-  RenderPass::Id child_pass_id(2, 2);
+  RenderPassId child_pass_id(2, 2);
   gfx::Rect pass_rect(this->device_viewport_size_);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> child_pass =
@@ -1173,13 +1173,13 @@
 TYPED_TEST(RendererPixelTest, RenderPassAndMaskWithPartialQuad) {
   gfx::Rect viewport_rect(this->device_viewport_size_);
 
-  RenderPass::Id root_pass_id(1, 1);
+  RenderPassId root_pass_id(1, 1);
   scoped_ptr<RenderPass> root_pass =
       CreateTestRootRenderPass(root_pass_id, viewport_rect);
   SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState(
       gfx::Transform(), viewport_rect, root_pass.get());
 
-  RenderPass::Id child_pass_id(2, 2);
+  RenderPassId child_pass_id(2, 2);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> child_pass =
       CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root);
@@ -1277,14 +1277,14 @@
   void SetUpRenderPassList() {
     gfx::Rect device_viewport_rect(this->device_viewport_size_);
 
-    RenderPass::Id root_id(1, 1);
+    RenderPassId root_id(1, 1);
     scoped_ptr<RenderPass> root_pass =
         CreateTestRootRenderPass(root_id, device_viewport_rect);
     root_pass->has_transparent_background = false;
 
     gfx::Transform identity_content_to_target_transform;
 
-    RenderPass::Id filter_pass_id(2, 1);
+    RenderPassId filter_pass_id(2, 1);
     gfx::Transform transform_to_root;
     scoped_ptr<RenderPass> filter_pass =
         CreateTestRenderPass(filter_pass_id,
@@ -1445,7 +1445,7 @@
   // Draw a blue quad that covers the entire device viewport. It should be
   // clipped to the bottom left and top right corners by the external stencil.
   gfx::Rect rect(this->device_viewport_size_);
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
   SharedQuadState* blue_shared_state =
       CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
@@ -1468,7 +1468,7 @@
   // Draw a green quad that covers the entire device viewport. The stencil
   // buffer should be ignored.
   gfx::Rect rect(this->device_viewport_size_);
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
   SharedQuadState* green_shared_state =
       CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
@@ -1492,12 +1492,12 @@
 
   gfx::Rect viewport_rect(this->device_viewport_size_);
 
-  RenderPass::Id root_pass_id(1, 1);
+  RenderPassId root_pass_id(1, 1);
   scoped_ptr<RenderPass> root_pass =
       CreateTestRootRenderPass(root_pass_id, viewport_rect);
   root_pass->has_transparent_background = false;
 
-  RenderPass::Id child_pass_id(2, 2);
+  RenderPassId child_pass_id(2, 2);
   gfx::Rect pass_rect(this->device_viewport_size_);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> child_pass =
@@ -1537,7 +1537,7 @@
   // Draw a blue quad that covers the entire device viewport. It should be
   // clipped to the bottom right corner by the device clip.
   gfx::Rect rect(this->device_viewport_size_);
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
   SharedQuadState* blue_shared_state =
       CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
@@ -1557,7 +1557,7 @@
 TEST_F(GLRendererPixelTest, AntiAliasing) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   gfx::Transform red_content_to_target_transform;
@@ -1599,7 +1599,7 @@
 TEST_F(GLRendererPixelTest, AxisAligned) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> pass =
       CreateTestRenderPass(id, rect, transform_to_root);
@@ -1647,7 +1647,7 @@
 TEST_F(GLRendererPixelTest, ForceAntiAliasingOff) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> pass =
       CreateTestRenderPass(id, rect, transform_to_root);
@@ -1686,7 +1686,7 @@
   gfx::Rect rect(this->device_viewport_size_);
 
   scoped_ptr<RenderPass> pass =
-      CreateTestRootRenderPass(RenderPass::Id(1, 1), rect);
+      CreateTestRootRenderPass(RenderPassId(1, 1), rect);
 
   gfx::Rect red_rect(0, 0, 180, 500);
   gfx::Transform red_content_to_target_transform(
@@ -1728,7 +1728,7 @@
   // TODO(enne): the renderer should figure this out on its own.
   ResourceFormat texture_format = RGBA_8888;
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> pass =
       CreateTestRenderPass(id, viewport, transform_to_root);
@@ -1811,7 +1811,7 @@
   gfx::Rect viewport(this->device_viewport_size_);
   ResourceFormat texture_format = RGBA_8888;
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> pass =
       CreateTestRenderPass(id, viewport, transform_to_root);
@@ -1902,7 +1902,7 @@
   gfx::Rect viewport(this->device_viewport_size_);
   ResourceFormat texture_format = RGBA_8888;
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> pass =
       CreateTestRenderPass(id, viewport, transform_to_root);
@@ -1958,7 +1958,7 @@
   // TODO(enne): the renderer should figure this out on its own.
   ResourceFormat texture_format = RGBA_8888;
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> pass =
       CreateTestRenderPass(id, viewport, transform_to_root);
@@ -2113,7 +2113,7 @@
   gfx::Rect viewport(this->device_viewport_size_);
   ResourceFormat texture_format = RGBA_4444;
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   gfx::Transform transform_to_root;
   scoped_ptr<RenderPass> pass =
       CreateTestRenderPass(id, viewport, transform_to_root);
@@ -2153,7 +2153,7 @@
 TYPED_TEST(RendererPixelTest, WrapModeRepeat) {
   gfx::Rect rect(this->device_viewport_size_);
 
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state =
diff --git a/cc/output/software_renderer_unittest.cc b/cc/output/software_renderer_unittest.cc
index 46d5900..bcade58 100644
--- a/cc/output/software_renderer_unittest.cc
+++ b/cc/output/software_renderer_unittest.cc
@@ -99,7 +99,7 @@
 
   InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice));
 
-  RenderPass::Id root_render_pass_id = RenderPass::Id(1, 1);
+  RenderPassId root_render_pass_id = RenderPassId(1, 1);
   scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create();
   root_render_pass->SetNew(
       root_render_pass_id, outer_rect, outer_rect, gfx::Transform());
@@ -184,7 +184,7 @@
 
   gfx::Rect root_rect = outer_rect;
 
-  RenderPass::Id root_render_pass_id = RenderPass::Id(1, 1);
+  RenderPassId root_render_pass_id = RenderPassId(1, 1);
   scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create();
   root_render_pass->SetNew(
       root_render_pass_id, root_rect, root_rect, gfx::Transform());
@@ -267,7 +267,7 @@
 
   gfx::Rect root_rect(tile_size);
 
-  RenderPass::Id root_render_pass_id = RenderPass::Id(1, 1);
+  RenderPassId root_render_pass_id = RenderPassId(1, 1);
   scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create();
   root_render_pass->SetNew(
       root_render_pass_id, root_rect, root_rect, gfx::Transform());
@@ -333,7 +333,7 @@
   RenderPassList list;
 
   // Draw a fullscreen green quad in a first frame.
-  RenderPass::Id root_clear_pass_id(1, 0);
+  RenderPassId root_clear_pass_id(1, 0);
   TestRenderPass* root_clear_pass = AddRenderPass(
       &list, root_clear_pass_id, device_viewport_rect, gfx::Transform());
   AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN);
@@ -356,7 +356,7 @@
   // frame.
   gfx::Rect smaller_rect(20, 20, 60, 60);
 
-  RenderPass::Id root_smaller_pass_id(2, 0);
+  RenderPassId root_smaller_pass_id(2, 0);
   TestRenderPass* root_smaller_pass = AddRenderPass(
       &list, root_smaller_pass_id, device_viewport_rect, gfx::Transform());
   AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA);
@@ -389,13 +389,13 @@
 
   // Pass drawn as inner quad is magenta.
   gfx::Rect smaller_rect(20, 20, 60, 60);
-  RenderPass::Id smaller_pass_id(2, 1);
+  RenderPassId smaller_pass_id(2, 1);
   TestRenderPass* smaller_pass =
       AddRenderPass(&list, smaller_pass_id, smaller_rect, gfx::Transform());
   AddQuad(smaller_pass, smaller_rect, SK_ColorMAGENTA);
 
   // Root pass is green.
-  RenderPass::Id root_clear_pass_id(1, 0);
+  RenderPassId root_clear_pass_id(1, 0);
   TestRenderPass* root_clear_pass = AddRenderPass(
       &list, root_clear_pass_id, device_viewport_rect, gfx::Transform());
   AddRenderPassQuad(root_clear_pass, smaller_pass);
diff --git a/cc/quads/draw_quad_unittest.cc b/cc/quads/draw_quad_unittest.cc
index 40dfe81..e3697ec 100644
--- a/cc/quads/draw_quad_unittest.cc
+++ b/cc/quads/draw_quad_unittest.cc
@@ -415,7 +415,7 @@
 
 TEST(DrawQuadTest, CopyRenderPassDrawQuad) {
   gfx::Rect visible_rect(40, 50, 30, 20);
-  RenderPass::Id render_pass_id(22, 64);
+  RenderPassId render_pass_id(22, 64);
   ResourceProvider::ResourceId mask_resource_id = 78;
   gfx::RectF mask_u_v_rect(-45.f, -21.f, 33.f, 19.f);
   FilterOperations filters;
@@ -425,7 +425,7 @@
   background_filters.Append(
       FilterOperation::CreateGrayscaleFilter(1.f));
 
-  RenderPass::Id copied_render_pass_id(235, 11);
+  RenderPassId copied_render_pass_id(235, 11);
   CREATE_SHARED_STATE();
 
   CREATE_QUAD_NEW_RP(RenderPassDrawQuad,
@@ -754,7 +754,7 @@
 
 TEST_F(DrawQuadIteratorTest, RenderPassDrawQuad) {
   gfx::Rect visible_rect(40, 50, 30, 20);
-  RenderPass::Id render_pass_id(22, 64);
+  RenderPassId render_pass_id(22, 64);
   ResourceProvider::ResourceId mask_resource_id = 78;
   gfx::RectF mask_u_v_rect(-45.f, -21.f, 33.f, 19.f);
   FilterOperations filters;
@@ -764,7 +764,7 @@
   background_filters.Append(
       FilterOperation::CreateGrayscaleFilter(1.f));
 
-  RenderPass::Id copied_render_pass_id(235, 11);
+  RenderPassId copied_render_pass_id(235, 11);
 
   CREATE_SHARED_STATE();
   CREATE_QUAD_NEW_RP(RenderPassDrawQuad,
diff --git a/cc/quads/render_pass.cc b/cc/quads/render_pass.cc
index 43bb7cd..6cb59d8 100644
--- a/cc/quads/render_pass.cc
+++ b/cc/quads/render_pass.cc
@@ -30,12 +30,6 @@
 
 namespace cc {
 
-void* RenderPass::Id::AsTracingId() const {
-  COMPILE_ASSERT(sizeof(size_t) <= sizeof(void*),  // NOLINT
-                 size_t_bigger_than_pointer);
-  return reinterpret_cast<void*>(base::HashPair(layer_id, index));
-}
-
 scoped_ptr<RenderPass> RenderPass::Create() {
   return make_scoped_ptr(new RenderPass());
 }
@@ -44,13 +38,14 @@
   return make_scoped_ptr(new RenderPass(num_layers));
 }
 
-RenderPass::RenderPass() : id(Id(-1, -1)), has_transparent_background(true) {
+RenderPass::RenderPass()
+    : id(RenderPassId(-1, -1)), has_transparent_background(true) {
   shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve);
   quad_list.reserve(kDefaultNumQuadsToReserve);
 }
 
 RenderPass::RenderPass(size_t num_layers)
-    : id(Id(-1, -1)), has_transparent_background(true) {
+    : id(RenderPassId(-1, -1)), has_transparent_background(true) {
   // Each layer usually produces one shared quad state, so the number of layers
   // is a good hint for what to reserve here.
   shared_quad_state_list.reserve(num_layers);
@@ -63,7 +58,7 @@
       "cc::RenderPass", id.AsTracingId());
 }
 
-scoped_ptr<RenderPass> RenderPass::Copy(Id new_id) const {
+scoped_ptr<RenderPass> RenderPass::Copy(RenderPassId new_id) const {
   scoped_ptr<RenderPass> copy_pass(Create());
   copy_pass->SetAll(new_id,
                     output_rect,
@@ -121,7 +116,7 @@
   }
 }
 
-void RenderPass::SetNew(Id id,
+void RenderPass::SetNew(RenderPassId id,
                         const gfx::Rect& output_rect,
                         const gfx::Rect& damage_rect,
                         const gfx::Transform& transform_to_root_target) {
@@ -140,7 +135,7 @@
   DCHECK(shared_quad_state_list.empty());
 }
 
-void RenderPass::SetAll(Id id,
+void RenderPass::SetAll(RenderPassId id,
                         const gfx::Rect& output_rect,
                         const gfx::Rect& damage_rect,
                         const gfx::Transform& transform_to_root_target,
@@ -201,7 +196,7 @@
 RenderPassDrawQuad* RenderPass::CopyFromAndAppendRenderPassDrawQuad(
     const RenderPassDrawQuad* quad,
     const SharedQuadState* shared_quad_state,
-    RenderPass::Id render_pass_id) {
+    RenderPassId render_pass_id) {
   RenderPassDrawQuad* copy_quad =
       CopyFromAndAppendTypedDrawQuad<RenderPassDrawQuad>(quad);
   copy_quad->shared_quad_state = shared_quad_state;
diff --git a/cc/quads/render_pass.h b/cc/quads/render_pass.h
index 8d41142..5b0c3b6 100644
--- a/cc/quads/render_pass.h
+++ b/cc/quads/render_pass.h
@@ -12,6 +12,7 @@
 #include "base/containers/hash_tables.h"
 #include "cc/base/cc_export.h"
 #include "cc/base/scoped_ptr_vector.h"
+#include "cc/quads/render_pass_id.h"
 #include "skia/ext/refptr.h"
 #include "ui/gfx/rect.h"
 #include "ui/gfx/rect_f.h"
@@ -47,25 +48,6 @@
 
 class CC_EXPORT RenderPass {
  public:
-  struct Id {
-    int layer_id;
-    int index;
-
-    Id(int layer_id, int index) : layer_id(layer_id), index(index) {}
-    void* AsTracingId() const;
-
-    bool operator==(const Id& other) const {
-      return layer_id == other.layer_id && index == other.index;
-    }
-    bool operator!=(const Id& other) const {
-      return !(*this == other);
-    }
-    bool operator<(const Id& other) const {
-      return layer_id < other.layer_id ||
-          (layer_id == other.layer_id && index < other.index);
-    }
-  };
-
   ~RenderPass();
 
   static scoped_ptr<RenderPass> Create();
@@ -73,18 +55,18 @@
 
   // A shallow copy of the render pass, which does not include its quads or copy
   // requests.
-  scoped_ptr<RenderPass> Copy(Id new_id) const;
+  scoped_ptr<RenderPass> Copy(RenderPassId new_id) const;
 
   // A deep copy of the render passes in the list including the quads.
   static void CopyAll(const ScopedPtrVector<RenderPass>& in,
                       ScopedPtrVector<RenderPass>* out);
 
-  void SetNew(Id id,
+  void SetNew(RenderPassId id,
               const gfx::Rect& output_rect,
               const gfx::Rect& damage_rect,
               const gfx::Transform& transform_to_root_target);
 
-  void SetAll(Id id,
+  void SetAll(RenderPassId id,
               const gfx::Rect& output_rect,
               const gfx::Rect& damage_rect,
               const gfx::Transform& transform_to_root_target,
@@ -103,12 +85,12 @@
   RenderPassDrawQuad* CopyFromAndAppendRenderPassDrawQuad(
       const RenderPassDrawQuad* quad,
       const SharedQuadState* shared_quad_state,
-      RenderPass::Id render_pass_id);
+      RenderPassId render_pass_id);
   DrawQuad* CopyFromAndAppendDrawQuad(const DrawQuad* quad,
                                       const SharedQuadState* shared_quad_state);
 
   // Uniquely identifies the render pass in the compositor's current frame.
-  Id id;
+  RenderPassId id;
 
   // These are in the space of the render pass' physical pixels.
   gfx::Rect output_rect;
@@ -150,13 +132,13 @@
 
 namespace BASE_HASH_NAMESPACE {
 #if defined(COMPILER_MSVC)
-inline size_t hash_value(const cc::RenderPass::Id& key) {
+inline size_t hash_value(const cc::RenderPassId& key) {
   return base::HashPair(key.layer_id, key.index);
 }
 #elif defined(COMPILER_GCC)
-template<>
-struct hash<cc::RenderPass::Id> {
-  size_t operator()(cc::RenderPass::Id key) const {
+template <>
+struct hash<cc::RenderPassId> {
+  size_t operator()(cc::RenderPassId key) const {
     return base::HashPair(key.layer_id, key.index);
   }
 };
@@ -167,7 +149,7 @@
 
 namespace cc {
 typedef ScopedPtrVector<RenderPass> RenderPassList;
-typedef base::hash_map<RenderPass::Id, RenderPass*> RenderPassIdHashMap;
+typedef base::hash_map<RenderPassId, RenderPass*> RenderPassIdHashMap;
 }  // namespace cc
 
 #endif  // CC_QUADS_RENDER_PASS_H_
diff --git a/cc/quads/render_pass_draw_quad.cc b/cc/quads/render_pass_draw_quad.cc
index aad279e..005aed5 100644
--- a/cc/quads/render_pass_draw_quad.cc
+++ b/cc/quads/render_pass_draw_quad.cc
@@ -13,23 +13,22 @@
 namespace cc {
 
 RenderPassDrawQuad::RenderPassDrawQuad()
-    : render_pass_id(RenderPass::Id(-1, -1)),
+    : render_pass_id(RenderPassId(-1, -1)),
       mask_resource_id(static_cast<ResourceProvider::ResourceId>(-1)) {
 }
 
 RenderPassDrawQuad::~RenderPassDrawQuad() {
 }
 
-void RenderPassDrawQuad::SetNew(
-    const SharedQuadState* shared_quad_state,
-    const gfx::Rect& rect,
-    const gfx::Rect& visible_rect,
-    RenderPass::Id render_pass_id,
-    ResourceProvider::ResourceId mask_resource_id,
-    const gfx::RectF& mask_uv_rect,
-    const FilterOperations& filters,
-    const gfx::Vector2dF& filters_scale,
-    const FilterOperations& background_filters) {
+void RenderPassDrawQuad::SetNew(const SharedQuadState* shared_quad_state,
+                                const gfx::Rect& rect,
+                                const gfx::Rect& visible_rect,
+                                RenderPassId render_pass_id,
+                                ResourceProvider::ResourceId mask_resource_id,
+                                const gfx::RectF& mask_uv_rect,
+                                const FilterOperations& filters,
+                                const gfx::Vector2dF& filters_scale,
+                                const FilterOperations& background_filters) {
   DCHECK_GT(render_pass_id.layer_id, 0);
   DCHECK_GE(render_pass_id.index, 0);
 
@@ -48,18 +47,17 @@
          background_filters);
 }
 
-void RenderPassDrawQuad::SetAll(
-    const SharedQuadState* shared_quad_state,
-    const gfx::Rect& rect,
-    const gfx::Rect& opaque_rect,
-    const gfx::Rect& visible_rect,
-    bool needs_blending,
-    RenderPass::Id render_pass_id,
-    ResourceProvider::ResourceId mask_resource_id,
-    const gfx::RectF& mask_uv_rect,
-    const FilterOperations& filters,
-    const gfx::Vector2dF& filters_scale,
-    const FilterOperations& background_filters) {
+void RenderPassDrawQuad::SetAll(const SharedQuadState* shared_quad_state,
+                                const gfx::Rect& rect,
+                                const gfx::Rect& opaque_rect,
+                                const gfx::Rect& visible_rect,
+                                bool needs_blending,
+                                RenderPassId render_pass_id,
+                                ResourceProvider::ResourceId mask_resource_id,
+                                const gfx::RectF& mask_uv_rect,
+                                const FilterOperations& filters,
+                                const gfx::Vector2dF& filters_scale,
+                                const FilterOperations& background_filters) {
   DCHECK_GT(render_pass_id.layer_id, 0);
   DCHECK_GE(render_pass_id.index, 0);
 
diff --git a/cc/quads/render_pass_draw_quad.h b/cc/quads/render_pass_draw_quad.h
index 9cc4ba3..40540d2 100644
--- a/cc/quads/render_pass_draw_quad.h
+++ b/cc/quads/render_pass_draw_quad.h
@@ -10,7 +10,7 @@
 #include "cc/base/cc_export.h"
 #include "cc/output/filter_operations.h"
 #include "cc/quads/draw_quad.h"
-#include "cc/quads/render_pass.h"
+#include "cc/quads/render_pass_id.h"
 #include "cc/resources/resource_provider.h"
 
 namespace cc {
@@ -23,7 +23,7 @@
   void SetNew(const SharedQuadState* shared_quad_state,
               const gfx::Rect& rect,
               const gfx::Rect& visible_rect,
-              RenderPass::Id render_pass_id,
+              RenderPassId render_pass_id,
               ResourceProvider::ResourceId mask_resource_id,
               const gfx::RectF& mask_uv_rect,
               const FilterOperations& filters,
@@ -35,14 +35,14 @@
               const gfx::Rect& opaque_rect,
               const gfx::Rect& visible_rect,
               bool needs_blending,
-              RenderPass::Id render_pass_id,
+              RenderPassId render_pass_id,
               ResourceProvider::ResourceId mask_resource_id,
               const gfx::RectF& mask_uv_rect,
               const FilterOperations& filters,
               const gfx::Vector2dF& filters_scale,
               const FilterOperations& background_filters);
 
-  RenderPass::Id render_pass_id;
+  RenderPassId render_pass_id;
   ResourceProvider::ResourceId mask_resource_id;
   gfx::RectF mask_uv_rect;
 
diff --git a/cc/quads/render_pass_id.cc b/cc/quads/render_pass_id.cc
new file mode 100644
index 0000000..d15240db
--- /dev/null
+++ b/cc/quads/render_pass_id.cc
@@ -0,0 +1,15 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "cc/quads/render_pass_id.h"
+
+namespace cc {
+
+void* RenderPassId::AsTracingId() const {
+  COMPILE_ASSERT(sizeof(size_t) <= sizeof(void*),  // NOLINT
+                 size_t_bigger_than_pointer);
+  return reinterpret_cast<void*>(base::HashPair(layer_id, index));
+}
+
+}  // namespace cc
diff --git a/cc/quads/render_pass_id.h b/cc/quads/render_pass_id.h
new file mode 100644
index 0000000..0554130
--- /dev/null
+++ b/cc/quads/render_pass_id.h
@@ -0,0 +1,34 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_QUADS_RENDER_PASS_ID_H_
+#define CC_QUADS_RENDER_PASS_ID_H_
+
+#include "base/basictypes.h"
+#include "base/containers/hash_tables.h"
+#include "cc/base/cc_export.h"
+
+namespace cc {
+
+class CC_EXPORT RenderPassId {
+ public:
+  int layer_id;
+  int index;
+
+  RenderPassId(int layer_id, int index) : layer_id(layer_id), index(index) {}
+  void* AsTracingId() const;
+
+  bool operator==(const RenderPassId& other) const {
+    return layer_id == other.layer_id && index == other.index;
+  }
+  bool operator!=(const RenderPassId& other) const { return !(*this == other); }
+  bool operator<(const RenderPassId& other) const {
+    return layer_id < other.layer_id ||
+           (layer_id == other.layer_id && index < other.index);
+  }
+};
+
+}  // namespace cc
+
+#endif  // CC_QUADS_RENDER_PASS_ID_H_
diff --git a/cc/quads/render_pass_unittest.cc b/cc/quads/render_pass_unittest.cc
index 4e555b8..9d12318 100644
--- a/cc/quads/render_pass_unittest.cc
+++ b/cc/quads/render_pass_unittest.cc
@@ -23,7 +23,7 @@
 struct RenderPassSize {
   // If you add a new field to this class, make sure to add it to the
   // Copy() tests.
-  RenderPass::Id id;
+  RenderPassId id;
   QuadList quad_list;
   SharedQuadStateList shared_quad_state_list;
   gfx::Transform transform_to_root_target;
@@ -63,7 +63,7 @@
 }
 
 TEST(RenderPassTest, CopyShouldBeIdenticalExceptIdAndQuads) {
-  RenderPass::Id id(3, 2);
+  RenderPassId id(3, 2);
   gfx::Rect output_rect(45, 22, 120, 13);
   gfx::Transform transform_to_root =
       gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0);
@@ -94,7 +94,7 @@
   checkerboard_quad->SetNew(
       pass->shared_quad_state_list.back(), gfx::Rect(), gfx::Rect(), SkColor());
 
-  RenderPass::Id new_id(63, 4);
+  RenderPassId new_id(63, 4);
 
   scoped_ptr<RenderPass> copy = pass->Copy(new_id);
   EXPECT_EQ(new_id, copy->id);
@@ -114,7 +114,7 @@
 TEST(RenderPassTest, CopyAllShouldBeIdentical) {
   RenderPassList pass_list;
 
-  RenderPass::Id id(3, 2);
+  RenderPassId id(3, 2);
   gfx::Rect output_rect(45, 22, 120, 13);
   gfx::Transform transform_to_root =
       gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0);
@@ -179,7 +179,7 @@
                              SkColor());
 
   // A second render pass with a quad.
-  RenderPass::Id contrib_id(4, 1);
+  RenderPassId contrib_id(4, 1);
   gfx::Rect contrib_output_rect(10, 15, 12, 17);
   gfx::Transform contrib_transform_to_root =
       gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0);
@@ -237,7 +237,7 @@
 TEST(RenderPassTest, CopyAllWithCulledQuads) {
   RenderPassList pass_list;
 
-  RenderPass::Id id(3, 2);
+  RenderPassId id(3, 2);
   gfx::Rect output_rect(45, 22, 120, 13);
   gfx::Transform transform_to_root =
       gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0);
diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc
index af2bc9c2..f9ef036 100644
--- a/cc/surfaces/surface_aggregator.cc
+++ b/cc/surfaces/surface_aggregator.cc
@@ -35,28 +35,27 @@
       : surface_id_(surface_id), next_index_(1) {}
   ~RenderPassIdAllocator() {}
 
-  void AddKnownPass(RenderPass::Id id) {
+  void AddKnownPass(RenderPassId id) {
     if (id_to_index_map_.find(id) != id_to_index_map_.end())
       return;
     id_to_index_map_[id] = next_index_++;
   }
 
-  RenderPass::Id Remap(RenderPass::Id id) {
+  RenderPassId Remap(RenderPassId id) {
     DCHECK(id_to_index_map_.find(id) != id_to_index_map_.end());
-    return RenderPass::Id(surface_id_.id, id_to_index_map_[id]);
+    return RenderPassId(surface_id_.id, id_to_index_map_[id]);
   }
 
  private:
-  base::hash_map<RenderPass::Id, int> id_to_index_map_;
+  base::hash_map<RenderPassId, int> id_to_index_map_;
   SurfaceId surface_id_;
   int next_index_;
 
   DISALLOW_COPY_AND_ASSIGN(RenderPassIdAllocator);
 };
 
-RenderPass::Id SurfaceAggregator::RemapPassId(
-    RenderPass::Id surface_local_pass_id,
-    SurfaceId surface_id) {
+RenderPassId SurfaceAggregator::RemapPassId(RenderPassId surface_local_pass_id,
+                                            SurfaceId surface_id) {
   RenderPassIdAllocator* allocator = render_pass_allocator_map_.get(surface_id);
   if (!allocator) {
     allocator = new RenderPassIdAllocator(surface_id);
@@ -164,7 +163,7 @@
 
     scoped_ptr<RenderPass> copy_pass(RenderPass::Create());
 
-    RenderPass::Id remapped_pass_id = RemapPassId(source.id, surface_id);
+    RenderPassId remapped_pass_id = RemapPassId(source.id, surface_id);
 
     copy_pass->SetAll(remapped_pass_id,
                       source.output_rect,
@@ -252,8 +251,8 @@
       if (quad->material == DrawQuad::RENDER_PASS) {
         const RenderPassDrawQuad* pass_quad =
             RenderPassDrawQuad::MaterialCast(quad);
-        RenderPass::Id original_pass_id = pass_quad->render_pass_id;
-        RenderPass::Id remapped_pass_id =
+        RenderPassId original_pass_id = pass_quad->render_pass_id;
+        RenderPassId remapped_pass_id =
             RemapPassId(original_pass_id, surface_id);
 
         dest_pass->CopyFromAndAppendRenderPassDrawQuad(
@@ -275,7 +274,7 @@
 
     scoped_ptr<RenderPass> copy_pass(RenderPass::Create());
 
-    RenderPass::Id remapped_pass_id = RemapPassId(source.id, surface_id);
+    RenderPassId remapped_pass_id = RemapPassId(source.id, surface_id);
 
     copy_pass->SetAll(remapped_pass_id,
                       source.output_rect,
diff --git a/cc/surfaces/surface_aggregator.h b/cc/surfaces/surface_aggregator.h
index de9a6d6..65174b53 100644
--- a/cc/surfaces/surface_aggregator.h
+++ b/cc/surfaces/surface_aggregator.h
@@ -34,8 +34,8 @@
       std::set<SurfaceId>* contained_surfaces);
 
  private:
-  RenderPass::Id RemapPassId(RenderPass::Id surface_local_pass_id,
-                             SurfaceId surface_id);
+  RenderPassId RemapPassId(RenderPassId surface_local_pass_id,
+                           SurfaceId surface_id);
 
   void HandleSurfaceQuad(const SurfaceDrawQuad* surface_quad,
                          RenderPass* dest_pass);
diff --git a/cc/surfaces/surface_aggregator_test_helpers.cc b/cc/surfaces/surface_aggregator_test_helpers.cc
index f5b623b4..f273fd3 100644
--- a/cc/surfaces/surface_aggregator_test_helpers.cc
+++ b/cc/surfaces/surface_aggregator_test_helpers.cc
@@ -51,8 +51,7 @@
                        gfx::Rect(surface_size),
                        surface_id);
 }
-void AddTestRenderPassQuad(TestRenderPass* pass,
-                           RenderPass::Id render_pass_id) {
+void AddTestRenderPassQuad(TestRenderPass* pass, RenderPassId render_pass_id) {
   gfx::Rect output_rect = gfx::Rect(0, 0, 5, 5);
   SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
   shared_state->SetAll(gfx::Transform(),
diff --git a/cc/surfaces/surface_aggregator_test_helpers.h b/cc/surfaces/surface_aggregator_test_helpers.h
index 75bfaeb1..798682ba 100644
--- a/cc/surfaces/surface_aggregator_test_helpers.h
+++ b/cc/surfaces/surface_aggregator_test_helpers.h
@@ -5,17 +5,21 @@
 #ifndef CC_SURFACES_SURFACE_AGGREGATOR_TEST_HELPERS_H_
 #define CC_SURFACES_SURFACE_AGGREGATOR_TEST_HELPERS_H_
 
+#include "cc/base/scoped_ptr_vector.h"
 #include "cc/quads/draw_quad.h"
-#include "cc/quads/render_pass.h"
+#include "cc/quads/render_pass_id.h"
 #include "cc/surfaces/surface_id.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/gfx/size.h"
 
 namespace cc {
 
+class RenderPass;
 class Surface;
 class TestRenderPass;
 
+typedef ScopedPtrVector<RenderPass> RenderPassList;
+
 namespace test {
 
 struct Quad {
@@ -33,7 +37,7 @@
     return quad;
   }
 
-  static Quad RenderPassQuad(RenderPass::Id id) {
+  static Quad RenderPassQuad(RenderPassId id) {
     Quad quad;
     quad.material = DrawQuad::RENDER_PASS;
     quad.render_pass_id = id;
@@ -46,7 +50,7 @@
   // Set when material==DrawQuad::SOLID_COLOR.
   SkColor color;
   // Set when material==DrawQuad::RENDER_PASS.
-  RenderPass::Id render_pass_id;
+  RenderPassId render_pass_id;
 
  private:
   Quad()
@@ -56,14 +60,14 @@
 };
 
 struct Pass {
-  Pass(Quad* quads, size_t quad_count, RenderPass::Id id)
+  Pass(Quad* quads, size_t quad_count, RenderPassId id)
       : quads(quads), quad_count(quad_count), id(id) {}
   Pass(Quad* quads, size_t quad_count)
       : quads(quads), quad_count(quad_count), id(1, 1) {}
 
   Quad* quads;
   size_t quad_count;
-  RenderPass::Id id;
+  RenderPassId id;
 };
 
 void AddSurfaceQuad(TestRenderPass* pass,
diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc
index c726c80..766753a 100644
--- a/cc/surfaces/surface_aggregator_unittest.cc
+++ b/cc/surfaces/surface_aggregator_unittest.cc
@@ -201,8 +201,8 @@
   SurfaceId embedded_surface_id = allocator_.GenerateId();
   factory_.Create(embedded_surface_id, SurfaceSize());
 
-  RenderPass::Id pass_ids[] = {RenderPass::Id(1, 1), RenderPass::Id(1, 2),
-                               RenderPass::Id(1, 3)};
+  RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2),
+                             RenderPassId(1, 3)};
 
   test::Quad embedded_quads[][2] = {
       {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)},
@@ -239,7 +239,7 @@
   const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
 
   ASSERT_EQ(5u, aggregated_pass_list.size());
-  RenderPass::Id actual_pass_ids[] = {
+  RenderPassId actual_pass_ids[] = {
       aggregated_pass_list[0]->id, aggregated_pass_list[1]->id,
       aggregated_pass_list[2]->id, aggregated_pass_list[3]->id,
       aggregated_pass_list[4]->id};
@@ -432,7 +432,7 @@
   SurfaceId child_surface_id = allocator_.GenerateId();
   factory_.Create(child_surface_id, SurfaceSize());
 
-  RenderPass::Id child_pass_id[] = {RenderPass::Id(1, 1), RenderPass::Id(1, 2)};
+  RenderPassId child_pass_id[] = {RenderPassId(1, 1), RenderPassId(1, 2)};
   test::Quad child_quad[][1] = {{test::Quad::SolidColorQuad(SK_ColorGREEN)},
                                 {test::Quad::RenderPassQuad(child_pass_id[0])}};
   test::Pass surface_passes[] = {
@@ -442,8 +442,7 @@
   SubmitFrame(surface_passes, arraysize(surface_passes), child_surface_id);
 
   // Pass IDs from the parent surface may collide with ones from the child.
-  RenderPass::Id parent_pass_id[] = {RenderPass::Id(2, 1),
-                                     RenderPass::Id(1, 2)};
+  RenderPassId parent_pass_id[] = {RenderPassId(2, 1), RenderPassId(1, 2)};
   test::Quad parent_quad[][1] = {
       {test::Quad::SurfaceQuad(child_surface_id)},
       {test::Quad::RenderPassQuad(parent_pass_id[0])}};
@@ -464,9 +463,9 @@
   const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
 
   ASSERT_EQ(3u, aggregated_pass_list.size());
-  RenderPass::Id actual_pass_ids[] = {aggregated_pass_list[0]->id,
-                                      aggregated_pass_list[1]->id,
-                                      aggregated_pass_list[2]->id};
+  RenderPassId actual_pass_ids[] = {aggregated_pass_list[0]->id,
+                                    aggregated_pass_list[1]->id,
+                                    aggregated_pass_list[2]->id};
   // Make sure the aggregated frame's pass IDs are all unique.
   for (size_t i = 0; i < 3; ++i) {
     for (size_t j = 0; j < i; ++j) {
@@ -558,7 +557,7 @@
                                           SkXfermode::kDstIn_Mode,    // 6
   };
 
-  RenderPass::Id pass_id(1, 1);
+  RenderPassId pass_id(1, 1);
   SurfaceId grandchild_surface_id = allocator_.GenerateId();
   factory_.Create(grandchild_surface_id, SurfaceSize());
   scoped_ptr<RenderPass> grandchild_pass = RenderPass::Create();
@@ -668,7 +667,7 @@
 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) {
   SurfaceId child_surface_id = allocator_.GenerateId();
   factory_.Create(child_surface_id, SurfaceSize());
-  RenderPass::Id child_pass_id[] = {RenderPass::Id(1, 1), RenderPass::Id(1, 2)};
+  RenderPassId child_pass_id[] = {RenderPassId(1, 1), RenderPassId(1, 2)};
   test::Quad child_quads[][1] = {
       {test::Quad::SolidColorQuad(SK_ColorGREEN)},
       {test::Quad::RenderPassQuad(child_pass_id[0])}};
@@ -852,7 +851,7 @@
                               SurfaceId surface_id) {
   scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData);
   scoped_ptr<RenderPass> pass = RenderPass::Create();
-  pass->id = RenderPass::Id(1, 1);
+  pass->id = RenderPassId(1, 1);
   SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState();
   for (size_t i = 0u; i < num_resource_ids; ++i) {
     TransferableResource resource;
diff --git a/cc/surfaces/surfaces_pixeltest.cc b/cc/surfaces/surfaces_pixeltest.cc
index bd9f56c..a30f0172 100644
--- a/cc/surfaces/surfaces_pixeltest.cc
+++ b/cc/surfaces/surfaces_pixeltest.cc
@@ -63,7 +63,7 @@
 // Draws a very simple frame with no surface references.
 TEST_F(SurfacesPixelTest, DrawSimpleFrame) {
   gfx::Rect rect(device_viewport_size_);
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = RenderPass::Create();
   pass->SetNew(id, rect, rect, gfx::Transform());
 
@@ -113,7 +113,7 @@
   factory_.Create(root_surface_id, device_viewport_size_);
   {
     gfx::Rect rect(device_viewport_size_);
-    RenderPass::Id id(1, 1);
+    RenderPassId id(1, 1);
     scoped_ptr<RenderPass> pass = RenderPass::Create();
     pass->SetNew(id, rect, rect, gfx::Transform());
 
@@ -147,7 +147,7 @@
 
   {
     gfx::Rect rect(child_size);
-    RenderPass::Id id(1, 1);
+    RenderPassId id(1, 1);
     scoped_ptr<RenderPass> pass = RenderPass::Create();
     pass->SetNew(id, rect, rect, gfx::Transform());
 
@@ -208,7 +208,7 @@
 
   {
     gfx::Rect rect(device_viewport_size_);
-    RenderPass::Id id(1, 1);
+    RenderPassId id(1, 1);
     scoped_ptr<RenderPass> pass = RenderPass::Create();
     pass->SetNew(id, rect, rect, gfx::Transform());
 
@@ -245,7 +245,7 @@
 
   {
     gfx::Rect rect(child_size);
-    RenderPass::Id id(1, 1);
+    RenderPassId id(1, 1);
     scoped_ptr<RenderPass> pass = RenderPass::Create();
     pass->SetNew(id, rect, rect, gfx::Transform());
 
@@ -280,7 +280,7 @@
 
   {
     gfx::Rect rect(child_size);
-    RenderPass::Id id(1, 1);
+    RenderPassId id(1, 1);
     scoped_ptr<RenderPass> pass = RenderPass::Create();
     pass->SetNew(id, rect, rect, gfx::Transform());
 
diff --git a/cc/test/layer_test_common.cc b/cc/test/layer_test_common.cc
index 7a0de16..b7c415b 100644
--- a/cc/test/layer_test_common.cc
+++ b/cc/test/layer_test_common.cc
@@ -134,7 +134,7 @@
 
 void LayerTestCommon::LayerImplTest::AppendQuadsForPassWithOcclusion(
     LayerImpl* layer_impl,
-    const RenderPass::Id& id,
+    const RenderPassId& id,
     const gfx::Rect& occluded) {
   AppendQuadsData data(id);
 
@@ -156,7 +156,7 @@
   occlusion_tracker_.set_occluded_target_rect_for_contributing_surface(
       occluded);
   bool for_replica = false;
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   surface_impl->AppendQuads(
       render_pass_.get(), occlusion_tracker_, &data, for_replica, id);
 }
diff --git a/cc/test/layer_test_common.h b/cc/test/layer_test_common.h
index e74ea6d..c8e6ba5 100644
--- a/cc/test/layer_test_common.h
+++ b/cc/test/layer_test_common.h
@@ -109,7 +109,7 @@
     void AppendQuadsWithOcclusion(LayerImpl* layer_impl,
                                   const gfx::Rect& occluded);
     void AppendQuadsForPassWithOcclusion(LayerImpl* layer_impl,
-                                         const RenderPass::Id& id,
+                                         const RenderPassId& id,
                                          const gfx::Rect& occluded);
     void AppendSurfaceQuadsWithOcclusion(RenderSurfaceImpl* surface_impl,
                                          const gfx::Rect& occluded);
diff --git a/cc/test/render_pass_test_common.cc b/cc/test/render_pass_test_common.cc
index a62f3ff..0feb025 100644
--- a/cc/test/render_pass_test_common.cc
+++ b/cc/test/render_pass_test_common.cc
@@ -25,7 +25,7 @@
 
 void TestRenderPass::AppendOneOfEveryQuadType(
     ResourceProvider* resource_provider,
-    RenderPass::Id child_pass) {
+    RenderPassId child_pass) {
   gfx::Rect rect(0, 0, 100, 100);
   gfx::Rect opaque_rect(10, 10, 80, 80);
   gfx::Rect visible_rect(0, 0, 100, 100);
diff --git a/cc/test/render_pass_test_common.h b/cc/test/render_pass_test_common.h
index c220dfd..0fd325f 100644
--- a/cc/test/render_pass_test_common.h
+++ b/cc/test/render_pass_test_common.h
@@ -22,7 +22,7 @@
   static const unsigned int kSyncPointForMailboxTextureQuad = 30;
 
   void AppendOneOfEveryQuadType(ResourceProvider* resource_provider,
-                                RenderPass::Id child_pass);
+                                RenderPassId child_pass);
 
  protected:
   TestRenderPass() : RenderPass() {}
diff --git a/cc/test/render_pass_test_utils.cc b/cc/test/render_pass_test_utils.cc
index 95eb4ba..151b7b4 100644
--- a/cc/test/render_pass_test_utils.cc
+++ b/cc/test/render_pass_test_utils.cc
@@ -16,7 +16,7 @@
 namespace cc {
 
 TestRenderPass* AddRenderPass(RenderPassList* pass_list,
-                              RenderPass::Id id,
+                              RenderPassId id,
                               const gfx::Rect& output_rect,
                               const gfx::Transform& root_transform) {
   scoped_ptr<TestRenderPass> pass(TestRenderPass::Create());
diff --git a/cc/test/render_pass_test_utils.h b/cc/test/render_pass_test_utils.h
index db739b95..7bf026ca 100644
--- a/cc/test/render_pass_test_utils.h
+++ b/cc/test/render_pass_test_utils.h
@@ -23,11 +23,10 @@
 
 // Adds a new render pass with the provided properties to the given
 // render pass list.
-TestRenderPass* AddRenderPass(
-    RenderPassList* pass_list,
-    RenderPass::Id id,
-    const gfx::Rect& output_rect,
-    const gfx::Transform& root_transform);
+TestRenderPass* AddRenderPass(RenderPassList* pass_list,
+                              RenderPassId id,
+                              const gfx::Rect& output_rect,
+                              const gfx::Transform& root_transform);
 
 // Adds a solid quad to a given render pass.
 SolidColorDrawQuad* AddQuad(TestRenderPass* pass,
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 9a4971ee..afba687 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -799,8 +799,8 @@
            LayerIteratorType::Begin(frame->render_surface_layer_list);
        it != end;
        ++it) {
-    RenderPass::Id target_render_pass_id =
-        it.target_render_surface_layer()->render_surface()->RenderPassId();
+    RenderPassId target_render_pass_id =
+        it.target_render_surface_layer()->render_surface()->GetRenderPassId();
     RenderPass* target_render_pass =
         frame->render_passes_by_id[target_render_pass_id];
 
@@ -816,8 +816,8 @@
       }
     } else if (it.represents_contributing_render_surface() &&
                it->render_surface()->contributes_to_drawn_surface()) {
-      RenderPass::Id contributing_render_pass_id =
-          it->render_surface()->RenderPassId();
+      RenderPassId contributing_render_pass_id =
+          it->render_surface()->GetRenderPassId();
       RenderPass* contributing_render_pass =
           frame->render_passes_by_id[contributing_render_pass_id];
       AppendQuadsForRenderSurfaceLayer(target_render_pass,
@@ -836,7 +836,7 @@
         frame->will_draw_layers.push_back(*it);
 
         if (it->HasContributingDelegatedRenderPasses()) {
-          RenderPass::Id contributing_render_pass_id =
+          RenderPassId contributing_render_pass_id =
               it->FirstContributingRenderPassId();
           while (frame->render_passes_by_id.find(contributing_render_pass_id) !=
                  frame->render_passes_by_id.end()) {
@@ -985,14 +985,14 @@
 }
 
 static inline RenderPass* FindRenderPassById(
-    RenderPass::Id render_pass_id,
+    RenderPassId render_pass_id,
     const LayerTreeHostImpl::FrameData& frame) {
   RenderPassIdHashMap::const_iterator it =
       frame.render_passes_by_id.find(render_pass_id);
   return it != frame.render_passes_by_id.end() ? it->second : NULL;
 }
 
-static void RemoveRenderPassesRecursive(RenderPass::Id remove_render_pass_id,
+static void RemoveRenderPassesRecursive(RenderPassId remove_render_pass_id,
                                         LayerTreeHostImpl::FrameData* frame) {
   RenderPass* remove_render_pass =
       FindRenderPassById(remove_render_pass_id, *frame);
@@ -1022,7 +1022,7 @@
     if (current_quad->material != DrawQuad::RENDER_PASS)
       continue;
 
-    RenderPass::Id next_remove_render_pass_id =
+    RenderPassId next_remove_render_pass_id =
         RenderPassDrawQuad::MaterialCast(current_quad)->render_pass_id;
     RemoveRenderPassesRecursive(next_remove_render_pass_id, frame);
   }
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 8dda035..3ac7aa1 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -1524,17 +1524,17 @@
 
   virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
     Renderer* renderer = host_impl->renderer();
-    RenderPass::Id surface1_render_pass_id = host_impl->active_tree()
-                                                 ->root_layer()
-                                                 ->children()[0]
-                                                 ->render_surface()
-                                                 ->RenderPassId();
-    RenderPass::Id surface2_render_pass_id = host_impl->active_tree()
-                                                 ->root_layer()
-                                                 ->children()[0]
-                                                 ->children()[0]
-                                                 ->render_surface()
-                                                 ->RenderPassId();
+    RenderPassId surface1_render_pass_id = host_impl->active_tree()
+                                               ->root_layer()
+                                               ->children()[0]
+                                               ->render_surface()
+                                               ->GetRenderPassId();
+    RenderPassId surface2_render_pass_id = host_impl->active_tree()
+                                               ->root_layer()
+                                               ->children()[0]
+                                               ->children()[0]
+                                               ->render_surface()
+                                               ->GetRenderPassId();
 
     switch (host_impl->active_tree()->source_frame_number()) {
       case 0:
diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc
index d27e25f..638d27f 100644
--- a/cc/trees/layer_tree_host_unittest_context.cc
+++ b/cc/trees/layer_tree_host_unittest_context.cc
@@ -700,18 +700,18 @@
     scoped_ptr<TestRenderPass> pass_for_quad = TestRenderPass::Create();
     pass_for_quad->SetNew(
         // AppendOneOfEveryQuadType() makes a RenderPass quad with this id.
-        RenderPass::Id(2, 1),
+        RenderPassId(2, 1),
         gfx::Rect(0, 0, 10, 10),
         gfx::Rect(0, 0, 10, 10),
         gfx::Transform());
 
     scoped_ptr<TestRenderPass> pass = TestRenderPass::Create();
-    pass->SetNew(RenderPass::Id(1, 1),
+    pass->SetNew(RenderPassId(1, 1),
                  gfx::Rect(0, 0, 10, 10),
                  gfx::Rect(0, 0, 10, 10),
                  gfx::Transform());
     pass->AppendOneOfEveryQuadType(child_resource_provider_.get(),
-                                   RenderPass::Id(2, 1));
+                                   RenderPassId(2, 1));
 
     frame_data->render_pass_list.push_back(pass_for_quad.PassAs<RenderPass>());
     frame_data->render_pass_list.push_back(pass.PassAs<RenderPass>());
diff --git a/cc/trees/layer_tree_host_unittest_copyrequest.cc b/cc/trees/layer_tree_host_unittest_copyrequest.cc
index 12fc631..89a267a 100644
--- a/cc/trees/layer_tree_host_unittest_copyrequest.cc
+++ b/cc/trees/layer_tree_host_unittest_copyrequest.cc
@@ -388,12 +388,12 @@
     // |parent| owns a surface, but it was hidden and not part of the copy
     // request so it should not allocate any resource.
     EXPECT_FALSE(renderer->HasAllocatedResourcesForTesting(
-        parent->render_surface()->RenderPassId()));
+        parent->render_surface()->GetRenderPassId()));
 
     // |copy_layer| should have been rendered to a texture since it was needed
     // for a copy request.
     EXPECT_TRUE(renderer->HasAllocatedResourcesForTesting(
-        copy_layer->render_surface()->RenderPassId()));
+        copy_layer->render_surface()->GetRenderPassId()));
 
     did_draw_ = true;
   }
diff --git a/cc/trees/layer_tree_host_unittest_delegated.cc b/cc/trees/layer_tree_host_unittest_delegated.cc
index 1607b71c..848d9d1 100644
--- a/cc/trees/layer_tree_host_unittest_delegated.cc
+++ b/cc/trees/layer_tree_host_unittest_delegated.cc
@@ -80,7 +80,7 @@
     scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData);
 
     scoped_ptr<RenderPass> root_pass(RenderPass::Create());
-    root_pass->SetNew(RenderPass::Id(1, 1),
+    root_pass->SetNew(RenderPassId(1, 1),
                       root_output_rect,
                       root_damage_rect,
                       gfx::Transform());
@@ -94,7 +94,7 @@
     scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData);
 
     scoped_ptr<RenderPass> root_pass(RenderPass::Create());
-    root_pass->SetNew(RenderPass::Id(1, 1),
+    root_pass->SetNew(RenderPassId(1, 1),
                       root_output_rect,
                       root_damage_rect,
                       gfx::Transform());
@@ -166,7 +166,7 @@
   }
 
   void AddRenderPass(DelegatedFrameData* frame,
-                     RenderPass::Id id,
+                     RenderPassId id,
                      const gfx::Rect& output_rect,
                      const gfx::Rect& damage_rect,
                      const FilterOperations& filters,
diff --git a/cc/trees/layer_tree_host_unittest_no_message_loop.cc b/cc/trees/layer_tree_host_unittest_no_message_loop.cc
index cd8e8a1..1756132c 100644
--- a/cc/trees/layer_tree_host_unittest_no_message_loop.cc
+++ b/cc/trees/layer_tree_host_unittest_no_message_loop.cc
@@ -203,7 +203,7 @@
 
     scoped_ptr<RenderPass> root_pass(RenderPass::Create());
     root_pass->SetNew(
-        RenderPass::Id(1, 1), frame_rect, frame_rect, gfx::Transform());
+        RenderPassId(1, 1), frame_rect, frame_rect, gfx::Transform());
     frame->render_pass_list.push_back(root_pass.Pass());
 
     TransferableResource resource;
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 506b02e6..0a8ad35 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -1154,7 +1154,7 @@
 
   scoped_ptr<cc::RenderPass> pass = cc::RenderPass::Create();
   pass->SetNew(
-      cc::RenderPass::Id(1, 1), gfx::Rect(size), damage, gfx::Transform());
+      cc::RenderPassId(1, 1), gfx::Rect(size), damage, gfx::Transform());
   frame->delegated_frame_data->render_pass_list.push_back(pass.Pass());
   return frame.Pass();
 }
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc
index 77ba68b..17a7913a 100644
--- a/content/common/cc_messages.cc
+++ b/content/common/cc_messages.cc
@@ -404,7 +404,7 @@
 
 bool ParamTraits<cc::RenderPass>::Read(
     const Message* m, PickleIterator* iter, param_type* p) {
-  cc::RenderPass::Id id(-1, -1);
+  cc::RenderPassId id(-1, -1);
   gfx::Rect output_rect;
   gfx::Rect damage_rect;
   gfx::Transform transform_to_root_target;
diff --git a/content/common/cc_messages.h b/content/common/cc_messages.h
index cc8aa8d..8cb3cc2 100644
--- a/content/common/cc_messages.h
+++ b/content/common/cc_messages.h
@@ -138,7 +138,7 @@
 IPC_ENUM_TRAITS_MAX_VALUE(cc::YUVVideoDrawQuad::ColorSpace,
                           cc::YUVVideoDrawQuad::COLOR_SPACE_LAST)
 
-IPC_STRUCT_TRAITS_BEGIN(cc::RenderPass::Id)
+IPC_STRUCT_TRAITS_BEGIN(cc::RenderPassId)
   IPC_STRUCT_TRAITS_MEMBER(layer_id)
   IPC_STRUCT_TRAITS_MEMBER(index)
 IPC_STRUCT_TRAITS_END()
diff --git a/content/common/cc_messages_unittest.cc b/content/common/cc_messages_unittest.cc
index 054e079ac..1da44b3 100644
--- a/content/common/cc_messages_unittest.cc
+++ b/content/common/cc_messages_unittest.cc
@@ -28,6 +28,7 @@
 using cc::IOSurfaceDrawQuad;
 using cc::PictureDrawQuad;
 using cc::RenderPass;
+using cc::RenderPassId;
 using cc::RenderPassDrawQuad;
 using cc::ResourceProvider;
 using cc::SharedQuadState;
@@ -258,7 +259,7 @@
   SkXfermode::Mode arbitrary_blend_mode3 = SkXfermode::kOverlay_Mode;
   IOSurfaceDrawQuad::Orientation arbitrary_orientation =
       IOSurfaceDrawQuad::UNFLIPPED;
-  RenderPass::Id arbitrary_id(10, 14);
+  RenderPassId arbitrary_id(10, 14);
   ResourceProvider::ResourceId arbitrary_resourceid1 = 55;
   ResourceProvider::ResourceId arbitrary_resourceid2 = 47;
   ResourceProvider::ResourceId arbitrary_resourceid3 = 23;
@@ -523,7 +524,7 @@
 
 TEST_F(CCMessagesTest, UnusedSharedQuadStates) {
   scoped_ptr<RenderPass> pass_in = RenderPass::Create();
-  pass_in->SetAll(RenderPass::Id(1, 1),
+  pass_in->SetAll(RenderPassId(1, 1),
                   gfx::Rect(100, 100),
                   gfx::Rect(),
                   gfx::Transform(),
@@ -668,7 +669,7 @@
 
   scoped_ptr<RenderPass> renderpass_in = RenderPass::Create();
   renderpass_in->SetNew(
-      RenderPass::Id(1, 1), gfx::Rect(), gfx::Rect(), gfx::Transform());
+      RenderPassId(1, 1), gfx::Rect(), gfx::Rect(), gfx::Transform());
 
   DelegatedFrameData frame_in;
   frame_in.resource_list.push_back(arbitrary_resource1);
diff --git a/mojo/examples/surfaces_app/child_gl_impl.cc b/mojo/examples/surfaces_app/child_gl_impl.cc
index e669761..ec135fe 100644
--- a/mojo/examples/surfaces_app/child_gl_impl.cc
+++ b/mojo/examples/surfaces_app/child_gl_impl.cc
@@ -32,6 +32,7 @@
 namespace examples {
 
 using cc::RenderPass;
+using cc::RenderPassId;
 using cc::DrawQuad;
 using cc::TextureDrawQuad;
 using cc::DelegatedFrameData;
@@ -142,7 +143,7 @@
   resource.is_software = false;
 
   gfx::Rect rect(size_);
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = RenderPass::Create();
   pass->SetNew(id, rect, rect, gfx::Transform());
 
diff --git a/mojo/examples/surfaces_app/child_impl.cc b/mojo/examples/surfaces_app/child_impl.cc
index 578c65c..afefe09 100644
--- a/mojo/examples/surfaces_app/child_impl.cc
+++ b/mojo/examples/surfaces_app/child_impl.cc
@@ -22,6 +22,7 @@
 namespace examples {
 
 using cc::RenderPass;
+using cc::RenderPassId;
 using cc::DrawQuad;
 using cc::SolidColorDrawQuad;
 using cc::DelegatedFrameData;
@@ -63,7 +64,7 @@
   surface_->CreateSurface(mojo::SurfaceId::From(id_),
                           mojo::Size::From(size_));
   gfx::Rect rect(size_);
-  RenderPass::Id id(1, 1);
+  RenderPassId id(1, 1);
   scoped_ptr<RenderPass> pass = RenderPass::Create();
   pass->SetNew(id, rect, rect, gfx::Transform());
 
diff --git a/mojo/examples/surfaces_app/embedder.cc b/mojo/examples/surfaces_app/embedder.cc
index 1896717..683d4b9 100644
--- a/mojo/examples/surfaces_app/embedder.cc
+++ b/mojo/examples/surfaces_app/embedder.cc
@@ -20,6 +20,7 @@
 namespace examples {
 
 using cc::RenderPass;
+using cc::RenderPassId;
 using cc::SurfaceDrawQuad;
 using cc::DrawQuad;
 using cc::SolidColorDrawQuad;
@@ -38,7 +39,7 @@
                             const gfx::Size& size,
                             int offset) {
   gfx::Rect rect(size);
-  RenderPass::Id pass_id(1, 1);
+  RenderPassId pass_id(1, 1);
   scoped_ptr<RenderPass> pass = RenderPass::Create();
   pass->SetNew(pass_id, rect, rect, gfx::Transform());
 
diff --git a/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc b/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc
index 309d1a1..6b39d9c 100644
--- a/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc
+++ b/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc
@@ -259,7 +259,7 @@
 // static
 scoped_ptr<cc::RenderPass> ConvertTo(const PassPtr& input) {
   scoped_ptr<cc::RenderPass> pass = cc::RenderPass::Create();
-  pass->SetAll(cc::RenderPass::Id(1, input->id),
+  pass->SetAll(cc::RenderPassId(1, input->id),
                input->output_rect.To<gfx::Rect>(),
                input->damage_rect.To<gfx::Rect>(),
                input->transform_to_root_target.To<gfx::Transform>(),
diff --git a/mojo/services/public/cpp/surfaces/tests/surface_unittest.cc b/mojo/services/public/cpp/surfaces/tests/surface_unittest.cc
index bc933c3..f269d4e 100644
--- a/mojo/services/public/cpp/surfaces/tests/surface_unittest.cc
+++ b/mojo/services/public/cpp/surfaces/tests/surface_unittest.cc
@@ -203,7 +203,7 @@
 
 TEST(SurfaceLibTest, RenderPass) {
   scoped_ptr<cc::RenderPass> pass = cc::RenderPass::Create();
-  cc::RenderPass::Id pass_id(1, 6);
+  cc::RenderPassId pass_id(1, 6);
   gfx::Rect output_rect(4, 9, 13, 71);
   gfx::Rect damage_rect(9, 17, 41, 45);
   gfx::Transform transform_to_root_target;
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc
index 9cb80c4..e44f0e4 100644
--- a/ui/compositor/layer_unittest.cc
+++ b/ui/compositor/layer_unittest.cc
@@ -1342,7 +1342,7 @@
   scoped_ptr<cc::DelegatedFrameData> frame_data(new cc::DelegatedFrameData);
   scoped_ptr<cc::RenderPass> render_pass(cc::RenderPass::Create());
   render_pass->SetNew(
-      cc::RenderPass::Id(1, 1), gfx::Rect(size), gfx::Rect(), gfx::Transform());
+      cc::RenderPassId(1, 1), gfx::Rect(size), gfx::Rect(), gfx::Transform());
   frame_data->render_pass_list.push_back(render_pass.Pass());
   return frame_data.Pass();
 }