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

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

Issue 585093003: aw: Block child compositor if frame is not consumed by parent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 "android_webview/public/browser/draw_gl.h" 10 #include "android_webview/public/browser/draw_gl.h"
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 if (is_hardware_canvas && attached_to_window_ && 243 if (is_hardware_canvas && attached_to_window_ &&
244 !switches::ForceAuxiliaryBitmap()) { 244 !switches::ForceAuxiliaryBitmap()) {
245 return OnDrawHardware(java_canvas); 245 return OnDrawHardware(java_canvas);
246 } 246 }
247 247
248 // Perform a software draw 248 // Perform a software draw
249 return OnDrawSoftware(java_canvas); 249 return OnDrawSoftware(java_canvas);
250 } 250 }
251 251
252 bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { 252 bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) {
253 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDrawHardware");
253 if (!compositor_) 254 if (!compositor_)
254 return false; 255 return false;
255 256
256 if (last_on_draw_global_visible_rect_.IsEmpty()) 257 if (last_on_draw_global_visible_rect_.IsEmpty()) {
258 TRACE_EVENT_INSTANT0("android_webview",
259 "EarlyOut_EmptyVisibleRect",
260 TRACE_EVENT_SCOPE_THREAD);
257 return client_->RequestDrawGL(java_canvas, false); 261 return client_->RequestDrawGL(java_canvas, false);
262 }
258 263
259 if (!hardware_enabled_) { 264 if (!hardware_enabled_) {
260 hardware_enabled_ = compositor_->InitializeHwDraw(); 265 hardware_enabled_ = compositor_->InitializeHwDraw();
261 if (hardware_enabled_) { 266 if (hardware_enabled_) {
262 tile_manager_key_ = GlobalTileManager::GetInstance()->PushBack(this); 267 tile_manager_key_ = GlobalTileManager::GetInstance()->PushBack(this);
263 } 268 }
264 } 269 }
265 if (!hardware_enabled_) 270 if (!hardware_enabled_)
266 return false; 271 return false;
267 272
273
268 ReturnResourceFromParent(); 274 ReturnResourceFromParent();
269 SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy(); 275 SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy();
270 RequestMemoryPolicy(new_policy); 276 RequestMemoryPolicy(new_policy);
271 compositor_->SetMemoryPolicy(memory_policy_); 277 compositor_->SetMemoryPolicy(memory_policy_);
272 278
279 if (shared_renderer_state_->HasDrawGLInput()) {
280 TRACE_EVENT_INSTANT0("android_webview",
281 "EarlyOut_PreviousFrameUnconsumed",
282 TRACE_EVENT_SCOPE_THREAD);
283 // TODO(boliu): Rename this method. We didn't actually composite here.
284 DidComposite();
285 return client_->RequestDrawGL(java_canvas, false);
286 }
287
273 scoped_ptr<DrawGLInput> draw_gl_input(new DrawGLInput); 288 scoped_ptr<DrawGLInput> draw_gl_input(new DrawGLInput);
274 draw_gl_input->scroll_offset = last_on_draw_scroll_offset_; 289 draw_gl_input->scroll_offset = last_on_draw_scroll_offset_;
275 draw_gl_input->width = width_; 290 draw_gl_input->width = width_;
276 draw_gl_input->height = height_; 291 draw_gl_input->height = height_;
277 292
278 parent_draw_constraints_ = shared_renderer_state_->ParentDrawConstraints(); 293 parent_draw_constraints_ = shared_renderer_state_->ParentDrawConstraints();
279 gfx::Size surface_size(width_, height_); 294 gfx::Size surface_size(width_, height_);
280 gfx::Rect viewport(surface_size); 295 gfx::Rect viewport(surface_size);
281 gfx::Rect clip = viewport; 296 gfx::Rect clip = viewport;
282 gfx::Transform transform_for_tile_priority = 297 gfx::Transform transform_for_tile_priority =
(...skipping 14 matching lines...) Expand all
297 viewport, 312 viewport,
298 clip, 313 clip,
299 viewport_rect_for_tile_priority, 314 viewport_rect_for_tile_priority,
300 transform_for_tile_priority); 315 transform_for_tile_priority);
301 if (!frame.get()) 316 if (!frame.get())
302 return false; 317 return false;
303 318
304 GlobalTileManager::GetInstance()->DidUse(tile_manager_key_); 319 GlobalTileManager::GetInstance()->DidUse(tile_manager_key_);
305 320
306 frame->AssignTo(&draw_gl_input->frame); 321 frame->AssignTo(&draw_gl_input->frame);
307 ReturnUnusedResource(shared_renderer_state_->PassDrawGLInput());
hush (inactive) 2014/09/20 02:15:53 why is this removed?
boliu 2014/09/20 02:20:21 If we are consuming the input, we can't detect whe
308 shared_renderer_state_->SetDrawGLInput(draw_gl_input.Pass()); 322 shared_renderer_state_->SetDrawGLInput(draw_gl_input.Pass());
309 DidComposite(); 323 DidComposite();
310 return client_->RequestDrawGL(java_canvas, false); 324 return client_->RequestDrawGL(java_canvas, false);
311 } 325 }
312 326
313 void BrowserViewRenderer::UpdateParentDrawConstraints() { 327 void BrowserViewRenderer::UpdateParentDrawConstraints() {
314 // Post an invalidate if the parent draw constraints are stale and there is 328 // Post an invalidate if the parent draw constraints are stale and there is
315 // no pending invalidate. 329 // no pending invalidate.
316 if (!parent_draw_constraints_.Equals( 330 if (!parent_draw_constraints_.Equals(
317 shared_renderer_state_->ParentDrawConstraints())) 331 shared_renderer_state_->ParentDrawConstraints()))
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 base::StringAppendF(&str, 817 base::StringAppendF(&str,
804 "surface width height: [%d %d] ", 818 "surface width height: [%d %d] ",
805 draw_info->width, 819 draw_info->width,
806 draw_info->height); 820 draw_info->height);
807 base::StringAppendF(&str, "is_layer: %d ", draw_info->is_layer); 821 base::StringAppendF(&str, "is_layer: %d ", draw_info->is_layer);
808 } 822 }
809 return str; 823 return str;
810 } 824 }
811 825
812 } // namespace android_webview 826 } // namespace android_webview
OLDNEW
« no previous file with comments | « no previous file | android_webview/browser/hardware_renderer.h » ('j') | android_webview/browser/hardware_renderer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698