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

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: address comments 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
« no previous file with comments | « android_webview/browser/hardware_renderer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 kModeDraw. The GL commands run in kModeDraw
263 // require a correctly bound FBO. The FBO remains until the next kModeDraw.
264 // So kModeProcess between kModeDraws has correctly bound FBO, too.
265 if (draw_info->mode == AwDrawGLInfo::kModeDraw) {
266 if (!hardware_renderer_) {
267 hardware_renderer_.reset(new HardwareRenderer(this));
268 hardware_renderer_->CommitFrame();
269 }
270 hardware_renderer_->SetBackingFrameBufferObject(
271 state_restore.framebuffer_binding_ext());
272 }
273
262 ScopedAllowGL allow_gl; 274 ScopedAllowGL allow_gl;
263 275
264 if (draw_info->mode == AwDrawGLInfo::kModeProcessNoContext) { 276 if (draw_info->mode == AwDrawGLInfo::kModeProcessNoContext) {
265 LOG(ERROR) << "Received unexpected kModeProcessNoContext"; 277 LOG(ERROR) << "Received unexpected kModeProcessNoContext";
266 } 278 }
267 279
268 if (IsInsideHardwareRelease()) { 280 if (IsInsideHardwareRelease()) {
269 hardware_renderer_.reset(); 281 hardware_renderer_.reset();
270 // Flush the idle queue in tear down. 282 // Flush the idle queue in tear down.
271 DeferredGpuCommandService::GetInstance()->PerformAllIdleWork(); 283 DeferredGpuCommandService::GetInstance()->PerformAllIdleWork();
272 return; 284 return;
273 } 285 }
274 286
275 if (draw_info->mode != AwDrawGLInfo::kModeDraw) { 287 if (draw_info->mode != AwDrawGLInfo::kModeDraw) {
276 if (draw_info->mode == AwDrawGLInfo::kModeProcess) { 288 if (draw_info->mode == AwDrawGLInfo::kModeProcess) {
277 DeferredGpuCommandService::GetInstance()->PerformIdleWork(true); 289 DeferredGpuCommandService::GetInstance()->PerformIdleWork(true);
278 } 290 }
279 return; 291 return;
280 } 292 }
281 293
282 if (!hardware_renderer_) { 294 hardware_renderer_->DrawGL(state_restore.stencil_enabled(), draw_info);
283 hardware_renderer_.reset(new HardwareRenderer(this));
284 hardware_renderer_->CommitFrame();
285 }
286
287 hardware_renderer_->DrawGL(state_restore.stencil_enabled(),
288 state_restore.framebuffer_binding_ext(),
289 draw_info);
290 DeferredGpuCommandService::GetInstance()->PerformIdleWork(false); 295 DeferredGpuCommandService::GetInstance()->PerformIdleWork(false);
291 } 296 }
292 297
293 void SharedRendererState::ReleaseHardwareDrawIfNeededOnUI() { 298 void SharedRendererState::ReleaseHardwareDrawIfNeededOnUI() {
294 ReleaseCompositorResourcesIfNeededOnUI(true); 299 ReleaseCompositorResourcesIfNeededOnUI(true);
295 } 300 }
296 301
297 void SharedRendererState::DeleteHardwareRendererOnUI() { 302 void SharedRendererState::DeleteHardwareRendererOnUI() {
298 ReleaseCompositorResourcesIfNeededOnUI(false); 303 ReleaseCompositorResourcesIfNeededOnUI(false);
299 } 304 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 : shared_renderer_state_(shared_renderer_state) { 357 : shared_renderer_state_(shared_renderer_state) {
353 DCHECK(!shared_renderer_state_->IsInsideHardwareRelease()); 358 DCHECK(!shared_renderer_state_->IsInsideHardwareRelease());
354 shared_renderer_state_->SetInsideHardwareRelease(true); 359 shared_renderer_state_->SetInsideHardwareRelease(true);
355 } 360 }
356 361
357 SharedRendererState::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { 362 SharedRendererState::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() {
358 shared_renderer_state_->SetInsideHardwareRelease(false); 363 shared_renderer_state_->SetInsideHardwareRelease(false);
359 } 364 }
360 365
361 } // namespace android_webview 366 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/hardware_renderer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698