| Index: gpu/command_buffer/service/framebuffer_manager.cc
 | 
| diff --git a/gpu/command_buffer/service/framebuffer_manager.cc b/gpu/command_buffer/service/framebuffer_manager.cc
 | 
| index 1ffd0fdf09b6ebae707b27c6f0d87a947156320b..29fd55d89825362f00afb6e1d43d0ac265803feb 100644
 | 
| --- a/gpu/command_buffer/service/framebuffer_manager.cc
 | 
| +++ b/gpu/command_buffer/service/framebuffer_manager.cc
 | 
| @@ -67,7 +67,7 @@ class RenderbufferAttachment
 | 
|    }
 | 
|  
 | 
|    virtual bool IsTexture(
 | 
| -      Texture* /* texture */) const OVERRIDE {
 | 
| +      TextureRef* /* texture */) const OVERRIDE {
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| @@ -115,8 +115,8 @@ class TextureAttachment
 | 
|      : public Framebuffer::Attachment {
 | 
|   public:
 | 
|    TextureAttachment(
 | 
| -      Texture* texture, GLenum target, GLint level)
 | 
| -      : texture_(texture),
 | 
| +      TextureRef* texture_ref, GLenum target, GLint level)
 | 
| +      : texture_ref_(texture_ref),
 | 
|          target_(target),
 | 
|          level_(level) {
 | 
|    }
 | 
| @@ -124,21 +124,24 @@ class TextureAttachment
 | 
|    virtual GLsizei width() const OVERRIDE {
 | 
|      GLsizei temp_width = 0;
 | 
|      GLsizei temp_height = 0;
 | 
| -    texture_->GetLevelSize(target_, level_, &temp_width, &temp_height);
 | 
| +    texture_ref_->texture()->GetLevelSize(
 | 
| +        target_, level_, &temp_width, &temp_height);
 | 
|      return temp_width;
 | 
|    }
 | 
|  
 | 
|    virtual GLsizei height() const OVERRIDE {
 | 
|      GLsizei temp_width = 0;
 | 
|      GLsizei temp_height = 0;
 | 
| -    texture_->GetLevelSize(target_, level_, &temp_width, &temp_height);
 | 
| +    texture_ref_->texture()->GetLevelSize(
 | 
| +        target_, level_, &temp_width, &temp_height);
 | 
|      return temp_height;
 | 
|    }
 | 
|  
 | 
|    virtual GLenum internal_format() const OVERRIDE {
 | 
|      GLenum temp_type = 0;
 | 
|      GLenum temp_internal_format = 0;
 | 
| -    texture_->GetLevelType(target_, level_, &temp_type, &temp_internal_format);
 | 
| +    texture_ref_->texture()->GetLevelType(
 | 
| +        target_, level_, &temp_type, &temp_internal_format);
 | 
|      return temp_internal_format;
 | 
|    }
 | 
|  
 | 
| @@ -147,18 +150,18 @@ class TextureAttachment
 | 
|    }
 | 
|  
 | 
|    virtual bool cleared() const OVERRIDE {
 | 
| -    return texture_->IsLevelCleared(target_, level_);
 | 
| +    return texture_ref_->texture()->IsLevelCleared(target_, level_);
 | 
|    }
 | 
|  
 | 
|    virtual void SetCleared(
 | 
|        RenderbufferManager* /* renderbuffer_manager */,
 | 
|        TextureManager* texture_manager,
 | 
|        bool cleared) OVERRIDE {
 | 
| -    texture_manager->SetLevelCleared(texture_, target_, level_, cleared);
 | 
| +    texture_manager->SetLevelCleared(texture_ref_, target_, level_, cleared);
 | 
|    }
 | 
|  
 | 
| -  virtual bool IsTexture(Texture* texture) const OVERRIDE {
 | 
| -    return texture == texture_.get();
 | 
| +  virtual bool IsTexture(TextureRef* texture) const OVERRIDE {
 | 
| +    return texture == texture_ref_.get();
 | 
|    }
 | 
|  
 | 
|    virtual bool IsRenderbuffer(
 | 
| @@ -167,23 +170,24 @@ class TextureAttachment
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| -  Texture* texture() const {
 | 
| -    return texture_.get();
 | 
| +  TextureRef* texture() const {
 | 
| +    return texture_ref_.get();
 | 
|    }
 | 
|  
 | 
|    virtual bool CanRenderTo() const OVERRIDE {
 | 
| -    return texture_->CanRenderTo();
 | 
| +    return texture_ref_->texture()->CanRenderTo();
 | 
|    }
 | 
|  
 | 
|    virtual void DetachFromFramebuffer() const OVERRIDE {
 | 
| -    texture_->DetachFromFramebuffer();
 | 
| +    texture_ref_->texture()->DetachFromFramebuffer();
 | 
|    }
 | 
|  
 | 
|    virtual bool ValidForAttachmentType(
 | 
|        GLenum attachment_type, uint32 max_color_attachments) OVERRIDE {
 | 
|      GLenum type = 0;
 | 
|      GLenum internal_format = 0;
 | 
| -    if (!texture_->GetLevelType(target_, level_, &type, &internal_format)) {
 | 
| +    if (!texture_ref_->texture()->GetLevelType(
 | 
| +        target_, level_, &type, &internal_format)) {
 | 
|        return false;
 | 
|      }
 | 
|      uint32 need = GLES2Util::GetChannelsNeededForAttachmentType(
 | 
| @@ -195,14 +199,14 @@ class TextureAttachment
 | 
|    virtual void AddToSignature(
 | 
|        TextureManager* texture_manager, std::string* signature) const OVERRIDE {
 | 
|      DCHECK(signature);
 | 
| -    texture_manager->AddToSignature(texture_, target_, level_, signature);
 | 
| +    texture_manager->AddToSignature(texture_ref_, target_, level_, signature);
 | 
|    }
 | 
|  
 | 
|   protected:
 | 
|    virtual ~TextureAttachment() {}
 | 
|  
 | 
|   private:
 | 
| -  scoped_refptr<Texture> texture_;
 | 
| +  scoped_refptr<TextureRef> texture_ref_;
 | 
|    GLenum target_;
 | 
|    GLint level_;
 | 
|  
 | 
| @@ -466,14 +470,14 @@ void Framebuffer::UnbindRenderbuffer(
 | 
|  }
 | 
|  
 | 
|  void Framebuffer::UnbindTexture(
 | 
| -    GLenum target, Texture* texture) {
 | 
| +    GLenum target, TextureRef* texture_ref) {
 | 
|    bool done;
 | 
|    do {
 | 
|      done = true;
 | 
|      for (AttachmentMap::const_iterator it = attachments_.begin();
 | 
|           it != attachments_.end(); ++it) {
 | 
|        Attachment* attachment = it->second;
 | 
| -      if (attachment->IsTexture(texture)) {
 | 
| +      if (attachment->IsTexture(texture_ref)) {
 | 
|          // TODO(gman): manually detach texture.
 | 
|          // glFramebufferTexture2DEXT(target, it->first, GL_TEXTURE_2D, 0, 0);
 | 
|          AttachTexture(it->first, NULL, GL_TEXTURE_2D, 0);
 | 
| @@ -513,15 +517,15 @@ void Framebuffer::AttachRenderbuffer(
 | 
|  }
 | 
|  
 | 
|  void Framebuffer::AttachTexture(
 | 
| -    GLenum attachment, Texture* texture, GLenum target,
 | 
| +    GLenum attachment, TextureRef* texture_ref, GLenum target,
 | 
|      GLint level) {
 | 
|    const Attachment* a = GetAttachment(attachment);
 | 
|    if (a)
 | 
|      a->DetachFromFramebuffer();
 | 
| -  if (texture) {
 | 
| +  if (texture_ref) {
 | 
|      attachments_[attachment] = scoped_refptr<Attachment>(
 | 
| -        new TextureAttachment(texture, target, level));
 | 
| -    texture->AttachToFramebuffer();
 | 
| +        new TextureAttachment(texture_ref, target, level));
 | 
| +    texture_ref->texture()->AttachToFramebuffer();
 | 
|    } else {
 | 
|      attachments_.erase(attachment);
 | 
|    }
 | 
| 
 |