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

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

Issue 1001643004: Remove android webview rendering cruft (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rename var Created 5 years, 9 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/browser_view_renderer.h ('k') | android_webview/browser/child_frame.h » ('j') | 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/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/child_frame.h"
8 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
9 #include "base/command_line.h" 10 #include "base/command_line.h"
10 #include "base/logging.h" 11 #include "base/logging.h"
11 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
13 #include "base/supports_user_data.h" 14 #include "base/supports_user_data.h"
14 #include "base/trace_event/trace_event_argument.h" 15 #include "base/trace_event/trace_event_argument.h"
15 #include "cc/output/compositor_frame.h" 16 #include "cc/output/compositor_frame.h"
16 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
17 #include "content/public/common/content_switches.h" 18 #include "content/public/common/content_switches.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 view_visible_(false), 92 view_visible_(false),
92 window_visible_(false), 93 window_visible_(false),
93 attached_to_window_(false), 94 attached_to_window_(false),
94 hardware_enabled_(false), 95 hardware_enabled_(false),
95 dip_scale_(0.0), 96 dip_scale_(0.0),
96 page_scale_factor_(1.0), 97 page_scale_factor_(1.0),
97 on_new_picture_enable_(false), 98 on_new_picture_enable_(false),
98 clear_view_(false), 99 clear_view_(false),
99 offscreen_pre_raster_(false), 100 offscreen_pre_raster_(false),
100 compositor_needs_continuous_invalidate_(false), 101 compositor_needs_continuous_invalidate_(false),
101 invalidate_after_composite_(false),
102 block_invalidates_(false), 102 block_invalidates_(false),
103 fallback_tick_pending_(false) { 103 fallback_tick_pending_(false) {
104 } 104 }
105 105
106 BrowserViewRenderer::~BrowserViewRenderer() { 106 BrowserViewRenderer::~BrowserViewRenderer() {
107 } 107 }
108 108
109 void BrowserViewRenderer::RegisterWithWebContents( 109 void BrowserViewRenderer::RegisterWithWebContents(
110 content::WebContents* web_contents) { 110 content::WebContents* web_contents) {
111 web_contents->SetUserData(kBrowserViewRendererUserDataKey, 111 web_contents->SetUserData(kBrowserViewRendererUserDataKey,
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 if (!hardware_enabled_) { 209 if (!hardware_enabled_) {
210 TRACE_EVENT0("android_webview", "InitializeHwDraw"); 210 TRACE_EVENT0("android_webview", "InitializeHwDraw");
211 hardware_enabled_ = compositor_->InitializeHwDraw(); 211 hardware_enabled_ = compositor_->InitializeHwDraw();
212 } 212 }
213 if (!hardware_enabled_) { 213 if (!hardware_enabled_) {
214 TRACE_EVENT_INSTANT0("android_webview", "EarlyOut_HardwareNotEnabled", 214 TRACE_EVENT_INSTANT0("android_webview", "EarlyOut_HardwareNotEnabled",
215 TRACE_EVENT_SCOPE_THREAD); 215 TRACE_EVENT_SCOPE_THREAD);
216 return false; 216 return false;
217 } 217 }
218 218
219 ReturnResourceFromParent(); 219 return CompositeHw();
220 if (shared_renderer_state_.HasCompositorFrameOnUI()) {
221 TRACE_EVENT_INSTANT0("android_webview",
222 "EarlyOut_PreviousFrameUnconsumed",
223 TRACE_EVENT_SCOPE_THREAD);
224 DidSkipCompositeInDraw();
225 return true;
226 }
227
228 scoped_ptr<cc::CompositorFrame> frame = CompositeHw();
229 if (!frame.get()) {
230 TRACE_EVENT_INSTANT0("android_webview", "NoNewFrame",
231 TRACE_EVENT_SCOPE_THREAD);
232 return false;
233 }
234
235 shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), false);
236 return true;
237 } 220 }
238 221
239 scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() { 222 bool BrowserViewRenderer::CompositeHw() {
223 ReturnResourceFromParent();
240 compositor_->SetMemoryPolicy(CalculateDesiredMemoryPolicy()); 224 compositor_->SetMemoryPolicy(CalculateDesiredMemoryPolicy());
241 225
242 parent_draw_constraints_ = 226 ParentCompositorDrawConstraints parent_draw_constraints =
243 shared_renderer_state_.GetParentDrawConstraintsOnUI(); 227 shared_renderer_state_.GetParentDrawConstraintsOnUI();
244 gfx::Size surface_size(size_); 228 gfx::Size surface_size(size_);
245 gfx::Rect viewport(surface_size); 229 gfx::Rect viewport(surface_size);
246 gfx::Rect clip = viewport; 230 gfx::Rect clip = viewport;
247 gfx::Transform transform_for_tile_priority = 231 gfx::Transform transform_for_tile_priority =
248 parent_draw_constraints_.transform; 232 parent_draw_constraints.transform;
249 233
250 // If the WebView is on a layer, WebView does not know what transform is 234 // If the WebView is on a layer, WebView does not know what transform is
251 // applied onto the layer so global visible rect does not make sense here. 235 // applied onto the layer so global visible rect does not make sense here.
252 // In this case, just use the surface rect for tiling. 236 // In this case, just use the surface rect for tiling.
253 gfx::Rect viewport_rect_for_tile_priority; 237 gfx::Rect viewport_rect_for_tile_priority;
254 238
255 // Leave viewport_rect_for_tile_priority empty if offscreen_pre_raster_ is on. 239 // Leave viewport_rect_for_tile_priority empty if offscreen_pre_raster_ is on.
256 if (!offscreen_pre_raster_) { 240 if (!offscreen_pre_raster_) {
257 if (parent_draw_constraints_.is_layer || 241 if (parent_draw_constraints.is_layer) {
258 last_on_draw_global_visible_rect_.IsEmpty()) { 242 viewport_rect_for_tile_priority = parent_draw_constraints.surface_rect;
259 viewport_rect_for_tile_priority = parent_draw_constraints_.surface_rect;
260 } else { 243 } else {
261 viewport_rect_for_tile_priority = last_on_draw_global_visible_rect_; 244 viewport_rect_for_tile_priority = last_on_draw_global_visible_rect_;
262 } 245 }
263 } 246 }
264 247
265 scoped_ptr<cc::CompositorFrame> frame = 248 scoped_ptr<cc::CompositorFrame> frame =
266 compositor_->DemandDrawHw(surface_size, 249 compositor_->DemandDrawHw(surface_size,
267 gfx::Transform(), 250 gfx::Transform(),
268 viewport, 251 viewport,
269 clip, 252 clip,
270 viewport_rect_for_tile_priority, 253 viewport_rect_for_tile_priority,
271 transform_for_tile_priority); 254 transform_for_tile_priority);
272 if (frame.get()) 255 if (!frame.get()) {
273 DidComposite(); 256 TRACE_EVENT_INSTANT0("android_webview", "NoNewFrame",
274 return frame.Pass(); 257 TRACE_EVENT_SCOPE_THREAD);
258 return false;
259 }
260
261 scoped_ptr<ChildFrame> child_frame = make_scoped_ptr(
262 new ChildFrame(frame.Pass(), viewport_rect_for_tile_priority,
263 transform_for_tile_priority, offscreen_pre_raster_,
264 parent_draw_constraints.is_layer));
265
266 DidComposite();
267 // Uncommitted frame can happen with consecutive fallback ticks.
268 ReturnUnusedResource(shared_renderer_state_.PassUncommittedFrameOnUI());
269 shared_renderer_state_.SetCompositorFrameOnUI(child_frame.Pass());
270 return true;
275 } 271 }
276 272
277 void BrowserViewRenderer::UpdateParentDrawConstraints() { 273 void BrowserViewRenderer::UpdateParentDrawConstraints() {
278 // Post an invalidate if the parent draw constraints are stale and there is 274 EnsureContinuousInvalidation(true);
279 // no pending invalidate.
280 bool needs_force_invalidate =
281 shared_renderer_state_.NeedsForceInvalidateOnNextDrawGLOnUI();
282 if (needs_force_invalidate ||
283 !parent_draw_constraints_.Equals(
284 shared_renderer_state_.GetParentDrawConstraintsOnUI())) {
285 shared_renderer_state_.SetForceInvalidateOnNextDrawGLOnUI(false);
286 EnsureContinuousInvalidation(true, needs_force_invalidate);
287 }
288 } 275 }
289 276
290 void BrowserViewRenderer::ReturnUnusedResource( 277 void BrowserViewRenderer::ReturnUnusedResource(
291 scoped_ptr<cc::CompositorFrame> frame) { 278 scoped_ptr<ChildFrame> child_frame) {
292 if (!frame.get()) 279 if (!child_frame.get() || !child_frame->frame.get())
293 return; 280 return;
294 281
295 cc::CompositorFrameAck frame_ack; 282 cc::CompositorFrameAck frame_ack;
296 cc::TransferableResource::ReturnResources( 283 cc::TransferableResource::ReturnResources(
297 frame->delegated_frame_data->resource_list, &frame_ack.resources); 284 child_frame->frame->delegated_frame_data->resource_list,
285 &frame_ack.resources);
298 if (compositor_ && !frame_ack.resources.empty()) 286 if (compositor_ && !frame_ack.resources.empty())
299 compositor_->ReturnResources(frame_ack); 287 compositor_->ReturnResources(frame_ack);
300 } 288 }
301 289
302 void BrowserViewRenderer::ReturnResourceFromParent() { 290 void BrowserViewRenderer::ReturnResourceFromParent() {
303 cc::CompositorFrameAck frame_ack; 291 cc::CompositorFrameAck frame_ack;
304 shared_renderer_state_.SwapReturnedResourcesOnUI(&frame_ack.resources); 292 shared_renderer_state_.SwapReturnedResourcesOnUI(&frame_ack.resources);
305 if (compositor_ && !frame_ack.resources.empty()) { 293 if (compositor_ && !frame_ack.resources.empty()) {
306 compositor_->ReturnResources(frame_ack); 294 compositor_->ReturnResources(frame_ack);
307 } 295 }
308 } 296 }
309 297
310 void BrowserViewRenderer::DidSkipCommitFrame() {
311 // Treat it the same way as skipping onDraw.
312 DidSkipCompositeInDraw();
313 }
314
315 void BrowserViewRenderer::DetachFunctorFromView() { 298 void BrowserViewRenderer::DetachFunctorFromView() {
316 client_->DetachFunctorFromView(); 299 client_->DetachFunctorFromView();
317 } 300 }
318 301
319 bool BrowserViewRenderer::OnDrawSoftware(SkCanvas* canvas) { 302 bool BrowserViewRenderer::OnDrawSoftware(SkCanvas* canvas) {
320 return CanOnDraw() && CompositeSW(canvas); 303 return CanOnDraw() && CompositeSW(canvas);
321 } 304 }
322 305
323 skia::RefPtr<SkPicture> BrowserViewRenderer::CapturePicture(int width, 306 skia::RefPtr<SkPicture> BrowserViewRenderer::CapturePicture(int width,
324 int height) { 307 int height) {
(...skipping 24 matching lines...) Expand all
349 332
350 void BrowserViewRenderer::ClearView() { 333 void BrowserViewRenderer::ClearView() {
351 TRACE_EVENT_INSTANT0("android_webview", 334 TRACE_EVENT_INSTANT0("android_webview",
352 "BrowserViewRenderer::ClearView", 335 "BrowserViewRenderer::ClearView",
353 TRACE_EVENT_SCOPE_THREAD); 336 TRACE_EVENT_SCOPE_THREAD);
354 if (clear_view_) 337 if (clear_view_)
355 return; 338 return;
356 339
357 clear_view_ = true; 340 clear_view_ = true;
358 // Always invalidate ignoring the compositor to actually clear the webview. 341 // Always invalidate ignoring the compositor to actually clear the webview.
359 EnsureContinuousInvalidation(true, false); 342 EnsureContinuousInvalidation(true);
360 } 343 }
361 344
362 void BrowserViewRenderer::SetOffscreenPreRaster(bool enable) { 345 void BrowserViewRenderer::SetOffscreenPreRaster(bool enable) {
363 // TODO(hush): anything to do when the setting is toggled? 346 // TODO(hush): anything to do when the setting is toggled?
364 offscreen_pre_raster_ = enable; 347 offscreen_pre_raster_ = enable;
365 } 348 }
366 349
367 void BrowserViewRenderer::SetIsPaused(bool paused) { 350 void BrowserViewRenderer::SetIsPaused(bool paused) {
368 TRACE_EVENT_INSTANT1("android_webview", 351 TRACE_EVENT_INSTANT1("android_webview",
369 "BrowserViewRenderer::SetIsPaused", 352 "BrowserViewRenderer::SetIsPaused",
370 TRACE_EVENT_SCOPE_THREAD, 353 TRACE_EVENT_SCOPE_THREAD,
371 "paused", 354 "paused",
372 paused); 355 paused);
373 is_paused_ = paused; 356 is_paused_ = paused;
374 EnsureContinuousInvalidation(false, false); 357 EnsureContinuousInvalidation(false);
375 } 358 }
376 359
377 void BrowserViewRenderer::SetViewVisibility(bool view_visible) { 360 void BrowserViewRenderer::SetViewVisibility(bool view_visible) {
378 TRACE_EVENT_INSTANT1("android_webview", 361 TRACE_EVENT_INSTANT1("android_webview",
379 "BrowserViewRenderer::SetViewVisibility", 362 "BrowserViewRenderer::SetViewVisibility",
380 TRACE_EVENT_SCOPE_THREAD, 363 TRACE_EVENT_SCOPE_THREAD,
381 "view_visible", 364 "view_visible",
382 view_visible); 365 view_visible);
383 view_visible_ = view_visible; 366 view_visible_ = view_visible;
384 } 367 }
385 368
386 void BrowserViewRenderer::SetWindowVisibility(bool window_visible) { 369 void BrowserViewRenderer::SetWindowVisibility(bool window_visible) {
387 TRACE_EVENT_INSTANT1("android_webview", 370 TRACE_EVENT_INSTANT1("android_webview",
388 "BrowserViewRenderer::SetWindowVisibility", 371 "BrowserViewRenderer::SetWindowVisibility",
389 TRACE_EVENT_SCOPE_THREAD, 372 TRACE_EVENT_SCOPE_THREAD,
390 "window_visible", 373 "window_visible",
391 window_visible); 374 window_visible);
392 window_visible_ = window_visible; 375 window_visible_ = window_visible;
393 EnsureContinuousInvalidation(false, false); 376 EnsureContinuousInvalidation(false);
394 } 377 }
395 378
396 void BrowserViewRenderer::OnSizeChanged(int width, int height) { 379 void BrowserViewRenderer::OnSizeChanged(int width, int height) {
397 TRACE_EVENT_INSTANT2("android_webview", 380 TRACE_EVENT_INSTANT2("android_webview",
398 "BrowserViewRenderer::OnSizeChanged", 381 "BrowserViewRenderer::OnSizeChanged",
399 TRACE_EVENT_SCOPE_THREAD, 382 TRACE_EVENT_SCOPE_THREAD,
400 "width", 383 "width",
401 width, 384 width,
402 "height", 385 "height",
403 height); 386 height);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 if (compositor_needs_continuous_invalidate_ == invalidate) 447 if (compositor_needs_continuous_invalidate_ == invalidate)
465 return; 448 return;
466 449
467 TRACE_EVENT_INSTANT1("android_webview", 450 TRACE_EVENT_INSTANT1("android_webview",
468 "BrowserViewRenderer::SetContinuousInvalidate", 451 "BrowserViewRenderer::SetContinuousInvalidate",
469 TRACE_EVENT_SCOPE_THREAD, 452 TRACE_EVENT_SCOPE_THREAD,
470 "invalidate", 453 "invalidate",
471 invalidate); 454 invalidate);
472 compositor_needs_continuous_invalidate_ = invalidate; 455 compositor_needs_continuous_invalidate_ = invalidate;
473 456
474 EnsureContinuousInvalidation(false, false); 457 EnsureContinuousInvalidation(false);
475 } 458 }
476 459
477 void BrowserViewRenderer::SetDipScale(float dip_scale) { 460 void BrowserViewRenderer::SetDipScale(float dip_scale) {
478 dip_scale_ = dip_scale; 461 dip_scale_ = dip_scale;
479 CHECK_GT(dip_scale_, 0.f); 462 CHECK_GT(dip_scale_, 0.f);
480 } 463 }
481 464
482 gfx::Vector2d BrowserViewRenderer::max_scroll_offset() const { 465 gfx::Vector2d BrowserViewRenderer::max_scroll_offset() const {
483 DCHECK_GT(dip_scale_, 0.f); 466 DCHECK_GT(dip_scale_, 0.f);
484 return gfx::ToCeiledVector2d(gfx::ScaleVector2d( 467 return gfx::ToCeiledVector2d(gfx::ScaleVector2d(
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 overscroll_rounding_error_ = gfx::Vector2dF(); 617 overscroll_rounding_error_ = gfx::Vector2dF();
635 gfx::Vector2dF scaled_overscroll_delta = 618 gfx::Vector2dF scaled_overscroll_delta =
636 gfx::ScaleVector2d(latest_overscroll_delta, physical_pixel_scale); 619 gfx::ScaleVector2d(latest_overscroll_delta, physical_pixel_scale);
637 gfx::Vector2d rounded_overscroll_delta = gfx::ToRoundedVector2d( 620 gfx::Vector2d rounded_overscroll_delta = gfx::ToRoundedVector2d(
638 scaled_overscroll_delta + overscroll_rounding_error_); 621 scaled_overscroll_delta + overscroll_rounding_error_);
639 overscroll_rounding_error_ = 622 overscroll_rounding_error_ =
640 scaled_overscroll_delta - rounded_overscroll_delta; 623 scaled_overscroll_delta - rounded_overscroll_delta;
641 client_->DidOverscroll(rounded_overscroll_delta); 624 client_->DidOverscroll(rounded_overscroll_delta);
642 } 625 }
643 626
644 void BrowserViewRenderer::EnsureContinuousInvalidation( 627 void BrowserViewRenderer::EnsureContinuousInvalidation(bool force_invalidate) {
645 bool force_invalidate,
646 bool skip_reschedule_tick) {
647 if (force_invalidate)
648 invalidate_after_composite_ = true;
649
650 // This method should be called again when any of these conditions change. 628 // This method should be called again when any of these conditions change.
651 bool need_invalidate = 629 bool need_invalidate =
652 compositor_needs_continuous_invalidate_ || invalidate_after_composite_; 630 compositor_needs_continuous_invalidate_ || force_invalidate;
653 if (!need_invalidate || block_invalidates_) 631 if (!need_invalidate || block_invalidates_)
654 return; 632 return;
655 633
656 if (!compositor_needs_continuous_invalidate_ && invalidate_after_composite_)
657 invalidate_after_composite_ = false;
658
659 // Always call view invalidate. We rely the Android framework to ignore the 634 // Always call view invalidate. We rely the Android framework to ignore the
660 // invalidate when it's not needed such as when view is not visible. 635 // invalidate when it's not needed such as when view is not visible.
661 client_->PostInvalidate(); 636 client_->PostInvalidate();
662 637
663 // Stop fallback ticks when one of these is true. 638 // Stop fallback ticks when one of these is true.
664 // 1) Webview is paused. Also need to check we are not in clear view since 639 // 1) Webview is paused. Also need to check we are not in clear view since
665 // paused, offscreen still expect clear view to recover. 640 // paused, offscreen still expect clear view to recover.
666 // 2) If we are attached to window and the window is not visible (eg when 641 // 2) If we are attached to window and the window is not visible (eg when
667 // app is in the background). We are sure in this case the webview is used 642 // app is in the background). We are sure in this case the webview is used
668 // "on-screen" but that updates are not needed when in the background. 643 // "on-screen" but that updates are not needed when in the background.
669 bool throttle_fallback_tick = 644 bool throttle_fallback_tick =
670 (is_paused_ && !clear_view_) || (attached_to_window_ && !window_visible_); 645 (is_paused_ && !clear_view_) || (attached_to_window_ && !window_visible_);
671 if (throttle_fallback_tick) 646 if (throttle_fallback_tick)
672 return; 647 return;
673 648
674 block_invalidates_ = compositor_needs_continuous_invalidate_; 649 block_invalidates_ = compositor_needs_continuous_invalidate_;
675 if (skip_reschedule_tick && fallback_tick_pending_) 650 if (fallback_tick_pending_)
676 return; 651 return;
677 652
678 // Unretained here is safe because the callbacks are cancelled when 653 // Unretained here is safe because the callbacks are cancelled when
679 // they are destroyed. 654 // they are destroyed.
680 post_fallback_tick_.Reset(base::Bind(&BrowserViewRenderer::PostFallbackTick, 655 post_fallback_tick_.Reset(base::Bind(&BrowserViewRenderer::PostFallbackTick,
681 base::Unretained(this))); 656 base::Unretained(this)));
682 fallback_tick_fired_.Cancel(); 657 fallback_tick_fired_.Cancel();
683 fallback_tick_pending_ = false; 658 fallback_tick_pending_ = false;
684 659
685 // No need to reschedule fallback tick if compositor does not need to be 660 // No need to reschedule fallback tick if compositor does not need to be
(...skipping 25 matching lines...) Expand all
711 "BrowserViewRenderer::FallbackTickFired", 686 "BrowserViewRenderer::FallbackTickFired",
712 "compositor_needs_continuous_invalidate_", 687 "compositor_needs_continuous_invalidate_",
713 compositor_needs_continuous_invalidate_); 688 compositor_needs_continuous_invalidate_);
714 689
715 // This should only be called if OnDraw or DrawGL did not come in time, which 690 // This should only be called if OnDraw or DrawGL did not come in time, which
716 // means block_invalidates_ must still be true. 691 // means block_invalidates_ must still be true.
717 DCHECK(block_invalidates_); 692 DCHECK(block_invalidates_);
718 fallback_tick_pending_ = false; 693 fallback_tick_pending_ = false;
719 if (compositor_needs_continuous_invalidate_ && compositor_) { 694 if (compositor_needs_continuous_invalidate_ && compositor_) {
720 if (hardware_enabled_) { 695 if (hardware_enabled_) {
721 ReturnResourceFromParent(); 696 CompositeHw();
722 ReturnUnusedResource(shared_renderer_state_.PassUncommittedFrameOnUI());
723 scoped_ptr<cc::CompositorFrame> frame = CompositeHw();
724 if (frame.get()) {
725 shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), true);
726 }
727 } else { 697 } else {
728 ForceFakeCompositeSW(); 698 ForceFakeCompositeSW();
729 } 699 }
730 } else { 700 } else {
731 // Pretend we just composited to unblock further invalidates. 701 // Pretend we just composited to unblock further invalidates.
732 DidComposite(); 702 DidComposite();
733 } 703 }
734 } 704 }
735 705
736 void BrowserViewRenderer::ForceFakeCompositeSW() { 706 void BrowserViewRenderer::ForceFakeCompositeSW() {
(...skipping 11 matching lines...) Expand all
748 bool result = compositor_->DemandDrawSw(canvas); 718 bool result = compositor_->DemandDrawSw(canvas);
749 DidComposite(); 719 DidComposite();
750 return result; 720 return result;
751 } 721 }
752 722
753 void BrowserViewRenderer::DidComposite() { 723 void BrowserViewRenderer::DidComposite() {
754 block_invalidates_ = false; 724 block_invalidates_ = false;
755 post_fallback_tick_.Cancel(); 725 post_fallback_tick_.Cancel();
756 fallback_tick_fired_.Cancel(); 726 fallback_tick_fired_.Cancel();
757 fallback_tick_pending_ = false; 727 fallback_tick_pending_ = false;
758 EnsureContinuousInvalidation(false, false); 728 EnsureContinuousInvalidation(false);
759 }
760
761 void BrowserViewRenderer::DidSkipCompositeInDraw() {
762 block_invalidates_ = false;
763 EnsureContinuousInvalidation(true, true);
764 } 729 }
765 730
766 std::string BrowserViewRenderer::ToString() const { 731 std::string BrowserViewRenderer::ToString() const {
767 std::string str; 732 std::string str;
768 base::StringAppendF(&str, "is_paused: %d ", is_paused_); 733 base::StringAppendF(&str, "is_paused: %d ", is_paused_);
769 base::StringAppendF(&str, "view_visible: %d ", view_visible_); 734 base::StringAppendF(&str, "view_visible: %d ", view_visible_);
770 base::StringAppendF(&str, "window_visible: %d ", window_visible_); 735 base::StringAppendF(&str, "window_visible: %d ", window_visible_);
771 base::StringAppendF(&str, "dip_scale: %f ", dip_scale_); 736 base::StringAppendF(&str, "dip_scale: %f ", dip_scale_);
772 base::StringAppendF(&str, "page_scale_factor: %f ", page_scale_factor_); 737 base::StringAppendF(&str, "page_scale_factor: %f ", page_scale_factor_);
773 base::StringAppendF(&str, 738 base::StringAppendF(&str,
(...skipping 10 matching lines...) Expand all
784 base::StringAppendF(&str, 749 base::StringAppendF(&str,
785 "overscroll_rounding_error_: %s ", 750 "overscroll_rounding_error_: %s ",
786 overscroll_rounding_error_.ToString().c_str()); 751 overscroll_rounding_error_.ToString().c_str());
787 base::StringAppendF( 752 base::StringAppendF(
788 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); 753 &str, "on_new_picture_enable: %d ", on_new_picture_enable_);
789 base::StringAppendF(&str, "clear_view: %d ", clear_view_); 754 base::StringAppendF(&str, "clear_view: %d ", clear_view_);
790 return str; 755 return str;
791 } 756 }
792 757
793 } // namespace android_webview 758 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/browser_view_renderer.h ('k') | android_webview/browser/child_frame.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698