| Index: gpu/perftests/texture_upload_perftest.cc
 | 
| diff --git a/gpu/perftests/texture_upload_perftest.cc b/gpu/perftests/texture_upload_perftest.cc
 | 
| index f691c9e76d91f1b744f2609309ba91266e15f8b2..2e9ef6cea4346d217eeae515b89db88f9e0cf40f 100644
 | 
| --- a/gpu/perftests/texture_upload_perftest.cc
 | 
| +++ b/gpu/perftests/texture_upload_perftest.cc
 | 
| @@ -6,8 +6,10 @@
 | 
|  #include <vector>
 | 
|  
 | 
|  #include "base/containers/small_map.h"
 | 
| +#include "base/logging.h"
 | 
|  #include "base/memory/ref_counted.h"
 | 
|  #include "base/memory/scoped_ptr.h"
 | 
| +#include "gpu/command_buffer/service/gpu_timing.h"
 | 
|  #include "gpu/perftests/measurements.h"
 | 
|  #include "testing/gtest/include/gtest/gtest.h"
 | 
|  #include "ui/gfx/geometry/size.h"
 | 
| @@ -31,7 +33,7 @@ SHADER(
 | 
|    varying vec2 v_texCoord;
 | 
|    void main() {
 | 
|      gl_Position = vec4(a_position.x, a_position.y, 0.0, 1.0);
 | 
| -    v_texCoord = vec2((a_position.x + 1) * 0.5, (a_position.y + 1) * 0.5);
 | 
| +    v_texCoord = vec2((a_position.x + 1.0) * 0.5, (a_position.y + 1.0) * 0.5);
 | 
|    }
 | 
|  );
 | 
|  const char kFragmentShader[] =
 | 
| @@ -96,12 +98,30 @@ class TextureUploadPerfTest : public testing::Test {
 | 
|    void SetUp() override {
 | 
|      // Initialize an offscreen surface and a gl context.
 | 
|      gfx::GLSurface::InitializeOneOff();
 | 
| -    surface_ = gfx::GLSurface::CreateOffscreenGLSurface(size_);
 | 
| +    surface_ = gfx::GLSurface::CreateOffscreenGLSurface(gfx::Size(4, 4));
 | 
|      gl_context_ = gfx::GLContext::CreateGLContext(NULL,  // share_group
 | 
|                                                    surface_.get(),
 | 
|                                                    gfx::PreferIntegratedGpu);
 | 
| -
 | 
|      ui::ScopedMakeCurrent smc(gl_context_.get(), surface_.get());
 | 
| +    glGenTextures(1, &color_texture_);
 | 
| +    glBindTexture(GL_TEXTURE_2D, color_texture_);
 | 
| +    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 | 
| +    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 | 
| +    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 | 
| +    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 | 
| +    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size_.width(), size_.height(), 0,
 | 
| +                 GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
 | 
| +
 | 
| +    glGenFramebuffersEXT(1, &framebuffer_object_);
 | 
| +    glBindFramebufferEXT(GL_FRAMEBUFFER, framebuffer_object_);
 | 
| +
 | 
| +    glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
 | 
| +                              GL_TEXTURE_2D, color_texture_, 0);
 | 
| +    DCHECK_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
 | 
| +              glCheckFramebufferStatusEXT(GL_FRAMEBUFFER));
 | 
| +
 | 
| +    glViewport(0, 0, size_.width(), size_.height());
 | 
| +
 | 
|      if (gpu_timing_.Initialize(gl_context_.get())) {
 | 
|        LOG(INFO) << "Gpu timing initialized with timer type: "
 | 
|                  << gpu_timing_.GetTimerTypeName();
 | 
| @@ -110,7 +130,6 @@ class TextureUploadPerfTest : public testing::Test {
 | 
|      } else {
 | 
|        LOG(WARNING) << "Can't initialize gpu timing";
 | 
|      }
 | 
| -
 | 
|      // Prepare a simple program and a vertex buffer that will be
 | 
|      // used to draw a quad on the offscreen surface.
 | 
|      vertex_shader_ = LoadShader(GL_VERTEX_SHADER, kVertexShader);
 | 
| @@ -142,18 +161,14 @@ class TextureUploadPerfTest : public testing::Test {
 | 
|  
 | 
|    void TearDown() override {
 | 
|      ui::ScopedMakeCurrent smc(gl_context_.get(), surface_.get());
 | 
| -    if (program_object_ != 0) {
 | 
| -      glDeleteProgram(program_object_);
 | 
| -    }
 | 
| -    if (vertex_shader_ != 0) {
 | 
| -      glDeleteShader(vertex_shader_);
 | 
| -    }
 | 
| -    if (fragment_shader_ != 0) {
 | 
| -      glDeleteShader(fragment_shader_);
 | 
| -    }
 | 
| -    if (vertex_buffer_ != 0) {
 | 
| -      glDeleteShader(vertex_buffer_);
 | 
| -    }
 | 
| +    glDeleteProgram(program_object_);
 | 
| +    glDeleteShader(vertex_shader_);
 | 
| +    glDeleteShader(fragment_shader_);
 | 
| +    glDeleteShader(vertex_buffer_);
 | 
| +
 | 
| +    glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
 | 
| +    glDeleteFramebuffersEXT(1, &framebuffer_object_);
 | 
| +    glDeleteTextures(1, &color_texture_);
 | 
|  
 | 
|      gl_context_ = nullptr;
 | 
|      surface_ = nullptr;
 | 
| @@ -167,6 +182,8 @@ class TextureUploadPerfTest : public testing::Test {
 | 
|                                           const GLenum format,
 | 
|                                           const GLenum type) {
 | 
|      ui::ScopedMakeCurrent smc(gl_context_.get(), surface_.get());
 | 
| +    DCHECK_NE(0u, framebuffer_object_);
 | 
| +    glBindFramebufferEXT(GL_FRAMEBUFFER, framebuffer_object_);
 | 
|  
 | 
|      MeasurementTimers total_timers(&gpu_timing_);
 | 
|      GLuint texture_id = 0;
 | 
| @@ -178,8 +195,8 @@ class TextureUploadPerfTest : public testing::Test {
 | 
|  
 | 
|      glTexImage2D(GL_TEXTURE_2D, 0, format, size_.width(), size_.height(), 0,
 | 
|                   format, type, &pixels[0]);
 | 
| -    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 | 
| -    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 | 
| +    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 | 
| +    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 | 
|      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 | 
|      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 | 
|      CheckNoGlError();
 | 
| @@ -222,11 +239,13 @@ class TextureUploadPerfTest : public testing::Test {
 | 
|      return measurements;
 | 
|    }
 | 
|  
 | 
| -  const gfx::Size size_;  // for the offscreen surface and the texture
 | 
| +  const gfx::Size size_;  // for the fbo and the texture
 | 
|    scoped_refptr<gfx::GLContext> gl_context_;
 | 
|    scoped_refptr<gfx::GLSurface> surface_;
 | 
|    GPUTiming gpu_timing_;
 | 
|  
 | 
| +  GLuint color_texture_ = 0;
 | 
| +  GLuint framebuffer_object_ = 0;
 | 
|    GLuint vertex_shader_ = 0;
 | 
|    GLuint fragment_shader_ = 0;
 | 
|    GLuint program_object_ = 0;
 | 
| 
 |