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

Side by Side Diff: android_webview/browser/in_process_view_renderer.cc

Issue 16613002: Hook up android webview synchronous compositor GL init (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include "android_webview/browser/in_process_view_renderer.h" 5 #include "android_webview/browser/in_process_view_renderer.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include "android_webview/public/browser/draw_gl.h" 9 #include "android_webview/public/browser/draw_gl.h"
10 #include "android_webview/public/browser/draw_sw.h" 10 #include "android_webview/public/browser/draw_sw.h"
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 } 309 }
310 310
311 void InProcessViewRenderer::WebContentsGone() { 311 void InProcessViewRenderer::WebContentsGone() {
312 web_contents_ = NULL; 312 web_contents_ = NULL;
313 compositor_ = NULL; 313 compositor_ = NULL;
314 } 314 }
315 315
316 bool InProcessViewRenderer::PrepareDrawGL(int x, int y) { 316 bool InProcessViewRenderer::PrepareDrawGL(int x, int y) {
317 // No harm in updating |hw_rendering_scroll_| even if we return false. 317 // No harm in updating |hw_rendering_scroll_| even if we return false.
318 hw_rendering_scroll_ = gfx::Point(x, y); 318 hw_rendering_scroll_ = gfx::Point(x, y);
319 return attached_to_window_ && compositor_ && compositor_->IsHwReady() && 319 return attached_to_window_ && compositor_ && !hardware_failed_;
320 !hardware_failed_;
321 } 320 }
322 321
323 void InProcessViewRenderer::DrawGL(AwDrawGLInfo* draw_info) { 322 void InProcessViewRenderer::DrawGL(AwDrawGLInfo* draw_info) {
324 DCHECK(view_visible_); 323 DCHECK(view_visible_);
325 324
326 // We need to watch if the current Android context has changed and enforce 325 // We need to watch if the current Android context has changed and enforce
327 // a clean-up in the compositor. 326 // a clean-up in the compositor.
328 EGLContext current_context = eglGetCurrentContext(); 327 EGLContext current_context = eglGetCurrentContext();
329 if (!current_context) { 328 if (!current_context) {
330 LOG(WARNING) << "No current context attached. Skipping composite."; 329 LOG(WARNING) << "No current context attached. Skipping composite.";
331 return; 330 return;
332 } 331 }
333 332
334 GLStateRestore state_restore; 333 GLStateRestore state_restore;
335 334
336 if (attached_to_window_ && compositor_ && !hardware_initialized_) { 335 if (attached_to_window_ && compositor_ && !hardware_initialized_) {
337 // TODO(boliu): Actually initialize the compositor GL path. 336 hardware_failed_ = !compositor_->InitializeHwDraw();
338 hardware_initialized_ = true; 337 hardware_initialized_ = true;
339 egl_context_at_init_ = current_context; 338 egl_context_at_init_ = current_context;
339
340 if (hardware_failed_)
341 return;
340 } 342 }
341 343
342 if (draw_info->mode == AwDrawGLInfo::kModeProcess) 344 if (draw_info->mode == AwDrawGLInfo::kModeProcess)
343 return; 345 return;
344 346
345 if (egl_context_at_init_ != current_context) { 347 if (egl_context_at_init_ != current_context) {
346 // TODO(boliu): Handle context lost 348 // TODO(boliu): Handle context lost
347 } 349 }
348 350
349 // TODO(boliu): Make sure this is not called before compositor is initialized 351 // TODO(boliu): Make sure this is not called before compositor is initialized
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 // TODO(joth): BrowserViewRendererImpl had a bunch of logic for dpi and page 578 // TODO(joth): BrowserViewRendererImpl had a bunch of logic for dpi and page
577 // scale here. Determine what if any needs bringing over to this class. 579 // scale here. Determine what if any needs bringing over to this class.
578 return CompositeSW(canvas); 580 return CompositeSW(canvas);
579 } 581 }
580 582
581 bool InProcessViewRenderer::CompositeSW(SkCanvas* canvas) { 583 bool InProcessViewRenderer::CompositeSW(SkCanvas* canvas) {
582 return compositor_ && compositor_->DemandDrawSw(canvas); 584 return compositor_ && compositor_->DemandDrawSw(canvas);
583 } 585 }
584 586
585 } // namespace android_webview 587 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698