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

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

Issue 659743002: aw: Fallback delegated composite (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: const 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
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/browser_view_renderer.h" 5 #include "android_webview/browser/browser_view_renderer.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 "android_webview/browser/shared_renderer_state.h" 8 #include "android_webview/browser/shared_renderer_state.h"
9 #include "android_webview/common/aw_switches.h" 9 #include "android_webview/common/aw_switches.h"
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 if (!hardware_enabled_) { 219 if (!hardware_enabled_) {
220 hardware_enabled_ = compositor_->InitializeHwDraw(); 220 hardware_enabled_ = compositor_->InitializeHwDraw();
221 if (hardware_enabled_) { 221 if (hardware_enabled_) {
222 tile_manager_key_ = GlobalTileManager::GetInstance()->PushBack(this); 222 tile_manager_key_ = GlobalTileManager::GetInstance()->PushBack(this);
223 } 223 }
224 } 224 }
225 if (!hardware_enabled_) 225 if (!hardware_enabled_)
226 return false; 226 return false;
227 227
228 ReturnResourceFromParent(); 228 ReturnResourceFromParent();
229 SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy();
230 RequestMemoryPolicy(new_policy);
231 compositor_->SetMemoryPolicy(memory_policy_);
232
233 if (shared_renderer_state_->HasCompositorFrame()) { 229 if (shared_renderer_state_->HasCompositorFrame()) {
234 TRACE_EVENT_INSTANT0("android_webview", 230 TRACE_EVENT_INSTANT0("android_webview",
235 "EarlyOut_PreviousFrameUnconsumed", 231 "EarlyOut_PreviousFrameUnconsumed",
236 TRACE_EVENT_SCOPE_THREAD); 232 TRACE_EVENT_SCOPE_THREAD);
237 SkippedCompositeInDraw(); 233 SkippedCompositeInDraw();
238 return client_->RequestDrawGL(java_canvas, false); 234 return client_->RequestDrawGL(java_canvas, false);
239 } 235 }
240 236
237 scoped_ptr<cc::CompositorFrame> frame = CompositeHw();
238 if (!frame.get())
239 return false;
240
241 shared_renderer_state_->SetCompositorFrame(frame.Pass(), false);
242 GlobalTileManager::GetInstance()->DidUse(tile_manager_key_);
243 return client_->RequestDrawGL(java_canvas, false);
244 }
245
246 scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() {
247 SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy();
248 RequestMemoryPolicy(new_policy);
249 compositor_->SetMemoryPolicy(memory_policy_);
250
241 parent_draw_constraints_ = shared_renderer_state_->ParentDrawConstraints(); 251 parent_draw_constraints_ = shared_renderer_state_->ParentDrawConstraints();
242 gfx::Size surface_size(width_, height_); 252 gfx::Size surface_size(width_, height_);
243 gfx::Rect viewport(surface_size); 253 gfx::Rect viewport(surface_size);
244 gfx::Rect clip = viewport; 254 gfx::Rect clip = viewport;
245 gfx::Transform transform_for_tile_priority = 255 gfx::Transform transform_for_tile_priority =
246 parent_draw_constraints_.transform; 256 parent_draw_constraints_.transform;
247 257
248 // If the WebView is on a layer, WebView does not know what transform is 258 // If the WebView is on a layer, WebView does not know what transform is
249 // applied onto the layer so global visible rect does not make sense here. 259 // applied onto the layer so global visible rect does not make sense here.
250 // In this case, just use the surface rect for tiling. 260 // In this case, just use the surface rect for tiling.
251 gfx::Rect viewport_rect_for_tile_priority; 261 gfx::Rect viewport_rect_for_tile_priority;
252 if (parent_draw_constraints_.is_layer) 262 if (parent_draw_constraints_.is_layer)
253 viewport_rect_for_tile_priority = parent_draw_constraints_.surface_rect; 263 viewport_rect_for_tile_priority = parent_draw_constraints_.surface_rect;
254 else 264 else
255 viewport_rect_for_tile_priority = last_on_draw_global_visible_rect_; 265 viewport_rect_for_tile_priority = last_on_draw_global_visible_rect_;
256 266
257 scoped_ptr<cc::CompositorFrame> frame = 267 scoped_ptr<cc::CompositorFrame> frame =
258 compositor_->DemandDrawHw(surface_size, 268 compositor_->DemandDrawHw(surface_size,
259 gfx::Transform(), 269 gfx::Transform(),
260 viewport, 270 viewport,
261 clip, 271 clip,
262 viewport_rect_for_tile_priority, 272 viewport_rect_for_tile_priority,
263 transform_for_tile_priority); 273 transform_for_tile_priority);
264 if (!frame.get()) 274 if (frame.get())
265 return false; 275 DidComposite();
266 276 return frame.Pass();
267 GlobalTileManager::GetInstance()->DidUse(tile_manager_key_);
268
269 shared_renderer_state_->SetCompositorFrame(frame.Pass());
270 DidComposite();
271 return client_->RequestDrawGL(java_canvas, false);
272 } 277 }
273 278
274 void BrowserViewRenderer::UpdateParentDrawConstraints() { 279 void BrowserViewRenderer::UpdateParentDrawConstraints() {
275 // Post an invalidate if the parent draw constraints are stale and there is 280 // Post an invalidate if the parent draw constraints are stale and there is
276 // no pending invalidate. 281 // no pending invalidate.
277 if (shared_renderer_state_->NeedsForceInvalidateOnNextDrawGL() || 282 if (shared_renderer_state_->NeedsForceInvalidateOnNextDrawGL() ||
278 !parent_draw_constraints_.Equals( 283 !parent_draw_constraints_.Equals(
279 shared_renderer_state_->ParentDrawConstraints())) { 284 shared_renderer_state_->ParentDrawConstraints())) {
280 shared_renderer_state_->SetForceInvalidateOnNextDrawGL(false); 285 shared_renderer_state_->SetForceInvalidateOnNextDrawGL(false);
281 EnsureContinuousInvalidation(true, false); 286 EnsureContinuousInvalidation(true, false);
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 TRACE_EVENT1("android_webview", 708 TRACE_EVENT1("android_webview",
704 "BrowserViewRenderer::FallbackTickFired", 709 "BrowserViewRenderer::FallbackTickFired",
705 "compositor_needs_continuous_invalidate_", 710 "compositor_needs_continuous_invalidate_",
706 compositor_needs_continuous_invalidate_); 711 compositor_needs_continuous_invalidate_);
707 712
708 // This should only be called if OnDraw or DrawGL did not come in time, which 713 // This should only be called if OnDraw or DrawGL did not come in time, which
709 // means block_invalidates_ must still be true. 714 // means block_invalidates_ must still be true.
710 DCHECK(block_invalidates_); 715 DCHECK(block_invalidates_);
711 fallback_tick_pending_ = false; 716 fallback_tick_pending_ = false;
712 if (compositor_needs_continuous_invalidate_ && compositor_) { 717 if (compositor_needs_continuous_invalidate_ && compositor_) {
713 ForceFakeCompositeSW(); 718 if (hardware_enabled_) {
719 ReturnResourceFromParent();
720 ReturnUnusedResource(shared_renderer_state_->PassCompositorFrame());
721 scoped_ptr<cc::CompositorFrame> frame = CompositeHw();
722 if (frame.get()) {
723 shared_renderer_state_->SetCompositorFrame(frame.Pass(), true);
724 }
725 } else {
726 ForceFakeCompositeSW();
727 }
714 } else { 728 } else {
715 // Pretend we just composited to unblock further invalidates. 729 // Pretend we just composited to unblock further invalidates.
716 DidComposite(); 730 DidComposite();
717 } 731 }
718 } 732 }
719 733
720 void BrowserViewRenderer::ForceFakeCompositeSW() { 734 void BrowserViewRenderer::ForceFakeCompositeSW() {
721 DCHECK(compositor_); 735 DCHECK(compositor_);
722 SkBitmap bitmap; 736 SkBitmap bitmap;
723 bitmap.allocN32Pixels(1, 1); 737 bitmap.allocN32Pixels(1, 1);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 base::StringAppendF(&str, 782 base::StringAppendF(&str,
769 "overscroll_rounding_error_: %s ", 783 "overscroll_rounding_error_: %s ",
770 overscroll_rounding_error_.ToString().c_str()); 784 overscroll_rounding_error_.ToString().c_str());
771 base::StringAppendF( 785 base::StringAppendF(
772 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); 786 &str, "on_new_picture_enable: %d ", on_new_picture_enable_);
773 base::StringAppendF(&str, "clear_view: %d ", clear_view_); 787 base::StringAppendF(&str, "clear_view: %d ", clear_view_);
774 return str; 788 return str;
775 } 789 }
776 790
777 } // namespace android_webview 791 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/browser_view_renderer.h ('k') | android_webview/browser/hardware_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698