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

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

Issue 603633003: Android WebView: fix missing an invalidate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 2 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/shared_renderer_state.h ('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_client.h" 7 #include "android_webview/browser/browser_view_renderer_client.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 72
73 DrawGLInput::~DrawGLInput() { 73 DrawGLInput::~DrawGLInput() {
74 } 74 }
75 75
76 SharedRendererState::SharedRendererState( 76 SharedRendererState::SharedRendererState(
77 scoped_refptr<base::MessageLoopProxy> ui_loop, 77 scoped_refptr<base::MessageLoopProxy> ui_loop,
78 BrowserViewRendererClient* client) 78 BrowserViewRendererClient* client)
79 : ui_loop_(ui_loop), 79 : ui_loop_(ui_loop),
80 client_on_ui_(client), 80 client_on_ui_(client),
81 inside_hardware_release_(false), 81 inside_hardware_release_(false),
82 weak_factory_on_ui_thread_(this){ 82 needs_force_invalidate_on_next_draw_gl_(false),
83 weak_factory_on_ui_thread_(this) {
83 DCHECK(ui_loop_->BelongsToCurrentThread()); 84 DCHECK(ui_loop_->BelongsToCurrentThread());
84 DCHECK(client_on_ui_); 85 DCHECK(client_on_ui_);
85 ui_thread_weak_ptr_ = weak_factory_on_ui_thread_.GetWeakPtr(); 86 ui_thread_weak_ptr_ = weak_factory_on_ui_thread_.GetWeakPtr();
86 ResetRequestDrawGLCallback(); 87 ResetRequestDrawGLCallback();
87 } 88 }
88 89
89 SharedRendererState::~SharedRendererState() { 90 SharedRendererState::~SharedRendererState() {
90 DCHECK(ui_loop_->BelongsToCurrentThread()); 91 DCHECK(ui_loop_->BelongsToCurrentThread());
91 } 92 }
92 93
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 base::AutoLock lock(lock_); 144 base::AutoLock lock(lock_);
144 DCHECK(!draw_gl_input_.get()); 145 DCHECK(!draw_gl_input_.get());
145 draw_gl_input_ = input.Pass(); 146 draw_gl_input_ = input.Pass();
146 } 147 }
147 148
148 scoped_ptr<DrawGLInput> SharedRendererState::PassDrawGLInput() { 149 scoped_ptr<DrawGLInput> SharedRendererState::PassDrawGLInput() {
149 base::AutoLock lock(lock_); 150 base::AutoLock lock(lock_);
150 return draw_gl_input_.Pass(); 151 return draw_gl_input_.Pass();
151 } 152 }
152 153
153 void SharedRendererState::UpdateDrawConstraints( 154 bool SharedRendererState::UpdateDrawConstraints(
154 const ParentCompositorDrawConstraints& parent_draw_constraints) { 155 const ParentCompositorDrawConstraints& parent_draw_constraints) {
155 base::AutoLock lock(lock_); 156 base::AutoLock lock(lock_);
156 parent_draw_constraints_ = parent_draw_constraints; 157 if (needs_force_invalidate_on_next_draw_gl_ ||
158 !parent_draw_constraints_.Equals(parent_draw_constraints)) {
159 parent_draw_constraints_ = parent_draw_constraints;
160 return true;
161 }
162
163 return false;
157 } 164 }
158 165
159 void SharedRendererState::PostExternalDrawConstraintsToChildCompositor( 166 void SharedRendererState::PostExternalDrawConstraintsToChildCompositor(
160 const ParentCompositorDrawConstraints& parent_draw_constraints) { 167 const ParentCompositorDrawConstraints& parent_draw_constraints) {
161 UpdateDrawConstraints(parent_draw_constraints); 168 if (UpdateDrawConstraints(parent_draw_constraints)) {
162 169 // No need to hold the lock_ during the post task.
163 // No need to hold the lock_ during the post task. 170 ui_loop_->PostTask(
164 ui_loop_->PostTask( 171 FROM_HERE,
165 FROM_HERE, 172 base::Bind(&SharedRendererState::UpdateParentDrawConstraintsOnUIThread,
166 base::Bind(&SharedRendererState::UpdateParentDrawConstraintsOnUIThread, 173 ui_thread_weak_ptr_));
167 ui_thread_weak_ptr_)); 174 }
168 } 175 }
169 176
170 const ParentCompositorDrawConstraints 177 const ParentCompositorDrawConstraints
171 SharedRendererState::ParentDrawConstraints() const { 178 SharedRendererState::ParentDrawConstraints() const {
172 base::AutoLock lock(lock_); 179 base::AutoLock lock(lock_);
173 return parent_draw_constraints_; 180 return parent_draw_constraints_;
174 } 181 }
175 182
183 void SharedRendererState::SetForceInvalidateOnNextDrawGL(
184 bool needs_force_invalidate_on_next_draw_gl) {
185 base::AutoLock lock(lock_);
186 needs_force_invalidate_on_next_draw_gl_ =
187 needs_force_invalidate_on_next_draw_gl;
188 }
189
190 bool SharedRendererState::NeedsForceInvalidateOnNextDrawGL() const {
191 base::AutoLock lock(lock_);
192 return needs_force_invalidate_on_next_draw_gl_;
193 }
194
176 void SharedRendererState::SetInsideHardwareRelease(bool inside) { 195 void SharedRendererState::SetInsideHardwareRelease(bool inside) {
177 base::AutoLock lock(lock_); 196 base::AutoLock lock(lock_);
178 inside_hardware_release_ = inside; 197 inside_hardware_release_ = inside;
179 } 198 }
180 199
181 bool SharedRendererState::IsInsideHardwareRelease() const { 200 bool SharedRendererState::IsInsideHardwareRelease() const {
182 base::AutoLock lock(lock_); 201 base::AutoLock lock(lock_);
183 return inside_hardware_release_; 202 return inside_hardware_release_;
184 } 203 }
185 204
(...skipping 21 matching lines...) Expand all
207 : shared_renderer_state_(shared_renderer_state) { 226 : shared_renderer_state_(shared_renderer_state) {
208 DCHECK(!shared_renderer_state_->IsInsideHardwareRelease()); 227 DCHECK(!shared_renderer_state_->IsInsideHardwareRelease());
209 shared_renderer_state_->SetInsideHardwareRelease(true); 228 shared_renderer_state_->SetInsideHardwareRelease(true);
210 } 229 }
211 230
212 InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { 231 InsideHardwareReleaseReset::~InsideHardwareReleaseReset() {
213 shared_renderer_state_->SetInsideHardwareRelease(false); 232 shared_renderer_state_->SetInsideHardwareRelease(false);
214 } 233 }
215 234
216 } // namespace android_webview 235 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/shared_renderer_state.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698