Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |