Chromium Code Reviews| Index: ui/aura/bench/bench_main.cc |
| diff --git a/ui/aura/bench/bench_main.cc b/ui/aura/bench/bench_main.cc |
| index ff0d32dee897ded309c82cabca9f8e2958b486e4..4668fd21343bd092028b3545ee6471a0369b0d56 100644 |
| --- a/ui/aura/bench/bench_main.cc |
| +++ b/ui/aura/bench/bench_main.cc |
| @@ -138,36 +138,17 @@ class BenchCompositorObserver : public ui::CompositorObserver { |
| DISALLOW_COPY_AND_ASSIGN(BenchCompositorObserver); |
| }; |
| -class WebGLTexture : public ui::Texture { |
| - public: |
| - WebGLTexture(gpu::gles2::GLES2Interface* gl, const gfx::Size& size) |
| - : ui::Texture(false, size, 1.0f), |
| - gl_(gl), |
| - texture_id_(0u) { |
| - gl->GenTextures(1, &texture_id_); |
| - gl->BindTexture(GL_TEXTURE_2D, texture_id_); |
| - gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| - gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
| - gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
| - gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
| - gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.width(), size.height(), |
| - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); |
| - } |
| - |
| - virtual unsigned int PrepareTexture() OVERRIDE { |
| - return texture_id_; |
| - } |
| - |
| - private: |
| - virtual ~WebGLTexture() { |
| - gl_->DeleteTextures(1, &texture_id_); |
| - } |
| - |
| - gpu::gles2::GLES2Interface* gl_; |
| - GLuint texture_id_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(WebGLTexture); |
| -}; |
| +void ReturnMailbox(scoped_refptr<cc::ContextProvider> context_provider, |
| + unsigned int texture, |
|
danakj
2014/04/08 16:08:01
nit: uint32?
piman
2014/04/08 23:17:46
GLuint
|
| + unsigned int sync_point, |
| + bool is_lost) { |
| + if (is_lost) |
| + return; |
|
danakj
2014/04/08 16:08:01
Don't you want to delete the texture here, just be
piman
2014/04/08 23:17:46
Done.
|
| + gpu::gles2::GLES2Interface* gl = context_provider->ContextGL(); |
| + gl->WaitSyncPointCHROMIUM(sync_point); |
| + gl->DeleteTextures(1, &texture); |
| + gl->ShallowFlushCHROMIUM(); |
| +} |
| // A benchmark that adds a texture layer that is updated every frame. |
| class WebGLBench : public BenchCompositorObserver { |
| @@ -177,7 +158,6 @@ class WebGLBench : public BenchCompositorObserver { |
| parent_(parent), |
| webgl_(ui::LAYER_TEXTURED), |
| compositor_(compositor), |
| - texture_(), |
| fbo_(0), |
| do_draw_(true) { |
| CommandLine* command_line = CommandLine::ForCurrentProcess(); |
| @@ -205,23 +185,47 @@ class WebGLBench : public BenchCompositorObserver { |
| context_provider_ = |
| ui::ContextFactory::GetInstance()->SharedMainThreadContextProvider(); |
| gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL(); |
| - texture_ = new WebGLTexture(gl, bounds.size()); |
| + unsigned int texture = 0; |
| + gl->GenTextures(1, &texture); |
| + gl->BindTexture(GL_TEXTURE_2D, texture); |
| + gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| + gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
| + gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
| + gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
| + gl->TexImage2D(GL_TEXTURE_2D, |
| + 0, |
| + GL_RGBA, |
| + width, |
| + height, |
| + 0, |
| + GL_RGBA, |
| + GL_UNSIGNED_BYTE, |
| + NULL); |
| + gpu::Mailbox mailbox; |
| + gl->GenMailboxCHROMIUM(mailbox.name); |
| + gl->ProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| + |
| gl->GenFramebuffers(1, &fbo_); |
| - compositor->AddObserver(this); |
| - webgl_.SetExternalTexture(texture_.get()); |
| gl->BindFramebuffer(GL_FRAMEBUFFER, fbo_); |
| gl->FramebufferTexture2D( |
| - GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, |
| - GL_TEXTURE_2D, texture_->PrepareTexture(), 0); |
| + GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); |
| gl->ClearColor(0.f, 1.f, 0.f, 1.f); |
| gl->Clear(GL_COLOR_BUFFER_BIT); |
| gl->Flush(); |
| + |
| + unsigned int sync_point = gl->InsertSyncPointCHROMIUM(); |
|
danakj
2014/04/08 16:08:01
uint32? (trying to keep "unsigned int" inside cc/,
piman
2014/04/08 23:17:46
GLuint
|
| + webgl_.SetTextureMailbox( |
| + cc::TextureMailbox(mailbox, GL_TEXTURE_2D, sync_point), |
| + cc::SingleReleaseCallback::Create( |
| + base::Bind(ReturnMailbox, context_provider_, texture)), |
| + bounds.size()); |
| + compositor->AddObserver(this); |
| } |
| virtual ~WebGLBench() { |
| - context_provider_->ContextGL()->DeleteFramebuffers(1, &fbo_); |
| webgl_.SetShowPaintedContent(); |
| - texture_ = NULL; |
| + gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL(); |
| + gl->DeleteFramebuffers(1, &fbo_); |
| compositor_->RemoveObserver(this); |
| } |
| @@ -232,7 +236,6 @@ class WebGLBench : public BenchCompositorObserver { |
| gl->Clear(GL_COLOR_BUFFER_BIT); |
| gl->Flush(); |
| } |
| - webgl_.SetExternalTexture(texture_.get()); |
| webgl_.SchedulePaint(gfx::Rect(webgl_.bounds().size())); |
| compositor_->ScheduleDraw(); |
| } |
| @@ -242,7 +245,6 @@ class WebGLBench : public BenchCompositorObserver { |
| Layer webgl_; |
| Compositor* compositor_; |
| scoped_refptr<cc::ContextProvider> context_provider_; |
| - scoped_refptr<WebGLTexture> texture_; |
| // The FBO that is used to render to the texture. |
| unsigned int fbo_; |