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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #if defined(USE_X11) 5 #if defined(USE_X11)
6 #include <X11/Xlib.h> 6 #include <X11/Xlib.h>
7 #endif 7 #endif
8 8
9 #include "base/at_exit.h" 9 #include "base/at_exit.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 int frames() const { return frames_; } 131 int frames() const { return frames_; }
132 132
133 private: 133 private:
134 TimeTicks start_time_; 134 TimeTicks start_time_;
135 int frames_; 135 int frames_;
136 int max_frames_; 136 int max_frames_;
137 137
138 DISALLOW_COPY_AND_ASSIGN(BenchCompositorObserver); 138 DISALLOW_COPY_AND_ASSIGN(BenchCompositorObserver);
139 }; 139 };
140 140
141 class WebGLTexture : public ui::Texture { 141 void ReturnMailbox(scoped_refptr<cc::ContextProvider> context_provider,
142 public: 142 GLuint texture,
143 WebGLTexture(gpu::gles2::GLES2Interface* gl, const gfx::Size& size) 143 GLuint sync_point,
144 : ui::Texture(false, size, 1.0f), 144 bool is_lost) {
145 gl_(gl), 145 gpu::gles2::GLES2Interface* gl = context_provider->ContextGL();
146 texture_id_(0u) { 146 gl->WaitSyncPointCHROMIUM(sync_point);
147 gl->GenTextures(1, &texture_id_); 147 gl->DeleteTextures(1, &texture);
148 gl->BindTexture(GL_TEXTURE_2D, texture_id_); 148 gl->ShallowFlushCHROMIUM();
149 gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 149 }
150 gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
151 gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
152 gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
153 gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.width(), size.height(),
154 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
155 }
156
157 virtual unsigned int PrepareTexture() OVERRIDE {
158 return texture_id_;
159 }
160
161 private:
162 virtual ~WebGLTexture() {
163 gl_->DeleteTextures(1, &texture_id_);
164 }
165
166 gpu::gles2::GLES2Interface* gl_;
167 GLuint texture_id_;
168
169 DISALLOW_COPY_AND_ASSIGN(WebGLTexture);
170 };
171 150
172 // A benchmark that adds a texture layer that is updated every frame. 151 // A benchmark that adds a texture layer that is updated every frame.
173 class WebGLBench : public BenchCompositorObserver { 152 class WebGLBench : public BenchCompositorObserver {
174 public: 153 public:
175 WebGLBench(Layer* parent, Compositor* compositor, int max_frames) 154 WebGLBench(Layer* parent, Compositor* compositor, int max_frames)
176 : BenchCompositorObserver(max_frames), 155 : BenchCompositorObserver(max_frames),
177 parent_(parent), 156 parent_(parent),
178 webgl_(ui::LAYER_TEXTURED), 157 webgl_(ui::LAYER_TEXTURED),
179 compositor_(compositor), 158 compositor_(compositor),
180 texture_(),
181 fbo_(0), 159 fbo_(0),
182 do_draw_(true) { 160 do_draw_(true) {
183 CommandLine* command_line = CommandLine::ForCurrentProcess(); 161 CommandLine* command_line = CommandLine::ForCurrentProcess();
184 do_draw_ = !command_line->HasSwitch("disable-draw"); 162 do_draw_ = !command_line->HasSwitch("disable-draw");
185 163
186 std::string webgl_size = command_line->GetSwitchValueASCII("webgl-size"); 164 std::string webgl_size = command_line->GetSwitchValueASCII("webgl-size");
187 int width = 0; 165 int width = 0;
188 int height = 0; 166 int height = 0;
189 if (!webgl_size.empty()) { 167 if (!webgl_size.empty()) {
190 std::vector<std::string> split_size; 168 std::vector<std::string> split_size;
191 base::SplitString(webgl_size, 'x', &split_size); 169 base::SplitString(webgl_size, 'x', &split_size);
192 if (split_size.size() == 2) { 170 if (split_size.size() == 2) {
193 width = atoi(split_size[0].c_str()); 171 width = atoi(split_size[0].c_str());
194 height = atoi(split_size[1].c_str()); 172 height = atoi(split_size[1].c_str());
195 } 173 }
196 } 174 }
197 if (!width || !height) { 175 if (!width || !height) {
198 width = 800; 176 width = 800;
199 height = 600; 177 height = 600;
200 } 178 }
201 gfx::Rect bounds(width, height); 179 gfx::Rect bounds(width, height);
202 webgl_.SetBounds(bounds); 180 webgl_.SetBounds(bounds);
203 parent_->Add(&webgl_); 181 parent_->Add(&webgl_);
204 182
205 context_provider_ = 183 context_provider_ =
206 ui::ContextFactory::GetInstance()->SharedMainThreadContextProvider(); 184 ui::ContextFactory::GetInstance()->SharedMainThreadContextProvider();
207 gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL(); 185 gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL();
208 texture_ = new WebGLTexture(gl, bounds.size()); 186 GLuint texture = 0;
187 gl->GenTextures(1, &texture);
188 gl->BindTexture(GL_TEXTURE_2D, texture);
189 gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
190 gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
191 gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
192 gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
193 gl->TexImage2D(GL_TEXTURE_2D,
194 0,
195 GL_RGBA,
196 width,
197 height,
198 0,
199 GL_RGBA,
200 GL_UNSIGNED_BYTE,
201 NULL);
202 gpu::Mailbox mailbox;
203 gl->GenMailboxCHROMIUM(mailbox.name);
204 gl->ProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
205
209 gl->GenFramebuffers(1, &fbo_); 206 gl->GenFramebuffers(1, &fbo_);
210 compositor->AddObserver(this);
211 webgl_.SetExternalTexture(texture_.get());
212 gl->BindFramebuffer(GL_FRAMEBUFFER, fbo_); 207 gl->BindFramebuffer(GL_FRAMEBUFFER, fbo_);
213 gl->FramebufferTexture2D( 208 gl->FramebufferTexture2D(
214 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 209 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
215 GL_TEXTURE_2D, texture_->PrepareTexture(), 0);
216 gl->ClearColor(0.f, 1.f, 0.f, 1.f); 210 gl->ClearColor(0.f, 1.f, 0.f, 1.f);
217 gl->Clear(GL_COLOR_BUFFER_BIT); 211 gl->Clear(GL_COLOR_BUFFER_BIT);
218 gl->Flush(); 212 gl->Flush();
213
214 GLuint sync_point = gl->InsertSyncPointCHROMIUM();
215 webgl_.SetTextureMailbox(
216 cc::TextureMailbox(mailbox, GL_TEXTURE_2D, sync_point),
217 cc::SingleReleaseCallback::Create(
218 base::Bind(ReturnMailbox, context_provider_, texture)),
219 bounds.size());
220 compositor->AddObserver(this);
219 } 221 }
220 222
221 virtual ~WebGLBench() { 223 virtual ~WebGLBench() {
222 context_provider_->ContextGL()->DeleteFramebuffers(1, &fbo_);
223 webgl_.SetShowPaintedContent(); 224 webgl_.SetShowPaintedContent();
224 texture_ = NULL; 225 gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL();
226 gl->DeleteFramebuffers(1, &fbo_);
225 compositor_->RemoveObserver(this); 227 compositor_->RemoveObserver(this);
226 } 228 }
227 229
228 virtual void Draw() OVERRIDE { 230 virtual void Draw() OVERRIDE {
229 if (do_draw_) { 231 if (do_draw_) {
230 gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL(); 232 gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL();
231 gl->ClearColor((frames() % kFrames)*1.0/kFrames, 1.f, 0.f, 1.f); 233 gl->ClearColor((frames() % kFrames)*1.0/kFrames, 1.f, 0.f, 1.f);
232 gl->Clear(GL_COLOR_BUFFER_BIT); 234 gl->Clear(GL_COLOR_BUFFER_BIT);
233 gl->Flush(); 235 gl->Flush();
234 } 236 }
235 webgl_.SetExternalTexture(texture_.get());
236 webgl_.SchedulePaint(gfx::Rect(webgl_.bounds().size())); 237 webgl_.SchedulePaint(gfx::Rect(webgl_.bounds().size()));
237 compositor_->ScheduleDraw(); 238 compositor_->ScheduleDraw();
238 } 239 }
239 240
240 private: 241 private:
241 Layer* parent_; 242 Layer* parent_;
242 Layer webgl_; 243 Layer webgl_;
243 Compositor* compositor_; 244 Compositor* compositor_;
244 scoped_refptr<cc::ContextProvider> context_provider_; 245 scoped_refptr<cc::ContextProvider> context_provider_;
245 scoped_refptr<WebGLTexture> texture_;
246 246
247 // The FBO that is used to render to the texture. 247 // The FBO that is used to render to the texture.
248 unsigned int fbo_; 248 unsigned int fbo_;
249 249
250 // Whether or not to draw to the texture every frame. 250 // Whether or not to draw to the texture every frame.
251 bool do_draw_; 251 bool do_draw_;
252 252
253 DISALLOW_COPY_AND_ASSIGN(WebGLBench); 253 DISALLOW_COPY_AND_ASSIGN(WebGLBench);
254 }; 254 };
255 255
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 ui::PrintLayerHierarchy(host->window()->layer(), gfx::Point(100, 100)); 361 ui::PrintLayerHierarchy(host->window()->layer(), gfx::Point(100, 100));
362 #endif 362 #endif
363 363
364 host->Show(); 364 host->Show();
365 base::MessageLoopForUI::current()->Run(); 365 base::MessageLoopForUI::current()->Run();
366 focus_client.reset(); 366 focus_client.reset();
367 host.reset(); 367 host.reset();
368 368
369 return 0; 369 return 0;
370 } 370 }
OLDNEW
« 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