| 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/deferred_gpu_command_service.h" | 8 #include "android_webview/browser/deferred_gpu_command_service.h" | 
| 9 #include "android_webview/browser/hardware_renderer.h" | 9 #include "android_webview/browser/hardware_renderer.h" | 
| 10 #include "android_webview/browser/scoped_app_gl_state_restore.h" | 10 #include "android_webview/browser/scoped_app_gl_state_restore.h" | 
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 81     LAZY_INSTANCE_INITIALIZER; | 81     LAZY_INSTANCE_INITIALIZER; | 
| 82 | 82 | 
| 83 } | 83 } | 
| 84 | 84 | 
| 85 SharedRendererState::SharedRendererState( | 85 SharedRendererState::SharedRendererState( | 
| 86     const scoped_refptr<base::SingleThreadTaskRunner>& ui_loop, | 86     const scoped_refptr<base::SingleThreadTaskRunner>& ui_loop, | 
| 87     BrowserViewRenderer* browser_view_renderer) | 87     BrowserViewRenderer* browser_view_renderer) | 
| 88     : ui_loop_(ui_loop), | 88     : ui_loop_(ui_loop), | 
| 89       browser_view_renderer_(browser_view_renderer), | 89       browser_view_renderer_(browser_view_renderer), | 
| 90       renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()), | 90       renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()), | 
| 91       force_commit_(false), |  | 
| 92       inside_hardware_release_(false), | 91       inside_hardware_release_(false), | 
| 93       needs_force_invalidate_on_next_draw_gl_(false), |  | 
| 94       weak_factory_on_ui_thread_(this) { | 92       weak_factory_on_ui_thread_(this) { | 
| 95   DCHECK(ui_loop_->BelongsToCurrentThread()); | 93   DCHECK(ui_loop_->BelongsToCurrentThread()); | 
| 96   DCHECK(browser_view_renderer_); | 94   DCHECK(browser_view_renderer_); | 
| 97   ui_thread_weak_ptr_ = weak_factory_on_ui_thread_.GetWeakPtr(); | 95   ui_thread_weak_ptr_ = weak_factory_on_ui_thread_.GetWeakPtr(); | 
| 98   ResetRequestDrawGLCallback(); | 96   ResetRequestDrawGLCallback(); | 
| 99 } | 97 } | 
| 100 | 98 | 
| 101 SharedRendererState::~SharedRendererState() { | 99 SharedRendererState::~SharedRendererState() { | 
| 102   DCHECK(ui_loop_->BelongsToCurrentThread()); | 100   DCHECK(ui_loop_->BelongsToCurrentThread()); | 
| 103   DCHECK(!hardware_renderer_.get()); | 101   DCHECK(!hardware_renderer_.get()); | 
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 150 void SharedRendererState::SetScrollOffsetOnUI(gfx::Vector2d scroll_offset) { | 148 void SharedRendererState::SetScrollOffsetOnUI(gfx::Vector2d scroll_offset) { | 
| 151   base::AutoLock lock(lock_); | 149   base::AutoLock lock(lock_); | 
| 152   scroll_offset_ = scroll_offset; | 150   scroll_offset_ = scroll_offset; | 
| 153 } | 151 } | 
| 154 | 152 | 
| 155 gfx::Vector2d SharedRendererState::GetScrollOffsetOnRT() { | 153 gfx::Vector2d SharedRendererState::GetScrollOffsetOnRT() { | 
| 156   base::AutoLock lock(lock_); | 154   base::AutoLock lock(lock_); | 
| 157   return scroll_offset_; | 155   return scroll_offset_; | 
| 158 } | 156 } | 
| 159 | 157 | 
| 160 bool SharedRendererState::HasCompositorFrameOnUI() const { |  | 
| 161   base::AutoLock lock(lock_); |  | 
| 162   return compositor_frame_.get(); |  | 
| 163 } |  | 
| 164 |  | 
| 165 void SharedRendererState::SetCompositorFrameOnUI( | 158 void SharedRendererState::SetCompositorFrameOnUI( | 
| 166     scoped_ptr<cc::CompositorFrame> frame, | 159     scoped_ptr<cc::CompositorFrame> frame) { | 
| 167     bool force_commit) { |  | 
| 168   base::AutoLock lock(lock_); | 160   base::AutoLock lock(lock_); | 
| 169   DCHECK(!compositor_frame_.get()); | 161   DCHECK(!compositor_frame_.get()); | 
| 170   compositor_frame_ = frame.Pass(); | 162   compositor_frame_ = frame.Pass(); | 
| 171   force_commit_ = force_commit; |  | 
| 172 } | 163 } | 
| 173 | 164 | 
| 174 scoped_ptr<cc::CompositorFrame> SharedRendererState::PassCompositorFrameOnRT() { | 165 scoped_ptr<cc::CompositorFrame> SharedRendererState::PassCompositorFrameOnRT() { | 
| 175   base::AutoLock lock(lock_); | 166   base::AutoLock lock(lock_); | 
| 176   return compositor_frame_.Pass(); | 167   return compositor_frame_.Pass(); | 
| 177 } | 168 } | 
| 178 | 169 | 
| 179 scoped_ptr<cc::CompositorFrame> | 170 scoped_ptr<cc::CompositorFrame> | 
| 180 SharedRendererState::PassUncommittedFrameOnUI() { | 171 SharedRendererState::PassUncommittedFrameOnUI() { | 
| 181   base::AutoLock lock(lock_); | 172   base::AutoLock lock(lock_); | 
| 182   return compositor_frame_.Pass(); | 173   return compositor_frame_.Pass(); | 
| 183 } | 174 } | 
| 184 | 175 | 
| 185 bool SharedRendererState::ForceCommitOnRT() const { |  | 
| 186   base::AutoLock lock(lock_); |  | 
| 187   return force_commit_; |  | 
| 188 } |  | 
| 189 |  | 
| 190 bool SharedRendererState::UpdateDrawConstraintsOnRT( | 176 bool SharedRendererState::UpdateDrawConstraintsOnRT( | 
| 191     const ParentCompositorDrawConstraints& parent_draw_constraints) { | 177     const ParentCompositorDrawConstraints& parent_draw_constraints) { | 
| 192   base::AutoLock lock(lock_); | 178   base::AutoLock lock(lock_); | 
| 193   if (needs_force_invalidate_on_next_draw_gl_ || | 179   if (!parent_draw_constraints_.Equals(parent_draw_constraints)) { | 
| 194       !parent_draw_constraints_.Equals(parent_draw_constraints)) { |  | 
| 195     parent_draw_constraints_ = parent_draw_constraints; | 180     parent_draw_constraints_ = parent_draw_constraints; | 
| 196     return true; | 181     return true; | 
| 197   } | 182   } | 
| 198 | 183 | 
| 199   return false; | 184   return false; | 
| 200 } | 185 } | 
| 201 | 186 | 
| 202 void SharedRendererState::PostExternalDrawConstraintsToChildCompositorOnRT( | 187 void SharedRendererState::PostExternalDrawConstraintsToChildCompositorOnRT( | 
| 203     const ParentCompositorDrawConstraints& parent_draw_constraints) { | 188     const ParentCompositorDrawConstraints& parent_draw_constraints) { | 
| 204   if (UpdateDrawConstraintsOnRT(parent_draw_constraints)) { | 189   if (UpdateDrawConstraintsOnRT(parent_draw_constraints)) { | 
| 205     // No need to hold the lock_ during the post task. | 190     // No need to hold the lock_ during the post task. | 
| 206     ui_loop_->PostTask( | 191     ui_loop_->PostTask( | 
| 207         FROM_HERE, | 192         FROM_HERE, | 
| 208         base::Bind(&SharedRendererState::UpdateParentDrawConstraintsOnUI, | 193         base::Bind(&SharedRendererState::UpdateParentDrawConstraintsOnUI, | 
| 209                    ui_thread_weak_ptr_)); | 194                    ui_thread_weak_ptr_)); | 
| 210   } | 195   } | 
| 211 } | 196 } | 
| 212 | 197 | 
| 213 void SharedRendererState::DidSkipCommitFrameOnRT() { |  | 
| 214   ui_loop_->PostTask(FROM_HERE, |  | 
| 215                      base::Bind(&SharedRendererState::DidSkipCommitFrameOnUI, |  | 
| 216                                 ui_thread_weak_ptr_)); |  | 
| 217 } |  | 
| 218 |  | 
| 219 void SharedRendererState::DidSkipCommitFrameOnUI() { |  | 
| 220   DCHECK(ui_loop_->BelongsToCurrentThread()); |  | 
| 221   browser_view_renderer_->DidSkipCommitFrame(); |  | 
| 222 } |  | 
| 223 |  | 
| 224 ParentCompositorDrawConstraints | 198 ParentCompositorDrawConstraints | 
| 225 SharedRendererState::GetParentDrawConstraintsOnUI() const { | 199 SharedRendererState::GetParentDrawConstraintsOnUI() const { | 
| 226   base::AutoLock lock(lock_); | 200   base::AutoLock lock(lock_); | 
| 227   return parent_draw_constraints_; | 201   return parent_draw_constraints_; | 
| 228 } | 202 } | 
| 229 | 203 | 
| 230 void SharedRendererState::SetForceInvalidateOnNextDrawGLOnUI( |  | 
| 231     bool needs_force_invalidate_on_next_draw_gl) { |  | 
| 232   base::AutoLock lock(lock_); |  | 
| 233   needs_force_invalidate_on_next_draw_gl_ = |  | 
| 234       needs_force_invalidate_on_next_draw_gl; |  | 
| 235 } |  | 
| 236 |  | 
| 237 bool SharedRendererState::NeedsForceInvalidateOnNextDrawGLOnUI() const { |  | 
| 238   base::AutoLock lock(lock_); |  | 
| 239   return needs_force_invalidate_on_next_draw_gl_; |  | 
| 240 } |  | 
| 241 |  | 
| 242 void SharedRendererState::SetInsideHardwareRelease(bool inside) { | 204 void SharedRendererState::SetInsideHardwareRelease(bool inside) { | 
| 243   base::AutoLock lock(lock_); | 205   base::AutoLock lock(lock_); | 
| 244   inside_hardware_release_ = inside; | 206   inside_hardware_release_ = inside; | 
| 245 } | 207 } | 
| 246 | 208 | 
| 247 bool SharedRendererState::IsInsideHardwareRelease() const { | 209 bool SharedRendererState::IsInsideHardwareRelease() const { | 
| 248   base::AutoLock lock(lock_); | 210   base::AutoLock lock(lock_); | 
| 249   return inside_hardware_release_; | 211   return inside_hardware_release_; | 
| 250 } | 212 } | 
| 251 | 213 | 
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 382     : shared_renderer_state_(shared_renderer_state) { | 344     : shared_renderer_state_(shared_renderer_state) { | 
| 383   DCHECK(!shared_renderer_state_->IsInsideHardwareRelease()); | 345   DCHECK(!shared_renderer_state_->IsInsideHardwareRelease()); | 
| 384   shared_renderer_state_->SetInsideHardwareRelease(true); | 346   shared_renderer_state_->SetInsideHardwareRelease(true); | 
| 385 } | 347 } | 
| 386 | 348 | 
| 387 SharedRendererState::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { | 349 SharedRendererState::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { | 
| 388   shared_renderer_state_->SetInsideHardwareRelease(false); | 350   shared_renderer_state_->SetInsideHardwareRelease(false); | 
| 389 } | 351 } | 
| 390 | 352 | 
| 391 }  // namespace android_webview | 353 }  // namespace android_webview | 
| OLD | NEW | 
|---|