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

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

Issue 1335033004: Make sure FBO is correct for both kModeProcess and kModeDraw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Set FBO before any GL runs Created 5 years, 3 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/shared_renderer_state.h" 5 #include "android_webview/browser/shared_renderer_state.h"
6 6
7 #include "android_webview/browser/browser_view_renderer.h" 7 #include "android_webview/browser/browser_view_renderer.h"
8 #include "android_webview/browser/child_frame.h" 8 #include "android_webview/browser/child_frame.h"
9 #include "android_webview/browser/deferred_gpu_command_service.h" 9 #include "android_webview/browser/deferred_gpu_command_service.h"
10 #include "android_webview/browser/hardware_renderer.h" 10 #include "android_webview/browser/hardware_renderer.h"
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 base::AutoLock lock(lock_); 252 base::AutoLock lock(lock_);
253 if (renderer_manager_key_ != manager->NullKey()) { 253 if (renderer_manager_key_ != manager->NullKey()) {
254 manager->DidDrawGL(renderer_manager_key_); 254 manager->DidDrawGL(renderer_manager_key_);
255 } 255 }
256 } 256 }
257 257
258 ScopedAppGLStateRestore state_restore( 258 ScopedAppGLStateRestore state_restore(
259 draw_info->mode == AwDrawGLInfo::kModeDraw 259 draw_info->mode == AwDrawGLInfo::kModeDraw
260 ? ScopedAppGLStateRestore::MODE_DRAW 260 ? ScopedAppGLStateRestore::MODE_DRAW
261 : ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT); 261 : ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT);
262 // Set the correct FBO before any GL command is run. The GL commands run in
263 // kModeDraw and kModeProcess may require a correctly bound FBO.
264 if (hardware_renderer_) {
265 hardware_renderer_->SetBackingFrameBufferObject(
266 state_restore.framebuffer_binding_ext());
boliu 2015/09/14 21:25:35 Limit this to kModeDraw only. You can probably mov
hush (inactive) 2015/09/14 23:00:27 Done.
267 }
268
262 ScopedAllowGL allow_gl; 269 ScopedAllowGL allow_gl;
263 270
264 if (draw_info->mode == AwDrawGLInfo::kModeProcessNoContext) { 271 if (draw_info->mode == AwDrawGLInfo::kModeProcessNoContext) {
265 LOG(ERROR) << "Received unexpected kModeProcessNoContext"; 272 LOG(ERROR) << "Received unexpected kModeProcessNoContext";
266 } 273 }
267 274
268 if (IsInsideHardwareRelease()) { 275 if (IsInsideHardwareRelease()) {
269 hardware_renderer_.reset(); 276 hardware_renderer_.reset();
270 // Flush the idle queue in tear down. 277 // Flush the idle queue in tear down.
271 DeferredGpuCommandService::GetInstance()->PerformAllIdleWork(); 278 DeferredGpuCommandService::GetInstance()->PerformAllIdleWork();
272 return; 279 return;
273 } 280 }
274 281
275 if (draw_info->mode != AwDrawGLInfo::kModeDraw) { 282 if (draw_info->mode != AwDrawGLInfo::kModeDraw) {
276 if (draw_info->mode == AwDrawGLInfo::kModeProcess) { 283 if (draw_info->mode == AwDrawGLInfo::kModeProcess) {
277 DeferredGpuCommandService::GetInstance()->PerformIdleWork(true); 284 DeferredGpuCommandService::GetInstance()->PerformIdleWork(true);
jbauman 2015/09/14 21:07:30 The hardware_renderer_ won't do gl_surface_->Reset
hush (inactive) 2015/09/14 21:20:17 I think it won't cause problems as long as the cor
boliu 2015/09/14 21:25:35 Idea is FBO will always be the correct one at all
278 } 285 }
279 return; 286 return;
280 } 287 }
281 288
282 if (!hardware_renderer_) { 289 if (!hardware_renderer_) {
283 hardware_renderer_.reset(new HardwareRenderer(this)); 290 hardware_renderer_.reset(new HardwareRenderer(this));
284 hardware_renderer_->CommitFrame(); 291 hardware_renderer_->CommitFrame();
285 } 292 }
286 293
287 hardware_renderer_->DrawGL(state_restore.stencil_enabled(), 294 hardware_renderer_->DrawGL(state_restore.stencil_enabled(),
288 state_restore.framebuffer_binding_ext(),
289 draw_info); 295 draw_info);
290 DeferredGpuCommandService::GetInstance()->PerformIdleWork(false); 296 DeferredGpuCommandService::GetInstance()->PerformIdleWork(false);
291 } 297 }
292 298
293 void SharedRendererState::ReleaseHardwareDrawIfNeededOnUI() { 299 void SharedRendererState::ReleaseHardwareDrawIfNeededOnUI() {
294 ReleaseCompositorResourcesIfNeededOnUI(true); 300 ReleaseCompositorResourcesIfNeededOnUI(true);
295 } 301 }
296 302
297 void SharedRendererState::DeleteHardwareRendererOnUI() { 303 void SharedRendererState::DeleteHardwareRendererOnUI() {
298 ReleaseCompositorResourcesIfNeededOnUI(false); 304 ReleaseCompositorResourcesIfNeededOnUI(false);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 : shared_renderer_state_(shared_renderer_state) { 358 : shared_renderer_state_(shared_renderer_state) {
353 DCHECK(!shared_renderer_state_->IsInsideHardwareRelease()); 359 DCHECK(!shared_renderer_state_->IsInsideHardwareRelease());
354 shared_renderer_state_->SetInsideHardwareRelease(true); 360 shared_renderer_state_->SetInsideHardwareRelease(true);
355 } 361 }
356 362
357 SharedRendererState::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { 363 SharedRendererState::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() {
358 shared_renderer_state_->SetInsideHardwareRelease(false); 364 shared_renderer_state_->SetInsideHardwareRelease(false);
359 } 365 }
360 366
361 } // namespace android_webview 367 } // namespace android_webview
OLDNEW
« android_webview/browser/hardware_renderer.cc ('K') | « android_webview/browser/hardware_renderer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698