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

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

Issue 599633004: Android WebView: fix missing an invalidate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2125
Patch Set: 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 weak_factory_on_ui_thread_(this), 81 weak_factory_on_ui_thread_(this),
82 ui_thread_weak_ptr_(weak_factory_on_ui_thread_.GetWeakPtr()), 82 ui_thread_weak_ptr_(weak_factory_on_ui_thread_.GetWeakPtr()),
83 inside_hardware_release_(false), 83 inside_hardware_release_(false),
84 needs_force_invalidate_on_next_draw_gl_(false),
84 share_context_(NULL) { 85 share_context_(NULL) {
85 DCHECK(ui_loop_->BelongsToCurrentThread()); 86 DCHECK(ui_loop_->BelongsToCurrentThread());
86 DCHECK(client_on_ui_); 87 DCHECK(client_on_ui_);
87 ResetRequestDrawGLCallback(); 88 ResetRequestDrawGLCallback();
88 } 89 }
89 90
90 SharedRendererState::~SharedRendererState() { 91 SharedRendererState::~SharedRendererState() {
91 DCHECK(ui_loop_->BelongsToCurrentThread()); 92 DCHECK(ui_loop_->BelongsToCurrentThread());
92 } 93 }
93 94
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 base::AutoLock lock(lock_); 140 base::AutoLock lock(lock_);
140 DCHECK(!draw_gl_input_.get()); 141 DCHECK(!draw_gl_input_.get());
141 draw_gl_input_ = input.Pass(); 142 draw_gl_input_ = input.Pass();
142 } 143 }
143 144
144 scoped_ptr<DrawGLInput> SharedRendererState::PassDrawGLInput() { 145 scoped_ptr<DrawGLInput> SharedRendererState::PassDrawGLInput() {
145 base::AutoLock lock(lock_); 146 base::AutoLock lock(lock_);
146 return draw_gl_input_.Pass(); 147 return draw_gl_input_.Pass();
147 } 148 }
148 149
149 void SharedRendererState::UpdateDrawConstraints( 150 bool SharedRendererState::UpdateDrawConstraints(
150 const ParentCompositorDrawConstraints& parent_draw_constraints) { 151 const ParentCompositorDrawConstraints& parent_draw_constraints) {
151 base::AutoLock lock(lock_); 152 base::AutoLock lock(lock_);
152 parent_draw_constraints_ = parent_draw_constraints; 153 if (needs_force_invalidate_on_next_draw_gl_ ||
154 !parent_draw_constraints_.Equals(parent_draw_constraints)) {
155 parent_draw_constraints_ = parent_draw_constraints;
156 return true;
157 }
158
159 return false;
153 } 160 }
154 161
155 void SharedRendererState::PostExternalDrawConstraintsToChildCompositor( 162 void SharedRendererState::PostExternalDrawConstraintsToChildCompositor(
156 const ParentCompositorDrawConstraints& parent_draw_constraints) { 163 const ParentCompositorDrawConstraints& parent_draw_constraints) {
157 UpdateDrawConstraints(parent_draw_constraints); 164 if (UpdateDrawConstraints(parent_draw_constraints)) {
158 165 // No need to hold the lock_ during the post task.
159 // No need to hold the lock_ during the post task. 166 ui_loop_->PostTask(
160 ui_loop_->PostTask( 167 FROM_HERE,
161 FROM_HERE, 168 base::Bind(&SharedRendererState::UpdateParentDrawConstraintsOnUIThread,
162 base::Bind(&SharedRendererState::UpdateParentDrawConstraintsOnUIThread, 169 ui_thread_weak_ptr_));
163 ui_thread_weak_ptr_)); 170 }
164 } 171 }
165 172
166 const ParentCompositorDrawConstraints 173 const ParentCompositorDrawConstraints
167 SharedRendererState::ParentDrawConstraints() const { 174 SharedRendererState::ParentDrawConstraints() const {
168 base::AutoLock lock(lock_); 175 base::AutoLock lock(lock_);
169 return parent_draw_constraints_; 176 return parent_draw_constraints_;
170 } 177 }
171 178
179 void SharedRendererState::SetForceInvalidateOnNextDrawGL(
180 bool needs_force_invalidate_on_next_draw_gl) {
181 base::AutoLock lock(lock_);
182 needs_force_invalidate_on_next_draw_gl_ =
183 needs_force_invalidate_on_next_draw_gl;
184 }
185
186 bool SharedRendererState::NeedsForceInvalidateOnNextDrawGL() const {
187 base::AutoLock lock(lock_);
188 return needs_force_invalidate_on_next_draw_gl_;
189 }
190
172 void SharedRendererState::SetInsideHardwareRelease(bool inside) { 191 void SharedRendererState::SetInsideHardwareRelease(bool inside) {
173 base::AutoLock lock(lock_); 192 base::AutoLock lock(lock_);
174 inside_hardware_release_ = inside; 193 inside_hardware_release_ = inside;
175 } 194 }
176 195
177 bool SharedRendererState::IsInsideHardwareRelease() const { 196 bool SharedRendererState::IsInsideHardwareRelease() const {
178 base::AutoLock lock(lock_); 197 base::AutoLock lock(lock_);
179 return inside_hardware_release_; 198 return inside_hardware_release_;
180 } 199 }
181 200
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 : shared_renderer_state_(shared_renderer_state) { 234 : shared_renderer_state_(shared_renderer_state) {
216 DCHECK(!shared_renderer_state_->IsInsideHardwareRelease()); 235 DCHECK(!shared_renderer_state_->IsInsideHardwareRelease());
217 shared_renderer_state_->SetInsideHardwareRelease(true); 236 shared_renderer_state_->SetInsideHardwareRelease(true);
218 } 237 }
219 238
220 InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { 239 InsideHardwareReleaseReset::~InsideHardwareReleaseReset() {
221 shared_renderer_state_->SetInsideHardwareRelease(false); 240 shared_renderer_state_->SetInsideHardwareRelease(false);
222 } 241 }
223 242
224 } // namespace android_webview 243 } // 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