Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(583)

Unified Diff: ui/aura/bench/bench_main.cc

Issue 228083002: Make ReflectorImpl use mailboxes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_aura.cc ('k') | ui/compositor/compositor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..337da8da037916c03844011840bb2e089b2dc836 100644
--- a/ui/aura/bench/bench_main.cc
+++ b/ui/aura/bench/bench_main.cc
@@ -138,36 +138,15 @@ 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,
+ GLuint texture,
+ GLuint sync_point,
+ bool is_lost) {
+ 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 +156,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 +183,47 @@ class WebGLBench : public BenchCompositorObserver {
context_provider_ =
ui::ContextFactory::GetInstance()->SharedMainThreadContextProvider();
gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL();
- texture_ = new WebGLTexture(gl, bounds.size());
+ GLuint 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();
+
+ GLuint sync_point = gl->InsertSyncPointCHROMIUM();
+ 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 +234,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 +243,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_;
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_aura.cc ('k') | ui/compositor/compositor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698