diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index 14191f2..14c778a 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -3139,7 +3139,7 @@
     """Writes the GLES2 Implemention declaration."""
     impl_decl = func.GetInfo('impl_decl')
     if impl_decl == None or impl_decl == True:
-      file.Write("virtual %s %s(%s) override;\n" %
+      file.Write("%s %s(%s) override;\n" %
                  (func.return_type, func.original_name,
                   func.MakeTypedOriginalArgString("")))
       file.Write("\n")
@@ -3180,7 +3180,7 @@
 
   def WriteGLES2TraceImplementationHeader(self, func, file):
     """Writes the GLES2 Trace Implemention header."""
-    file.Write("virtual %s %s(%s) override;\n" %
+    file.Write("%s %s(%s) override;\n" %
                (func.return_type, func.original_name,
                 func.MakeTypedOriginalArgString("")))
 
@@ -3231,7 +3231,7 @@
 
   def WriteGLES2InterfaceStub(self, func, file):
     """Writes the GLES2 Interface stub declaration."""
-    file.Write("virtual %s %s(%s) override;\n" %
+    file.Write("%s %s(%s) override;\n" %
                (func.return_type, func.original_name,
                 func.MakeTypedOriginalArgString("")))
 
@@ -3828,7 +3828,7 @@
 
   def WriteGLES2ImplementationHeader(self, func, file):
     """Overrriden from TypeHandler."""
-    file.Write("virtual %s %s(%s) override;\n" %
+    file.Write("%s %s(%s) override;\n" %
                (func.return_type, func.original_name,
                 func.MakeTypedOriginalArgString("")))
     file.Write("\n")
diff --git a/gpu/command_buffer/client/buffer_tracker_unittest.cc b/gpu/command_buffer/client/buffer_tracker_unittest.cc
index 39ff633..a244009 100644
--- a/gpu/command_buffer/client/buffer_tracker_unittest.cc
+++ b/gpu/command_buffer/client/buffer_tracker_unittest.cc
@@ -23,10 +23,10 @@
   MockClientCommandBufferImpl()
       : MockClientCommandBuffer(),
         context_lost_(false) {}
-  virtual ~MockClientCommandBufferImpl() {}
+  ~MockClientCommandBufferImpl() override {}
 
-  virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
-                                                          int32* id) override {
+  scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
+                                                  int32* id) override {
     if (context_lost_) {
       *id = -1;
       return NULL;
diff --git a/gpu/command_buffer/client/client_test_helper.h b/gpu/command_buffer/client/client_test_helper.h
index 51c6b6d..2cf18e6 100644
--- a/gpu/command_buffer/client/client_test_helper.h
+++ b/gpu/command_buffer/client/client_test_helper.h
@@ -26,21 +26,21 @@
   static const int32 kMaxTransferBuffers = 6;
 
   MockCommandBufferBase();
-  virtual ~MockCommandBufferBase();
+  ~MockCommandBufferBase() override;
 
-  virtual bool Initialize() override;
-  virtual State GetLastState() override;
-  virtual int32 GetLastToken() override;
-  virtual void WaitForTokenInRange(int32 start, int32 end) override;
-  virtual void WaitForGetOffsetInRange(int32 start, int32 end) override;
-  virtual void SetGetBuffer(int transfer_buffer_id) override;
-  virtual void SetGetOffset(int32 get_offset) override;
-  virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
-                                                          int32* id) override;
-  virtual scoped_refptr<gpu::Buffer> GetTransferBuffer(int32 id) override;
-  virtual void SetToken(int32 token) override;
-  virtual void SetParseError(error::Error error) override;
-  virtual void SetContextLostReason(error::ContextLostReason reason) override;
+  bool Initialize() override;
+  State GetLastState() override;
+  int32 GetLastToken() override;
+  void WaitForTokenInRange(int32 start, int32 end) override;
+  void WaitForGetOffsetInRange(int32 start, int32 end) override;
+  void SetGetBuffer(int transfer_buffer_id) override;
+  void SetGetOffset(int32 get_offset) override;
+  scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
+                                                  int32* id) override;
+  scoped_refptr<gpu::Buffer> GetTransferBuffer(int32 id) override;
+  void SetToken(int32 token) override;
+  void SetParseError(error::Error error) override;
+  void SetContextLostReason(error::ContextLostReason reason) override;
 
   // Get's the Id of the next transfer buffer that will be returned
   // by CreateTransferBuffer. This is useful for testing expected ids.
diff --git a/gpu/command_buffer/client/cmd_buffer_helper_test.cc b/gpu/command_buffer/client/cmd_buffer_helper_test.cc
index 2d367ac..3ff9d3a 100644
--- a/gpu/command_buffer/client/cmd_buffer_helper_test.cc
+++ b/gpu/command_buffer/client/cmd_buffer_helper_test.cc
@@ -46,9 +46,9 @@
         flush_locked_(false),
         last_flush_(-1),
         flush_count_(0) {}
-  virtual ~CommandBufferServiceLocked() {}
+  ~CommandBufferServiceLocked() override {}
 
-  virtual void Flush(int32 put_offset) override {
+  void Flush(int32 put_offset) override {
     flush_count_++;
     if (!flush_locked_) {
       last_flush_ = -1;
@@ -64,7 +64,7 @@
 
   int FlushCount() { return flush_count_; }
 
-  virtual void WaitForGetOffsetInRange(int32 start, int32 end) override {
+  void WaitForGetOffsetInRange(int32 start, int32 end) override {
     if (last_flush_ != -1) {
       CommandBufferService::Flush(last_flush_);
       last_flush_ = -1;
diff --git a/gpu/command_buffer/client/gl_in_process_context.cc b/gpu/command_buffer/client/gl_in_process_context.cc
index e877119..7f24bd6 100644
--- a/gpu/command_buffer/client/gl_in_process_context.cc
+++ b/gpu/command_buffer/client/gl_in_process_context.cc
@@ -48,7 +48,7 @@
  public:
   explicit GLInProcessContextImpl(
       const GLInProcessContextSharedMemoryLimits& mem_limits);
-  virtual ~GLInProcessContextImpl();
+  ~GLInProcessContextImpl() override;
 
   bool Initialize(
       scoped_refptr<gfx::GLSurface> surface,
@@ -62,9 +62,9 @@
       const scoped_refptr<InProcessCommandBuffer::Service>& service);
 
   // GLInProcessContext implementation:
-  virtual void SetContextLostCallback(const base::Closure& callback) override;
-  virtual gles2::GLES2Implementation* GetImplementation() override;
-  virtual size_t GetMappedMemoryLimit() override;
+  void SetContextLostCallback(const base::Closure& callback) override;
+  gles2::GLES2Implementation* GetImplementation() override;
+  size_t GetMappedMemoryLimit() override;
 
 #if defined(OS_ANDROID)
   virtual scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture(
diff --git a/gpu/command_buffer/client/gles2_cmd_helper.h b/gpu/command_buffer/client/gles2_cmd_helper.h
index af6cc5d..8a5cde1 100644
--- a/gpu/command_buffer/client/gles2_cmd_helper.h
+++ b/gpu/command_buffer/client/gles2_cmd_helper.h
@@ -16,7 +16,7 @@
 class GPU_EXPORT GLES2CmdHelper : public CommandBufferHelper {
  public:
   explicit GLES2CmdHelper(CommandBuffer* command_buffer);
-  virtual ~GLES2CmdHelper();
+  ~GLES2CmdHelper() override;
 
   // Include the auto-generated part of this class. We split this because it
   // means we can easily edit the non-auto generated parts right here in this
diff --git a/gpu/command_buffer/client/gles2_implementation.h b/gpu/command_buffer/client/gles2_implementation.h
index 1025a3e..972291e 100644
--- a/gpu/command_buffer/client/gles2_implementation.h
+++ b/gpu/command_buffer/client/gles2_implementation.h
@@ -191,7 +191,7 @@
                       bool lose_context_when_out_of_memory,
                       GpuControl* gpu_control);
 
-  virtual ~GLES2Implementation();
+  ~GLES2Implementation() override;
 
   bool Initialize(
       unsigned int starting_transfer_buffer_size,
@@ -211,23 +211,21 @@
   // this file instead of having to edit some template or the code generator.
   #include "gpu/command_buffer/client/gles2_implementation_autogen.h"
 
-  virtual void DisableVertexAttribArray(GLuint index) override;
-  virtual void EnableVertexAttribArray(GLuint index) override;
-  virtual void GetVertexAttribfv(
-      GLuint index, GLenum pname, GLfloat* params) override;
-  virtual void GetVertexAttribiv(
-      GLuint index, GLenum pname, GLint* params) override;
+  void DisableVertexAttribArray(GLuint index) override;
+  void EnableVertexAttribArray(GLuint index) override;
+  void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) override;
+  void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) override;
 
   // ContextSupport implementation.
-  virtual void Swap() override;
-  virtual void PartialSwapBuffers(const gfx::Rect& sub_buffer) override;
-  virtual void ScheduleOverlayPlane(int plane_z_order,
-                                    gfx::OverlayTransform plane_transform,
-                                    unsigned overlay_texture_id,
-                                    const gfx::Rect& display_bounds,
-                                    const gfx::RectF& uv_rect) override;
-  virtual GLuint InsertFutureSyncPointCHROMIUM() override;
-  virtual void RetireSyncPointCHROMIUM(GLuint sync_point) override;
+  void Swap() override;
+  void PartialSwapBuffers(const gfx::Rect& sub_buffer) override;
+  void ScheduleOverlayPlane(int plane_z_order,
+                            gfx::OverlayTransform plane_transform,
+                            unsigned overlay_texture_id,
+                            const gfx::Rect& display_bounds,
+                            const gfx::RectF& uv_rect) override;
+  GLuint InsertFutureSyncPointCHROMIUM() override;
+  void RetireSyncPointCHROMIUM(GLuint sync_point) override;
 
   void GetProgramInfoCHROMIUMHelper(GLuint program, std::vector<int8>* result);
   GLint GetAttribLocationHelper(GLuint program, const char* name);
@@ -243,11 +241,10 @@
   void FreeEverything();
 
   // ContextSupport implementation.
-  virtual void SignalSyncPoint(uint32 sync_point,
-                               const base::Closure& callback) override;
-  virtual void SignalQuery(uint32 query,
-                           const base::Closure& callback) override;
-  virtual void SetSurfaceVisible(bool visible) override;
+  void SignalSyncPoint(uint32 sync_point,
+                       const base::Closure& callback) override;
+  void SignalQuery(uint32 query, const base::Closure& callback) override;
+  void SetSurfaceVisible(bool visible) override;
 
   void SetErrorMessageCallback(
       GLES2ImplementationErrorMessageCallback* callback) {
diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h
index 5465fc7..5177941 100644
--- a/gpu/command_buffer/client/gles2_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -13,720 +13,682 @@
 #ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_
 #define GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_
 
-virtual void ActiveTexture(GLenum texture) override;
+void ActiveTexture(GLenum texture) override;
 
-virtual void AttachShader(GLuint program, GLuint shader) override;
+void AttachShader(GLuint program, GLuint shader) override;
 
-virtual void BindAttribLocation(GLuint program,
-                                GLuint index,
-                                const char* name) override;
+void BindAttribLocation(GLuint program,
+                        GLuint index,
+                        const char* name) override;
 
-virtual void BindBuffer(GLenum target, GLuint buffer) override;
+void BindBuffer(GLenum target, GLuint buffer) override;
 
-virtual void BindFramebuffer(GLenum target, GLuint framebuffer) override;
+void BindFramebuffer(GLenum target, GLuint framebuffer) override;
 
-virtual void BindRenderbuffer(GLenum target, GLuint renderbuffer) override;
+void BindRenderbuffer(GLenum target, GLuint renderbuffer) override;
 
-virtual void BindTexture(GLenum target, GLuint texture) override;
+void BindTexture(GLenum target, GLuint texture) override;
 
-virtual void BlendColor(GLclampf red,
-                        GLclampf green,
-                        GLclampf blue,
-                        GLclampf alpha) override;
+void BlendColor(GLclampf red,
+                GLclampf green,
+                GLclampf blue,
+                GLclampf alpha) override;
 
-virtual void BlendEquation(GLenum mode) override;
+void BlendEquation(GLenum mode) override;
 
-virtual void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) override;
+void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) override;
 
-virtual void BlendFunc(GLenum sfactor, GLenum dfactor) override;
+void BlendFunc(GLenum sfactor, GLenum dfactor) override;
 
-virtual void BlendFuncSeparate(GLenum srcRGB,
-                               GLenum dstRGB,
-                               GLenum srcAlpha,
-                               GLenum dstAlpha) override;
+void BlendFuncSeparate(GLenum srcRGB,
+                       GLenum dstRGB,
+                       GLenum srcAlpha,
+                       GLenum dstAlpha) override;
 
-virtual void BufferData(GLenum target,
-                        GLsizeiptr size,
-                        const void* data,
-                        GLenum usage) override;
+void BufferData(GLenum target,
+                GLsizeiptr size,
+                const void* data,
+                GLenum usage) override;
 
-virtual void BufferSubData(GLenum target,
-                           GLintptr offset,
-                           GLsizeiptr size,
-                           const void* data) override;
+void BufferSubData(GLenum target,
+                   GLintptr offset,
+                   GLsizeiptr size,
+                   const void* data) override;
 
-virtual GLenum CheckFramebufferStatus(GLenum target) override;
+GLenum CheckFramebufferStatus(GLenum target) override;
 
-virtual void Clear(GLbitfield mask) override;
+void Clear(GLbitfield mask) override;
 
-virtual void ClearColor(GLclampf red,
-                        GLclampf green,
-                        GLclampf blue,
-                        GLclampf alpha) override;
+void ClearColor(GLclampf red,
+                GLclampf green,
+                GLclampf blue,
+                GLclampf alpha) override;
 
-virtual void ClearDepthf(GLclampf depth) override;
+void ClearDepthf(GLclampf depth) override;
 
-virtual void ClearStencil(GLint s) override;
+void ClearStencil(GLint s) override;
 
-virtual void ColorMask(GLboolean red,
-                       GLboolean green,
-                       GLboolean blue,
-                       GLboolean alpha) override;
+void ColorMask(GLboolean red,
+               GLboolean green,
+               GLboolean blue,
+               GLboolean alpha) override;
 
-virtual void CompileShader(GLuint shader) override;
+void CompileShader(GLuint shader) override;
 
-virtual void CompressedTexImage2D(GLenum target,
-                                  GLint level,
-                                  GLenum internalformat,
-                                  GLsizei width,
-                                  GLsizei height,
-                                  GLint border,
-                                  GLsizei imageSize,
-                                  const void* data) override;
+void CompressedTexImage2D(GLenum target,
+                          GLint level,
+                          GLenum internalformat,
+                          GLsizei width,
+                          GLsizei height,
+                          GLint border,
+                          GLsizei imageSize,
+                          const void* data) override;
 
-virtual void CompressedTexSubImage2D(GLenum target,
-                                     GLint level,
-                                     GLint xoffset,
-                                     GLint yoffset,
-                                     GLsizei width,
-                                     GLsizei height,
-                                     GLenum format,
-                                     GLsizei imageSize,
-                                     const void* data) override;
+void CompressedTexSubImage2D(GLenum target,
+                             GLint level,
+                             GLint xoffset,
+                             GLint yoffset,
+                             GLsizei width,
+                             GLsizei height,
+                             GLenum format,
+                             GLsizei imageSize,
+                             const void* data) override;
 
-virtual void CopyTexImage2D(GLenum target,
-                            GLint level,
-                            GLenum internalformat,
-                            GLint x,
-                            GLint y,
-                            GLsizei width,
-                            GLsizei height,
-                            GLint border) override;
+void CopyTexImage2D(GLenum target,
+                    GLint level,
+                    GLenum internalformat,
+                    GLint x,
+                    GLint y,
+                    GLsizei width,
+                    GLsizei height,
+                    GLint border) override;
 
-virtual void CopyTexSubImage2D(GLenum target,
+void CopyTexSubImage2D(GLenum target,
+                       GLint level,
+                       GLint xoffset,
+                       GLint yoffset,
+                       GLint x,
+                       GLint y,
+                       GLsizei width,
+                       GLsizei height) override;
+
+GLuint CreateProgram() override;
+
+GLuint CreateShader(GLenum type) override;
+
+void CullFace(GLenum mode) override;
+
+void DeleteBuffers(GLsizei n, const GLuint* buffers) override;
+
+void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) override;
+
+void DeleteProgram(GLuint program) override;
+
+void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) override;
+
+void DeleteShader(GLuint shader) override;
+
+void DeleteTextures(GLsizei n, const GLuint* textures) override;
+
+void DepthFunc(GLenum func) override;
+
+void DepthMask(GLboolean flag) override;
+
+void DepthRangef(GLclampf zNear, GLclampf zFar) override;
+
+void DetachShader(GLuint program, GLuint shader) override;
+
+void Disable(GLenum cap) override;
+
+void DrawArrays(GLenum mode, GLint first, GLsizei count) override;
+
+void DrawElements(GLenum mode,
+                  GLsizei count,
+                  GLenum type,
+                  const void* indices) override;
+
+void Enable(GLenum cap) override;
+
+void Finish() override;
+
+void Flush() override;
+
+void FramebufferRenderbuffer(GLenum target,
+                             GLenum attachment,
+                             GLenum renderbuffertarget,
+                             GLuint renderbuffer) override;
+
+void FramebufferTexture2D(GLenum target,
+                          GLenum attachment,
+                          GLenum textarget,
+                          GLuint texture,
+                          GLint level) override;
+
+void FrontFace(GLenum mode) override;
+
+void GenBuffers(GLsizei n, GLuint* buffers) override;
+
+void GenerateMipmap(GLenum target) override;
+
+void GenFramebuffers(GLsizei n, GLuint* framebuffers) override;
+
+void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override;
+
+void GenTextures(GLsizei n, GLuint* textures) override;
+
+void GetActiveAttrib(GLuint program,
+                     GLuint index,
+                     GLsizei bufsize,
+                     GLsizei* length,
+                     GLint* size,
+                     GLenum* type,
+                     char* name) override;
+
+void GetActiveUniform(GLuint program,
+                      GLuint index,
+                      GLsizei bufsize,
+                      GLsizei* length,
+                      GLint* size,
+                      GLenum* type,
+                      char* name) override;
+
+void GetAttachedShaders(GLuint program,
+                        GLsizei maxcount,
+                        GLsizei* count,
+                        GLuint* shaders) override;
+
+GLint GetAttribLocation(GLuint program, const char* name) override;
+
+void GetBooleanv(GLenum pname, GLboolean* params) override;
+
+void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params) override;
+
+GLenum GetError() override;
+
+void GetFloatv(GLenum pname, GLfloat* params) override;
+
+void GetFramebufferAttachmentParameteriv(GLenum target,
+                                         GLenum attachment,
+                                         GLenum pname,
+                                         GLint* params) override;
+
+void GetIntegerv(GLenum pname, GLint* params) override;
+
+void GetProgramiv(GLuint program, GLenum pname, GLint* params) override;
+
+void GetProgramInfoLog(GLuint program,
+                       GLsizei bufsize,
+                       GLsizei* length,
+                       char* infolog) override;
+
+void GetRenderbufferParameteriv(GLenum target,
+                                GLenum pname,
+                                GLint* params) override;
+
+void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override;
+
+void GetShaderInfoLog(GLuint shader,
+                      GLsizei bufsize,
+                      GLsizei* length,
+                      char* infolog) override;
+
+void GetShaderPrecisionFormat(GLenum shadertype,
+                              GLenum precisiontype,
+                              GLint* range,
+                              GLint* precision) override;
+
+void GetShaderSource(GLuint shader,
+                     GLsizei bufsize,
+                     GLsizei* length,
+                     char* source) override;
+
+const GLubyte* GetString(GLenum name) override;
+
+void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) override;
+
+void GetTexParameteriv(GLenum target, GLenum pname, GLint* params) override;
+
+void GetUniformfv(GLuint program, GLint location, GLfloat* params) override;
+
+void GetUniformiv(GLuint program, GLint location, GLint* params) override;
+
+GLint GetUniformLocation(GLuint program, const char* name) override;
+
+void GetVertexAttribPointerv(GLuint index,
+                             GLenum pname,
+                             void** pointer) override;
+
+void Hint(GLenum target, GLenum mode) override;
+
+GLboolean IsBuffer(GLuint buffer) override;
+
+GLboolean IsEnabled(GLenum cap) override;
+
+GLboolean IsFramebuffer(GLuint framebuffer) override;
+
+GLboolean IsProgram(GLuint program) override;
+
+GLboolean IsRenderbuffer(GLuint renderbuffer) override;
+
+GLboolean IsShader(GLuint shader) override;
+
+GLboolean IsTexture(GLuint texture) override;
+
+void LineWidth(GLfloat width) override;
+
+void LinkProgram(GLuint program) override;
+
+void PixelStorei(GLenum pname, GLint param) override;
+
+void PolygonOffset(GLfloat factor, GLfloat units) override;
+
+void ReadPixels(GLint x,
+                GLint y,
+                GLsizei width,
+                GLsizei height,
+                GLenum format,
+                GLenum type,
+                void* pixels) override;
+
+void ReleaseShaderCompiler() override;
+
+void RenderbufferStorage(GLenum target,
+                         GLenum internalformat,
+                         GLsizei width,
+                         GLsizei height) override;
+
+void SampleCoverage(GLclampf value, GLboolean invert) override;
+
+void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) override;
+
+void ShaderBinary(GLsizei n,
+                  const GLuint* shaders,
+                  GLenum binaryformat,
+                  const void* binary,
+                  GLsizei length) override;
+
+void ShaderSource(GLuint shader,
+                  GLsizei count,
+                  const GLchar* const* str,
+                  const GLint* length) override;
+
+void ShallowFinishCHROMIUM() override;
+
+void ShallowFlushCHROMIUM() override;
+
+void StencilFunc(GLenum func, GLint ref, GLuint mask) override;
+
+void StencilFuncSeparate(GLenum face,
+                         GLenum func,
+                         GLint ref,
+                         GLuint mask) override;
+
+void StencilMask(GLuint mask) override;
+
+void StencilMaskSeparate(GLenum face, GLuint mask) override;
+
+void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) override;
+
+void StencilOpSeparate(GLenum face,
+                       GLenum fail,
+                       GLenum zfail,
+                       GLenum zpass) override;
+
+void TexImage2D(GLenum target,
+                GLint level,
+                GLint internalformat,
+                GLsizei width,
+                GLsizei height,
+                GLint border,
+                GLenum format,
+                GLenum type,
+                const void* pixels) override;
+
+void TexParameterf(GLenum target, GLenum pname, GLfloat param) override;
+
+void TexParameterfv(GLenum target,
+                    GLenum pname,
+                    const GLfloat* params) override;
+
+void TexParameteri(GLenum target, GLenum pname, GLint param) override;
+
+void TexParameteriv(GLenum target, GLenum pname, const GLint* params) override;
+
+void TexSubImage2D(GLenum target,
+                   GLint level,
+                   GLint xoffset,
+                   GLint yoffset,
+                   GLsizei width,
+                   GLsizei height,
+                   GLenum format,
+                   GLenum type,
+                   const void* pixels) override;
+
+void Uniform1f(GLint location, GLfloat x) override;
+
+void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) override;
+
+void Uniform1i(GLint location, GLint x) override;
+
+void Uniform1iv(GLint location, GLsizei count, const GLint* v) override;
+
+void Uniform2f(GLint location, GLfloat x, GLfloat y) override;
+
+void Uniform2fv(GLint location, GLsizei count, const GLfloat* v) override;
+
+void Uniform2i(GLint location, GLint x, GLint y) override;
+
+void Uniform2iv(GLint location, GLsizei count, const GLint* v) override;
+
+void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) override;
+
+void Uniform3fv(GLint location, GLsizei count, const GLfloat* v) override;
+
+void Uniform3i(GLint location, GLint x, GLint y, GLint z) override;
+
+void Uniform3iv(GLint location, GLsizei count, const GLint* v) override;
+
+void Uniform4f(GLint location,
+               GLfloat x,
+               GLfloat y,
+               GLfloat z,
+               GLfloat w) override;
+
+void Uniform4fv(GLint location, GLsizei count, const GLfloat* v) override;
+
+void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) override;
+
+void Uniform4iv(GLint location, GLsizei count, const GLint* v) override;
+
+void UniformMatrix2fv(GLint location,
+                      GLsizei count,
+                      GLboolean transpose,
+                      const GLfloat* value) override;
+
+void UniformMatrix3fv(GLint location,
+                      GLsizei count,
+                      GLboolean transpose,
+                      const GLfloat* value) override;
+
+void UniformMatrix4fv(GLint location,
+                      GLsizei count,
+                      GLboolean transpose,
+                      const GLfloat* value) override;
+
+void UseProgram(GLuint program) override;
+
+void ValidateProgram(GLuint program) override;
+
+void VertexAttrib1f(GLuint indx, GLfloat x) override;
+
+void VertexAttrib1fv(GLuint indx, const GLfloat* values) override;
+
+void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) override;
+
+void VertexAttrib2fv(GLuint indx, const GLfloat* values) override;
+
+void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) override;
+
+void VertexAttrib3fv(GLuint indx, const GLfloat* values) override;
+
+void VertexAttrib4f(GLuint indx,
+                    GLfloat x,
+                    GLfloat y,
+                    GLfloat z,
+                    GLfloat w) override;
+
+void VertexAttrib4fv(GLuint indx, const GLfloat* values) override;
+
+void VertexAttribPointer(GLuint indx,
+                         GLint size,
+                         GLenum type,
+                         GLboolean normalized,
+                         GLsizei stride,
+                         const void* ptr) override;
+
+void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) override;
+
+void BlitFramebufferCHROMIUM(GLint srcX0,
+                             GLint srcY0,
+                             GLint srcX1,
+                             GLint srcY1,
+                             GLint dstX0,
+                             GLint dstY0,
+                             GLint dstX1,
+                             GLint dstY1,
+                             GLbitfield mask,
+                             GLenum filter) override;
+
+void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
+                                            GLsizei samples,
+                                            GLenum internalformat,
+                                            GLsizei width,
+                                            GLsizei height) override;
+
+void RenderbufferStorageMultisampleEXT(GLenum target,
+                                       GLsizei samples,
+                                       GLenum internalformat,
+                                       GLsizei width,
+                                       GLsizei height) override;
+
+void FramebufferTexture2DMultisampleEXT(GLenum target,
+                                        GLenum attachment,
+                                        GLenum textarget,
+                                        GLuint texture,
+                                        GLint level,
+                                        GLsizei samples) override;
+
+void TexStorage2DEXT(GLenum target,
+                     GLsizei levels,
+                     GLenum internalFormat,
+                     GLsizei width,
+                     GLsizei height) override;
+
+void GenQueriesEXT(GLsizei n, GLuint* queries) override;
+
+void DeleteQueriesEXT(GLsizei n, const GLuint* queries) override;
+
+GLboolean IsQueryEXT(GLuint id) override;
+
+void BeginQueryEXT(GLenum target, GLuint id) override;
+
+void EndQueryEXT(GLenum target) override;
+
+void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override;
+
+void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override;
+
+void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override;
+
+void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;
+
+void PopGroupMarkerEXT() override;
+
+void GenVertexArraysOES(GLsizei n, GLuint* arrays) override;
+
+void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) override;
+
+GLboolean IsVertexArrayOES(GLuint array) override;
+
+void BindVertexArrayOES(GLuint array) override;
+
+void SwapBuffers() override;
+
+GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
+                                   GLsizei count,
+                                   GLenum type,
+                                   GLuint offset) override;
+
+GLboolean EnableFeatureCHROMIUM(const char* feature) override;
+
+void* MapBufferCHROMIUM(GLuint target, GLenum access) override;
+
+GLboolean UnmapBufferCHROMIUM(GLuint target) override;
+
+void* MapBufferSubDataCHROMIUM(GLuint target,
+                               GLintptr offset,
+                               GLsizeiptr size,
+                               GLenum access) override;
+
+void UnmapBufferSubDataCHROMIUM(const void* mem) override;
+
+void* MapTexSubImage2DCHROMIUM(GLenum target,
                                GLint level,
                                GLint xoffset,
                                GLint yoffset,
-                               GLint x,
-                               GLint y,
                                GLsizei width,
-                               GLsizei height) override;
+                               GLsizei height,
+                               GLenum format,
+                               GLenum type,
+                               GLenum access) override;
 
-virtual GLuint CreateProgram() override;
+void UnmapTexSubImage2DCHROMIUM(const void* mem) override;
 
-virtual GLuint CreateShader(GLenum type) override;
+void ResizeCHROMIUM(GLuint width, GLuint height, GLfloat scale_factor) override;
 
-virtual void CullFace(GLenum mode) override;
+const GLchar* GetRequestableExtensionsCHROMIUM() override;
 
-virtual void DeleteBuffers(GLsizei n, const GLuint* buffers) override;
+void RequestExtensionCHROMIUM(const char* extension) override;
 
-virtual void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) override;
+void RateLimitOffscreenContextCHROMIUM() override;
 
-virtual void DeleteProgram(GLuint program) override;
+void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
+                                 GLuint count,
+                                 GLint* results,
+                                 GLsizeiptr size) override;
 
-virtual void DeleteRenderbuffers(GLsizei n,
-                                 const GLuint* renderbuffers) override;
+void GetProgramInfoCHROMIUM(GLuint program,
+                            GLsizei bufsize,
+                            GLsizei* size,
+                            void* info) override;
 
-virtual void DeleteShader(GLuint shader) override;
+GLuint CreateStreamTextureCHROMIUM(GLuint texture) override;
 
-virtual void DeleteTextures(GLsizei n, const GLuint* textures) override;
-
-virtual void DepthFunc(GLenum func) override;
-
-virtual void DepthMask(GLboolean flag) override;
-
-virtual void DepthRangef(GLclampf zNear, GLclampf zFar) override;
-
-virtual void DetachShader(GLuint program, GLuint shader) override;
-
-virtual void Disable(GLenum cap) override;
-
-virtual void DrawArrays(GLenum mode, GLint first, GLsizei count) override;
-
-virtual void DrawElements(GLenum mode,
-                          GLsizei count,
-                          GLenum type,
-                          const void* indices) override;
-
-virtual void Enable(GLenum cap) override;
-
-virtual void Finish() override;
-
-virtual void Flush() override;
-
-virtual void FramebufferRenderbuffer(GLenum target,
-                                     GLenum attachment,
-                                     GLenum renderbuffertarget,
-                                     GLuint renderbuffer) override;
-
-virtual void FramebufferTexture2D(GLenum target,
-                                  GLenum attachment,
-                                  GLenum textarget,
-                                  GLuint texture,
-                                  GLint level) override;
-
-virtual void FrontFace(GLenum mode) override;
-
-virtual void GenBuffers(GLsizei n, GLuint* buffers) override;
-
-virtual void GenerateMipmap(GLenum target) override;
-
-virtual void GenFramebuffers(GLsizei n, GLuint* framebuffers) override;
-
-virtual void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override;
-
-virtual void GenTextures(GLsizei n, GLuint* textures) override;
-
-virtual void GetActiveAttrib(GLuint program,
-                             GLuint index,
-                             GLsizei bufsize,
-                             GLsizei* length,
-                             GLint* size,
-                             GLenum* type,
-                             char* name) override;
-
-virtual void GetActiveUniform(GLuint program,
-                              GLuint index,
-                              GLsizei bufsize,
-                              GLsizei* length,
-                              GLint* size,
-                              GLenum* type,
-                              char* name) override;
-
-virtual void GetAttachedShaders(GLuint program,
-                                GLsizei maxcount,
-                                GLsizei* count,
-                                GLuint* shaders) override;
-
-virtual GLint GetAttribLocation(GLuint program, const char* name) override;
-
-virtual void GetBooleanv(GLenum pname, GLboolean* params) override;
-
-virtual void GetBufferParameteriv(GLenum target,
-                                  GLenum pname,
-                                  GLint* params) override;
-
-virtual GLenum GetError() override;
-
-virtual void GetFloatv(GLenum pname, GLfloat* params) override;
-
-virtual void GetFramebufferAttachmentParameteriv(GLenum target,
-                                                 GLenum attachment,
-                                                 GLenum pname,
-                                                 GLint* params) override;
-
-virtual void GetIntegerv(GLenum pname, GLint* params) override;
-
-virtual void GetProgramiv(GLuint program, GLenum pname, GLint* params) override;
-
-virtual void GetProgramInfoLog(GLuint program,
-                               GLsizei bufsize,
-                               GLsizei* length,
-                               char* infolog) override;
-
-virtual void GetRenderbufferParameteriv(GLenum target,
-                                        GLenum pname,
-                                        GLint* params) override;
-
-virtual void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override;
-
-virtual void GetShaderInfoLog(GLuint shader,
-                              GLsizei bufsize,
-                              GLsizei* length,
-                              char* infolog) override;
-
-virtual void GetShaderPrecisionFormat(GLenum shadertype,
-                                      GLenum precisiontype,
-                                      GLint* range,
-                                      GLint* precision) override;
-
-virtual void GetShaderSource(GLuint shader,
-                             GLsizei bufsize,
-                             GLsizei* length,
-                             char* source) override;
-
-virtual const GLubyte* GetString(GLenum name) override;
-
-virtual void GetTexParameterfv(GLenum target,
-                               GLenum pname,
-                               GLfloat* params) override;
-
-virtual void GetTexParameteriv(GLenum target,
-                               GLenum pname,
-                               GLint* params) override;
-
-virtual void GetUniformfv(GLuint program,
-                          GLint location,
-                          GLfloat* params) override;
-
-virtual void GetUniformiv(GLuint program,
-                          GLint location,
-                          GLint* params) override;
-
-virtual GLint GetUniformLocation(GLuint program, const char* name) override;
-
-virtual void GetVertexAttribPointerv(GLuint index,
-                                     GLenum pname,
-                                     void** pointer) override;
-
-virtual void Hint(GLenum target, GLenum mode) override;
-
-virtual GLboolean IsBuffer(GLuint buffer) override;
-
-virtual GLboolean IsEnabled(GLenum cap) override;
-
-virtual GLboolean IsFramebuffer(GLuint framebuffer) override;
-
-virtual GLboolean IsProgram(GLuint program) override;
-
-virtual GLboolean IsRenderbuffer(GLuint renderbuffer) override;
-
-virtual GLboolean IsShader(GLuint shader) override;
-
-virtual GLboolean IsTexture(GLuint texture) override;
-
-virtual void LineWidth(GLfloat width) override;
-
-virtual void LinkProgram(GLuint program) override;
-
-virtual void PixelStorei(GLenum pname, GLint param) override;
-
-virtual void PolygonOffset(GLfloat factor, GLfloat units) override;
-
-virtual void ReadPixels(GLint x,
-                        GLint y,
-                        GLsizei width,
-                        GLsizei height,
-                        GLenum format,
-                        GLenum type,
-                        void* pixels) override;
-
-virtual void ReleaseShaderCompiler() override;
-
-virtual void RenderbufferStorage(GLenum target,
-                                 GLenum internalformat,
-                                 GLsizei width,
-                                 GLsizei height) override;
-
-virtual void SampleCoverage(GLclampf value, GLboolean invert) override;
-
-virtual void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) override;
-
-virtual void ShaderBinary(GLsizei n,
-                          const GLuint* shaders,
-                          GLenum binaryformat,
-                          const void* binary,
-                          GLsizei length) override;
-
-virtual void ShaderSource(GLuint shader,
-                          GLsizei count,
-                          const GLchar* const* str,
-                          const GLint* length) override;
-
-virtual void ShallowFinishCHROMIUM() override;
-
-virtual void ShallowFlushCHROMIUM() override;
-
-virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) override;
-
-virtual void StencilFuncSeparate(GLenum face,
-                                 GLenum func,
-                                 GLint ref,
-                                 GLuint mask) override;
-
-virtual void StencilMask(GLuint mask) override;
-
-virtual void StencilMaskSeparate(GLenum face, GLuint mask) override;
-
-virtual void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) override;
-
-virtual void StencilOpSeparate(GLenum face,
-                               GLenum fail,
-                               GLenum zfail,
-                               GLenum zpass) override;
-
-virtual void TexImage2D(GLenum target,
-                        GLint level,
-                        GLint internalformat,
-                        GLsizei width,
-                        GLsizei height,
-                        GLint border,
-                        GLenum format,
-                        GLenum type,
-                        const void* pixels) override;
-
-virtual void TexParameterf(GLenum target, GLenum pname, GLfloat param) override;
-
-virtual void TexParameterfv(GLenum target,
-                            GLenum pname,
-                            const GLfloat* params) override;
-
-virtual void TexParameteri(GLenum target, GLenum pname, GLint param) override;
-
-virtual void TexParameteriv(GLenum target,
-                            GLenum pname,
-                            const GLint* params) override;
-
-virtual void TexSubImage2D(GLenum target,
-                           GLint level,
-                           GLint xoffset,
-                           GLint yoffset,
+GLuint CreateImageCHROMIUM(ClientBuffer buffer,
                            GLsizei width,
                            GLsizei height,
-                           GLenum format,
-                           GLenum type,
-                           const void* pixels) override;
+                           GLenum internalformat) override;
 
-virtual void Uniform1f(GLint location, GLfloat x) override;
+void DestroyImageCHROMIUM(GLuint image_id) override;
 
-virtual void Uniform1fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
+GLuint CreateGpuMemoryBufferImageCHROMIUM(GLsizei width,
+                                          GLsizei height,
+                                          GLenum internalformat,
+                                          GLenum usage) override;
 
-virtual void Uniform1i(GLint location, GLint x) override;
-
-virtual void Uniform1iv(GLint location, GLsizei count, const GLint* v) override;
-
-virtual void Uniform2f(GLint location, GLfloat x, GLfloat y) override;
-
-virtual void Uniform2fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-
-virtual void Uniform2i(GLint location, GLint x, GLint y) override;
-
-virtual void Uniform2iv(GLint location, GLsizei count, const GLint* v) override;
-
-virtual void Uniform3f(GLint location,
-                       GLfloat x,
-                       GLfloat y,
-                       GLfloat z) override;
-
-virtual void Uniform3fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-
-virtual void Uniform3i(GLint location, GLint x, GLint y, GLint z) override;
-
-virtual void Uniform3iv(GLint location, GLsizei count, const GLint* v) override;
-
-virtual void Uniform4f(GLint location,
-                       GLfloat x,
-                       GLfloat y,
-                       GLfloat z,
-                       GLfloat w) override;
-
-virtual void Uniform4fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-
-virtual void Uniform4i(GLint location,
-                       GLint x,
-                       GLint y,
-                       GLint z,
-                       GLint w) override;
-
-virtual void Uniform4iv(GLint location, GLsizei count, const GLint* v) override;
-
-virtual void UniformMatrix2fv(GLint location,
-                              GLsizei count,
-                              GLboolean transpose,
-                              const GLfloat* value) override;
-
-virtual void UniformMatrix3fv(GLint location,
-                              GLsizei count,
-                              GLboolean transpose,
-                              const GLfloat* value) override;
-
-virtual void UniformMatrix4fv(GLint location,
-                              GLsizei count,
-                              GLboolean transpose,
-                              const GLfloat* value) override;
-
-virtual void UseProgram(GLuint program) override;
-
-virtual void ValidateProgram(GLuint program) override;
-
-virtual void VertexAttrib1f(GLuint indx, GLfloat x) override;
-
-virtual void VertexAttrib1fv(GLuint indx, const GLfloat* values) override;
-
-virtual void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) override;
-
-virtual void VertexAttrib2fv(GLuint indx, const GLfloat* values) override;
-
-virtual void VertexAttrib3f(GLuint indx,
-                            GLfloat x,
-                            GLfloat y,
-                            GLfloat z) override;
-
-virtual void VertexAttrib3fv(GLuint indx, const GLfloat* values) override;
-
-virtual void VertexAttrib4f(GLuint indx,
-                            GLfloat x,
-                            GLfloat y,
-                            GLfloat z,
-                            GLfloat w) override;
-
-virtual void VertexAttrib4fv(GLuint indx, const GLfloat* values) override;
-
-virtual void VertexAttribPointer(GLuint indx,
-                                 GLint size,
-                                 GLenum type,
-                                 GLboolean normalized,
-                                 GLsizei stride,
-                                 const void* ptr) override;
-
-virtual void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) override;
-
-virtual void BlitFramebufferCHROMIUM(GLint srcX0,
-                                     GLint srcY0,
-                                     GLint srcX1,
-                                     GLint srcY1,
-                                     GLint dstX0,
-                                     GLint dstY0,
-                                     GLint dstX1,
-                                     GLint dstY1,
-                                     GLbitfield mask,
-                                     GLenum filter) override;
-
-virtual void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
-                                                    GLsizei samples,
-                                                    GLenum internalformat,
-                                                    GLsizei width,
-                                                    GLsizei height) override;
-
-virtual void RenderbufferStorageMultisampleEXT(GLenum target,
-                                               GLsizei samples,
-                                               GLenum internalformat,
-                                               GLsizei width,
-                                               GLsizei height) override;
-
-virtual void FramebufferTexture2DMultisampleEXT(GLenum target,
-                                                GLenum attachment,
-                                                GLenum textarget,
-                                                GLuint texture,
-                                                GLint level,
-                                                GLsizei samples) override;
-
-virtual void TexStorage2DEXT(GLenum target,
-                             GLsizei levels,
-                             GLenum internalFormat,
-                             GLsizei width,
-                             GLsizei height) override;
-
-virtual void GenQueriesEXT(GLsizei n, GLuint* queries) override;
-
-virtual void DeleteQueriesEXT(GLsizei n, const GLuint* queries) override;
-
-virtual GLboolean IsQueryEXT(GLuint id) override;
-
-virtual void BeginQueryEXT(GLenum target, GLuint id) override;
-
-virtual void EndQueryEXT(GLenum target) override;
-
-virtual void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override;
-
-virtual void GetQueryObjectuivEXT(GLuint id,
-                                  GLenum pname,
-                                  GLuint* params) override;
-
-virtual void InsertEventMarkerEXT(GLsizei length,
-                                  const GLchar* marker) override;
-
-virtual void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;
-
-virtual void PopGroupMarkerEXT() override;
-
-virtual void GenVertexArraysOES(GLsizei n, GLuint* arrays) override;
-
-virtual void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) override;
-
-virtual GLboolean IsVertexArrayOES(GLuint array) override;
-
-virtual void BindVertexArrayOES(GLuint array) override;
-
-virtual void SwapBuffers() override;
-
-virtual GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
-                                           GLsizei count,
-                                           GLenum type,
-                                           GLuint offset) override;
-
-virtual GLboolean EnableFeatureCHROMIUM(const char* feature) override;
-
-virtual void* MapBufferCHROMIUM(GLuint target, GLenum access) override;
-
-virtual GLboolean UnmapBufferCHROMIUM(GLuint target) override;
-
-virtual void* MapBufferSubDataCHROMIUM(GLuint target,
-                                       GLintptr offset,
-                                       GLsizeiptr size,
-                                       GLenum access) override;
-
-virtual void UnmapBufferSubDataCHROMIUM(const void* mem) override;
-
-virtual void* MapTexSubImage2DCHROMIUM(GLenum target,
-                                       GLint level,
-                                       GLint xoffset,
-                                       GLint yoffset,
-                                       GLsizei width,
-                                       GLsizei height,
-                                       GLenum format,
-                                       GLenum type,
-                                       GLenum access) override;
-
-virtual void UnmapTexSubImage2DCHROMIUM(const void* mem) override;
-
-virtual void ResizeCHROMIUM(GLuint width,
-                            GLuint height,
-                            GLfloat scale_factor) override;
-
-virtual const GLchar* GetRequestableExtensionsCHROMIUM() override;
-
-virtual void RequestExtensionCHROMIUM(const char* extension) override;
-
-virtual void RateLimitOffscreenContextCHROMIUM() override;
-
-virtual void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
-                                         GLuint count,
-                                         GLint* results,
-                                         GLsizeiptr size) override;
-
-virtual void GetProgramInfoCHROMIUM(GLuint program,
+void GetTranslatedShaderSourceANGLE(GLuint shader,
                                     GLsizei bufsize,
-                                    GLsizei* size,
-                                    void* info) override;
+                                    GLsizei* length,
+                                    char* source) override;
 
-virtual GLuint CreateStreamTextureCHROMIUM(GLuint texture) override;
+void PostSubBufferCHROMIUM(GLint x,
+                           GLint y,
+                           GLint width,
+                           GLint height) override;
 
-virtual GLuint CreateImageCHROMIUM(ClientBuffer buffer,
-                                   GLsizei width,
-                                   GLsizei height,
-                                   GLenum internalformat) override;
+void TexImageIOSurface2DCHROMIUM(GLenum target,
+                                 GLsizei width,
+                                 GLsizei height,
+                                 GLuint ioSurfaceId,
+                                 GLuint plane) override;
 
-virtual void DestroyImageCHROMIUM(GLuint image_id) override;
+void CopyTextureCHROMIUM(GLenum target,
+                         GLenum source_id,
+                         GLenum dest_id,
+                         GLint level,
+                         GLint internalformat,
+                         GLenum dest_type) override;
 
-virtual GLuint CreateGpuMemoryBufferImageCHROMIUM(GLsizei width,
-                                                  GLsizei height,
-                                                  GLenum internalformat,
-                                                  GLenum usage) override;
+void DrawArraysInstancedANGLE(GLenum mode,
+                              GLint first,
+                              GLsizei count,
+                              GLsizei primcount) override;
 
-virtual void GetTranslatedShaderSourceANGLE(GLuint shader,
-                                            GLsizei bufsize,
-                                            GLsizei* length,
-                                            char* source) override;
+void DrawElementsInstancedANGLE(GLenum mode,
+                                GLsizei count,
+                                GLenum type,
+                                const void* indices,
+                                GLsizei primcount) override;
 
-virtual void PostSubBufferCHROMIUM(GLint x,
-                                   GLint y,
-                                   GLint width,
-                                   GLint height) override;
+void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) override;
 
-virtual void TexImageIOSurface2DCHROMIUM(GLenum target,
-                                         GLsizei width,
-                                         GLsizei height,
-                                         GLuint ioSurfaceId,
-                                         GLuint plane) override;
+void GenMailboxCHROMIUM(GLbyte* mailbox) override;
 
-virtual void CopyTextureCHROMIUM(GLenum target,
-                                 GLenum source_id,
-                                 GLenum dest_id,
-                                 GLint level,
-                                 GLint internalformat,
-                                 GLenum dest_type) override;
+void ProduceTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override;
 
-virtual void DrawArraysInstancedANGLE(GLenum mode,
-                                      GLint first,
-                                      GLsizei count,
-                                      GLsizei primcount) override;
+void ProduceTextureDirectCHROMIUM(GLuint texture,
+                                  GLenum target,
+                                  const GLbyte* mailbox) override;
 
-virtual void DrawElementsInstancedANGLE(GLenum mode,
-                                        GLsizei count,
-                                        GLenum type,
-                                        const void* indices,
-                                        GLsizei primcount) override;
+void ConsumeTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override;
 
-virtual void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) override;
+GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
+                                       const GLbyte* mailbox) override;
 
-virtual void GenMailboxCHROMIUM(GLbyte* mailbox) override;
+void BindUniformLocationCHROMIUM(GLuint program,
+                                 GLint location,
+                                 const char* name) override;
 
-virtual void ProduceTextureCHROMIUM(GLenum target,
-                                    const GLbyte* mailbox) override;
+void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
 
-virtual void ProduceTextureDirectCHROMIUM(GLuint texture,
-                                          GLenum target,
-                                          const GLbyte* mailbox) override;
+void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
 
-virtual void ConsumeTextureCHROMIUM(GLenum target,
-                                    const GLbyte* mailbox) override;
+void TraceBeginCHROMIUM(const char* name) override;
 
-virtual GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
-                                               const GLbyte* mailbox) override;
+void TraceEndCHROMIUM() override;
 
-virtual void BindUniformLocationCHROMIUM(GLuint program,
-                                         GLint location,
-                                         const char* name) override;
+void AsyncTexSubImage2DCHROMIUM(GLenum target,
+                                GLint level,
+                                GLint xoffset,
+                                GLint yoffset,
+                                GLsizei width,
+                                GLsizei height,
+                                GLenum format,
+                                GLenum type,
+                                const void* data) override;
 
-virtual void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
+void AsyncTexImage2DCHROMIUM(GLenum target,
+                             GLint level,
+                             GLenum internalformat,
+                             GLsizei width,
+                             GLsizei height,
+                             GLint border,
+                             GLenum format,
+                             GLenum type,
+                             const void* pixels) override;
 
-virtual void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
+void WaitAsyncTexImage2DCHROMIUM(GLenum target) override;
 
-virtual void TraceBeginCHROMIUM(const char* name) override;
+void WaitAllAsyncTexImage2DCHROMIUM() override;
 
-virtual void TraceEndCHROMIUM() override;
+void DiscardFramebufferEXT(GLenum target,
+                           GLsizei count,
+                           const GLenum* attachments) override;
 
-virtual void AsyncTexSubImage2DCHROMIUM(GLenum target,
-                                        GLint level,
-                                        GLint xoffset,
-                                        GLint yoffset,
-                                        GLsizei width,
-                                        GLsizei height,
-                                        GLenum format,
-                                        GLenum type,
-                                        const void* data) override;
+void LoseContextCHROMIUM(GLenum current, GLenum other) override;
 
-virtual void AsyncTexImage2DCHROMIUM(GLenum target,
-                                     GLint level,
-                                     GLenum internalformat,
-                                     GLsizei width,
-                                     GLsizei height,
-                                     GLint border,
-                                     GLenum format,
-                                     GLenum type,
-                                     const void* pixels) override;
+GLuint InsertSyncPointCHROMIUM() override;
 
-virtual void WaitAsyncTexImage2DCHROMIUM(GLenum target) override;
+void WaitSyncPointCHROMIUM(GLuint sync_point) override;
 
-virtual void WaitAllAsyncTexImage2DCHROMIUM() override;
+void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override;
 
-virtual void DiscardFramebufferEXT(GLenum target,
-                                   GLsizei count,
-                                   const GLenum* attachments) override;
+void DiscardBackbufferCHROMIUM() override;
 
-virtual void LoseContextCHROMIUM(GLenum current, GLenum other) override;
+void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
+                                  GLenum plane_transform,
+                                  GLuint overlay_texture_id,
+                                  GLint bounds_x,
+                                  GLint bounds_y,
+                                  GLint bounds_width,
+                                  GLint bounds_height,
+                                  GLfloat uv_x,
+                                  GLfloat uv_y,
+                                  GLfloat uv_width,
+                                  GLfloat uv_height) override;
 
-virtual GLuint InsertSyncPointCHROMIUM() override;
+void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;
 
-virtual void WaitSyncPointCHROMIUM(GLuint sync_point) override;
-
-virtual void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override;
-
-virtual void DiscardBackbufferCHROMIUM() override;
-
-virtual void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
-                                          GLenum plane_transform,
-                                          GLuint overlay_texture_id,
-                                          GLint bounds_x,
-                                          GLint bounds_y,
-                                          GLint bounds_width,
-                                          GLint bounds_height,
-                                          GLfloat uv_x,
-                                          GLfloat uv_y,
-                                          GLfloat uv_width,
-                                          GLfloat uv_height) override;
-
-virtual void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;
-
-virtual void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) override;
+void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) override;
 
 #endif  // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc
index b4e2667..7b3ec2d 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest.cc
+++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc
@@ -114,25 +114,23 @@
     }
   }
 
-  virtual ~MockTransferBuffer() { }
+  ~MockTransferBuffer() override {}
 
-  virtual bool Initialize(
-      unsigned int starting_buffer_size,
-      unsigned int result_size,
-      unsigned int /* min_buffer_size */,
-      unsigned int /* max_buffer_size */,
-      unsigned int alignment,
-      unsigned int size_to_flush) override;
-  virtual int GetShmId() override;
-  virtual void* GetResultBuffer() override;
-  virtual int GetResultOffset() override;
-  virtual void Free() override;
-  virtual bool HaveBuffer() const override;
-  virtual void* AllocUpTo(
-      unsigned int size, unsigned int* size_allocated) override;
-  virtual void* Alloc(unsigned int size) override;
-  virtual RingBuffer::Offset GetOffset(void* pointer) const override;
-  virtual void FreePendingToken(void* p, unsigned int /* token */) override;
+  bool Initialize(unsigned int starting_buffer_size,
+                  unsigned int result_size,
+                  unsigned int /* min_buffer_size */,
+                  unsigned int /* max_buffer_size */,
+                  unsigned int alignment,
+                  unsigned int size_to_flush) override;
+  int GetShmId() override;
+  void* GetResultBuffer() override;
+  int GetResultOffset() override;
+  void Free() override;
+  bool HaveBuffer() const override;
+  void* AllocUpTo(unsigned int size, unsigned int* size_allocated) override;
+  void* Alloc(unsigned int size) override;
+  RingBuffer::Offset GetOffset(void* pointer) const override;
+  void FreePendingToken(void* p, unsigned int /* token */) override;
 
   size_t MaxTransferBufferSize() {
     return size_ - result_size_;
diff --git a/gpu/command_buffer/client/gles2_interface_stub.h b/gpu/command_buffer/client/gles2_interface_stub.h
index cf3fb41..589a79c 100644
--- a/gpu/command_buffer/client/gles2_interface_stub.h
+++ b/gpu/command_buffer/client/gles2_interface_stub.h
@@ -14,7 +14,7 @@
 class GLES2InterfaceStub : public GLES2Interface {
  public:
   GLES2InterfaceStub();
-  virtual ~GLES2InterfaceStub();
+  ~GLES2InterfaceStub() override;
 
   // Include the auto-generated part of this class. We split this because
   // it means we can easily edit the non-auto generated parts right here in
diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
index b021b56..bd1a73e 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -12,520 +12,478 @@
 #ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_INTERFACE_STUB_AUTOGEN_H_
 #define GPU_COMMAND_BUFFER_CLIENT_GLES2_INTERFACE_STUB_AUTOGEN_H_
 
-virtual void ActiveTexture(GLenum texture) override;
-virtual void AttachShader(GLuint program, GLuint shader) override;
-virtual void BindAttribLocation(GLuint program,
-                                GLuint index,
-                                const char* name) override;
-virtual void BindBuffer(GLenum target, GLuint buffer) override;
-virtual void BindFramebuffer(GLenum target, GLuint framebuffer) override;
-virtual void BindRenderbuffer(GLenum target, GLuint renderbuffer) override;
-virtual void BindTexture(GLenum target, GLuint texture) override;
-virtual void BlendColor(GLclampf red,
-                        GLclampf green,
-                        GLclampf blue,
-                        GLclampf alpha) override;
-virtual void BlendEquation(GLenum mode) override;
-virtual void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) override;
-virtual void BlendFunc(GLenum sfactor, GLenum dfactor) override;
-virtual void BlendFuncSeparate(GLenum srcRGB,
-                               GLenum dstRGB,
-                               GLenum srcAlpha,
-                               GLenum dstAlpha) override;
-virtual void BufferData(GLenum target,
-                        GLsizeiptr size,
-                        const void* data,
-                        GLenum usage) override;
-virtual void BufferSubData(GLenum target,
-                           GLintptr offset,
-                           GLsizeiptr size,
-                           const void* data) override;
-virtual GLenum CheckFramebufferStatus(GLenum target) override;
-virtual void Clear(GLbitfield mask) override;
-virtual void ClearColor(GLclampf red,
-                        GLclampf green,
-                        GLclampf blue,
-                        GLclampf alpha) override;
-virtual void ClearDepthf(GLclampf depth) override;
-virtual void ClearStencil(GLint s) override;
-virtual void ColorMask(GLboolean red,
-                       GLboolean green,
-                       GLboolean blue,
-                       GLboolean alpha) override;
-virtual void CompileShader(GLuint shader) override;
-virtual void CompressedTexImage2D(GLenum target,
-                                  GLint level,
-                                  GLenum internalformat,
-                                  GLsizei width,
-                                  GLsizei height,
-                                  GLint border,
-                                  GLsizei imageSize,
-                                  const void* data) override;
-virtual void CompressedTexSubImage2D(GLenum target,
-                                     GLint level,
-                                     GLint xoffset,
-                                     GLint yoffset,
-                                     GLsizei width,
-                                     GLsizei height,
-                                     GLenum format,
-                                     GLsizei imageSize,
-                                     const void* data) override;
-virtual void CopyTexImage2D(GLenum target,
-                            GLint level,
-                            GLenum internalformat,
-                            GLint x,
-                            GLint y,
-                            GLsizei width,
-                            GLsizei height,
-                            GLint border) override;
-virtual void CopyTexSubImage2D(GLenum target,
+void ActiveTexture(GLenum texture) override;
+void AttachShader(GLuint program, GLuint shader) override;
+void BindAttribLocation(GLuint program,
+                        GLuint index,
+                        const char* name) override;
+void BindBuffer(GLenum target, GLuint buffer) override;
+void BindFramebuffer(GLenum target, GLuint framebuffer) override;
+void BindRenderbuffer(GLenum target, GLuint renderbuffer) override;
+void BindTexture(GLenum target, GLuint texture) override;
+void BlendColor(GLclampf red,
+                GLclampf green,
+                GLclampf blue,
+                GLclampf alpha) override;
+void BlendEquation(GLenum mode) override;
+void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) override;
+void BlendFunc(GLenum sfactor, GLenum dfactor) override;
+void BlendFuncSeparate(GLenum srcRGB,
+                       GLenum dstRGB,
+                       GLenum srcAlpha,
+                       GLenum dstAlpha) override;
+void BufferData(GLenum target,
+                GLsizeiptr size,
+                const void* data,
+                GLenum usage) override;
+void BufferSubData(GLenum target,
+                   GLintptr offset,
+                   GLsizeiptr size,
+                   const void* data) override;
+GLenum CheckFramebufferStatus(GLenum target) override;
+void Clear(GLbitfield mask) override;
+void ClearColor(GLclampf red,
+                GLclampf green,
+                GLclampf blue,
+                GLclampf alpha) override;
+void ClearDepthf(GLclampf depth) override;
+void ClearStencil(GLint s) override;
+void ColorMask(GLboolean red,
+               GLboolean green,
+               GLboolean blue,
+               GLboolean alpha) override;
+void CompileShader(GLuint shader) override;
+void CompressedTexImage2D(GLenum target,
+                          GLint level,
+                          GLenum internalformat,
+                          GLsizei width,
+                          GLsizei height,
+                          GLint border,
+                          GLsizei imageSize,
+                          const void* data) override;
+void CompressedTexSubImage2D(GLenum target,
+                             GLint level,
+                             GLint xoffset,
+                             GLint yoffset,
+                             GLsizei width,
+                             GLsizei height,
+                             GLenum format,
+                             GLsizei imageSize,
+                             const void* data) override;
+void CopyTexImage2D(GLenum target,
+                    GLint level,
+                    GLenum internalformat,
+                    GLint x,
+                    GLint y,
+                    GLsizei width,
+                    GLsizei height,
+                    GLint border) override;
+void CopyTexSubImage2D(GLenum target,
+                       GLint level,
+                       GLint xoffset,
+                       GLint yoffset,
+                       GLint x,
+                       GLint y,
+                       GLsizei width,
+                       GLsizei height) override;
+GLuint CreateProgram() override;
+GLuint CreateShader(GLenum type) override;
+void CullFace(GLenum mode) override;
+void DeleteBuffers(GLsizei n, const GLuint* buffers) override;
+void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) override;
+void DeleteProgram(GLuint program) override;
+void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) override;
+void DeleteShader(GLuint shader) override;
+void DeleteTextures(GLsizei n, const GLuint* textures) override;
+void DepthFunc(GLenum func) override;
+void DepthMask(GLboolean flag) override;
+void DepthRangef(GLclampf zNear, GLclampf zFar) override;
+void DetachShader(GLuint program, GLuint shader) override;
+void Disable(GLenum cap) override;
+void DisableVertexAttribArray(GLuint index) override;
+void DrawArrays(GLenum mode, GLint first, GLsizei count) override;
+void DrawElements(GLenum mode,
+                  GLsizei count,
+                  GLenum type,
+                  const void* indices) override;
+void Enable(GLenum cap) override;
+void EnableVertexAttribArray(GLuint index) override;
+void Finish() override;
+void Flush() override;
+void FramebufferRenderbuffer(GLenum target,
+                             GLenum attachment,
+                             GLenum renderbuffertarget,
+                             GLuint renderbuffer) override;
+void FramebufferTexture2D(GLenum target,
+                          GLenum attachment,
+                          GLenum textarget,
+                          GLuint texture,
+                          GLint level) override;
+void FrontFace(GLenum mode) override;
+void GenBuffers(GLsizei n, GLuint* buffers) override;
+void GenerateMipmap(GLenum target) override;
+void GenFramebuffers(GLsizei n, GLuint* framebuffers) override;
+void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override;
+void GenTextures(GLsizei n, GLuint* textures) override;
+void GetActiveAttrib(GLuint program,
+                     GLuint index,
+                     GLsizei bufsize,
+                     GLsizei* length,
+                     GLint* size,
+                     GLenum* type,
+                     char* name) override;
+void GetActiveUniform(GLuint program,
+                      GLuint index,
+                      GLsizei bufsize,
+                      GLsizei* length,
+                      GLint* size,
+                      GLenum* type,
+                      char* name) override;
+void GetAttachedShaders(GLuint program,
+                        GLsizei maxcount,
+                        GLsizei* count,
+                        GLuint* shaders) override;
+GLint GetAttribLocation(GLuint program, const char* name) override;
+void GetBooleanv(GLenum pname, GLboolean* params) override;
+void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params) override;
+GLenum GetError() override;
+void GetFloatv(GLenum pname, GLfloat* params) override;
+void GetFramebufferAttachmentParameteriv(GLenum target,
+                                         GLenum attachment,
+                                         GLenum pname,
+                                         GLint* params) override;
+void GetIntegerv(GLenum pname, GLint* params) override;
+void GetProgramiv(GLuint program, GLenum pname, GLint* params) override;
+void GetProgramInfoLog(GLuint program,
+                       GLsizei bufsize,
+                       GLsizei* length,
+                       char* infolog) override;
+void GetRenderbufferParameteriv(GLenum target,
+                                GLenum pname,
+                                GLint* params) override;
+void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override;
+void GetShaderInfoLog(GLuint shader,
+                      GLsizei bufsize,
+                      GLsizei* length,
+                      char* infolog) override;
+void GetShaderPrecisionFormat(GLenum shadertype,
+                              GLenum precisiontype,
+                              GLint* range,
+                              GLint* precision) override;
+void GetShaderSource(GLuint shader,
+                     GLsizei bufsize,
+                     GLsizei* length,
+                     char* source) override;
+const GLubyte* GetString(GLenum name) override;
+void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) override;
+void GetTexParameteriv(GLenum target, GLenum pname, GLint* params) override;
+void GetUniformfv(GLuint program, GLint location, GLfloat* params) override;
+void GetUniformiv(GLuint program, GLint location, GLint* params) override;
+GLint GetUniformLocation(GLuint program, const char* name) override;
+void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) override;
+void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) override;
+void GetVertexAttribPointerv(GLuint index,
+                             GLenum pname,
+                             void** pointer) override;
+void Hint(GLenum target, GLenum mode) override;
+GLboolean IsBuffer(GLuint buffer) override;
+GLboolean IsEnabled(GLenum cap) override;
+GLboolean IsFramebuffer(GLuint framebuffer) override;
+GLboolean IsProgram(GLuint program) override;
+GLboolean IsRenderbuffer(GLuint renderbuffer) override;
+GLboolean IsShader(GLuint shader) override;
+GLboolean IsTexture(GLuint texture) override;
+void LineWidth(GLfloat width) override;
+void LinkProgram(GLuint program) override;
+void PixelStorei(GLenum pname, GLint param) override;
+void PolygonOffset(GLfloat factor, GLfloat units) override;
+void ReadPixels(GLint x,
+                GLint y,
+                GLsizei width,
+                GLsizei height,
+                GLenum format,
+                GLenum type,
+                void* pixels) override;
+void ReleaseShaderCompiler() override;
+void RenderbufferStorage(GLenum target,
+                         GLenum internalformat,
+                         GLsizei width,
+                         GLsizei height) override;
+void SampleCoverage(GLclampf value, GLboolean invert) override;
+void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) override;
+void ShaderBinary(GLsizei n,
+                  const GLuint* shaders,
+                  GLenum binaryformat,
+                  const void* binary,
+                  GLsizei length) override;
+void ShaderSource(GLuint shader,
+                  GLsizei count,
+                  const GLchar* const* str,
+                  const GLint* length) override;
+void ShallowFinishCHROMIUM() override;
+void ShallowFlushCHROMIUM() override;
+void StencilFunc(GLenum func, GLint ref, GLuint mask) override;
+void StencilFuncSeparate(GLenum face,
+                         GLenum func,
+                         GLint ref,
+                         GLuint mask) override;
+void StencilMask(GLuint mask) override;
+void StencilMaskSeparate(GLenum face, GLuint mask) override;
+void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) override;
+void StencilOpSeparate(GLenum face,
+                       GLenum fail,
+                       GLenum zfail,
+                       GLenum zpass) override;
+void TexImage2D(GLenum target,
+                GLint level,
+                GLint internalformat,
+                GLsizei width,
+                GLsizei height,
+                GLint border,
+                GLenum format,
+                GLenum type,
+                const void* pixels) override;
+void TexParameterf(GLenum target, GLenum pname, GLfloat param) override;
+void TexParameterfv(GLenum target,
+                    GLenum pname,
+                    const GLfloat* params) override;
+void TexParameteri(GLenum target, GLenum pname, GLint param) override;
+void TexParameteriv(GLenum target, GLenum pname, const GLint* params) override;
+void TexSubImage2D(GLenum target,
+                   GLint level,
+                   GLint xoffset,
+                   GLint yoffset,
+                   GLsizei width,
+                   GLsizei height,
+                   GLenum format,
+                   GLenum type,
+                   const void* pixels) override;
+void Uniform1f(GLint location, GLfloat x) override;
+void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) override;
+void Uniform1i(GLint location, GLint x) override;
+void Uniform1iv(GLint location, GLsizei count, const GLint* v) override;
+void Uniform2f(GLint location, GLfloat x, GLfloat y) override;
+void Uniform2fv(GLint location, GLsizei count, const GLfloat* v) override;
+void Uniform2i(GLint location, GLint x, GLint y) override;
+void Uniform2iv(GLint location, GLsizei count, const GLint* v) override;
+void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) override;
+void Uniform3fv(GLint location, GLsizei count, const GLfloat* v) override;
+void Uniform3i(GLint location, GLint x, GLint y, GLint z) override;
+void Uniform3iv(GLint location, GLsizei count, const GLint* v) override;
+void Uniform4f(GLint location,
+               GLfloat x,
+               GLfloat y,
+               GLfloat z,
+               GLfloat w) override;
+void Uniform4fv(GLint location, GLsizei count, const GLfloat* v) override;
+void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) override;
+void Uniform4iv(GLint location, GLsizei count, const GLint* v) override;
+void UniformMatrix2fv(GLint location,
+                      GLsizei count,
+                      GLboolean transpose,
+                      const GLfloat* value) override;
+void UniformMatrix3fv(GLint location,
+                      GLsizei count,
+                      GLboolean transpose,
+                      const GLfloat* value) override;
+void UniformMatrix4fv(GLint location,
+                      GLsizei count,
+                      GLboolean transpose,
+                      const GLfloat* value) override;
+void UseProgram(GLuint program) override;
+void ValidateProgram(GLuint program) override;
+void VertexAttrib1f(GLuint indx, GLfloat x) override;
+void VertexAttrib1fv(GLuint indx, const GLfloat* values) override;
+void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) override;
+void VertexAttrib2fv(GLuint indx, const GLfloat* values) override;
+void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) override;
+void VertexAttrib3fv(GLuint indx, const GLfloat* values) override;
+void VertexAttrib4f(GLuint indx,
+                    GLfloat x,
+                    GLfloat y,
+                    GLfloat z,
+                    GLfloat w) override;
+void VertexAttrib4fv(GLuint indx, const GLfloat* values) override;
+void VertexAttribPointer(GLuint indx,
+                         GLint size,
+                         GLenum type,
+                         GLboolean normalized,
+                         GLsizei stride,
+                         const void* ptr) override;
+void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) override;
+void BlitFramebufferCHROMIUM(GLint srcX0,
+                             GLint srcY0,
+                             GLint srcX1,
+                             GLint srcY1,
+                             GLint dstX0,
+                             GLint dstY0,
+                             GLint dstX1,
+                             GLint dstY1,
+                             GLbitfield mask,
+                             GLenum filter) override;
+void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
+                                            GLsizei samples,
+                                            GLenum internalformat,
+                                            GLsizei width,
+                                            GLsizei height) override;
+void RenderbufferStorageMultisampleEXT(GLenum target,
+                                       GLsizei samples,
+                                       GLenum internalformat,
+                                       GLsizei width,
+                                       GLsizei height) override;
+void FramebufferTexture2DMultisampleEXT(GLenum target,
+                                        GLenum attachment,
+                                        GLenum textarget,
+                                        GLuint texture,
+                                        GLint level,
+                                        GLsizei samples) override;
+void TexStorage2DEXT(GLenum target,
+                     GLsizei levels,
+                     GLenum internalFormat,
+                     GLsizei width,
+                     GLsizei height) override;
+void GenQueriesEXT(GLsizei n, GLuint* queries) override;
+void DeleteQueriesEXT(GLsizei n, const GLuint* queries) override;
+GLboolean IsQueryEXT(GLuint id) override;
+void BeginQueryEXT(GLenum target, GLuint id) override;
+void EndQueryEXT(GLenum target) override;
+void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override;
+void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override;
+void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override;
+void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;
+void PopGroupMarkerEXT() override;
+void GenVertexArraysOES(GLsizei n, GLuint* arrays) override;
+void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) override;
+GLboolean IsVertexArrayOES(GLuint array) override;
+void BindVertexArrayOES(GLuint array) override;
+void SwapBuffers() override;
+GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
+                                   GLsizei count,
+                                   GLenum type,
+                                   GLuint offset) override;
+GLboolean EnableFeatureCHROMIUM(const char* feature) override;
+void* MapBufferCHROMIUM(GLuint target, GLenum access) override;
+GLboolean UnmapBufferCHROMIUM(GLuint target) override;
+void* MapBufferSubDataCHROMIUM(GLuint target,
+                               GLintptr offset,
+                               GLsizeiptr size,
+                               GLenum access) override;
+void UnmapBufferSubDataCHROMIUM(const void* mem) override;
+void* MapTexSubImage2DCHROMIUM(GLenum target,
                                GLint level,
                                GLint xoffset,
                                GLint yoffset,
-                               GLint x,
-                               GLint y,
                                GLsizei width,
-                               GLsizei height) override;
-virtual GLuint CreateProgram() override;
-virtual GLuint CreateShader(GLenum type) override;
-virtual void CullFace(GLenum mode) override;
-virtual void DeleteBuffers(GLsizei n, const GLuint* buffers) override;
-virtual void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) override;
-virtual void DeleteProgram(GLuint program) override;
-virtual void DeleteRenderbuffers(GLsizei n,
-                                 const GLuint* renderbuffers) override;
-virtual void DeleteShader(GLuint shader) override;
-virtual void DeleteTextures(GLsizei n, const GLuint* textures) override;
-virtual void DepthFunc(GLenum func) override;
-virtual void DepthMask(GLboolean flag) override;
-virtual void DepthRangef(GLclampf zNear, GLclampf zFar) override;
-virtual void DetachShader(GLuint program, GLuint shader) override;
-virtual void Disable(GLenum cap) override;
-virtual void DisableVertexAttribArray(GLuint index) override;
-virtual void DrawArrays(GLenum mode, GLint first, GLsizei count) override;
-virtual void DrawElements(GLenum mode,
-                          GLsizei count,
-                          GLenum type,
-                          const void* indices) override;
-virtual void Enable(GLenum cap) override;
-virtual void EnableVertexAttribArray(GLuint index) override;
-virtual void Finish() override;
-virtual void Flush() override;
-virtual void FramebufferRenderbuffer(GLenum target,
-                                     GLenum attachment,
-                                     GLenum renderbuffertarget,
-                                     GLuint renderbuffer) override;
-virtual void FramebufferTexture2D(GLenum target,
-                                  GLenum attachment,
-                                  GLenum textarget,
-                                  GLuint texture,
-                                  GLint level) override;
-virtual void FrontFace(GLenum mode) override;
-virtual void GenBuffers(GLsizei n, GLuint* buffers) override;
-virtual void GenerateMipmap(GLenum target) override;
-virtual void GenFramebuffers(GLsizei n, GLuint* framebuffers) override;
-virtual void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override;
-virtual void GenTextures(GLsizei n, GLuint* textures) override;
-virtual void GetActiveAttrib(GLuint program,
-                             GLuint index,
-                             GLsizei bufsize,
-                             GLsizei* length,
-                             GLint* size,
-                             GLenum* type,
-                             char* name) override;
-virtual void GetActiveUniform(GLuint program,
-                              GLuint index,
-                              GLsizei bufsize,
-                              GLsizei* length,
-                              GLint* size,
-                              GLenum* type,
-                              char* name) override;
-virtual void GetAttachedShaders(GLuint program,
-                                GLsizei maxcount,
-                                GLsizei* count,
-                                GLuint* shaders) override;
-virtual GLint GetAttribLocation(GLuint program, const char* name) override;
-virtual void GetBooleanv(GLenum pname, GLboolean* params) override;
-virtual void GetBufferParameteriv(GLenum target,
-                                  GLenum pname,
-                                  GLint* params) override;
-virtual GLenum GetError() override;
-virtual void GetFloatv(GLenum pname, GLfloat* params) override;
-virtual void GetFramebufferAttachmentParameteriv(GLenum target,
-                                                 GLenum attachment,
-                                                 GLenum pname,
-                                                 GLint* params) override;
-virtual void GetIntegerv(GLenum pname, GLint* params) override;
-virtual void GetProgramiv(GLuint program, GLenum pname, GLint* params) override;
-virtual void GetProgramInfoLog(GLuint program,
-                               GLsizei bufsize,
-                               GLsizei* length,
-                               char* infolog) override;
-virtual void GetRenderbufferParameteriv(GLenum target,
-                                        GLenum pname,
-                                        GLint* params) override;
-virtual void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override;
-virtual void GetShaderInfoLog(GLuint shader,
-                              GLsizei bufsize,
-                              GLsizei* length,
-                              char* infolog) override;
-virtual void GetShaderPrecisionFormat(GLenum shadertype,
-                                      GLenum precisiontype,
-                                      GLint* range,
-                                      GLint* precision) override;
-virtual void GetShaderSource(GLuint shader,
-                             GLsizei bufsize,
-                             GLsizei* length,
-                             char* source) override;
-virtual const GLubyte* GetString(GLenum name) override;
-virtual void GetTexParameterfv(GLenum target,
-                               GLenum pname,
-                               GLfloat* params) override;
-virtual void GetTexParameteriv(GLenum target,
-                               GLenum pname,
-                               GLint* params) override;
-virtual void GetUniformfv(GLuint program,
-                          GLint location,
-                          GLfloat* params) override;
-virtual void GetUniformiv(GLuint program,
-                          GLint location,
-                          GLint* params) override;
-virtual GLint GetUniformLocation(GLuint program, const char* name) override;
-virtual void GetVertexAttribfv(GLuint index,
-                               GLenum pname,
-                               GLfloat* params) override;
-virtual void GetVertexAttribiv(GLuint index,
-                               GLenum pname,
-                               GLint* params) override;
-virtual void GetVertexAttribPointerv(GLuint index,
-                                     GLenum pname,
-                                     void** pointer) override;
-virtual void Hint(GLenum target, GLenum mode) override;
-virtual GLboolean IsBuffer(GLuint buffer) override;
-virtual GLboolean IsEnabled(GLenum cap) override;
-virtual GLboolean IsFramebuffer(GLuint framebuffer) override;
-virtual GLboolean IsProgram(GLuint program) override;
-virtual GLboolean IsRenderbuffer(GLuint renderbuffer) override;
-virtual GLboolean IsShader(GLuint shader) override;
-virtual GLboolean IsTexture(GLuint texture) override;
-virtual void LineWidth(GLfloat width) override;
-virtual void LinkProgram(GLuint program) override;
-virtual void PixelStorei(GLenum pname, GLint param) override;
-virtual void PolygonOffset(GLfloat factor, GLfloat units) override;
-virtual void ReadPixels(GLint x,
-                        GLint y,
-                        GLsizei width,
-                        GLsizei height,
-                        GLenum format,
-                        GLenum type,
-                        void* pixels) override;
-virtual void ReleaseShaderCompiler() override;
-virtual void RenderbufferStorage(GLenum target,
-                                 GLenum internalformat,
-                                 GLsizei width,
-                                 GLsizei height) override;
-virtual void SampleCoverage(GLclampf value, GLboolean invert) override;
-virtual void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) override;
-virtual void ShaderBinary(GLsizei n,
-                          const GLuint* shaders,
-                          GLenum binaryformat,
-                          const void* binary,
-                          GLsizei length) override;
-virtual void ShaderSource(GLuint shader,
-                          GLsizei count,
-                          const GLchar* const* str,
-                          const GLint* length) override;
-virtual void ShallowFinishCHROMIUM() override;
-virtual void ShallowFlushCHROMIUM() override;
-virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) override;
-virtual void StencilFuncSeparate(GLenum face,
-                                 GLenum func,
-                                 GLint ref,
-                                 GLuint mask) override;
-virtual void StencilMask(GLuint mask) override;
-virtual void StencilMaskSeparate(GLenum face, GLuint mask) override;
-virtual void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) override;
-virtual void StencilOpSeparate(GLenum face,
-                               GLenum fail,
-                               GLenum zfail,
-                               GLenum zpass) override;
-virtual void TexImage2D(GLenum target,
-                        GLint level,
-                        GLint internalformat,
-                        GLsizei width,
-                        GLsizei height,
-                        GLint border,
-                        GLenum format,
-                        GLenum type,
-                        const void* pixels) override;
-virtual void TexParameterf(GLenum target, GLenum pname, GLfloat param) override;
-virtual void TexParameterfv(GLenum target,
-                            GLenum pname,
-                            const GLfloat* params) override;
-virtual void TexParameteri(GLenum target, GLenum pname, GLint param) override;
-virtual void TexParameteriv(GLenum target,
-                            GLenum pname,
-                            const GLint* params) override;
-virtual void TexSubImage2D(GLenum target,
-                           GLint level,
-                           GLint xoffset,
-                           GLint yoffset,
+                               GLsizei height,
+                               GLenum format,
+                               GLenum type,
+                               GLenum access) override;
+void UnmapTexSubImage2DCHROMIUM(const void* mem) override;
+void ResizeCHROMIUM(GLuint width, GLuint height, GLfloat scale_factor) override;
+const GLchar* GetRequestableExtensionsCHROMIUM() override;
+void RequestExtensionCHROMIUM(const char* extension) override;
+void RateLimitOffscreenContextCHROMIUM() override;
+void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
+                                 GLuint count,
+                                 GLint* results,
+                                 GLsizeiptr size) override;
+void GetProgramInfoCHROMIUM(GLuint program,
+                            GLsizei bufsize,
+                            GLsizei* size,
+                            void* info) override;
+GLuint CreateStreamTextureCHROMIUM(GLuint texture) override;
+GLuint CreateImageCHROMIUM(ClientBuffer buffer,
                            GLsizei width,
                            GLsizei height,
-                           GLenum format,
-                           GLenum type,
-                           const void* pixels) override;
-virtual void Uniform1f(GLint location, GLfloat x) override;
-virtual void Uniform1fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-virtual void Uniform1i(GLint location, GLint x) override;
-virtual void Uniform1iv(GLint location, GLsizei count, const GLint* v) override;
-virtual void Uniform2f(GLint location, GLfloat x, GLfloat y) override;
-virtual void Uniform2fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-virtual void Uniform2i(GLint location, GLint x, GLint y) override;
-virtual void Uniform2iv(GLint location, GLsizei count, const GLint* v) override;
-virtual void Uniform3f(GLint location,
-                       GLfloat x,
-                       GLfloat y,
-                       GLfloat z) override;
-virtual void Uniform3fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-virtual void Uniform3i(GLint location, GLint x, GLint y, GLint z) override;
-virtual void Uniform3iv(GLint location, GLsizei count, const GLint* v) override;
-virtual void Uniform4f(GLint location,
-                       GLfloat x,
-                       GLfloat y,
-                       GLfloat z,
-                       GLfloat w) override;
-virtual void Uniform4fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-virtual void Uniform4i(GLint location,
-                       GLint x,
-                       GLint y,
-                       GLint z,
-                       GLint w) override;
-virtual void Uniform4iv(GLint location, GLsizei count, const GLint* v) override;
-virtual void UniformMatrix2fv(GLint location,
-                              GLsizei count,
-                              GLboolean transpose,
-                              const GLfloat* value) override;
-virtual void UniformMatrix3fv(GLint location,
-                              GLsizei count,
-                              GLboolean transpose,
-                              const GLfloat* value) override;
-virtual void UniformMatrix4fv(GLint location,
-                              GLsizei count,
-                              GLboolean transpose,
-                              const GLfloat* value) override;
-virtual void UseProgram(GLuint program) override;
-virtual void ValidateProgram(GLuint program) override;
-virtual void VertexAttrib1f(GLuint indx, GLfloat x) override;
-virtual void VertexAttrib1fv(GLuint indx, const GLfloat* values) override;
-virtual void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) override;
-virtual void VertexAttrib2fv(GLuint indx, const GLfloat* values) override;
-virtual void VertexAttrib3f(GLuint indx,
-                            GLfloat x,
-                            GLfloat y,
-                            GLfloat z) override;
-virtual void VertexAttrib3fv(GLuint indx, const GLfloat* values) override;
-virtual void VertexAttrib4f(GLuint indx,
-                            GLfloat x,
-                            GLfloat y,
-                            GLfloat z,
-                            GLfloat w) override;
-virtual void VertexAttrib4fv(GLuint indx, const GLfloat* values) override;
-virtual void VertexAttribPointer(GLuint indx,
-                                 GLint size,
-                                 GLenum type,
-                                 GLboolean normalized,
-                                 GLsizei stride,
-                                 const void* ptr) override;
-virtual void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) override;
-virtual void BlitFramebufferCHROMIUM(GLint srcX0,
-                                     GLint srcY0,
-                                     GLint srcX1,
-                                     GLint srcY1,
-                                     GLint dstX0,
-                                     GLint dstY0,
-                                     GLint dstX1,
-                                     GLint dstY1,
-                                     GLbitfield mask,
-                                     GLenum filter) override;
-virtual void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
-                                                    GLsizei samples,
-                                                    GLenum internalformat,
-                                                    GLsizei width,
-                                                    GLsizei height) override;
-virtual void RenderbufferStorageMultisampleEXT(GLenum target,
-                                               GLsizei samples,
-                                               GLenum internalformat,
-                                               GLsizei width,
-                                               GLsizei height) override;
-virtual void FramebufferTexture2DMultisampleEXT(GLenum target,
-                                                GLenum attachment,
-                                                GLenum textarget,
-                                                GLuint texture,
-                                                GLint level,
-                                                GLsizei samples) override;
-virtual void TexStorage2DEXT(GLenum target,
-                             GLsizei levels,
-                             GLenum internalFormat,
-                             GLsizei width,
-                             GLsizei height) override;
-virtual void GenQueriesEXT(GLsizei n, GLuint* queries) override;
-virtual void DeleteQueriesEXT(GLsizei n, const GLuint* queries) override;
-virtual GLboolean IsQueryEXT(GLuint id) override;
-virtual void BeginQueryEXT(GLenum target, GLuint id) override;
-virtual void EndQueryEXT(GLenum target) override;
-virtual void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override;
-virtual void GetQueryObjectuivEXT(GLuint id,
-                                  GLenum pname,
-                                  GLuint* params) override;
-virtual void InsertEventMarkerEXT(GLsizei length,
-                                  const GLchar* marker) override;
-virtual void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;
-virtual void PopGroupMarkerEXT() override;
-virtual void GenVertexArraysOES(GLsizei n, GLuint* arrays) override;
-virtual void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) override;
-virtual GLboolean IsVertexArrayOES(GLuint array) override;
-virtual void BindVertexArrayOES(GLuint array) override;
-virtual void SwapBuffers() override;
-virtual GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
-                                           GLsizei count,
-                                           GLenum type,
-                                           GLuint offset) override;
-virtual GLboolean EnableFeatureCHROMIUM(const char* feature) override;
-virtual void* MapBufferCHROMIUM(GLuint target, GLenum access) override;
-virtual GLboolean UnmapBufferCHROMIUM(GLuint target) override;
-virtual void* MapBufferSubDataCHROMIUM(GLuint target,
-                                       GLintptr offset,
-                                       GLsizeiptr size,
-                                       GLenum access) override;
-virtual void UnmapBufferSubDataCHROMIUM(const void* mem) override;
-virtual void* MapTexSubImage2DCHROMIUM(GLenum target,
-                                       GLint level,
-                                       GLint xoffset,
-                                       GLint yoffset,
-                                       GLsizei width,
-                                       GLsizei height,
-                                       GLenum format,
-                                       GLenum type,
-                                       GLenum access) override;
-virtual void UnmapTexSubImage2DCHROMIUM(const void* mem) override;
-virtual void ResizeCHROMIUM(GLuint width,
-                            GLuint height,
-                            GLfloat scale_factor) override;
-virtual const GLchar* GetRequestableExtensionsCHROMIUM() override;
-virtual void RequestExtensionCHROMIUM(const char* extension) override;
-virtual void RateLimitOffscreenContextCHROMIUM() override;
-virtual void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
-                                         GLuint count,
-                                         GLint* results,
-                                         GLsizeiptr size) override;
-virtual void GetProgramInfoCHROMIUM(GLuint program,
+                           GLenum internalformat) override;
+void DestroyImageCHROMIUM(GLuint image_id) override;
+GLuint CreateGpuMemoryBufferImageCHROMIUM(GLsizei width,
+                                          GLsizei height,
+                                          GLenum internalformat,
+                                          GLenum usage) override;
+void GetTranslatedShaderSourceANGLE(GLuint shader,
                                     GLsizei bufsize,
-                                    GLsizei* size,
-                                    void* info) override;
-virtual GLuint CreateStreamTextureCHROMIUM(GLuint texture) override;
-virtual GLuint CreateImageCHROMIUM(ClientBuffer buffer,
-                                   GLsizei width,
-                                   GLsizei height,
-                                   GLenum internalformat) override;
-virtual void DestroyImageCHROMIUM(GLuint image_id) override;
-virtual GLuint CreateGpuMemoryBufferImageCHROMIUM(GLsizei width,
-                                                  GLsizei height,
-                                                  GLenum internalformat,
-                                                  GLenum usage) override;
-virtual void GetTranslatedShaderSourceANGLE(GLuint shader,
-                                            GLsizei bufsize,
-                                            GLsizei* length,
-                                            char* source) override;
-virtual void PostSubBufferCHROMIUM(GLint x,
-                                   GLint y,
-                                   GLint width,
-                                   GLint height) override;
-virtual void TexImageIOSurface2DCHROMIUM(GLenum target,
-                                         GLsizei width,
-                                         GLsizei height,
-                                         GLuint ioSurfaceId,
-                                         GLuint plane) override;
-virtual void CopyTextureCHROMIUM(GLenum target,
-                                 GLenum source_id,
-                                 GLenum dest_id,
-                                 GLint level,
-                                 GLint internalformat,
-                                 GLenum dest_type) override;
-virtual void DrawArraysInstancedANGLE(GLenum mode,
-                                      GLint first,
-                                      GLsizei count,
-                                      GLsizei primcount) override;
-virtual void DrawElementsInstancedANGLE(GLenum mode,
-                                        GLsizei count,
-                                        GLenum type,
-                                        const void* indices,
-                                        GLsizei primcount) override;
-virtual void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) override;
-virtual void GenMailboxCHROMIUM(GLbyte* mailbox) override;
-virtual void ProduceTextureCHROMIUM(GLenum target,
-                                    const GLbyte* mailbox) override;
-virtual void ProduceTextureDirectCHROMIUM(GLuint texture,
-                                          GLenum target,
-                                          const GLbyte* mailbox) override;
-virtual void ConsumeTextureCHROMIUM(GLenum target,
-                                    const GLbyte* mailbox) override;
-virtual GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
-                                               const GLbyte* mailbox) override;
-virtual void BindUniformLocationCHROMIUM(GLuint program,
-                                         GLint location,
-                                         const char* name) override;
-virtual void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
-virtual void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
-virtual void TraceBeginCHROMIUM(const char* name) override;
-virtual void TraceEndCHROMIUM() override;
-virtual void AsyncTexSubImage2DCHROMIUM(GLenum target,
-                                        GLint level,
-                                        GLint xoffset,
-                                        GLint yoffset,
-                                        GLsizei width,
-                                        GLsizei height,
-                                        GLenum format,
-                                        GLenum type,
-                                        const void* data) override;
-virtual void AsyncTexImage2DCHROMIUM(GLenum target,
-                                     GLint level,
-                                     GLenum internalformat,
-                                     GLsizei width,
-                                     GLsizei height,
-                                     GLint border,
-                                     GLenum format,
-                                     GLenum type,
-                                     const void* pixels) override;
-virtual void WaitAsyncTexImage2DCHROMIUM(GLenum target) override;
-virtual void WaitAllAsyncTexImage2DCHROMIUM() override;
-virtual void DiscardFramebufferEXT(GLenum target,
-                                   GLsizei count,
-                                   const GLenum* attachments) override;
-virtual void LoseContextCHROMIUM(GLenum current, GLenum other) override;
-virtual GLuint InsertSyncPointCHROMIUM() override;
-virtual void WaitSyncPointCHROMIUM(GLuint sync_point) override;
-virtual void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override;
-virtual void DiscardBackbufferCHROMIUM() override;
-virtual void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
-                                          GLenum plane_transform,
-                                          GLuint overlay_texture_id,
-                                          GLint bounds_x,
-                                          GLint bounds_y,
-                                          GLint bounds_width,
-                                          GLint bounds_height,
-                                          GLfloat uv_x,
-                                          GLfloat uv_y,
-                                          GLfloat uv_width,
-                                          GLfloat uv_height) override;
-virtual void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;
-virtual void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) override;
+                                    GLsizei* length,
+                                    char* source) override;
+void PostSubBufferCHROMIUM(GLint x,
+                           GLint y,
+                           GLint width,
+                           GLint height) override;
+void TexImageIOSurface2DCHROMIUM(GLenum target,
+                                 GLsizei width,
+                                 GLsizei height,
+                                 GLuint ioSurfaceId,
+                                 GLuint plane) override;
+void CopyTextureCHROMIUM(GLenum target,
+                         GLenum source_id,
+                         GLenum dest_id,
+                         GLint level,
+                         GLint internalformat,
+                         GLenum dest_type) override;
+void DrawArraysInstancedANGLE(GLenum mode,
+                              GLint first,
+                              GLsizei count,
+                              GLsizei primcount) override;
+void DrawElementsInstancedANGLE(GLenum mode,
+                                GLsizei count,
+                                GLenum type,
+                                const void* indices,
+                                GLsizei primcount) override;
+void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) override;
+void GenMailboxCHROMIUM(GLbyte* mailbox) override;
+void ProduceTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override;
+void ProduceTextureDirectCHROMIUM(GLuint texture,
+                                  GLenum target,
+                                  const GLbyte* mailbox) override;
+void ConsumeTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override;
+GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
+                                       const GLbyte* mailbox) override;
+void BindUniformLocationCHROMIUM(GLuint program,
+                                 GLint location,
+                                 const char* name) override;
+void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
+void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
+void TraceBeginCHROMIUM(const char* name) override;
+void TraceEndCHROMIUM() override;
+void AsyncTexSubImage2DCHROMIUM(GLenum target,
+                                GLint level,
+                                GLint xoffset,
+                                GLint yoffset,
+                                GLsizei width,
+                                GLsizei height,
+                                GLenum format,
+                                GLenum type,
+                                const void* data) override;
+void AsyncTexImage2DCHROMIUM(GLenum target,
+                             GLint level,
+                             GLenum internalformat,
+                             GLsizei width,
+                             GLsizei height,
+                             GLint border,
+                             GLenum format,
+                             GLenum type,
+                             const void* pixels) override;
+void WaitAsyncTexImage2DCHROMIUM(GLenum target) override;
+void WaitAllAsyncTexImage2DCHROMIUM() override;
+void DiscardFramebufferEXT(GLenum target,
+                           GLsizei count,
+                           const GLenum* attachments) override;
+void LoseContextCHROMIUM(GLenum current, GLenum other) override;
+GLuint InsertSyncPointCHROMIUM() override;
+void WaitSyncPointCHROMIUM(GLuint sync_point) override;
+void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override;
+void DiscardBackbufferCHROMIUM() override;
+void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
+                                  GLenum plane_transform,
+                                  GLuint overlay_texture_id,
+                                  GLint bounds_x,
+                                  GLint bounds_y,
+                                  GLint bounds_width,
+                                  GLint bounds_height,
+                                  GLfloat uv_x,
+                                  GLfloat uv_y,
+                                  GLfloat uv_width,
+                                  GLfloat uv_height) override;
+void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;
+void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) override;
 #endif  // GPU_COMMAND_BUFFER_CLIENT_GLES2_INTERFACE_STUB_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_trace_implementation.h b/gpu/command_buffer/client/gles2_trace_implementation.h
index c215231..780a608 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation.h
@@ -17,7 +17,7 @@
     : NON_EXPORTED_BASE(public GLES2Interface) {
  public:
   explicit GLES2TraceImplementation(GLES2Interface* gl);
-  virtual ~GLES2TraceImplementation();
+  ~GLES2TraceImplementation() override;
 
   // Include the auto-generated part of this class. We split this because
   // it means we can easily edit the non-auto generated parts right here in
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
index aa0c96f..22c12bc 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -12,520 +12,478 @@
 #ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_TRACE_IMPLEMENTATION_AUTOGEN_H_
 #define GPU_COMMAND_BUFFER_CLIENT_GLES2_TRACE_IMPLEMENTATION_AUTOGEN_H_
 
-virtual void ActiveTexture(GLenum texture) override;
-virtual void AttachShader(GLuint program, GLuint shader) override;
-virtual void BindAttribLocation(GLuint program,
-                                GLuint index,
-                                const char* name) override;
-virtual void BindBuffer(GLenum target, GLuint buffer) override;
-virtual void BindFramebuffer(GLenum target, GLuint framebuffer) override;
-virtual void BindRenderbuffer(GLenum target, GLuint renderbuffer) override;
-virtual void BindTexture(GLenum target, GLuint texture) override;
-virtual void BlendColor(GLclampf red,
-                        GLclampf green,
-                        GLclampf blue,
-                        GLclampf alpha) override;
-virtual void BlendEquation(GLenum mode) override;
-virtual void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) override;
-virtual void BlendFunc(GLenum sfactor, GLenum dfactor) override;
-virtual void BlendFuncSeparate(GLenum srcRGB,
-                               GLenum dstRGB,
-                               GLenum srcAlpha,
-                               GLenum dstAlpha) override;
-virtual void BufferData(GLenum target,
-                        GLsizeiptr size,
-                        const void* data,
-                        GLenum usage) override;
-virtual void BufferSubData(GLenum target,
-                           GLintptr offset,
-                           GLsizeiptr size,
-                           const void* data) override;
-virtual GLenum CheckFramebufferStatus(GLenum target) override;
-virtual void Clear(GLbitfield mask) override;
-virtual void ClearColor(GLclampf red,
-                        GLclampf green,
-                        GLclampf blue,
-                        GLclampf alpha) override;
-virtual void ClearDepthf(GLclampf depth) override;
-virtual void ClearStencil(GLint s) override;
-virtual void ColorMask(GLboolean red,
-                       GLboolean green,
-                       GLboolean blue,
-                       GLboolean alpha) override;
-virtual void CompileShader(GLuint shader) override;
-virtual void CompressedTexImage2D(GLenum target,
-                                  GLint level,
-                                  GLenum internalformat,
-                                  GLsizei width,
-                                  GLsizei height,
-                                  GLint border,
-                                  GLsizei imageSize,
-                                  const void* data) override;
-virtual void CompressedTexSubImage2D(GLenum target,
-                                     GLint level,
-                                     GLint xoffset,
-                                     GLint yoffset,
-                                     GLsizei width,
-                                     GLsizei height,
-                                     GLenum format,
-                                     GLsizei imageSize,
-                                     const void* data) override;
-virtual void CopyTexImage2D(GLenum target,
-                            GLint level,
-                            GLenum internalformat,
-                            GLint x,
-                            GLint y,
-                            GLsizei width,
-                            GLsizei height,
-                            GLint border) override;
-virtual void CopyTexSubImage2D(GLenum target,
+void ActiveTexture(GLenum texture) override;
+void AttachShader(GLuint program, GLuint shader) override;
+void BindAttribLocation(GLuint program,
+                        GLuint index,
+                        const char* name) override;
+void BindBuffer(GLenum target, GLuint buffer) override;
+void BindFramebuffer(GLenum target, GLuint framebuffer) override;
+void BindRenderbuffer(GLenum target, GLuint renderbuffer) override;
+void BindTexture(GLenum target, GLuint texture) override;
+void BlendColor(GLclampf red,
+                GLclampf green,
+                GLclampf blue,
+                GLclampf alpha) override;
+void BlendEquation(GLenum mode) override;
+void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) override;
+void BlendFunc(GLenum sfactor, GLenum dfactor) override;
+void BlendFuncSeparate(GLenum srcRGB,
+                       GLenum dstRGB,
+                       GLenum srcAlpha,
+                       GLenum dstAlpha) override;
+void BufferData(GLenum target,
+                GLsizeiptr size,
+                const void* data,
+                GLenum usage) override;
+void BufferSubData(GLenum target,
+                   GLintptr offset,
+                   GLsizeiptr size,
+                   const void* data) override;
+GLenum CheckFramebufferStatus(GLenum target) override;
+void Clear(GLbitfield mask) override;
+void ClearColor(GLclampf red,
+                GLclampf green,
+                GLclampf blue,
+                GLclampf alpha) override;
+void ClearDepthf(GLclampf depth) override;
+void ClearStencil(GLint s) override;
+void ColorMask(GLboolean red,
+               GLboolean green,
+               GLboolean blue,
+               GLboolean alpha) override;
+void CompileShader(GLuint shader) override;
+void CompressedTexImage2D(GLenum target,
+                          GLint level,
+                          GLenum internalformat,
+                          GLsizei width,
+                          GLsizei height,
+                          GLint border,
+                          GLsizei imageSize,
+                          const void* data) override;
+void CompressedTexSubImage2D(GLenum target,
+                             GLint level,
+                             GLint xoffset,
+                             GLint yoffset,
+                             GLsizei width,
+                             GLsizei height,
+                             GLenum format,
+                             GLsizei imageSize,
+                             const void* data) override;
+void CopyTexImage2D(GLenum target,
+                    GLint level,
+                    GLenum internalformat,
+                    GLint x,
+                    GLint y,
+                    GLsizei width,
+                    GLsizei height,
+                    GLint border) override;
+void CopyTexSubImage2D(GLenum target,
+                       GLint level,
+                       GLint xoffset,
+                       GLint yoffset,
+                       GLint x,
+                       GLint y,
+                       GLsizei width,
+                       GLsizei height) override;
+GLuint CreateProgram() override;
+GLuint CreateShader(GLenum type) override;
+void CullFace(GLenum mode) override;
+void DeleteBuffers(GLsizei n, const GLuint* buffers) override;
+void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) override;
+void DeleteProgram(GLuint program) override;
+void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) override;
+void DeleteShader(GLuint shader) override;
+void DeleteTextures(GLsizei n, const GLuint* textures) override;
+void DepthFunc(GLenum func) override;
+void DepthMask(GLboolean flag) override;
+void DepthRangef(GLclampf zNear, GLclampf zFar) override;
+void DetachShader(GLuint program, GLuint shader) override;
+void Disable(GLenum cap) override;
+void DisableVertexAttribArray(GLuint index) override;
+void DrawArrays(GLenum mode, GLint first, GLsizei count) override;
+void DrawElements(GLenum mode,
+                  GLsizei count,
+                  GLenum type,
+                  const void* indices) override;
+void Enable(GLenum cap) override;
+void EnableVertexAttribArray(GLuint index) override;
+void Finish() override;
+void Flush() override;
+void FramebufferRenderbuffer(GLenum target,
+                             GLenum attachment,
+                             GLenum renderbuffertarget,
+                             GLuint renderbuffer) override;
+void FramebufferTexture2D(GLenum target,
+                          GLenum attachment,
+                          GLenum textarget,
+                          GLuint texture,
+                          GLint level) override;
+void FrontFace(GLenum mode) override;
+void GenBuffers(GLsizei n, GLuint* buffers) override;
+void GenerateMipmap(GLenum target) override;
+void GenFramebuffers(GLsizei n, GLuint* framebuffers) override;
+void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override;
+void GenTextures(GLsizei n, GLuint* textures) override;
+void GetActiveAttrib(GLuint program,
+                     GLuint index,
+                     GLsizei bufsize,
+                     GLsizei* length,
+                     GLint* size,
+                     GLenum* type,
+                     char* name) override;
+void GetActiveUniform(GLuint program,
+                      GLuint index,
+                      GLsizei bufsize,
+                      GLsizei* length,
+                      GLint* size,
+                      GLenum* type,
+                      char* name) override;
+void GetAttachedShaders(GLuint program,
+                        GLsizei maxcount,
+                        GLsizei* count,
+                        GLuint* shaders) override;
+GLint GetAttribLocation(GLuint program, const char* name) override;
+void GetBooleanv(GLenum pname, GLboolean* params) override;
+void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params) override;
+GLenum GetError() override;
+void GetFloatv(GLenum pname, GLfloat* params) override;
+void GetFramebufferAttachmentParameteriv(GLenum target,
+                                         GLenum attachment,
+                                         GLenum pname,
+                                         GLint* params) override;
+void GetIntegerv(GLenum pname, GLint* params) override;
+void GetProgramiv(GLuint program, GLenum pname, GLint* params) override;
+void GetProgramInfoLog(GLuint program,
+                       GLsizei bufsize,
+                       GLsizei* length,
+                       char* infolog) override;
+void GetRenderbufferParameteriv(GLenum target,
+                                GLenum pname,
+                                GLint* params) override;
+void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override;
+void GetShaderInfoLog(GLuint shader,
+                      GLsizei bufsize,
+                      GLsizei* length,
+                      char* infolog) override;
+void GetShaderPrecisionFormat(GLenum shadertype,
+                              GLenum precisiontype,
+                              GLint* range,
+                              GLint* precision) override;
+void GetShaderSource(GLuint shader,
+                     GLsizei bufsize,
+                     GLsizei* length,
+                     char* source) override;
+const GLubyte* GetString(GLenum name) override;
+void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) override;
+void GetTexParameteriv(GLenum target, GLenum pname, GLint* params) override;
+void GetUniformfv(GLuint program, GLint location, GLfloat* params) override;
+void GetUniformiv(GLuint program, GLint location, GLint* params) override;
+GLint GetUniformLocation(GLuint program, const char* name) override;
+void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) override;
+void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) override;
+void GetVertexAttribPointerv(GLuint index,
+                             GLenum pname,
+                             void** pointer) override;
+void Hint(GLenum target, GLenum mode) override;
+GLboolean IsBuffer(GLuint buffer) override;
+GLboolean IsEnabled(GLenum cap) override;
+GLboolean IsFramebuffer(GLuint framebuffer) override;
+GLboolean IsProgram(GLuint program) override;
+GLboolean IsRenderbuffer(GLuint renderbuffer) override;
+GLboolean IsShader(GLuint shader) override;
+GLboolean IsTexture(GLuint texture) override;
+void LineWidth(GLfloat width) override;
+void LinkProgram(GLuint program) override;
+void PixelStorei(GLenum pname, GLint param) override;
+void PolygonOffset(GLfloat factor, GLfloat units) override;
+void ReadPixels(GLint x,
+                GLint y,
+                GLsizei width,
+                GLsizei height,
+                GLenum format,
+                GLenum type,
+                void* pixels) override;
+void ReleaseShaderCompiler() override;
+void RenderbufferStorage(GLenum target,
+                         GLenum internalformat,
+                         GLsizei width,
+                         GLsizei height) override;
+void SampleCoverage(GLclampf value, GLboolean invert) override;
+void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) override;
+void ShaderBinary(GLsizei n,
+                  const GLuint* shaders,
+                  GLenum binaryformat,
+                  const void* binary,
+                  GLsizei length) override;
+void ShaderSource(GLuint shader,
+                  GLsizei count,
+                  const GLchar* const* str,
+                  const GLint* length) override;
+void ShallowFinishCHROMIUM() override;
+void ShallowFlushCHROMIUM() override;
+void StencilFunc(GLenum func, GLint ref, GLuint mask) override;
+void StencilFuncSeparate(GLenum face,
+                         GLenum func,
+                         GLint ref,
+                         GLuint mask) override;
+void StencilMask(GLuint mask) override;
+void StencilMaskSeparate(GLenum face, GLuint mask) override;
+void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) override;
+void StencilOpSeparate(GLenum face,
+                       GLenum fail,
+                       GLenum zfail,
+                       GLenum zpass) override;
+void TexImage2D(GLenum target,
+                GLint level,
+                GLint internalformat,
+                GLsizei width,
+                GLsizei height,
+                GLint border,
+                GLenum format,
+                GLenum type,
+                const void* pixels) override;
+void TexParameterf(GLenum target, GLenum pname, GLfloat param) override;
+void TexParameterfv(GLenum target,
+                    GLenum pname,
+                    const GLfloat* params) override;
+void TexParameteri(GLenum target, GLenum pname, GLint param) override;
+void TexParameteriv(GLenum target, GLenum pname, const GLint* params) override;
+void TexSubImage2D(GLenum target,
+                   GLint level,
+                   GLint xoffset,
+                   GLint yoffset,
+                   GLsizei width,
+                   GLsizei height,
+                   GLenum format,
+                   GLenum type,
+                   const void* pixels) override;
+void Uniform1f(GLint location, GLfloat x) override;
+void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) override;
+void Uniform1i(GLint location, GLint x) override;
+void Uniform1iv(GLint location, GLsizei count, const GLint* v) override;
+void Uniform2f(GLint location, GLfloat x, GLfloat y) override;
+void Uniform2fv(GLint location, GLsizei count, const GLfloat* v) override;
+void Uniform2i(GLint location, GLint x, GLint y) override;
+void Uniform2iv(GLint location, GLsizei count, const GLint* v) override;
+void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) override;
+void Uniform3fv(GLint location, GLsizei count, const GLfloat* v) override;
+void Uniform3i(GLint location, GLint x, GLint y, GLint z) override;
+void Uniform3iv(GLint location, GLsizei count, const GLint* v) override;
+void Uniform4f(GLint location,
+               GLfloat x,
+               GLfloat y,
+               GLfloat z,
+               GLfloat w) override;
+void Uniform4fv(GLint location, GLsizei count, const GLfloat* v) override;
+void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) override;
+void Uniform4iv(GLint location, GLsizei count, const GLint* v) override;
+void UniformMatrix2fv(GLint location,
+                      GLsizei count,
+                      GLboolean transpose,
+                      const GLfloat* value) override;
+void UniformMatrix3fv(GLint location,
+                      GLsizei count,
+                      GLboolean transpose,
+                      const GLfloat* value) override;
+void UniformMatrix4fv(GLint location,
+                      GLsizei count,
+                      GLboolean transpose,
+                      const GLfloat* value) override;
+void UseProgram(GLuint program) override;
+void ValidateProgram(GLuint program) override;
+void VertexAttrib1f(GLuint indx, GLfloat x) override;
+void VertexAttrib1fv(GLuint indx, const GLfloat* values) override;
+void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) override;
+void VertexAttrib2fv(GLuint indx, const GLfloat* values) override;
+void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) override;
+void VertexAttrib3fv(GLuint indx, const GLfloat* values) override;
+void VertexAttrib4f(GLuint indx,
+                    GLfloat x,
+                    GLfloat y,
+                    GLfloat z,
+                    GLfloat w) override;
+void VertexAttrib4fv(GLuint indx, const GLfloat* values) override;
+void VertexAttribPointer(GLuint indx,
+                         GLint size,
+                         GLenum type,
+                         GLboolean normalized,
+                         GLsizei stride,
+                         const void* ptr) override;
+void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) override;
+void BlitFramebufferCHROMIUM(GLint srcX0,
+                             GLint srcY0,
+                             GLint srcX1,
+                             GLint srcY1,
+                             GLint dstX0,
+                             GLint dstY0,
+                             GLint dstX1,
+                             GLint dstY1,
+                             GLbitfield mask,
+                             GLenum filter) override;
+void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
+                                            GLsizei samples,
+                                            GLenum internalformat,
+                                            GLsizei width,
+                                            GLsizei height) override;
+void RenderbufferStorageMultisampleEXT(GLenum target,
+                                       GLsizei samples,
+                                       GLenum internalformat,
+                                       GLsizei width,
+                                       GLsizei height) override;
+void FramebufferTexture2DMultisampleEXT(GLenum target,
+                                        GLenum attachment,
+                                        GLenum textarget,
+                                        GLuint texture,
+                                        GLint level,
+                                        GLsizei samples) override;
+void TexStorage2DEXT(GLenum target,
+                     GLsizei levels,
+                     GLenum internalFormat,
+                     GLsizei width,
+                     GLsizei height) override;
+void GenQueriesEXT(GLsizei n, GLuint* queries) override;
+void DeleteQueriesEXT(GLsizei n, const GLuint* queries) override;
+GLboolean IsQueryEXT(GLuint id) override;
+void BeginQueryEXT(GLenum target, GLuint id) override;
+void EndQueryEXT(GLenum target) override;
+void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override;
+void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override;
+void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override;
+void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;
+void PopGroupMarkerEXT() override;
+void GenVertexArraysOES(GLsizei n, GLuint* arrays) override;
+void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) override;
+GLboolean IsVertexArrayOES(GLuint array) override;
+void BindVertexArrayOES(GLuint array) override;
+void SwapBuffers() override;
+GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
+                                   GLsizei count,
+                                   GLenum type,
+                                   GLuint offset) override;
+GLboolean EnableFeatureCHROMIUM(const char* feature) override;
+void* MapBufferCHROMIUM(GLuint target, GLenum access) override;
+GLboolean UnmapBufferCHROMIUM(GLuint target) override;
+void* MapBufferSubDataCHROMIUM(GLuint target,
+                               GLintptr offset,
+                               GLsizeiptr size,
+                               GLenum access) override;
+void UnmapBufferSubDataCHROMIUM(const void* mem) override;
+void* MapTexSubImage2DCHROMIUM(GLenum target,
                                GLint level,
                                GLint xoffset,
                                GLint yoffset,
-                               GLint x,
-                               GLint y,
                                GLsizei width,
-                               GLsizei height) override;
-virtual GLuint CreateProgram() override;
-virtual GLuint CreateShader(GLenum type) override;
-virtual void CullFace(GLenum mode) override;
-virtual void DeleteBuffers(GLsizei n, const GLuint* buffers) override;
-virtual void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) override;
-virtual void DeleteProgram(GLuint program) override;
-virtual void DeleteRenderbuffers(GLsizei n,
-                                 const GLuint* renderbuffers) override;
-virtual void DeleteShader(GLuint shader) override;
-virtual void DeleteTextures(GLsizei n, const GLuint* textures) override;
-virtual void DepthFunc(GLenum func) override;
-virtual void DepthMask(GLboolean flag) override;
-virtual void DepthRangef(GLclampf zNear, GLclampf zFar) override;
-virtual void DetachShader(GLuint program, GLuint shader) override;
-virtual void Disable(GLenum cap) override;
-virtual void DisableVertexAttribArray(GLuint index) override;
-virtual void DrawArrays(GLenum mode, GLint first, GLsizei count) override;
-virtual void DrawElements(GLenum mode,
-                          GLsizei count,
-                          GLenum type,
-                          const void* indices) override;
-virtual void Enable(GLenum cap) override;
-virtual void EnableVertexAttribArray(GLuint index) override;
-virtual void Finish() override;
-virtual void Flush() override;
-virtual void FramebufferRenderbuffer(GLenum target,
-                                     GLenum attachment,
-                                     GLenum renderbuffertarget,
-                                     GLuint renderbuffer) override;
-virtual void FramebufferTexture2D(GLenum target,
-                                  GLenum attachment,
-                                  GLenum textarget,
-                                  GLuint texture,
-                                  GLint level) override;
-virtual void FrontFace(GLenum mode) override;
-virtual void GenBuffers(GLsizei n, GLuint* buffers) override;
-virtual void GenerateMipmap(GLenum target) override;
-virtual void GenFramebuffers(GLsizei n, GLuint* framebuffers) override;
-virtual void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override;
-virtual void GenTextures(GLsizei n, GLuint* textures) override;
-virtual void GetActiveAttrib(GLuint program,
-                             GLuint index,
-                             GLsizei bufsize,
-                             GLsizei* length,
-                             GLint* size,
-                             GLenum* type,
-                             char* name) override;
-virtual void GetActiveUniform(GLuint program,
-                              GLuint index,
-                              GLsizei bufsize,
-                              GLsizei* length,
-                              GLint* size,
-                              GLenum* type,
-                              char* name) override;
-virtual void GetAttachedShaders(GLuint program,
-                                GLsizei maxcount,
-                                GLsizei* count,
-                                GLuint* shaders) override;
-virtual GLint GetAttribLocation(GLuint program, const char* name) override;
-virtual void GetBooleanv(GLenum pname, GLboolean* params) override;
-virtual void GetBufferParameteriv(GLenum target,
-                                  GLenum pname,
-                                  GLint* params) override;
-virtual GLenum GetError() override;
-virtual void GetFloatv(GLenum pname, GLfloat* params) override;
-virtual void GetFramebufferAttachmentParameteriv(GLenum target,
-                                                 GLenum attachment,
-                                                 GLenum pname,
-                                                 GLint* params) override;
-virtual void GetIntegerv(GLenum pname, GLint* params) override;
-virtual void GetProgramiv(GLuint program, GLenum pname, GLint* params) override;
-virtual void GetProgramInfoLog(GLuint program,
-                               GLsizei bufsize,
-                               GLsizei* length,
-                               char* infolog) override;
-virtual void GetRenderbufferParameteriv(GLenum target,
-                                        GLenum pname,
-                                        GLint* params) override;
-virtual void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override;
-virtual void GetShaderInfoLog(GLuint shader,
-                              GLsizei bufsize,
-                              GLsizei* length,
-                              char* infolog) override;
-virtual void GetShaderPrecisionFormat(GLenum shadertype,
-                                      GLenum precisiontype,
-                                      GLint* range,
-                                      GLint* precision) override;
-virtual void GetShaderSource(GLuint shader,
-                             GLsizei bufsize,
-                             GLsizei* length,
-                             char* source) override;
-virtual const GLubyte* GetString(GLenum name) override;
-virtual void GetTexParameterfv(GLenum target,
-                               GLenum pname,
-                               GLfloat* params) override;
-virtual void GetTexParameteriv(GLenum target,
-                               GLenum pname,
-                               GLint* params) override;
-virtual void GetUniformfv(GLuint program,
-                          GLint location,
-                          GLfloat* params) override;
-virtual void GetUniformiv(GLuint program,
-                          GLint location,
-                          GLint* params) override;
-virtual GLint GetUniformLocation(GLuint program, const char* name) override;
-virtual void GetVertexAttribfv(GLuint index,
-                               GLenum pname,
-                               GLfloat* params) override;
-virtual void GetVertexAttribiv(GLuint index,
-                               GLenum pname,
-                               GLint* params) override;
-virtual void GetVertexAttribPointerv(GLuint index,
-                                     GLenum pname,
-                                     void** pointer) override;
-virtual void Hint(GLenum target, GLenum mode) override;
-virtual GLboolean IsBuffer(GLuint buffer) override;
-virtual GLboolean IsEnabled(GLenum cap) override;
-virtual GLboolean IsFramebuffer(GLuint framebuffer) override;
-virtual GLboolean IsProgram(GLuint program) override;
-virtual GLboolean IsRenderbuffer(GLuint renderbuffer) override;
-virtual GLboolean IsShader(GLuint shader) override;
-virtual GLboolean IsTexture(GLuint texture) override;
-virtual void LineWidth(GLfloat width) override;
-virtual void LinkProgram(GLuint program) override;
-virtual void PixelStorei(GLenum pname, GLint param) override;
-virtual void PolygonOffset(GLfloat factor, GLfloat units) override;
-virtual void ReadPixels(GLint x,
-                        GLint y,
-                        GLsizei width,
-                        GLsizei height,
-                        GLenum format,
-                        GLenum type,
-                        void* pixels) override;
-virtual void ReleaseShaderCompiler() override;
-virtual void RenderbufferStorage(GLenum target,
-                                 GLenum internalformat,
-                                 GLsizei width,
-                                 GLsizei height) override;
-virtual void SampleCoverage(GLclampf value, GLboolean invert) override;
-virtual void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) override;
-virtual void ShaderBinary(GLsizei n,
-                          const GLuint* shaders,
-                          GLenum binaryformat,
-                          const void* binary,
-                          GLsizei length) override;
-virtual void ShaderSource(GLuint shader,
-                          GLsizei count,
-                          const GLchar* const* str,
-                          const GLint* length) override;
-virtual void ShallowFinishCHROMIUM() override;
-virtual void ShallowFlushCHROMIUM() override;
-virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) override;
-virtual void StencilFuncSeparate(GLenum face,
-                                 GLenum func,
-                                 GLint ref,
-                                 GLuint mask) override;
-virtual void StencilMask(GLuint mask) override;
-virtual void StencilMaskSeparate(GLenum face, GLuint mask) override;
-virtual void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) override;
-virtual void StencilOpSeparate(GLenum face,
-                               GLenum fail,
-                               GLenum zfail,
-                               GLenum zpass) override;
-virtual void TexImage2D(GLenum target,
-                        GLint level,
-                        GLint internalformat,
-                        GLsizei width,
-                        GLsizei height,
-                        GLint border,
-                        GLenum format,
-                        GLenum type,
-                        const void* pixels) override;
-virtual void TexParameterf(GLenum target, GLenum pname, GLfloat param) override;
-virtual void TexParameterfv(GLenum target,
-                            GLenum pname,
-                            const GLfloat* params) override;
-virtual void TexParameteri(GLenum target, GLenum pname, GLint param) override;
-virtual void TexParameteriv(GLenum target,
-                            GLenum pname,
-                            const GLint* params) override;
-virtual void TexSubImage2D(GLenum target,
-                           GLint level,
-                           GLint xoffset,
-                           GLint yoffset,
+                               GLsizei height,
+                               GLenum format,
+                               GLenum type,
+                               GLenum access) override;
+void UnmapTexSubImage2DCHROMIUM(const void* mem) override;
+void ResizeCHROMIUM(GLuint width, GLuint height, GLfloat scale_factor) override;
+const GLchar* GetRequestableExtensionsCHROMIUM() override;
+void RequestExtensionCHROMIUM(const char* extension) override;
+void RateLimitOffscreenContextCHROMIUM() override;
+void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
+                                 GLuint count,
+                                 GLint* results,
+                                 GLsizeiptr size) override;
+void GetProgramInfoCHROMIUM(GLuint program,
+                            GLsizei bufsize,
+                            GLsizei* size,
+                            void* info) override;
+GLuint CreateStreamTextureCHROMIUM(GLuint texture) override;
+GLuint CreateImageCHROMIUM(ClientBuffer buffer,
                            GLsizei width,
                            GLsizei height,
-                           GLenum format,
-                           GLenum type,
-                           const void* pixels) override;
-virtual void Uniform1f(GLint location, GLfloat x) override;
-virtual void Uniform1fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-virtual void Uniform1i(GLint location, GLint x) override;
-virtual void Uniform1iv(GLint location, GLsizei count, const GLint* v) override;
-virtual void Uniform2f(GLint location, GLfloat x, GLfloat y) override;
-virtual void Uniform2fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-virtual void Uniform2i(GLint location, GLint x, GLint y) override;
-virtual void Uniform2iv(GLint location, GLsizei count, const GLint* v) override;
-virtual void Uniform3f(GLint location,
-                       GLfloat x,
-                       GLfloat y,
-                       GLfloat z) override;
-virtual void Uniform3fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-virtual void Uniform3i(GLint location, GLint x, GLint y, GLint z) override;
-virtual void Uniform3iv(GLint location, GLsizei count, const GLint* v) override;
-virtual void Uniform4f(GLint location,
-                       GLfloat x,
-                       GLfloat y,
-                       GLfloat z,
-                       GLfloat w) override;
-virtual void Uniform4fv(GLint location,
-                        GLsizei count,
-                        const GLfloat* v) override;
-virtual void Uniform4i(GLint location,
-                       GLint x,
-                       GLint y,
-                       GLint z,
-                       GLint w) override;
-virtual void Uniform4iv(GLint location, GLsizei count, const GLint* v) override;
-virtual void UniformMatrix2fv(GLint location,
-                              GLsizei count,
-                              GLboolean transpose,
-                              const GLfloat* value) override;
-virtual void UniformMatrix3fv(GLint location,
-                              GLsizei count,
-                              GLboolean transpose,
-                              const GLfloat* value) override;
-virtual void UniformMatrix4fv(GLint location,
-                              GLsizei count,
-                              GLboolean transpose,
-                              const GLfloat* value) override;
-virtual void UseProgram(GLuint program) override;
-virtual void ValidateProgram(GLuint program) override;
-virtual void VertexAttrib1f(GLuint indx, GLfloat x) override;
-virtual void VertexAttrib1fv(GLuint indx, const GLfloat* values) override;
-virtual void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) override;
-virtual void VertexAttrib2fv(GLuint indx, const GLfloat* values) override;
-virtual void VertexAttrib3f(GLuint indx,
-                            GLfloat x,
-                            GLfloat y,
-                            GLfloat z) override;
-virtual void VertexAttrib3fv(GLuint indx, const GLfloat* values) override;
-virtual void VertexAttrib4f(GLuint indx,
-                            GLfloat x,
-                            GLfloat y,
-                            GLfloat z,
-                            GLfloat w) override;
-virtual void VertexAttrib4fv(GLuint indx, const GLfloat* values) override;
-virtual void VertexAttribPointer(GLuint indx,
-                                 GLint size,
-                                 GLenum type,
-                                 GLboolean normalized,
-                                 GLsizei stride,
-                                 const void* ptr) override;
-virtual void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) override;
-virtual void BlitFramebufferCHROMIUM(GLint srcX0,
-                                     GLint srcY0,
-                                     GLint srcX1,
-                                     GLint srcY1,
-                                     GLint dstX0,
-                                     GLint dstY0,
-                                     GLint dstX1,
-                                     GLint dstY1,
-                                     GLbitfield mask,
-                                     GLenum filter) override;
-virtual void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
-                                                    GLsizei samples,
-                                                    GLenum internalformat,
-                                                    GLsizei width,
-                                                    GLsizei height) override;
-virtual void RenderbufferStorageMultisampleEXT(GLenum target,
-                                               GLsizei samples,
-                                               GLenum internalformat,
-                                               GLsizei width,
-                                               GLsizei height) override;
-virtual void FramebufferTexture2DMultisampleEXT(GLenum target,
-                                                GLenum attachment,
-                                                GLenum textarget,
-                                                GLuint texture,
-                                                GLint level,
-                                                GLsizei samples) override;
-virtual void TexStorage2DEXT(GLenum target,
-                             GLsizei levels,
-                             GLenum internalFormat,
-                             GLsizei width,
-                             GLsizei height) override;
-virtual void GenQueriesEXT(GLsizei n, GLuint* queries) override;
-virtual void DeleteQueriesEXT(GLsizei n, const GLuint* queries) override;
-virtual GLboolean IsQueryEXT(GLuint id) override;
-virtual void BeginQueryEXT(GLenum target, GLuint id) override;
-virtual void EndQueryEXT(GLenum target) override;
-virtual void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override;
-virtual void GetQueryObjectuivEXT(GLuint id,
-                                  GLenum pname,
-                                  GLuint* params) override;
-virtual void InsertEventMarkerEXT(GLsizei length,
-                                  const GLchar* marker) override;
-virtual void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;
-virtual void PopGroupMarkerEXT() override;
-virtual void GenVertexArraysOES(GLsizei n, GLuint* arrays) override;
-virtual void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) override;
-virtual GLboolean IsVertexArrayOES(GLuint array) override;
-virtual void BindVertexArrayOES(GLuint array) override;
-virtual void SwapBuffers() override;
-virtual GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
-                                           GLsizei count,
-                                           GLenum type,
-                                           GLuint offset) override;
-virtual GLboolean EnableFeatureCHROMIUM(const char* feature) override;
-virtual void* MapBufferCHROMIUM(GLuint target, GLenum access) override;
-virtual GLboolean UnmapBufferCHROMIUM(GLuint target) override;
-virtual void* MapBufferSubDataCHROMIUM(GLuint target,
-                                       GLintptr offset,
-                                       GLsizeiptr size,
-                                       GLenum access) override;
-virtual void UnmapBufferSubDataCHROMIUM(const void* mem) override;
-virtual void* MapTexSubImage2DCHROMIUM(GLenum target,
-                                       GLint level,
-                                       GLint xoffset,
-                                       GLint yoffset,
-                                       GLsizei width,
-                                       GLsizei height,
-                                       GLenum format,
-                                       GLenum type,
-                                       GLenum access) override;
-virtual void UnmapTexSubImage2DCHROMIUM(const void* mem) override;
-virtual void ResizeCHROMIUM(GLuint width,
-                            GLuint height,
-                            GLfloat scale_factor) override;
-virtual const GLchar* GetRequestableExtensionsCHROMIUM() override;
-virtual void RequestExtensionCHROMIUM(const char* extension) override;
-virtual void RateLimitOffscreenContextCHROMIUM() override;
-virtual void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
-                                         GLuint count,
-                                         GLint* results,
-                                         GLsizeiptr size) override;
-virtual void GetProgramInfoCHROMIUM(GLuint program,
+                           GLenum internalformat) override;
+void DestroyImageCHROMIUM(GLuint image_id) override;
+GLuint CreateGpuMemoryBufferImageCHROMIUM(GLsizei width,
+                                          GLsizei height,
+                                          GLenum internalformat,
+                                          GLenum usage) override;
+void GetTranslatedShaderSourceANGLE(GLuint shader,
                                     GLsizei bufsize,
-                                    GLsizei* size,
-                                    void* info) override;
-virtual GLuint CreateStreamTextureCHROMIUM(GLuint texture) override;
-virtual GLuint CreateImageCHROMIUM(ClientBuffer buffer,
-                                   GLsizei width,
-                                   GLsizei height,
-                                   GLenum internalformat) override;
-virtual void DestroyImageCHROMIUM(GLuint image_id) override;
-virtual GLuint CreateGpuMemoryBufferImageCHROMIUM(GLsizei width,
-                                                  GLsizei height,
-                                                  GLenum internalformat,
-                                                  GLenum usage) override;
-virtual void GetTranslatedShaderSourceANGLE(GLuint shader,
-                                            GLsizei bufsize,
-                                            GLsizei* length,
-                                            char* source) override;
-virtual void PostSubBufferCHROMIUM(GLint x,
-                                   GLint y,
-                                   GLint width,
-                                   GLint height) override;
-virtual void TexImageIOSurface2DCHROMIUM(GLenum target,
-                                         GLsizei width,
-                                         GLsizei height,
-                                         GLuint ioSurfaceId,
-                                         GLuint plane) override;
-virtual void CopyTextureCHROMIUM(GLenum target,
-                                 GLenum source_id,
-                                 GLenum dest_id,
-                                 GLint level,
-                                 GLint internalformat,
-                                 GLenum dest_type) override;
-virtual void DrawArraysInstancedANGLE(GLenum mode,
-                                      GLint first,
-                                      GLsizei count,
-                                      GLsizei primcount) override;
-virtual void DrawElementsInstancedANGLE(GLenum mode,
-                                        GLsizei count,
-                                        GLenum type,
-                                        const void* indices,
-                                        GLsizei primcount) override;
-virtual void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) override;
-virtual void GenMailboxCHROMIUM(GLbyte* mailbox) override;
-virtual void ProduceTextureCHROMIUM(GLenum target,
-                                    const GLbyte* mailbox) override;
-virtual void ProduceTextureDirectCHROMIUM(GLuint texture,
-                                          GLenum target,
-                                          const GLbyte* mailbox) override;
-virtual void ConsumeTextureCHROMIUM(GLenum target,
-                                    const GLbyte* mailbox) override;
-virtual GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
-                                               const GLbyte* mailbox) override;
-virtual void BindUniformLocationCHROMIUM(GLuint program,
-                                         GLint location,
-                                         const char* name) override;
-virtual void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
-virtual void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
-virtual void TraceBeginCHROMIUM(const char* name) override;
-virtual void TraceEndCHROMIUM() override;
-virtual void AsyncTexSubImage2DCHROMIUM(GLenum target,
-                                        GLint level,
-                                        GLint xoffset,
-                                        GLint yoffset,
-                                        GLsizei width,
-                                        GLsizei height,
-                                        GLenum format,
-                                        GLenum type,
-                                        const void* data) override;
-virtual void AsyncTexImage2DCHROMIUM(GLenum target,
-                                     GLint level,
-                                     GLenum internalformat,
-                                     GLsizei width,
-                                     GLsizei height,
-                                     GLint border,
-                                     GLenum format,
-                                     GLenum type,
-                                     const void* pixels) override;
-virtual void WaitAsyncTexImage2DCHROMIUM(GLenum target) override;
-virtual void WaitAllAsyncTexImage2DCHROMIUM() override;
-virtual void DiscardFramebufferEXT(GLenum target,
-                                   GLsizei count,
-                                   const GLenum* attachments) override;
-virtual void LoseContextCHROMIUM(GLenum current, GLenum other) override;
-virtual GLuint InsertSyncPointCHROMIUM() override;
-virtual void WaitSyncPointCHROMIUM(GLuint sync_point) override;
-virtual void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override;
-virtual void DiscardBackbufferCHROMIUM() override;
-virtual void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
-                                          GLenum plane_transform,
-                                          GLuint overlay_texture_id,
-                                          GLint bounds_x,
-                                          GLint bounds_y,
-                                          GLint bounds_width,
-                                          GLint bounds_height,
-                                          GLfloat uv_x,
-                                          GLfloat uv_y,
-                                          GLfloat uv_width,
-                                          GLfloat uv_height) override;
-virtual void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;
-virtual void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) override;
+                                    GLsizei* length,
+                                    char* source) override;
+void PostSubBufferCHROMIUM(GLint x,
+                           GLint y,
+                           GLint width,
+                           GLint height) override;
+void TexImageIOSurface2DCHROMIUM(GLenum target,
+                                 GLsizei width,
+                                 GLsizei height,
+                                 GLuint ioSurfaceId,
+                                 GLuint plane) override;
+void CopyTextureCHROMIUM(GLenum target,
+                         GLenum source_id,
+                         GLenum dest_id,
+                         GLint level,
+                         GLint internalformat,
+                         GLenum dest_type) override;
+void DrawArraysInstancedANGLE(GLenum mode,
+                              GLint first,
+                              GLsizei count,
+                              GLsizei primcount) override;
+void DrawElementsInstancedANGLE(GLenum mode,
+                                GLsizei count,
+                                GLenum type,
+                                const void* indices,
+                                GLsizei primcount) override;
+void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) override;
+void GenMailboxCHROMIUM(GLbyte* mailbox) override;
+void ProduceTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override;
+void ProduceTextureDirectCHROMIUM(GLuint texture,
+                                  GLenum target,
+                                  const GLbyte* mailbox) override;
+void ConsumeTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override;
+GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
+                                       const GLbyte* mailbox) override;
+void BindUniformLocationCHROMIUM(GLuint program,
+                                 GLint location,
+                                 const char* name) override;
+void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
+void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) override;
+void TraceBeginCHROMIUM(const char* name) override;
+void TraceEndCHROMIUM() override;
+void AsyncTexSubImage2DCHROMIUM(GLenum target,
+                                GLint level,
+                                GLint xoffset,
+                                GLint yoffset,
+                                GLsizei width,
+                                GLsizei height,
+                                GLenum format,
+                                GLenum type,
+                                const void* data) override;
+void AsyncTexImage2DCHROMIUM(GLenum target,
+                             GLint level,
+                             GLenum internalformat,
+                             GLsizei width,
+                             GLsizei height,
+                             GLint border,
+                             GLenum format,
+                             GLenum type,
+                             const void* pixels) override;
+void WaitAsyncTexImage2DCHROMIUM(GLenum target) override;
+void WaitAllAsyncTexImage2DCHROMIUM() override;
+void DiscardFramebufferEXT(GLenum target,
+                           GLsizei count,
+                           const GLenum* attachments) override;
+void LoseContextCHROMIUM(GLenum current, GLenum other) override;
+GLuint InsertSyncPointCHROMIUM() override;
+void WaitSyncPointCHROMIUM(GLuint sync_point) override;
+void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override;
+void DiscardBackbufferCHROMIUM() override;
+void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
+                                  GLenum plane_transform,
+                                  GLuint overlay_texture_id,
+                                  GLint bounds_x,
+                                  GLint bounds_y,
+                                  GLint bounds_width,
+                                  GLint bounds_height,
+                                  GLfloat uv_x,
+                                  GLfloat uv_y,
+                                  GLfloat uv_width,
+                                  GLfloat uv_height) override;
+void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;
+void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) override;
 #endif  // GPU_COMMAND_BUFFER_CLIENT_GLES2_TRACE_IMPLEMENTATION_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/program_info_manager.cc b/gpu/command_buffer/client/program_info_manager.cc
index a74b4f0..c0f8600 100644
--- a/gpu/command_buffer/client/program_info_manager.cc
+++ b/gpu/command_buffer/client/program_info_manager.cc
@@ -17,43 +17,42 @@
 class NonCachedProgramInfoManager : public ProgramInfoManager {
  public:
   NonCachedProgramInfoManager();
-  virtual ~NonCachedProgramInfoManager();
+  ~NonCachedProgramInfoManager() override;
 
-  virtual void CreateInfo(GLuint program) override;
+  void CreateInfo(GLuint program) override;
 
-  virtual void DeleteInfo(GLuint program) override;
+  void DeleteInfo(GLuint program) override;
 
-  virtual bool GetProgramiv(GLES2Implementation* gl,
-                            GLuint program,
-                            GLenum pname,
-                            GLint* params) override;
+  bool GetProgramiv(GLES2Implementation* gl,
+                    GLuint program,
+                    GLenum pname,
+                    GLint* params) override;
 
-  virtual GLint GetAttribLocation(GLES2Implementation* gl,
-                                  GLuint program,
-                                  const char* name) override;
+  GLint GetAttribLocation(GLES2Implementation* gl,
+                          GLuint program,
+                          const char* name) override;
 
-  virtual GLint GetUniformLocation(GLES2Implementation* gl,
-                                   GLuint program,
-                                   const char* name) override;
+  GLint GetUniformLocation(GLES2Implementation* gl,
+                           GLuint program,
+                           const char* name) override;
 
-  virtual bool GetActiveAttrib(GLES2Implementation* gl,
-                               GLuint program,
-                               GLuint index,
-                               GLsizei bufsize,
-                               GLsizei* length,
-                               GLint* size,
-                               GLenum* type,
-                               char* name) override;
+  bool GetActiveAttrib(GLES2Implementation* gl,
+                       GLuint program,
+                       GLuint index,
+                       GLsizei bufsize,
+                       GLsizei* length,
+                       GLint* size,
+                       GLenum* type,
+                       char* name) override;
 
-  virtual bool GetActiveUniform(GLES2Implementation* gl,
-                                GLuint program,
-                                GLuint index,
-                                GLsizei bufsize,
-                                GLsizei* length,
-                                GLint* size,
-                                GLenum* type,
-                                char* name) override;
-
+  bool GetActiveUniform(GLES2Implementation* gl,
+                        GLuint program,
+                        GLuint index,
+                        GLsizei bufsize,
+                        GLsizei* length,
+                        GLint* size,
+                        GLenum* type,
+                        char* name) override;
 };
 
 NonCachedProgramInfoManager::NonCachedProgramInfoManager() {
@@ -105,42 +104,42 @@
 class CachedProgramInfoManager : public ProgramInfoManager {
  public:
   CachedProgramInfoManager();
-  virtual ~CachedProgramInfoManager();
+  ~CachedProgramInfoManager() override;
 
-  virtual void CreateInfo(GLuint program) override;
+  void CreateInfo(GLuint program) override;
 
-  virtual void DeleteInfo(GLuint program) override;
+  void DeleteInfo(GLuint program) override;
 
-  virtual bool GetProgramiv(GLES2Implementation* gl,
-                            GLuint program,
-                            GLenum pname,
-                            GLint* params) override;
+  bool GetProgramiv(GLES2Implementation* gl,
+                    GLuint program,
+                    GLenum pname,
+                    GLint* params) override;
 
-  virtual GLint GetAttribLocation(GLES2Implementation* gl,
-                                  GLuint program,
-                                  const char* name) override;
+  GLint GetAttribLocation(GLES2Implementation* gl,
+                          GLuint program,
+                          const char* name) override;
 
-  virtual GLint GetUniformLocation(GLES2Implementation* gl,
-                                   GLuint program,
-                                   const char* name) override;
+  GLint GetUniformLocation(GLES2Implementation* gl,
+                           GLuint program,
+                           const char* name) override;
 
-  virtual bool GetActiveAttrib(GLES2Implementation* gl,
-                               GLuint program,
-                               GLuint index,
-                               GLsizei bufsize,
-                               GLsizei* length,
-                               GLint* size,
-                               GLenum* type,
-                               char* name) override;
+  bool GetActiveAttrib(GLES2Implementation* gl,
+                       GLuint program,
+                       GLuint index,
+                       GLsizei bufsize,
+                       GLsizei* length,
+                       GLint* size,
+                       GLenum* type,
+                       char* name) override;
 
-  virtual bool GetActiveUniform(GLES2Implementation* gl,
-                                GLuint program,
-                                GLuint index,
-                                GLsizei bufsize,
-                                GLsizei* length,
-                                GLint* size,
-                                GLenum* type,
-                                char* name) override;
+  bool GetActiveUniform(GLES2Implementation* gl,
+                        GLuint program,
+                        GLuint index,
+                        GLsizei bufsize,
+                        GLsizei* length,
+                        GLint* size,
+                        GLenum* type,
+                        char* name) override;
 
  private:
   class Program {
diff --git a/gpu/command_buffer/client/share_group.cc b/gpu/command_buffer/client/share_group.cc
index b99ad1e..c7e3845 100644
--- a/gpu/command_buffer/client/share_group.cc
+++ b/gpu/command_buffer/client/share_group.cc
@@ -26,12 +26,13 @@
 class IdHandler : public IdHandlerInterface {
  public:
   IdHandler() { }
-  virtual ~IdHandler() { }
+  ~IdHandler() override {}
 
   // Overridden from IdHandlerInterface.
-  virtual void MakeIds(
-      GLES2Implementation* /* gl_impl */,
-      GLuint id_offset, GLsizei n, GLuint* ids) override {
+  void MakeIds(GLES2Implementation* /* gl_impl */,
+               GLuint id_offset,
+               GLsizei n,
+               GLuint* ids) override {
     base::AutoLock auto_lock(lock_);
     if (id_offset == 0) {
       for (GLsizei ii = 0; ii < n; ++ii) {
@@ -46,9 +47,10 @@
   }
 
   // Overridden from IdHandlerInterface.
-  virtual bool FreeIds(
-      GLES2Implementation* gl_impl,
-      GLsizei n, const GLuint* ids, DeleteFn delete_fn) override {
+  bool FreeIds(GLES2Implementation* gl_impl,
+               GLsizei n,
+               const GLuint* ids,
+               DeleteFn delete_fn) override {
     base::AutoLock auto_lock(lock_);
 
     for (GLsizei ii = 0; ii < n; ++ii) {
@@ -65,14 +67,14 @@
   }
 
   // Overridden from IdHandlerInterface.
-  virtual bool MarkAsUsedForBind(GLuint id) override {
+  bool MarkAsUsedForBind(GLuint id) override {
     if (id == 0)
       return true;
     base::AutoLock auto_lock(lock_);
     return id_allocator_.MarkAsUsed(id);
   }
 
-  virtual void FreeContext(GLES2Implementation* gl_impl) override {}
+  void FreeContext(GLES2Implementation* gl_impl) override {}
 
  private:
   base::Lock lock_;
@@ -83,13 +85,13 @@
 class StrictIdHandler : public IdHandlerInterface {
  public:
   explicit StrictIdHandler(int id_namespace) : id_namespace_(id_namespace) {}
-  virtual ~StrictIdHandler() {}
+  ~StrictIdHandler() override {}
 
   // Overridden from IdHandler.
-  virtual void MakeIds(GLES2Implementation* gl_impl,
-                       GLuint /* id_offset */,
-                       GLsizei n,
-                       GLuint* ids) override {
+  void MakeIds(GLES2Implementation* gl_impl,
+               GLuint /* id_offset */,
+               GLsizei n,
+               GLuint* ids) override {
     base::AutoLock auto_lock(lock_);
 
     // Collect pending FreeIds from other flush_generation.
@@ -113,11 +115,10 @@
   }
 
   // Overridden from IdHandler.
-  virtual bool FreeIds(GLES2Implementation* gl_impl,
-                       GLsizei n,
-                       const GLuint* ids,
-                       DeleteFn delete_fn) override {
-
+  bool FreeIds(GLES2Implementation* gl_impl,
+               GLsizei n,
+               const GLuint* ids,
+               DeleteFn delete_fn) override {
     // Delete stub must run before CollectPendingFreeIds.
     (gl_impl->*delete_fn)(n, ids);
 
@@ -146,7 +147,7 @@
   }
 
   // Overridden from IdHandler.
-  virtual bool MarkAsUsedForBind(GLuint id) override {
+  bool MarkAsUsedForBind(GLuint id) override {
 #ifndef NDEBUG
     if (id != 0) {
       base::AutoLock auto_lock(lock_);
@@ -157,7 +158,7 @@
   }
 
   // Overridden from IdHandlerInterface.
-  virtual void FreeContext(GLES2Implementation* gl_impl) override {
+  void FreeContext(GLES2Implementation* gl_impl) override {
     base::AutoLock auto_lock(lock_);
     CollectPendingFreeIds(gl_impl);
   }
@@ -193,12 +194,13 @@
 class NonReusedIdHandler : public IdHandlerInterface {
  public:
   NonReusedIdHandler() : last_id_(0) {}
-  virtual ~NonReusedIdHandler() {}
+  ~NonReusedIdHandler() override {}
 
   // Overridden from IdHandlerInterface.
-  virtual void MakeIds(
-      GLES2Implementation* /* gl_impl */,
-      GLuint id_offset, GLsizei n, GLuint* ids) override {
+  void MakeIds(GLES2Implementation* /* gl_impl */,
+               GLuint id_offset,
+               GLsizei n,
+               GLuint* ids) override {
     base::AutoLock auto_lock(lock_);
     for (GLsizei ii = 0; ii < n; ++ii) {
       ids[ii] = ++last_id_ + id_offset;
@@ -206,21 +208,22 @@
   }
 
   // Overridden from IdHandlerInterface.
-  virtual bool FreeIds(
-      GLES2Implementation* gl_impl,
-      GLsizei n, const GLuint* ids, DeleteFn delete_fn) override {
+  bool FreeIds(GLES2Implementation* gl_impl,
+               GLsizei n,
+               const GLuint* ids,
+               DeleteFn delete_fn) override {
     // Ids are never freed.
     (gl_impl->*delete_fn)(n, ids);
     return true;
   }
 
   // Overridden from IdHandlerInterface.
-  virtual bool MarkAsUsedForBind(GLuint /* id */) override {
+  bool MarkAsUsedForBind(GLuint /* id */) override {
     // This is only used for Shaders and Programs which have no bind.
     return false;
   }
 
-  virtual void FreeContext(GLES2Implementation* gl_impl) override {}
+  void FreeContext(GLES2Implementation* gl_impl) override {}
 
  private:
   base::Lock lock_;
diff --git a/gpu/command_buffer/client/transfer_buffer.h b/gpu/command_buffer/client/transfer_buffer.h
index c27dd21..39e62a6 100644
--- a/gpu/command_buffer/client/transfer_buffer.h
+++ b/gpu/command_buffer/client/transfer_buffer.h
@@ -54,26 +54,24 @@
 class GPU_EXPORT TransferBuffer : public TransferBufferInterface {
  public:
   TransferBuffer(CommandBufferHelper* helper);
-  virtual ~TransferBuffer();
+  ~TransferBuffer() override;
 
   // Overridden from TransferBufferInterface.
-  virtual bool Initialize(
-      unsigned int default_buffer_size,
-      unsigned int result_size,
-      unsigned int min_buffer_size,
-      unsigned int max_buffer_size,
-      unsigned int alignment,
-      unsigned int size_to_flush) override;
-  virtual int GetShmId() override;
-  virtual void* GetResultBuffer() override;
-  virtual int GetResultOffset() override;
-  virtual void Free() override;
-  virtual bool HaveBuffer() const override;
-  virtual void* AllocUpTo(
-      unsigned int size, unsigned int* size_allocated) override;
-  virtual void* Alloc(unsigned int size) override;
-  virtual RingBuffer::Offset GetOffset(void* pointer) const override;
-  virtual void FreePendingToken(void* p, unsigned int token) override;
+  bool Initialize(unsigned int default_buffer_size,
+                  unsigned int result_size,
+                  unsigned int min_buffer_size,
+                  unsigned int max_buffer_size,
+                  unsigned int alignment,
+                  unsigned int size_to_flush) override;
+  int GetShmId() override;
+  void* GetResultBuffer() override;
+  int GetResultOffset() override;
+  void Free() override;
+  bool HaveBuffer() const override;
+  void* AllocUpTo(unsigned int size, unsigned int* size_allocated) override;
+  void* Alloc(unsigned int size) override;
+  RingBuffer::Offset GetOffset(void* pointer) const override;
+  void FreePendingToken(void* p, unsigned int token) override;
 
   // These are for testing.
   unsigned int GetCurrentMaxAllocationWithoutRealloc() const;
diff --git a/gpu/command_buffer/common/buffer.h b/gpu/command_buffer/common/buffer.h
index 6685ac5..5942f7f 100644
--- a/gpu/command_buffer/common/buffer.h
+++ b/gpu/command_buffer/common/buffer.h
@@ -28,9 +28,9 @@
  public:
   SharedMemoryBufferBacking(scoped_ptr<base::SharedMemory> shared_memory,
                             size_t size);
-  virtual ~SharedMemoryBufferBacking();
-  virtual void* GetMemory() const override;
-  virtual size_t GetSize() const override;
+  ~SharedMemoryBufferBacking() override;
+  void* GetMemory() const override;
+  size_t GetSize() const override;
   base::SharedMemory* shared_memory() { return shared_memory_.get(); }
 
  private:
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager.h b/gpu/command_buffer/service/async_pixel_transfer_manager.h
index 66b8bf7..3f52e1e 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager.h
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager.h
@@ -45,7 +45,7 @@
  public:
   static AsyncPixelTransferManager* Create(gfx::GLContext* context);
 
-  virtual ~AsyncPixelTransferManager();
+  ~AsyncPixelTransferManager() override;
 
   void Initialize(gles2::TextureManager* texture_manager);
 
@@ -82,9 +82,8 @@
   bool AsyncTransferIsInProgress(gles2::TextureRef* ref);
 
   // gles2::TextureRef::DestructionObserver implementation:
-  virtual void OnTextureManagerDestroying(gles2::TextureManager* manager)
-      override;
-  virtual void OnTextureRefDestroying(gles2::TextureRef* texture) override;
+  void OnTextureManagerDestroying(gles2::TextureManager* manager) override;
+  void OnTextureRefDestroying(gles2::TextureRef* texture) override;
 
  protected:
   AsyncPixelTransferManager();
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
index c43491d..61db3b6 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
@@ -36,18 +36,16 @@
       AsyncPixelTransferManagerIdle::SharedState* state,
       GLuint texture_id,
       const AsyncTexImage2DParams& define_params);
-  virtual ~AsyncPixelTransferDelegateIdle();
+  ~AsyncPixelTransferDelegateIdle() override;
 
   // Implement AsyncPixelTransferDelegate:
-  virtual void AsyncTexImage2D(
-      const AsyncTexImage2DParams& tex_params,
-      const AsyncMemoryParams& mem_params,
-      const base::Closure& bind_callback) override;
-  virtual void AsyncTexSubImage2D(
-      const AsyncTexSubImage2DParams& tex_params,
-      const AsyncMemoryParams& mem_params) override;
-  virtual bool TransferIsInProgress() override;
-  virtual void WaitForTransferCompletion() override;
+  void AsyncTexImage2D(const AsyncTexImage2DParams& tex_params,
+                       const AsyncMemoryParams& mem_params,
+                       const base::Closure& bind_callback) override;
+  void AsyncTexSubImage2D(const AsyncTexSubImage2DParams& tex_params,
+                          const AsyncMemoryParams& mem_params) override;
+  bool TransferIsInProgress() override;
+  void WaitForTransferCompletion() override;
 
  private:
   void PerformAsyncTexImage2D(AsyncTexImage2DParams tex_params,
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.h b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.h
index 0ec950c..8aba7ff 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.h
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.h
@@ -14,18 +14,18 @@
 class AsyncPixelTransferManagerIdle : public AsyncPixelTransferManager {
  public:
   AsyncPixelTransferManagerIdle();
-  virtual ~AsyncPixelTransferManagerIdle();
+  ~AsyncPixelTransferManagerIdle() override;
 
   // AsyncPixelTransferManager implementation:
-  virtual void BindCompletedAsyncTransfers() override;
-  virtual void AsyncNotifyCompletion(
+  void BindCompletedAsyncTransfers() override;
+  void AsyncNotifyCompletion(
       const AsyncMemoryParams& mem_params,
       AsyncPixelTransferCompletionObserver* observer) override;
-  virtual uint32 GetTextureUploadCount() override;
-  virtual base::TimeDelta GetTotalTextureUploadTime() override;
-  virtual void ProcessMorePendingTransfers() override;
-  virtual bool NeedsProcessMorePendingTransfers() override;
-  virtual void WaitAllAsyncTexImage2D() override;
+  uint32 GetTextureUploadCount() override;
+  base::TimeDelta GetTotalTextureUploadTime() override;
+  void ProcessMorePendingTransfers() override;
+  bool NeedsProcessMorePendingTransfers() override;
+  void WaitAllAsyncTexImage2D() override;
 
   struct Task {
     Task(uint64 transfer_id,
@@ -54,7 +54,7 @@
 
  private:
   // AsyncPixelTransferManager implementation:
-  virtual AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
+  AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
       gles2::TextureRef* ref,
       const AsyncTexImage2DParams& define_params) override;
 
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc
index e28ff82..b6506bf 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc
@@ -51,7 +51,7 @@
 #endif
   }
 
-  virtual ~TransferThread() {
+  ~TransferThread() override {
     // The only instance of this class was declared leaky.
     NOTREACHED();
   }
@@ -71,7 +71,7 @@
     wait_for_init.Wait();
   }
 
-  virtual void CleanUp() override {
+  void CleanUp() override {
     surface_ = NULL;
     context_ = NULL;
   }
@@ -377,20 +377,18 @@
       AsyncPixelTransferManagerShareGroup::SharedState* shared_state,
       GLuint texture_id,
       const AsyncTexImage2DParams& define_params);
-  virtual ~AsyncPixelTransferDelegateShareGroup();
+  ~AsyncPixelTransferDelegateShareGroup() override;
 
   void BindTransfer() { state_->BindTransfer(); }
 
   // Implement AsyncPixelTransferDelegate:
-  virtual void AsyncTexImage2D(
-      const AsyncTexImage2DParams& tex_params,
-      const AsyncMemoryParams& mem_params,
-      const base::Closure& bind_callback) override;
-  virtual void AsyncTexSubImage2D(
-      const AsyncTexSubImage2DParams& tex_params,
-      const AsyncMemoryParams& mem_params) override;
-  virtual bool TransferIsInProgress() override;
-  virtual void WaitForTransferCompletion() override;
+  void AsyncTexImage2D(const AsyncTexImage2DParams& tex_params,
+                       const AsyncMemoryParams& mem_params,
+                       const base::Closure& bind_callback) override;
+  void AsyncTexSubImage2D(const AsyncTexSubImage2DParams& tex_params,
+                          const AsyncMemoryParams& mem_params) override;
+  bool TransferIsInProgress() override;
+  void WaitForTransferCompletion() override;
 
  private:
   // A raw pointer is safe because the SharedState is owned by the Manager,
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h b/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h
index 9f9f04e..081fcc4 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h
@@ -20,18 +20,18 @@
 class AsyncPixelTransferManagerShareGroup : public AsyncPixelTransferManager {
  public:
   explicit AsyncPixelTransferManagerShareGroup(gfx::GLContext* context);
-  virtual ~AsyncPixelTransferManagerShareGroup();
+  ~AsyncPixelTransferManagerShareGroup() override;
 
   // AsyncPixelTransferManager implementation:
-  virtual void BindCompletedAsyncTransfers() override;
-  virtual void AsyncNotifyCompletion(
+  void BindCompletedAsyncTransfers() override;
+  void AsyncNotifyCompletion(
       const AsyncMemoryParams& mem_params,
       AsyncPixelTransferCompletionObserver* observer) override;
-  virtual uint32 GetTextureUploadCount() override;
-  virtual base::TimeDelta GetTotalTextureUploadTime() override;
-  virtual void ProcessMorePendingTransfers() override;
-  virtual bool NeedsProcessMorePendingTransfers() override;
-  virtual void WaitAllAsyncTexImage2D() override;
+  uint32 GetTextureUploadCount() override;
+  base::TimeDelta GetTotalTextureUploadTime() override;
+  void ProcessMorePendingTransfers() override;
+  bool NeedsProcessMorePendingTransfers() override;
+  void WaitAllAsyncTexImage2D() override;
 
   // State shared between Managers and Delegates.
   struct SharedState {
@@ -46,7 +46,7 @@
 
  private:
   // AsyncPixelTransferManager implementation:
-  virtual AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
+  AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
       gles2::TextureRef* ref,
       const AsyncTexImage2DParams& define_params) override;
 
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_stub.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_stub.cc
index 4b8ce1d..a2fbc8e 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_stub.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_stub.cc
@@ -11,18 +11,16 @@
 class AsyncPixelTransferDelegateStub : public AsyncPixelTransferDelegate {
  public:
   AsyncPixelTransferDelegateStub();
-  virtual ~AsyncPixelTransferDelegateStub();
+  ~AsyncPixelTransferDelegateStub() override;
 
   // Implement AsyncPixelTransferDelegate:
-  virtual void AsyncTexImage2D(
-      const AsyncTexImage2DParams& tex_params,
-      const AsyncMemoryParams& mem_params,
-      const base::Closure& bind_callback) override;
-  virtual void AsyncTexSubImage2D(
-      const AsyncTexSubImage2DParams& tex_params,
-      const AsyncMemoryParams& mem_params) override;
-  virtual bool TransferIsInProgress() override;
-  virtual void WaitForTransferCompletion() override;
+  void AsyncTexImage2D(const AsyncTexImage2DParams& tex_params,
+                       const AsyncMemoryParams& mem_params,
+                       const base::Closure& bind_callback) override;
+  void AsyncTexSubImage2D(const AsyncTexSubImage2DParams& tex_params,
+                          const AsyncMemoryParams& mem_params) override;
+  bool TransferIsInProgress() override;
+  void WaitForTransferCompletion() override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegateStub);
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_stub.h b/gpu/command_buffer/service/async_pixel_transfer_manager_stub.h
index c2fa3eb..f8ced57 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_stub.h
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_stub.h
@@ -12,22 +12,22 @@
 class AsyncPixelTransferManagerStub : public AsyncPixelTransferManager {
  public:
   AsyncPixelTransferManagerStub();
-  virtual ~AsyncPixelTransferManagerStub();
+  ~AsyncPixelTransferManagerStub() override;
 
   // AsyncPixelTransferManager implementation:
-  virtual void BindCompletedAsyncTransfers() override;
-  virtual void AsyncNotifyCompletion(
+  void BindCompletedAsyncTransfers() override;
+  void AsyncNotifyCompletion(
       const AsyncMemoryParams& mem_params,
       AsyncPixelTransferCompletionObserver* observer) override;
-  virtual uint32 GetTextureUploadCount() override;
-  virtual base::TimeDelta GetTotalTextureUploadTime() override;
-  virtual void ProcessMorePendingTransfers() override;
-  virtual bool NeedsProcessMorePendingTransfers() override;
-  virtual void WaitAllAsyncTexImage2D() override;
+  uint32 GetTextureUploadCount() override;
+  base::TimeDelta GetTotalTextureUploadTime() override;
+  void ProcessMorePendingTransfers() override;
+  bool NeedsProcessMorePendingTransfers() override;
+  void WaitAllAsyncTexImage2D() override;
 
  private:
   // AsyncPixelTransferManager implementation:
-  virtual AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
+  AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
       gles2::TextureRef* ref,
       const AsyncTexImage2DParams& define_params) override;
 
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc
index b5851d2..4bc2ba2 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc
@@ -13,18 +13,16 @@
  public:
   explicit AsyncPixelTransferDelegateSync(
       AsyncPixelTransferManagerSync::SharedState* shared_state);
-  virtual ~AsyncPixelTransferDelegateSync();
+  ~AsyncPixelTransferDelegateSync() override;
 
   // Implement AsyncPixelTransferDelegate:
-  virtual void AsyncTexImage2D(
-      const AsyncTexImage2DParams& tex_params,
-      const AsyncMemoryParams& mem_params,
-      const base::Closure& bind_callback) override;
-  virtual void AsyncTexSubImage2D(
-      const AsyncTexSubImage2DParams& tex_params,
-      const AsyncMemoryParams& mem_params) override;
-  virtual bool TransferIsInProgress() override;
-  virtual void WaitForTransferCompletion() override;
+  void AsyncTexImage2D(const AsyncTexImage2DParams& tex_params,
+                       const AsyncMemoryParams& mem_params,
+                       const base::Closure& bind_callback) override;
+  void AsyncTexSubImage2D(const AsyncTexSubImage2DParams& tex_params,
+                          const AsyncMemoryParams& mem_params) override;
+  bool TransferIsInProgress() override;
+  void WaitForTransferCompletion() override;
 
  private:
   // Safe to hold a raw pointer because SharedState is owned by the Manager
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_sync.h b/gpu/command_buffer/service/async_pixel_transfer_manager_sync.h
index a08e915..b965d6f 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_sync.h
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_sync.h
@@ -12,18 +12,18 @@
 class AsyncPixelTransferManagerSync : public AsyncPixelTransferManager {
  public:
   AsyncPixelTransferManagerSync();
-  virtual ~AsyncPixelTransferManagerSync();
+  ~AsyncPixelTransferManagerSync() override;
 
   // AsyncPixelTransferManager implementation:
-  virtual void BindCompletedAsyncTransfers() override;
-  virtual void AsyncNotifyCompletion(
+  void BindCompletedAsyncTransfers() override;
+  void AsyncNotifyCompletion(
       const AsyncMemoryParams& mem_params,
       AsyncPixelTransferCompletionObserver* observer) override;
-  virtual uint32 GetTextureUploadCount() override;
-  virtual base::TimeDelta GetTotalTextureUploadTime() override;
-  virtual void ProcessMorePendingTransfers() override;
-  virtual bool NeedsProcessMorePendingTransfers() override;
-  virtual void WaitAllAsyncTexImage2D() override;
+  uint32 GetTextureUploadCount() override;
+  base::TimeDelta GetTotalTextureUploadTime() override;
+  void ProcessMorePendingTransfers() override;
+  bool NeedsProcessMorePendingTransfers() override;
+  void WaitAllAsyncTexImage2D() override;
 
   // State shared between Managers and Delegates.
   struct SharedState {
@@ -36,7 +36,7 @@
 
  private:
   // AsyncPixelTransferManager implementation:
-  virtual AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
+  AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
       gles2::TextureRef* ref,
       const AsyncTexImage2DParams& define_params) override;
 
diff --git a/gpu/command_buffer/service/command_buffer_service.h b/gpu/command_buffer/service/command_buffer_service.h
index e3e2ebd..15f865f 100644
--- a/gpu/command_buffer/service/command_buffer_service.h
+++ b/gpu/command_buffer/service/command_buffer_service.h
@@ -42,26 +42,25 @@
   typedef base::Callback<bool(int32)> GetBufferChangedCallback;
   explicit CommandBufferService(
       TransferBufferManagerInterface* transfer_buffer_manager);
-  virtual ~CommandBufferService();
+  ~CommandBufferService() override;
 
   // CommandBuffer implementation:
-  virtual bool Initialize() override;
-  virtual State GetLastState() override;
-  virtual int32 GetLastToken() override;
-  virtual void Flush(int32 put_offset) override;
-  virtual void WaitForTokenInRange(int32 start, int32 end) override;
-  virtual void WaitForGetOffsetInRange(int32 start, int32 end) override;
-  virtual void SetGetBuffer(int32 transfer_buffer_id) override;
-  virtual scoped_refptr<Buffer> CreateTransferBuffer(size_t size,
-                                                     int32* id) override;
-  virtual void DestroyTransferBuffer(int32 id) override;
+  bool Initialize() override;
+  State GetLastState() override;
+  int32 GetLastToken() override;
+  void Flush(int32 put_offset) override;
+  void WaitForTokenInRange(int32 start, int32 end) override;
+  void WaitForGetOffsetInRange(int32 start, int32 end) override;
+  void SetGetBuffer(int32 transfer_buffer_id) override;
+  scoped_refptr<Buffer> CreateTransferBuffer(size_t size, int32* id) override;
+  void DestroyTransferBuffer(int32 id) override;
 
   // CommandBufferServiceBase implementation:
-  virtual void SetGetOffset(int32 get_offset) override;
-  virtual scoped_refptr<Buffer> GetTransferBuffer(int32 id) override;
-  virtual void SetToken(int32 token) override;
-  virtual void SetParseError(error::Error error) override;
-  virtual void SetContextLostReason(error::ContextLostReason) override;
+  void SetGetOffset(int32 get_offset) override;
+  scoped_refptr<Buffer> GetTransferBuffer(int32 id) override;
+  void SetToken(int32 token) override;
+  void SetParseError(error::Error error) override;
+  void SetContextLostReason(error::ContextLostReason) override;
 
   // Sets a callback that is called whenever the put offset is changed. When
   // called with sync==true, the callback must not return until some progress
diff --git a/gpu/command_buffer/service/common_decoder.h b/gpu/command_buffer/service/common_decoder.h
index 2132afb..aaf860f 100644
--- a/gpu/command_buffer/service/common_decoder.h
+++ b/gpu/command_buffer/service/common_decoder.h
@@ -95,7 +95,7 @@
   };
 
   CommonDecoder();
-  virtual ~CommonDecoder();
+  ~CommonDecoder() override;
 
   // Sets the engine, to get shared memory buffers from, and to set the token
   // to.
diff --git a/gpu/command_buffer/service/common_decoder_unittest.cc b/gpu/command_buffer/service/common_decoder_unittest.cc
index cc965cd..aa1ed1b 100644
--- a/gpu/command_buffer/service/common_decoder_unittest.cc
+++ b/gpu/command_buffer/service/common_decoder_unittest.cc
@@ -51,15 +51,14 @@
 class TestCommonDecoder : public CommonDecoder {
  public:
   // Overridden from AsyncAPIInterface
-  virtual const char* GetCommandName(unsigned int command_id) const override {
+  const char* GetCommandName(unsigned int command_id) const override {
     return GetCommonCommandName(static_cast<cmd::CommandId>(command_id));
   }
 
   // Overridden from AsyncAPIInterface
-  virtual error::Error DoCommand(
-      unsigned int command,
-      unsigned int arg_count,
-      const void* cmd_data) override {
+  error::Error DoCommand(unsigned int command,
+                         unsigned int arg_count,
+                         const void* cmd_data) override {
     return DoCommonCommand(command, arg_count, cmd_data);
   }
 
@@ -87,8 +86,7 @@
   }
 
   // Overridden from CommandBufferEngine.
-  virtual scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id)
-      override {
+  scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id) override {
     if (IsValidSharedMemoryId(shm_id))
       return buffer_;
     return NULL;
@@ -110,22 +108,20 @@
   }
 
   // Overridden from CommandBufferEngine.
-  virtual void set_token(int32 token) override {
-    token_ = token;
-  }
+  void set_token(int32 token) override { token_ = token; }
 
   int32 token() const {
     return token_;
   }
 
   // Overridden from CommandBufferEngine.
-  virtual bool SetGetBuffer(int32 transfer_buffer_id) override {
+  bool SetGetBuffer(int32 transfer_buffer_id) override {
     NOTREACHED();
     return false;
   }
 
   // Overridden from CommandBufferEngine.
-  virtual bool SetGetOffset(int32 offset) override {
+  bool SetGetOffset(int32 offset) override {
     if (static_cast<size_t>(offset) < kBufferSize) {
       get_offset_ = offset;
       return true;
@@ -134,9 +130,7 @@
   }
 
   // Overridden from CommandBufferEngine.
-  virtual int32 GetGetOffset() override {
-    return get_offset_;
-  }
+  int32 GetGetOffset() override { return get_offset_; }
 
  private:
   bool IsValidSharedMemoryId(int32 shm_id) {
diff --git a/gpu/command_buffer/service/error_state.cc b/gpu/command_buffer/service/error_state.cc
index c71a159..42131aa 100644
--- a/gpu/command_buffer/service/error_state.cc
+++ b/gpu/command_buffer/service/error_state.cc
@@ -17,45 +17,44 @@
 class ErrorStateImpl : public ErrorState {
  public:
   explicit ErrorStateImpl(ErrorStateClient* client, Logger* logger);
-  virtual ~ErrorStateImpl();
+  ~ErrorStateImpl() override;
 
-  virtual uint32 GetGLError() override;
+  uint32 GetGLError() override;
 
-  virtual void SetGLError(
-      const char* filename,
-      int line,
-      unsigned int error,
-      const char* function_name,
-      const char* msg) override;
-  virtual void SetGLErrorInvalidEnum(
-      const char* filename,
-      int line,
-      const char* function_name,
-      unsigned int value,
-      const char* label) override;
-  virtual void SetGLErrorInvalidParami(
-      const char* filename,
-      int line,
-      unsigned int error,
-      const char* function_name,
-      unsigned int pname,
-      int param) override;
-  virtual void SetGLErrorInvalidParamf(
-      const char* filename,
-      int line,
-      unsigned int error,
-      const char* function_name,
-      unsigned int pname,
-      float param) override;
+  void SetGLError(const char* filename,
+                  int line,
+                  unsigned int error,
+                  const char* function_name,
+                  const char* msg) override;
+  void SetGLErrorInvalidEnum(const char* filename,
+                             int line,
+                             const char* function_name,
+                             unsigned int value,
+                             const char* label) override;
+  void SetGLErrorInvalidParami(const char* filename,
+                               int line,
+                               unsigned int error,
+                               const char* function_name,
+                               unsigned int pname,
+                               int param) override;
+  void SetGLErrorInvalidParamf(const char* filename,
+                               int line,
+                               unsigned int error,
+                               const char* function_name,
+                               unsigned int pname,
+                               float param) override;
 
-  virtual unsigned int PeekGLError(
-      const char* filename, int line, const char* function_name) override;
+  unsigned int PeekGLError(const char* filename,
+                           int line,
+                           const char* function_name) override;
 
-  virtual void CopyRealGLErrorsToWrapper(
-      const char* filename, int line, const char* function_name) override;
+  void CopyRealGLErrorsToWrapper(const char* filename,
+                                 int line,
+                                 const char* function_name) override;
 
-  virtual void ClearRealGLErrors(
-      const char* filename, int line, const char* function_name) override;
+  void ClearRealGLErrors(const char* filename,
+                         int line,
+                         const char* function_name) override;
 
  private:
   // The last error message set.
diff --git a/gpu/command_buffer/service/framebuffer_manager.cc b/gpu/command_buffer/service/framebuffer_manager.cc
index 60f3ac9..d766abb 100644
--- a/gpu/command_buffer/service/framebuffer_manager.cc
+++ b/gpu/command_buffer/service/framebuffer_manager.cc
@@ -48,61 +48,42 @@
       : renderbuffer_(renderbuffer) {
   }
 
-  virtual GLsizei width() const override {
-    return renderbuffer_->width();
-  }
+  GLsizei width() const override { return renderbuffer_->width(); }
 
-  virtual GLsizei height() const override {
-    return renderbuffer_->height();
-  }
+  GLsizei height() const override { return renderbuffer_->height(); }
 
-  virtual GLenum internal_format() const override {
+  GLenum internal_format() const override {
     return renderbuffer_->internal_format();
   }
 
-  virtual GLenum texture_type() const override {
-    return 0;
-  }
+  GLenum texture_type() const override { return 0; }
 
-  virtual GLsizei samples() const override {
-    return renderbuffer_->samples();
-  }
+  GLsizei samples() const override { return renderbuffer_->samples(); }
 
-  virtual GLuint object_name() const override {
-    return renderbuffer_->client_id();
-  }
+  GLuint object_name() const override { return renderbuffer_->client_id(); }
 
-  virtual bool cleared() const override {
-    return renderbuffer_->cleared();
-  }
+  bool cleared() const override { return renderbuffer_->cleared(); }
 
-  virtual void SetCleared(
-      RenderbufferManager* renderbuffer_manager,
-      TextureManager* /* texture_manager */,
-      bool cleared) override {
+  void SetCleared(RenderbufferManager* renderbuffer_manager,
+                  TextureManager* /* texture_manager */,
+                  bool cleared) override {
     renderbuffer_manager->SetCleared(renderbuffer_.get(), cleared);
   }
 
-  virtual bool IsTexture(
-      TextureRef* /* texture */) const override {
-    return false;
-  }
+  bool IsTexture(TextureRef* /* texture */) const override { return false; }
 
-  virtual bool IsRenderbuffer(
-       Renderbuffer* renderbuffer) const override {
+  bool IsRenderbuffer(Renderbuffer* renderbuffer) const override {
     return renderbuffer_.get() == renderbuffer;
   }
 
-  virtual bool CanRenderTo() const override {
-    return true;
-  }
+  bool CanRenderTo() const override { return true; }
 
-  virtual void DetachFromFramebuffer(Framebuffer* framebuffer) const override {
+  void DetachFromFramebuffer(Framebuffer* framebuffer) const override {
     // Nothing to do for renderbuffers.
   }
 
-  virtual bool ValidForAttachmentType(
-      GLenum attachment_type, uint32 max_color_attachments) override {
+  bool ValidForAttachmentType(GLenum attachment_type,
+                              uint32 max_color_attachments) override {
     uint32 need = GLES2Util::GetChannelsNeededForAttachmentType(
         attachment_type, max_color_attachments);
     uint32 have = GLES2Util::GetChannelsForFormat(internal_format());
@@ -113,26 +94,25 @@
     return renderbuffer_.get();
   }
 
-  virtual size_t GetSignatureSize(
-      TextureManager* texture_manager) const override {
+  size_t GetSignatureSize(TextureManager* texture_manager) const override {
     return renderbuffer_->GetSignatureSize();
   }
 
-  virtual void AddToSignature(
-      TextureManager* texture_manager, std::string* signature) const override {
+  void AddToSignature(TextureManager* texture_manager,
+                      std::string* signature) const override {
     DCHECK(signature);
     renderbuffer_->AddToSignature(signature);
   }
 
-  virtual void OnWillRenderTo() const override {}
-  virtual void OnDidRenderTo() const override {}
-  virtual bool FormsFeedbackLoop(
-      TextureRef* /* texture */, GLint /*level */) const override {
+  void OnWillRenderTo() const override {}
+  void OnDidRenderTo() const override {}
+  bool FormsFeedbackLoop(TextureRef* /* texture */,
+                         GLint /*level */) const override {
     return false;
   }
 
  protected:
-  virtual ~RenderbufferAttachment() { }
+  ~RenderbufferAttachment() override {}
 
  private:
   scoped_refptr<Renderbuffer> renderbuffer_;
@@ -151,7 +131,7 @@
         samples_(samples) {
   }
 
-  virtual GLsizei width() const override {
+  GLsizei width() const override {
     GLsizei temp_width = 0;
     GLsizei temp_height = 0;
     texture_ref_->texture()->GetLevelSize(
@@ -159,7 +139,7 @@
     return temp_width;
   }
 
-  virtual GLsizei height() const override {
+  GLsizei height() const override {
     GLsizei temp_width = 0;
     GLsizei temp_height = 0;
     texture_ref_->texture()->GetLevelSize(
@@ -167,7 +147,7 @@
     return temp_height;
   }
 
-  virtual GLenum internal_format() const override {
+  GLenum internal_format() const override {
     GLenum temp_type = 0;
     GLenum temp_internal_format = 0;
     texture_ref_->texture()->GetLevelType(
@@ -175,7 +155,7 @@
     return temp_internal_format;
   }
 
-  virtual GLenum texture_type() const override {
+  GLenum texture_type() const override {
     GLenum temp_type = 0;
     GLenum temp_internal_format = 0;
     texture_ref_->texture()->GetLevelType(
@@ -183,33 +163,26 @@
     return temp_type;
   }
 
-  virtual GLsizei samples() const override {
-    return samples_;
-  }
+  GLsizei samples() const override { return samples_; }
 
-  virtual GLuint object_name() const override {
-    return texture_ref_->client_id();
-  }
+  GLuint object_name() const override { return texture_ref_->client_id(); }
 
-  virtual bool cleared() const override {
+  bool cleared() const override {
     return texture_ref_->texture()->IsLevelCleared(target_, level_);
   }
 
-  virtual void SetCleared(
-      RenderbufferManager* /* renderbuffer_manager */,
-      TextureManager* texture_manager,
-      bool cleared) override {
+  void SetCleared(RenderbufferManager* /* renderbuffer_manager */,
+                  TextureManager* texture_manager,
+                  bool cleared) override {
     texture_manager->SetLevelCleared(
         texture_ref_.get(), target_, level_, cleared);
   }
 
-  virtual bool IsTexture(TextureRef* texture) const override {
+  bool IsTexture(TextureRef* texture) const override {
     return texture == texture_ref_.get();
   }
 
-  virtual bool IsRenderbuffer(
-       Renderbuffer* /* renderbuffer */)
-          const override {
+  bool IsRenderbuffer(Renderbuffer* /* renderbuffer */) const override {
     return false;
   }
 
@@ -217,18 +190,17 @@
     return texture_ref_.get();
   }
 
-  virtual bool CanRenderTo() const override {
+  bool CanRenderTo() const override {
     return texture_ref_->texture()->CanRenderTo();
   }
 
-  virtual void DetachFromFramebuffer(Framebuffer* framebuffer)
-      const override {
+  void DetachFromFramebuffer(Framebuffer* framebuffer) const override {
     texture_ref_->texture()->DetachFromFramebuffer();
     framebuffer->OnTextureRefDetached(texture_ref_.get());
   }
 
-  virtual bool ValidForAttachmentType(
-      GLenum attachment_type, uint32 max_color_attachments) override {
+  bool ValidForAttachmentType(GLenum attachment_type,
+                              uint32 max_color_attachments) override {
     GLenum type = 0;
     GLenum internal_format = 0;
     if (!texture_ref_->texture()->GetLevelType(
@@ -248,33 +220,31 @@
     return (need & have) != 0;
   }
 
-  virtual size_t GetSignatureSize(
-      TextureManager* texture_manager) const override {
+  size_t GetSignatureSize(TextureManager* texture_manager) const override {
     return texture_manager->GetSignatureSize();
   }
 
-  virtual void AddToSignature(
-      TextureManager* texture_manager, std::string* signature) const override {
+  void AddToSignature(TextureManager* texture_manager,
+                      std::string* signature) const override {
     DCHECK(signature);
     texture_manager->AddToSignature(
         texture_ref_.get(), target_, level_, signature);
   }
 
-  virtual void OnWillRenderTo() const override {
+  void OnWillRenderTo() const override {
     texture_ref_->texture()->OnWillModifyPixels();
   }
 
-  virtual void OnDidRenderTo() const override {
+  void OnDidRenderTo() const override {
     texture_ref_->texture()->OnDidModifyPixels();
   }
 
-  virtual bool FormsFeedbackLoop(
-      TextureRef* texture, GLint level) const override {
+  bool FormsFeedbackLoop(TextureRef* texture, GLint level) const override {
     return texture == texture_ref_.get() && level == level_;
   }
 
  protected:
-  virtual ~TextureAttachment() {}
+  ~TextureAttachment() override {}
 
  private:
   scoped_refptr<TextureRef> texture_ref_;
diff --git a/gpu/command_buffer/service/gl_context_virtual.h b/gpu/command_buffer/service/gl_context_virtual.h
index 76f4021..ed61016 100644
--- a/gpu/command_buffer/service/gl_context_virtual.h
+++ b/gpu/command_buffer/service/gl_context_virtual.h
@@ -34,23 +34,22 @@
   gfx::Display* display();
 
   // Implement GLContext.
-  virtual bool Initialize(
-      gfx::GLSurface* compatible_surface,
-      gfx::GpuPreference gpu_preference) override;
-  virtual void Destroy() override;
-  virtual bool MakeCurrent(gfx::GLSurface* surface) override;
-  virtual void ReleaseCurrent(gfx::GLSurface* surface) override;
-  virtual bool IsCurrent(gfx::GLSurface* surface) override;
-  virtual void* GetHandle() override;
-  virtual void SetSwapInterval(int interval) override;
-  virtual std::string GetExtensions() override;
-  virtual bool GetTotalGpuMemory(size_t* bytes) override;
-  virtual void SetSafeToForceGpuSwitch() override;
-  virtual bool WasAllocatedUsingRobustnessExtension() override;
-  virtual void SetUnbindFboOnMakeCurrent() override;
+  bool Initialize(gfx::GLSurface* compatible_surface,
+                  gfx::GpuPreference gpu_preference) override;
+  void Destroy() override;
+  bool MakeCurrent(gfx::GLSurface* surface) override;
+  void ReleaseCurrent(gfx::GLSurface* surface) override;
+  bool IsCurrent(gfx::GLSurface* surface) override;
+  void* GetHandle() override;
+  void SetSwapInterval(int interval) override;
+  std::string GetExtensions() override;
+  bool GetTotalGpuMemory(size_t* bytes) override;
+  void SetSafeToForceGpuSwitch() override;
+  bool WasAllocatedUsingRobustnessExtension() override;
+  void SetUnbindFboOnMakeCurrent() override;
 
  protected:
-  virtual ~GLContextVirtual();
+  ~GLContextVirtual() override;
 
  private:
   scoped_refptr<gfx::GLContext> shared_context_;
diff --git a/gpu/command_buffer/service/gl_state_restorer_impl.h b/gpu/command_buffer/service/gl_state_restorer_impl.h
index b8ccc44..91d3408 100644
--- a/gpu/command_buffer/service/gl_state_restorer_impl.h
+++ b/gpu/command_buffer/service/gl_state_restorer_impl.h
@@ -22,13 +22,13 @@
 class GPU_EXPORT GLStateRestorerImpl : public gfx::GLStateRestorer {
  public:
    explicit GLStateRestorerImpl(base::WeakPtr<gles2::GLES2Decoder> decoder);
-   virtual ~GLStateRestorerImpl();
+   ~GLStateRestorerImpl() override;
 
-   virtual bool IsInitialized() override;
-   virtual void RestoreState(const gfx::GLStateRestorer* prev_state) override;
-   virtual void RestoreAllTextureUnitBindings() override;
-   virtual void RestoreActiveTextureUnitBinding(unsigned int target) override;
-   virtual void RestoreFramebufferBindings() override;
+   bool IsInitialized() override;
+   void RestoreState(const gfx::GLStateRestorer* prev_state) override;
+   void RestoreAllTextureUnitBindings() override;
+   void RestoreActiveTextureUnitBinding(unsigned int target) override;
+   void RestoreFramebufferBindings() override;
 
  private:
    const gles2::ContextState* GetContextState() const;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 6253cc8..1bc8aad 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -511,7 +511,7 @@
       : async_upload_token_(async_upload_token) {
   }
 
-  virtual void DidComplete(const AsyncMemoryParams& mem_params) override {
+  void DidComplete(const AsyncMemoryParams& mem_params) override {
     DCHECK(mem_params.buffer().get());
     void* data = mem_params.GetDataAddress();
     AsyncUploadSync* sync = static_cast<AsyncUploadSync*>(data);
@@ -519,8 +519,7 @@
   }
 
  private:
-  virtual ~AsyncUploadTokenCompletionObserver() {
-  }
+  ~AsyncUploadTokenCompletionObserver() override {}
 
   uint32 async_upload_token_;
 
@@ -558,17 +557,17 @@
                          public ErrorStateClient {
  public:
   explicit GLES2DecoderImpl(ContextGroup* group);
-  virtual ~GLES2DecoderImpl();
+  ~GLES2DecoderImpl() override;
 
   // Overridden from AsyncAPIInterface.
-  virtual Error DoCommand(unsigned int command,
-                          unsigned int arg_count,
-                          const void* args) override;
+  Error DoCommand(unsigned int command,
+                  unsigned int arg_count,
+                  const void* args) override;
 
-  virtual error::Error DoCommands(unsigned int num_commands,
-                                  const void* buffer,
-                                  int num_entries,
-                                  int* entries_processed) override;
+  error::Error DoCommands(unsigned int num_commands,
+                          const void* buffer,
+                          int num_entries,
+                          int* entries_processed) override;
 
   template <bool DebugImpl>
   error::Error DoCommandsImpl(unsigned int num_commands,
@@ -577,104 +576,91 @@
                               int* entries_processed);
 
   // Overridden from AsyncAPIInterface.
-  virtual const char* GetCommandName(unsigned int command_id) const override;
+  const char* GetCommandName(unsigned int command_id) const override;
 
   // Overridden from GLES2Decoder.
-  virtual bool Initialize(const scoped_refptr<gfx::GLSurface>& surface,
-                          const scoped_refptr<gfx::GLContext>& context,
-                          bool offscreen,
-                          const gfx::Size& size,
-                          const DisallowedFeatures& disallowed_features,
-                          const std::vector<int32>& attribs) override;
-  virtual void Destroy(bool have_context) override;
-  virtual void SetSurface(
-      const scoped_refptr<gfx::GLSurface>& surface) override;
-  virtual void ProduceFrontBuffer(const Mailbox& mailbox) override;
-  virtual bool ResizeOffscreenFrameBuffer(const gfx::Size& size) override;
+  bool Initialize(const scoped_refptr<gfx::GLSurface>& surface,
+                  const scoped_refptr<gfx::GLContext>& context,
+                  bool offscreen,
+                  const gfx::Size& size,
+                  const DisallowedFeatures& disallowed_features,
+                  const std::vector<int32>& attribs) override;
+  void Destroy(bool have_context) override;
+  void SetSurface(const scoped_refptr<gfx::GLSurface>& surface) override;
+  void ProduceFrontBuffer(const Mailbox& mailbox) override;
+  bool ResizeOffscreenFrameBuffer(const gfx::Size& size) override;
   void UpdateParentTextureInfo();
-  virtual bool MakeCurrent() override;
-  virtual GLES2Util* GetGLES2Util() override { return &util_; }
-  virtual gfx::GLContext* GetGLContext() override { return context_.get(); }
-  virtual ContextGroup* GetContextGroup() override { return group_.get(); }
-  virtual Capabilities GetCapabilities() override;
-  virtual void RestoreState(const ContextState* prev_state) override;
+  bool MakeCurrent() override;
+  GLES2Util* GetGLES2Util() override { return &util_; }
+  gfx::GLContext* GetGLContext() override { return context_.get(); }
+  ContextGroup* GetContextGroup() override { return group_.get(); }
+  Capabilities GetCapabilities() override;
+  void RestoreState(const ContextState* prev_state) override;
 
-  virtual void RestoreActiveTexture() const override {
-    state_.RestoreActiveTexture();
-  }
-  virtual void RestoreAllTextureUnitBindings(
+  void RestoreActiveTexture() const override { state_.RestoreActiveTexture(); }
+  void RestoreAllTextureUnitBindings(
       const ContextState* prev_state) const override {
     state_.RestoreAllTextureUnitBindings(prev_state);
   }
-  virtual void RestoreActiveTextureUnitBinding(
-      unsigned int target) const override {
+  void RestoreActiveTextureUnitBinding(unsigned int target) const override {
     state_.RestoreActiveTextureUnitBinding(target);
   }
-  virtual void RestoreBufferBindings() const override {
+  void RestoreBufferBindings() const override {
     state_.RestoreBufferBindings();
   }
-  virtual void RestoreGlobalState() const override {
-    state_.RestoreGlobalState(NULL);
-  }
-  virtual void RestoreProgramBindings() const override {
+  void RestoreGlobalState() const override { state_.RestoreGlobalState(NULL); }
+  void RestoreProgramBindings() const override {
     state_.RestoreProgramBindings();
   }
-  virtual void RestoreTextureUnitBindings(unsigned unit) const override {
+  void RestoreTextureUnitBindings(unsigned unit) const override {
     state_.RestoreTextureUnitBindings(unit, NULL);
   }
-  virtual void RestoreFramebufferBindings() const override;
-  virtual void RestoreRenderbufferBindings() override;
-  virtual void RestoreTextureState(unsigned service_id) const override;
+  void RestoreFramebufferBindings() const override;
+  void RestoreRenderbufferBindings() override;
+  void RestoreTextureState(unsigned service_id) const override;
 
-  virtual void ClearAllAttributes() const override;
-  virtual void RestoreAllAttributes() const override;
+  void ClearAllAttributes() const override;
+  void RestoreAllAttributes() const override;
 
-  virtual QueryManager* GetQueryManager() override {
-    return query_manager_.get();
-  }
-  virtual VertexArrayManager* GetVertexArrayManager() override {
+  QueryManager* GetQueryManager() override { return query_manager_.get(); }
+  VertexArrayManager* GetVertexArrayManager() override {
     return vertex_array_manager_.get();
   }
-  virtual ImageManager* GetImageManager() override {
-    return image_manager_.get();
-  }
-  virtual bool ProcessPendingQueries() override;
-  virtual bool HasMoreIdleWork() override;
-  virtual void PerformIdleWork() override;
+  ImageManager* GetImageManager() override { return image_manager_.get(); }
+  bool ProcessPendingQueries() override;
+  bool HasMoreIdleWork() override;
+  void PerformIdleWork() override;
 
-  virtual void WaitForReadPixels(base::Closure callback) override;
+  void WaitForReadPixels(base::Closure callback) override;
 
-  virtual void SetResizeCallback(
+  void SetResizeCallback(
       const base::Callback<void(gfx::Size, float)>& callback) override;
 
-  virtual Logger* GetLogger() override;
+  Logger* GetLogger() override;
 
-  virtual void BeginDecoding() override;
-  virtual void EndDecoding() override;
+  void BeginDecoding() override;
+  void EndDecoding() override;
 
-  virtual ErrorState* GetErrorState() override;
-  virtual const ContextState* GetContextState() override { return &state_; }
+  ErrorState* GetErrorState() override;
+  const ContextState* GetContextState() override { return &state_; }
 
-  virtual void SetShaderCacheCallback(
-      const ShaderCacheCallback& callback) override;
-  virtual void SetWaitSyncPointCallback(
-      const WaitSyncPointCallback& callback) override;
+  void SetShaderCacheCallback(const ShaderCacheCallback& callback) override;
+  void SetWaitSyncPointCallback(const WaitSyncPointCallback& callback) override;
 
-  virtual AsyncPixelTransferManager*
-      GetAsyncPixelTransferManager() override;
-  virtual void ResetAsyncPixelTransferManagerForTest() override;
-  virtual void SetAsyncPixelTransferManagerForTest(
+  AsyncPixelTransferManager* GetAsyncPixelTransferManager() override;
+  void ResetAsyncPixelTransferManagerForTest() override;
+  void SetAsyncPixelTransferManagerForTest(
       AsyncPixelTransferManager* manager) override;
-  virtual void SetIgnoreCachedStateForTest(bool ignore) override;
+  void SetIgnoreCachedStateForTest(bool ignore) override;
   void ProcessFinishedAsyncTransfers();
 
-  virtual bool GetServiceTextureId(uint32 client_texture_id,
-                                   uint32* service_texture_id) override;
+  bool GetServiceTextureId(uint32 client_texture_id,
+                           uint32* service_texture_id) override;
 
-  virtual uint32 GetTextureUploadCount() override;
-  virtual base::TimeDelta GetTotalTextureUploadTime() override;
-  virtual base::TimeDelta GetTotalProcessingCommandsTime() override;
-  virtual void AddProcessingCommandsTime(base::TimeDelta) override;
+  uint32 GetTextureUploadCount() override;
+  base::TimeDelta GetTotalTextureUploadTime() override;
+  base::TimeDelta GetTotalProcessingCommandsTime() override;
+  void AddProcessingCommandsTime(base::TimeDelta) override;
 
   // Restores the current state to the user's settings.
   void RestoreCurrentFramebufferBindings();
@@ -690,14 +676,13 @@
   bool BoundFramebufferHasDepthAttachment();
   bool BoundFramebufferHasStencilAttachment();
 
-  virtual error::ContextLostReason GetContextLostReason() override;
+  error::ContextLostReason GetContextLostReason() override;
 
   // Overridden from FramebufferManager::TextureDetachObserver:
-  virtual void OnTextureRefDetachedFromFramebuffer(
-      TextureRef* texture) override;
+  void OnTextureRefDetachedFromFramebuffer(TextureRef* texture) override;
 
   // Overriden from ErrorStateClient.
-  virtual void OnOutOfMemoryError() override;
+  void OnOutOfMemoryError() override;
 
   // Ensure Renderbuffer corresponding to last DoBindRenderbuffer() is bound.
   void EnsureRenderbufferBound();
@@ -1155,16 +1140,16 @@
   void ClearUnclearedAttachments(GLenum target, Framebuffer* framebuffer);
 
   // overridden from GLES2Decoder
-  virtual bool ClearLevel(unsigned service_id,
-                          unsigned bind_target,
-                          unsigned target,
-                          int level,
-                          unsigned internal_format,
-                          unsigned format,
-                          unsigned type,
-                          int width,
-                          int height,
-                          bool is_texture_immutable) override;
+  bool ClearLevel(unsigned service_id,
+                  unsigned bind_target,
+                  unsigned target,
+                  int level,
+                  unsigned internal_format,
+                  unsigned format,
+                  unsigned type,
+                  int width,
+                  int height,
+                  bool is_texture_immutable) override;
 
   // Restore all GL state that affects clearing.
   void RestoreClearState();
@@ -1577,9 +1562,9 @@
       void** result, GLenum* result_type);
 
   void MaybeExitOnContextLost();
-  virtual bool WasContextLost() override;
-  virtual bool WasContextLostByRobustnessExtension() override;
-  virtual void LoseContext(uint32 reset_status) override;
+  bool WasContextLost() override;
+  bool WasContextLostByRobustnessExtension() override;
+  void LoseContext(uint32 reset_status) override;
 
 #if defined(OS_MACOSX)
   void ReleaseIOSurfaceForTexture(GLuint texture_id);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.h b/gpu/command_buffer/service/gles2_cmd_decoder.h
index 5c94b93..8d72335 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.h
@@ -68,7 +68,7 @@
   // Creates a decoder.
   static GLES2Decoder* Create(ContextGroup* group);
 
-  virtual ~GLES2Decoder();
+  ~GLES2Decoder() override;
 
   bool initialized() const {
     return initialized_;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
index d510946..1e7db3f 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
@@ -554,24 +554,23 @@
    public:
     MockCommandBufferEngine();
 
-    virtual ~MockCommandBufferEngine();
+    ~MockCommandBufferEngine() override;
 
-    virtual scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id)
-        override;
+    scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id) override;
 
     void ClearSharedMemory() {
       memset(valid_buffer_->memory(), kInitialMemoryValue, kSharedBufferSize);
     }
 
-    virtual void set_token(int32 token) override;
+    void set_token(int32 token) override;
 
-    virtual bool SetGetBuffer(int32 /* transfer_buffer_id */) override;
+    bool SetGetBuffer(int32 /* transfer_buffer_id */) override;
 
     // Overridden from CommandBufferEngine.
-    virtual bool SetGetOffset(int32 offset) override;
+    bool SetGetOffset(int32 offset) override;
 
     // Overridden from CommandBufferEngine.
-    virtual int32 GetGetOffset() override;
+    int32 GetGetOffset() override;
 
    private:
     scoped_refptr<gpu::Buffer> valid_buffer_;
diff --git a/gpu/command_buffer/service/gpu_scheduler.h b/gpu/command_buffer/service/gpu_scheduler.h
index fed0ce4..5e47d4a 100644
--- a/gpu/command_buffer/service/gpu_scheduler.h
+++ b/gpu/command_buffer/service/gpu_scheduler.h
@@ -56,7 +56,7 @@
                AsyncAPIInterface* handler,
                gles2::GLES2Decoder* decoder);
 
-  virtual ~GpuScheduler();
+  ~GpuScheduler() override;
 
   void PutChanged();
 
@@ -83,11 +83,11 @@
   void SetSchedulingChangedCallback(const SchedulingChangedCallback& callback);
 
   // Implementation of CommandBufferEngine.
-  virtual scoped_refptr<Buffer> GetSharedMemoryBuffer(int32 shm_id) override;
-  virtual void set_token(int32 token) override;
-  virtual bool SetGetBuffer(int32 transfer_buffer_id) override;
-  virtual bool SetGetOffset(int32 offset) override;
-  virtual int32 GetGetOffset() override;
+  scoped_refptr<Buffer> GetSharedMemoryBuffer(int32 shm_id) override;
+  void set_token(int32 token) override;
+  bool SetGetBuffer(int32 transfer_buffer_id) override;
+  bool SetGetOffset(int32 offset) override;
+  int32 GetGetOffset() override;
 
   void SetCommandProcessedCallback(const base::Closure& callback);
 
diff --git a/gpu/command_buffer/service/gpu_state_tracer.cc b/gpu/command_buffer/service/gpu_state_tracer.cc
index 5311e9c..51b0eba 100644
--- a/gpu/command_buffer/service/gpu_state_tracer.cc
+++ b/gpu/command_buffer/service/gpu_state_tracer.cc
@@ -24,11 +24,11 @@
   bool SaveScreenshot(const gfx::Size& size);
 
   // base::debug::ConvertableToTraceFormat implementation.
-  virtual void AppendAsTraceFormat(std::string* out) const override;
+  void AppendAsTraceFormat(std::string* out) const override;
 
  private:
   explicit Snapshot(const ContextState* state);
-  virtual ~Snapshot() {}
+  ~Snapshot() override {}
 
   const ContextState* state_;
 
diff --git a/gpu/command_buffer/service/gpu_tracer.h b/gpu/command_buffer/service/gpu_tracer.h
index 8099230..2e81b4e 100644
--- a/gpu/command_buffer/service/gpu_tracer.h
+++ b/gpu/command_buffer/service/gpu_tracer.h
@@ -115,14 +115,14 @@
 class TraceOutputter : public Outputter {
  public:
   static scoped_refptr<TraceOutputter> Create(const std::string& name);
-  virtual void Trace(const std::string& name,
-                     int64 start_time,
-                     int64 end_time) override;
+  void Trace(const std::string& name,
+             int64 start_time,
+             int64 end_time) override;
 
  protected:
   friend class base::RefCounted<Outputter>;
   explicit TraceOutputter(const std::string& name);
-  virtual ~TraceOutputter();
+  ~TraceOutputter() override;
 
   base::Thread named_thread_;
   uint64 local_trace_id_;
diff --git a/gpu/command_buffer/service/gpu_tracer_unittest.cc b/gpu/command_buffer/service/gpu_tracer_unittest.cc
index 6be4d5b..fe353c3 100644
--- a/gpu/command_buffer/service/gpu_tracer_unittest.cc
+++ b/gpu/command_buffer/service/gpu_tracer_unittest.cc
@@ -207,16 +207,12 @@
 
 class GpuARBTimerTracerTest : public BaseGpuTracerTest {
  protected:
-  virtual GpuTracerType GetTracerType() override {
-    return kTracerTypeARBTimer;
-  }
+  GpuTracerType GetTracerType() override { return kTracerTypeARBTimer; }
 };
 
 class GpuDisjointTimerTracerTest : public BaseGpuTracerTest {
  protected:
-  virtual GpuTracerType GetTracerType() override {
-    return kTracerTypeDisjointTimer;
-  }
+  GpuTracerType GetTracerType() override { return kTracerTypeDisjointTimer; }
 };
 
 TEST_F(GpuARBTimerTracerTest, GPUTrace) {
diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
index 310fced..33e5a2c 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -62,21 +62,21 @@
  public:
   GpuInProcessThread();
 
-  virtual void AddRef() const override {
+  void AddRef() const override {
     base::RefCountedThreadSafe<GpuInProcessThread>::AddRef();
   }
-  virtual void Release() const override {
+  void Release() const override {
     base::RefCountedThreadSafe<GpuInProcessThread>::Release();
   }
 
-  virtual void ScheduleTask(const base::Closure& task) override;
-  virtual void ScheduleIdleWork(const base::Closure& callback) override;
-  virtual bool UseVirtualizedGLContexts() override { return false; }
-  virtual scoped_refptr<gles2::ShaderTranslatorCache> shader_translator_cache()
+  void ScheduleTask(const base::Closure& task) override;
+  void ScheduleIdleWork(const base::Closure& callback) override;
+  bool UseVirtualizedGLContexts() override { return false; }
+  scoped_refptr<gles2::ShaderTranslatorCache> shader_translator_cache()
       override;
 
  private:
-  virtual ~GpuInProcessThread();
+  ~GpuInProcessThread() override;
   friend class base::RefCountedThreadSafe<GpuInProcessThread>;
 
   scoped_refptr<gpu::gles2::ShaderTranslatorCache> shader_translator_cache_;
diff --git a/gpu/command_buffer/service/in_process_command_buffer.h b/gpu/command_buffer/service/in_process_command_buffer.h
index 65cf1ec..ec06ecd 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.h
+++ b/gpu/command_buffer/service/in_process_command_buffer.h
@@ -64,7 +64,7 @@
  public:
   class Service;
   explicit InProcessCommandBuffer(const scoped_refptr<Service>& service);
-  virtual ~InProcessCommandBuffer();
+  ~InProcessCommandBuffer() override;
 
   // If |surface| is not NULL, use it directly; in this case, the command
   // buffer gpu thread must be the same as the client thread. Otherwise create
@@ -80,38 +80,37 @@
   void Destroy();
 
   // CommandBuffer implementation:
-  virtual bool Initialize() override;
-  virtual State GetLastState() override;
-  virtual int32 GetLastToken() override;
-  virtual void Flush(int32 put_offset) override;
-  virtual void WaitForTokenInRange(int32 start, int32 end) override;
-  virtual void WaitForGetOffsetInRange(int32 start, int32 end) override;
-  virtual void SetGetBuffer(int32 shm_id) override;
-  virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
-                                                          int32* id) override;
-  virtual void DestroyTransferBuffer(int32 id) override;
-  virtual gpu::error::Error GetLastError() override;
+  bool Initialize() override;
+  State GetLastState() override;
+  int32 GetLastToken() override;
+  void Flush(int32 put_offset) override;
+  void WaitForTokenInRange(int32 start, int32 end) override;
+  void WaitForGetOffsetInRange(int32 start, int32 end) override;
+  void SetGetBuffer(int32 shm_id) override;
+  scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
+                                                  int32* id) override;
+  void DestroyTransferBuffer(int32 id) override;
+  gpu::error::Error GetLastError() override;
 
   // GpuControl implementation:
-  virtual gpu::Capabilities GetCapabilities() override;
-  virtual int32 CreateImage(ClientBuffer buffer,
-                            size_t width,
-                            size_t height,
-                            unsigned internalformat) override;
-  virtual void DestroyImage(int32 id) override;
-  virtual int32 CreateGpuMemoryBufferImage(size_t width,
-                                           size_t height,
-                                           unsigned internalformat,
-                                           unsigned usage) override;
-  virtual uint32 InsertSyncPoint() override;
-  virtual uint32 InsertFutureSyncPoint() override;
-  virtual void RetireSyncPoint(uint32 sync_point) override;
-  virtual void SignalSyncPoint(uint32 sync_point,
-                               const base::Closure& callback) override;
-  virtual void SignalQuery(uint32 query_id,
-                           const base::Closure& callback) override;
-  virtual void SetSurfaceVisible(bool visible) override;
-  virtual uint32 CreateStreamTexture(uint32 texture_id) override;
+  gpu::Capabilities GetCapabilities() override;
+  int32 CreateImage(ClientBuffer buffer,
+                    size_t width,
+                    size_t height,
+                    unsigned internalformat) override;
+  void DestroyImage(int32 id) override;
+  int32 CreateGpuMemoryBufferImage(size_t width,
+                                   size_t height,
+                                   unsigned internalformat,
+                                   unsigned usage) override;
+  uint32 InsertSyncPoint() override;
+  uint32 InsertFutureSyncPoint() override;
+  void RetireSyncPoint(uint32 sync_point) override;
+  void SignalSyncPoint(uint32 sync_point,
+                       const base::Closure& callback) override;
+  void SignalQuery(uint32 query_id, const base::Closure& callback) override;
+  void SetSurfaceVisible(bool visible) override;
+  uint32 CreateStreamTexture(uint32 texture_id) override;
 
   // The serializer interface to the GPU service (i.e. thread).
   class Service {
diff --git a/gpu/command_buffer/service/memory_program_cache.h b/gpu/command_buffer/service/memory_program_cache.h
index 804547e..7560d01 100644
--- a/gpu/command_buffer/service/memory_program_cache.h
+++ b/gpu/command_buffer/service/memory_program_cache.h
@@ -24,9 +24,9 @@
  public:
   MemoryProgramCache();
   explicit MemoryProgramCache(const size_t max_cache_size_bytes);
-  virtual ~MemoryProgramCache();
+  ~MemoryProgramCache() override;
 
-  virtual ProgramLoadResult LoadLinkedProgram(
+  ProgramLoadResult LoadLinkedProgram(
       GLuint program,
       Shader* shader_a,
       const ShaderTranslatorInterface* translator_a,
@@ -34,19 +34,18 @@
       const ShaderTranslatorInterface* translator_b,
       const LocationMap* bind_attrib_location_map,
       const ShaderCacheCallback& shader_callback) override;
-  virtual void SaveLinkedProgram(
-      GLuint program,
-      const Shader* shader_a,
-      const ShaderTranslatorInterface* translator_a,
-      const Shader* shader_b,
-      const ShaderTranslatorInterface* translator_b,
-      const LocationMap* bind_attrib_location_map,
-      const ShaderCacheCallback& shader_callback) override;
+  void SaveLinkedProgram(GLuint program,
+                         const Shader* shader_a,
+                         const ShaderTranslatorInterface* translator_a,
+                         const Shader* shader_b,
+                         const ShaderTranslatorInterface* translator_b,
+                         const LocationMap* bind_attrib_location_map,
+                         const ShaderCacheCallback& shader_callback) override;
 
-  virtual void LoadProgram(const std::string& program) override;
+  void LoadProgram(const std::string& program) override;
 
  private:
-  virtual void ClearBackend() override;
+  void ClearBackend() override;
 
   class ProgramCacheValue : public base::RefCounted<ProgramCacheValue> {
    public:
diff --git a/gpu/command_buffer/service/program_cache_unittest.cc b/gpu/command_buffer/service/program_cache_unittest.cc
index 37597d3..525fea1 100644
--- a/gpu/command_buffer/service/program_cache_unittest.cc
+++ b/gpu/command_buffer/service/program_cache_unittest.cc
@@ -15,7 +15,7 @@
 
 class NoBackendProgramCache : public ProgramCache {
  public:
-  virtual ProgramLoadResult LoadLinkedProgram(
+  ProgramLoadResult LoadLinkedProgram(
       GLuint /* program */,
       Shader* /* shader_a */,
       const ShaderTranslatorInterface* /* translator_a */,
@@ -25,18 +25,17 @@
       const ShaderCacheCallback& /* callback */) override {
     return PROGRAM_LOAD_SUCCESS;
   }
-  virtual void SaveLinkedProgram(
-      GLuint /* program */,
-      const Shader* /* shader_a */,
-      const ShaderTranslatorInterface* /* translator_b */,
-      const Shader* /* shader_b */,
-      const ShaderTranslatorInterface* /* translator_b */,
-      const LocationMap* /* bind_attrib_location_map */,
-      const ShaderCacheCallback& /* callback */) override { }
+  void SaveLinkedProgram(GLuint /* program */,
+                         const Shader* /* shader_a */,
+                         const ShaderTranslatorInterface* /* translator_b */,
+                         const Shader* /* shader_b */,
+                         const ShaderTranslatorInterface* /* translator_b */,
+                         const LocationMap* /* bind_attrib_location_map */,
+                         const ShaderCacheCallback& /* callback */) override {}
 
-  virtual void LoadProgram(const std::string& /* program */) override {}
+  void LoadProgram(const std::string& /* program */) override {}
 
-  virtual void ClearBackend() override {}
+  void ClearBackend() override {}
 
   void SaySuccessfullyCached(const std::string& shader1,
                              const ShaderTranslatorInterface* translator_1,
diff --git a/gpu/command_buffer/service/query_manager.cc b/gpu/command_buffer/service/query_manager.cc
index fdc7d0a..5f518ec 100644
--- a/gpu/command_buffer/service/query_manager.cc
+++ b/gpu/command_buffer/service/query_manager.cc
@@ -34,7 +34,7 @@
     cancelled_ = true;
   }
 
-  virtual void DidComplete(const AsyncMemoryParams& mem_params) override {
+  void DidComplete(const AsyncMemoryParams& mem_params) override {
     base::AutoLock locked(lock_);
     if (!cancelled_) {
       DCHECK(mem_params.buffer().get());
@@ -45,7 +45,7 @@
   }
 
  private:
-  virtual ~AsyncPixelTransferCompletionObserverImpl() {}
+  ~AsyncPixelTransferCompletionObserverImpl() override {}
 
   base::subtle::Atomic32 submit_count_;
 
@@ -62,13 +62,13 @@
   AsyncPixelTransfersCompletedQuery(
       QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
 
-  virtual bool Begin() override;
-  virtual bool End(base::subtle::Atomic32 submit_count) override;
-  virtual bool Process() override;
-  virtual void Destroy(bool have_context) override;
+  bool Begin() override;
+  bool End(base::subtle::Atomic32 submit_count) override;
+  bool Process() override;
+  void Destroy(bool have_context) override;
 
  protected:
-  virtual ~AsyncPixelTransfersCompletedQuery();
+  ~AsyncPixelTransfersCompletedQuery() override;
 
   scoped_refptr<AsyncPixelTransferCompletionObserverImpl> observer_;
 };
@@ -139,13 +139,13 @@
   AllSamplesPassedQuery(
       QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset,
       GLuint service_id);
-  virtual bool Begin() override;
-  virtual bool End(base::subtle::Atomic32 submit_count) override;
-  virtual bool Process() override;
-  virtual void Destroy(bool have_context) override;
+  bool Begin() override;
+  bool End(base::subtle::Atomic32 submit_count) override;
+  bool Process() override;
+  void Destroy(bool have_context) override;
 
  protected:
-  virtual ~AllSamplesPassedQuery();
+  ~AllSamplesPassedQuery() override;
 
  private:
   // Service side query id.
@@ -198,13 +198,13 @@
   CommandsIssuedQuery(
       QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
 
-  virtual bool Begin() override;
-  virtual bool End(base::subtle::Atomic32 submit_count) override;
-  virtual bool Process() override;
-  virtual void Destroy(bool have_context) override;
+  bool Begin() override;
+  bool End(base::subtle::Atomic32 submit_count) override;
+  bool Process() override;
+  void Destroy(bool have_context) override;
 
  protected:
-  virtual ~CommandsIssuedQuery();
+  ~CommandsIssuedQuery() override;
 
  private:
   base::TimeTicks begin_time_;
@@ -245,13 +245,13 @@
   CommandLatencyQuery(
       QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
 
-  virtual bool Begin() override;
-  virtual bool End(base::subtle::Atomic32 submit_count) override;
-  virtual bool Process() override;
-  virtual void Destroy(bool have_context) override;
+  bool Begin() override;
+  bool End(base::subtle::Atomic32 submit_count) override;
+  bool Process() override;
+  void Destroy(bool have_context) override;
 
  protected:
-  virtual ~CommandLatencyQuery();
+  ~CommandLatencyQuery() override;
 };
 
 CommandLatencyQuery::CommandLatencyQuery(
@@ -291,14 +291,14 @@
   AsyncReadPixelsCompletedQuery(
       QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
 
-  virtual bool Begin() override;
-  virtual bool End(base::subtle::Atomic32 submit_count) override;
-  virtual bool Process() override;
-  virtual void Destroy(bool have_context) override;
+  bool Begin() override;
+  bool End(base::subtle::Atomic32 submit_count) override;
+  bool Process() override;
+  void Destroy(bool have_context) override;
 
  protected:
   void Complete();
-  virtual ~AsyncReadPixelsCompletedQuery();
+  ~AsyncReadPixelsCompletedQuery() override;
 
  private:
   bool completed_;
@@ -351,13 +351,13 @@
   GetErrorQuery(
       QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
 
-  virtual bool Begin() override;
-  virtual bool End(base::subtle::Atomic32 submit_count) override;
-  virtual bool Process() override;
-  virtual void Destroy(bool have_context) override;
+  bool Begin() override;
+  bool End(base::subtle::Atomic32 submit_count) override;
+  bool Process() override;
+  void Destroy(bool have_context) override;
 
  protected:
-  virtual ~GetErrorQuery();
+  ~GetErrorQuery() override;
 
  private:
 };
@@ -398,13 +398,13 @@
                          uint32 shm_offset);
 
   // Overridden from QueryManager::Query:
-  virtual bool Begin() override;
-  virtual bool End(base::subtle::Atomic32 submit_count) override;
-  virtual bool Process() override;
-  virtual void Destroy(bool have_context) override;
+  bool Begin() override;
+  bool End(base::subtle::Atomic32 submit_count) override;
+  bool Process() override;
+  void Destroy(bool have_context) override;
 
  protected:
-  virtual ~CommandsCompletedQuery();
+  ~CommandsCompletedQuery() override;
 
  private:
   scoped_ptr<gfx::GLFence> fence_;
diff --git a/gpu/command_buffer/service/query_manager_unittest.cc b/gpu/command_buffer/service/query_manager_unittest.cc
index f6335e8..b4f1653 100644
--- a/gpu/command_buffer/service/query_manager_unittest.cc
+++ b/gpu/command_buffer/service/query_manager_unittest.cc
@@ -96,11 +96,9 @@
       ClearSharedMemory();
     }
 
-    virtual ~MockCommandBufferEngine() {
-    }
+    ~MockCommandBufferEngine() override {}
 
-    virtual scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id)
-        override {
+    scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id) override {
       return shm_id == kSharedMemoryId ? valid_buffer_ : invalid_buffer_;
     }
 
@@ -108,23 +106,21 @@
       memset(data_, kInitialMemoryValue, kSharedBufferSize);
     }
 
-    virtual void set_token(int32 token) override {
-      DCHECK(false);
-    }
+    void set_token(int32 token) override { DCHECK(false); }
 
-    virtual bool SetGetBuffer(int32 /* transfer_buffer_id */) override {
+    bool SetGetBuffer(int32 /* transfer_buffer_id */) override {
       DCHECK(false);
       return false;
     }
 
     // Overridden from CommandBufferEngine.
-    virtual bool SetGetOffset(int32 offset) override {
+    bool SetGetOffset(int32 offset) override {
       DCHECK(false);
       return false;
     }
 
     // Overridden from CommandBufferEngine.
-    virtual int32 GetGetOffset() override {
+    int32 GetGetOffset() override {
       DCHECK(false);
       return 0;
     }
diff --git a/gpu/command_buffer/service/shader_translator.h b/gpu/command_buffer/service/shader_translator.h
index ff9d741..6075896 100644
--- a/gpu/command_buffer/service/shader_translator.h
+++ b/gpu/command_buffer/service/shader_translator.h
@@ -83,24 +83,22 @@
   ShaderTranslator();
 
   // Overridden from ShaderTranslatorInterface.
-  virtual bool Init(
-      sh::GLenum shader_type,
-      ShShaderSpec shader_spec,
-      const ShBuiltInResources* resources,
-      GlslImplementationType glsl_implementation_type,
-      ShCompileOptions driver_bug_workarounds) override;
+  bool Init(sh::GLenum shader_type,
+            ShShaderSpec shader_spec,
+            const ShBuiltInResources* resources,
+            GlslImplementationType glsl_implementation_type,
+            ShCompileOptions driver_bug_workarounds) override;
 
   // Overridden from ShaderTranslatorInterface.
-  virtual bool Translate(const std::string& shader_source,
-                         std::string* info_log,
-                         std::string* translated_source,
-                         AttributeMap* attrib_map,
-                         UniformMap* uniform_map,
-                         VaryingMap* varying_map,
-                         NameMap* name_map) const override;
+  bool Translate(const std::string& shader_source,
+                 std::string* info_log,
+                 std::string* translated_source,
+                 AttributeMap* attrib_map,
+                 UniformMap* uniform_map,
+                 VaryingMap* varying_map,
+                 NameMap* name_map) const override;
 
-  virtual std::string GetStringForOptionsThatWouldAffectCompilation() const
-      override;
+  std::string GetStringForOptionsThatWouldAffectCompilation() const override;
 
   void AddDestructionObserver(DestructionObserver* observer);
   void RemoveDestructionObserver(DestructionObserver* observer);
@@ -108,7 +106,7 @@
  private:
   friend class base::RefCounted<ShaderTranslator>;
 
-  virtual ~ShaderTranslator();
+  ~ShaderTranslator() override;
   int GetCompileOptions() const;
 
   ShHandle compiler_;
diff --git a/gpu/command_buffer/service/shader_translator_cache.h b/gpu/command_buffer/service/shader_translator_cache.h
index 02f5829..e804ef2 100644
--- a/gpu/command_buffer/service/shader_translator_cache.h
+++ b/gpu/command_buffer/service/shader_translator_cache.h
@@ -29,7 +29,7 @@
   ShaderTranslatorCache();
 
   // ShaderTranslator::DestructionObserver implementation
-  virtual void OnDestruct(ShaderTranslator* translator) override;
+  void OnDestruct(ShaderTranslator* translator) override;
 
   scoped_refptr<ShaderTranslator> GetTranslator(
       sh::GLenum shader_type,
@@ -41,7 +41,7 @@
 
  private:
   friend class base::RefCounted<ShaderTranslatorCache>;
-  virtual ~ShaderTranslatorCache();
+  ~ShaderTranslatorCache() override;
 
   // Parameters passed into ShaderTranslator::Init
   struct ShaderTranslatorInitParams {
diff --git a/gpu/command_buffer/service/texture_definition.cc b/gpu/command_buffer/service/texture_definition.cc
index 6255a1c..cf385d2 100644
--- a/gpu/command_buffer/service/texture_definition.cc
+++ b/gpu/command_buffer/service/texture_definition.cc
@@ -30,23 +30,23 @@
                        const gfx::Size& size);
 
   // Implement GLImage.
-  virtual void Destroy(bool have_context) override;
-  virtual gfx::Size GetSize() override;
-  virtual bool BindTexImage(unsigned target) override;
-  virtual void ReleaseTexImage(unsigned target) override;
-  virtual bool CopyTexImage(unsigned target) override;
-  virtual void WillUseTexImage() override;
-  virtual void WillModifyTexImage() override;
-  virtual void DidModifyTexImage() override;
-  virtual void DidUseTexImage() override;
-  virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
-                                    int z_order,
-                                    gfx::OverlayTransform transform,
-                                    const gfx::Rect& bounds_rect,
-                                    const gfx::RectF& crop_rect) override;
+  void Destroy(bool have_context) override;
+  gfx::Size GetSize() override;
+  bool BindTexImage(unsigned target) override;
+  void ReleaseTexImage(unsigned target) override;
+  bool CopyTexImage(unsigned target) override;
+  void WillUseTexImage() override;
+  void WillModifyTexImage() override;
+  void DidModifyTexImage() override;
+  void DidUseTexImage() override;
+  bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
+                            int z_order,
+                            gfx::OverlayTransform transform,
+                            const gfx::Rect& bounds_rect,
+                            const gfx::RectF& crop_rect) override;
 
  protected:
-  virtual ~GLImageSync();
+  ~GLImageSync() override;
 
  private:
   scoped_refptr<NativeImageBuffer> buffer_;
@@ -306,15 +306,15 @@
   NativeImageBufferStub() : NativeImageBuffer() {}
 
  private:
-  virtual ~NativeImageBufferStub() {}
-  virtual void AddClient(gfx::GLImage* client) override {}
-  virtual void RemoveClient(gfx::GLImage* client) override {}
-  virtual bool IsClient(gfx::GLImage* client) override { return true; }
-  virtual void BindToTexture(GLenum target) override {}
-  virtual void WillRead(gfx::GLImage* client) override {}
-  virtual void WillWrite(gfx::GLImage* client) override {}
-  virtual void DidRead(gfx::GLImage* client) override {}
-  virtual void DidWrite(gfx::GLImage* client) override {}
+  ~NativeImageBufferStub() override {}
+  void AddClient(gfx::GLImage* client) override {}
+  void RemoveClient(gfx::GLImage* client) override {}
+  bool IsClient(gfx::GLImage* client) override { return true; }
+  void BindToTexture(GLenum target) override {}
+  void WillRead(gfx::GLImage* client) override {}
+  void WillWrite(gfx::GLImage* client) override {}
+  void DidRead(gfx::GLImage* client) override {}
+  void DidWrite(gfx::GLImage* client) override {}
 
   DISALLOW_COPY_AND_ASSIGN(NativeImageBufferStub);
 };
diff --git a/gpu/command_buffer/service/texture_manager_unittest.cc b/gpu/command_buffer/service/texture_manager_unittest.cc
index 9604cb1..157138f 100644
--- a/gpu/command_buffer/service/texture_manager_unittest.cc
+++ b/gpu/command_buffer/service/texture_manager_unittest.cc
@@ -2167,16 +2167,14 @@
     current_size_[1] = 0;
   }
 
-  virtual void TrackMemoryAllocatedChange(size_t old_size,
-                                          size_t new_size,
-                                          Pool pool)  override {
+  void TrackMemoryAllocatedChange(size_t old_size,
+                                  size_t new_size,
+                                  Pool pool) override {
     DCHECK_LT(static_cast<size_t>(pool), arraysize(current_size_));
     current_size_[pool] += new_size - old_size;
   }
 
-  virtual bool EnsureGPUMemoryAvailable(size_t size_needed) override {
-    return true;
-  }
+  bool EnsureGPUMemoryAvailable(size_t size_needed) override { return true; }
 
   size_t GetSize(Pool pool) {
     DCHECK_LT(static_cast<size_t>(pool), arraysize(current_size_));
@@ -2184,7 +2182,7 @@
   }
 
  private:
-  virtual ~CountingMemoryTracker() {}
+  ~CountingMemoryTracker() override {}
 
   size_t current_size_[2];
   DISALLOW_COPY_AND_ASSIGN(CountingMemoryTracker);
diff --git a/gpu/command_buffer/service/transfer_buffer_manager.h b/gpu/command_buffer/service/transfer_buffer_manager.h
index 40cd168..f867790 100644
--- a/gpu/command_buffer/service/transfer_buffer_manager.h
+++ b/gpu/command_buffer/service/transfer_buffer_manager.h
@@ -32,14 +32,14 @@
   TransferBufferManager();
 
   bool Initialize();
-  virtual bool RegisterTransferBuffer(int32 id,
-                                      scoped_ptr<BufferBacking> buffer_backing)
-      override;
-  virtual void DestroyTransferBuffer(int32 id) override;
-  virtual scoped_refptr<Buffer> GetTransferBuffer(int32 id) override;
+  bool RegisterTransferBuffer(
+      int32 id,
+      scoped_ptr<BufferBacking> buffer_backing) override;
+  void DestroyTransferBuffer(int32 id) override;
+  scoped_refptr<Buffer> GetTransferBuffer(int32 id) override;
 
  private:
-  virtual ~TransferBufferManager();
+  ~TransferBufferManager() override;
 
   typedef base::hash_map<int32, scoped_refptr<Buffer> > BufferMap;
   BufferMap registered_buffers_;
diff --git a/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc b/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc
index 44d0840..563b6cb 100644
--- a/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc
+++ b/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc
@@ -57,10 +57,10 @@
 
 class FakeBufferBacking : public BufferBacking {
  public:
-  virtual void* GetMemory() const override {
+  void* GetMemory() const override {
     return reinterpret_cast<void*>(0xBADF00D0);
   }
-  virtual size_t GetSize() const override { return 42; }
+  size_t GetSize() const override { return 42; }
   static scoped_ptr<BufferBacking> Make() {
     return scoped_ptr<BufferBacking>(new FakeBufferBacking);
   }
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc
index 5678778..bb2acbd 100644
--- a/gpu/command_buffer/tests/gl_manager.cc
+++ b/gpu/command_buffer/tests/gl_manager.cc
@@ -62,21 +62,21 @@
   }
 
   // Overridden from gfx::GpuMemoryBuffer:
-  virtual void* Map() override {
+  void* Map() override {
     mapped_ = true;
     return &bytes_->data().front();
   }
-  virtual void Unmap() override { mapped_ = false; }
-  virtual bool IsMapped() const override { return mapped_; }
-  virtual Format GetFormat() const override { return format_; }
-  virtual uint32 GetStride() const override {
+  void Unmap() override { mapped_ = false; }
+  bool IsMapped() const override { return mapped_; }
+  Format GetFormat() const override { return format_; }
+  uint32 GetStride() const override {
     return size_.width() * BytesPerPixel(format_);
   }
-  virtual gfx::GpuMemoryBufferHandle GetHandle() const override {
+  gfx::GpuMemoryBufferHandle GetHandle() const override {
     NOTREACHED();
     return gfx::GpuMemoryBufferHandle();
   }
-  virtual ClientBuffer AsClientBuffer() override {
+  ClientBuffer AsClientBuffer() override {
     return reinterpret_cast<ClientBuffer>(this);
   }
 
diff --git a/gpu/command_buffer/tests/gl_manager.h b/gpu/command_buffer/tests/gl_manager.h
index d76ca5b..03ed6a1 100644
--- a/gpu/command_buffer/tests/gl_manager.h
+++ b/gpu/command_buffer/tests/gl_manager.h
@@ -59,7 +59,7 @@
     bool context_lost_allowed;
   };
   GLManager();
-  virtual ~GLManager();
+  ~GLManager() override;
 
   static scoped_ptr<gfx::GpuMemoryBuffer> CreateGpuMemoryBuffer(
       const gfx::Size& size,
@@ -95,25 +95,24 @@
   const gpu::gles2::FeatureInfo::Workarounds& workarounds() const;
 
   // GpuControl implementation.
-  virtual Capabilities GetCapabilities() override;
-  virtual int32 CreateImage(ClientBuffer buffer,
-                            size_t width,
-                            size_t height,
-                            unsigned internalformat) override;
-  virtual void DestroyImage(int32 id) override;
-  virtual int32 CreateGpuMemoryBufferImage(size_t width,
-                                           size_t height,
-                                           unsigned internalformat,
-                                           unsigned usage) override;
-  virtual uint32 InsertSyncPoint() override;
-  virtual uint32 InsertFutureSyncPoint() override;
-  virtual void RetireSyncPoint(uint32 sync_point) override;
-  virtual void SignalSyncPoint(uint32 sync_point,
-                               const base::Closure& callback) override;
-  virtual void SignalQuery(uint32 query,
-                           const base::Closure& callback) override;
-  virtual void SetSurfaceVisible(bool visible) override;
-  virtual uint32 CreateStreamTexture(uint32 texture_id) override;
+  Capabilities GetCapabilities() override;
+  int32 CreateImage(ClientBuffer buffer,
+                    size_t width,
+                    size_t height,
+                    unsigned internalformat) override;
+  void DestroyImage(int32 id) override;
+  int32 CreateGpuMemoryBufferImage(size_t width,
+                                   size_t height,
+                                   unsigned internalformat,
+                                   unsigned usage) override;
+  uint32 InsertSyncPoint() override;
+  uint32 InsertFutureSyncPoint() override;
+  void RetireSyncPoint(uint32 sync_point) override;
+  void SignalSyncPoint(uint32 sync_point,
+                       const base::Closure& callback) override;
+  void SignalQuery(uint32 query, const base::Closure& callback) override;
+  void SetSurfaceVisible(bool visible) override;
+  uint32 CreateStreamTexture(uint32 texture_id) override;
 
  private:
   void PumpCommands();
diff --git a/gpu/config/gpu_blacklist.h b/gpu/config/gpu_blacklist.h
index 4311212..6b2138a 100644
--- a/gpu/config/gpu_blacklist.h
+++ b/gpu/config/gpu_blacklist.h
@@ -13,7 +13,7 @@
 
 class GPU_EXPORT GpuBlacklist : public GpuControlList {
  public:
-  virtual ~GpuBlacklist();
+  ~GpuBlacklist() override;
 
   static GpuBlacklist* Create();
 
diff --git a/gpu/config/gpu_driver_bug_list.h b/gpu/config/gpu_driver_bug_list.h
index a4bd3bb..8830cac 100644
--- a/gpu/config/gpu_driver_bug_list.h
+++ b/gpu/config/gpu_driver_bug_list.h
@@ -17,7 +17,7 @@
 
 class GPU_EXPORT GpuDriverBugList : public GpuControlList {
  public:
-  virtual ~GpuDriverBugList();
+  ~GpuDriverBugList() override;
 
   static GpuDriverBugList* Create();
 
diff --git a/gpu/config/gpu_test_config.h b/gpu/config/gpu_test_config.h
index 8600a4a..b83e027 100644
--- a/gpu/config/gpu_test_config.h
+++ b/gpu/config/gpu_test_config.h
@@ -92,10 +92,10 @@
 class GPU_EXPORT GPUTestBotConfig : public GPUTestConfig {
  public:
   GPUTestBotConfig() { }
-  virtual ~GPUTestBotConfig();
+  ~GPUTestBotConfig() override;
 
   // This should only be called when no gpu_vendor is added.
-  virtual void AddGPUVendor(uint32 gpu_vendor) override;
+  void AddGPUVendor(uint32 gpu_vendor) override;
 
   // Return false if gpu_info does not have valid vendor_id and device_id.
   bool SetGPUInfo(const GPUInfo& gpu_info);
@@ -103,7 +103,7 @@
   // Check if the bot config is valid, i.e., if it is one valid test-bot
   // environment. For example, if a field is unknown, or if OS is not one
   // fully defined OS, then it's valid.
-  virtual bool IsValid() const override;
+  bool IsValid() const override;
 
   // Check if a bot config matches a test config, i.e., the test config is a
   // superset of the bot config.
diff --git a/gpu/gles2_conform_support/egl/display.h b/gpu/gles2_conform_support/egl/display.h
index a1e82fe..651ab1a 100644
--- a/gpu/gles2_conform_support/egl/display.h
+++ b/gpu/gles2_conform_support/egl/display.h
@@ -38,7 +38,7 @@
 class Display : private gpu::GpuControl {
  public:
   explicit Display(EGLNativeDisplayType display_id);
-  virtual ~Display();
+  ~Display() override;
 
   void SetCreateOffscreen(int width, int height) {
     create_offscreen_ = true;
@@ -74,25 +74,24 @@
   bool MakeCurrent(EGLSurface draw, EGLSurface read, EGLContext ctx);
 
   // GpuControl implementation.
-  virtual gpu::Capabilities GetCapabilities() override;
-  virtual int32_t CreateImage(ClientBuffer buffer,
-                              size_t width,
-                              size_t height,
-                              unsigned internalformat) override;
-  virtual void DestroyImage(int32_t id) override;
-  virtual int32_t CreateGpuMemoryBufferImage(size_t width,
-                                             size_t height,
-                                             unsigned internalformat,
-                                             unsigned usage) override;
-  virtual uint32 InsertSyncPoint() override;
-  virtual uint32 InsertFutureSyncPoint() override;
-  virtual void RetireSyncPoint(uint32 sync_point) override;
-  virtual void SignalSyncPoint(uint32 sync_point,
-                               const base::Closure& callback) override;
-  virtual void SignalQuery(uint32 query,
-                           const base::Closure& callback) override;
-  virtual void SetSurfaceVisible(bool visible) override;
-  virtual uint32 CreateStreamTexture(uint32 texture_id) override;
+  gpu::Capabilities GetCapabilities() override;
+  int32_t CreateImage(ClientBuffer buffer,
+                      size_t width,
+                      size_t height,
+                      unsigned internalformat) override;
+  void DestroyImage(int32_t id) override;
+  int32_t CreateGpuMemoryBufferImage(size_t width,
+                                     size_t height,
+                                     unsigned internalformat,
+                                     unsigned usage) override;
+  uint32 InsertSyncPoint() override;
+  uint32 InsertFutureSyncPoint() override;
+  void RetireSyncPoint(uint32 sync_point) override;
+  void SignalSyncPoint(uint32 sync_point,
+                       const base::Closure& callback) override;
+  void SignalQuery(uint32 query, const base::Closure& callback) override;
+  void SetSurfaceVisible(bool visible) override;
+  uint32 CreateStreamTexture(uint32 texture_id) override;
 
  private:
   EGLNativeDisplayType display_id_;
