| OLD | NEW |
| 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 <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "android_webview/browser/browser_view_renderer_client.h" | 9 #include "android_webview/browser/browser_view_renderer_client.h" |
| 10 #include "android_webview/browser/child_frame.h" | 10 #include "android_webview/browser/child_frame.h" |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 } | 371 } |
| 372 } | 372 } |
| 373 | 373 |
| 374 void BrowserViewRenderer::SetIsPaused(bool paused) { | 374 void BrowserViewRenderer::SetIsPaused(bool paused) { |
| 375 TRACE_EVENT_INSTANT1("android_webview", | 375 TRACE_EVENT_INSTANT1("android_webview", |
| 376 "BrowserViewRenderer::SetIsPaused", | 376 "BrowserViewRenderer::SetIsPaused", |
| 377 TRACE_EVENT_SCOPE_THREAD, | 377 TRACE_EVENT_SCOPE_THREAD, |
| 378 "paused", | 378 "paused", |
| 379 paused); | 379 paused); |
| 380 is_paused_ = paused; | 380 is_paused_ = paused; |
| 381 UpdateCompositorIsActive(); | |
| 382 } | 381 } |
| 383 | 382 |
| 384 void BrowserViewRenderer::SetViewVisibility(bool view_visible) { | 383 void BrowserViewRenderer::SetViewVisibility(bool view_visible) { |
| 385 TRACE_EVENT_INSTANT1("android_webview", | 384 TRACE_EVENT_INSTANT1("android_webview", |
| 386 "BrowserViewRenderer::SetViewVisibility", | 385 "BrowserViewRenderer::SetViewVisibility", |
| 387 TRACE_EVENT_SCOPE_THREAD, | 386 TRACE_EVENT_SCOPE_THREAD, |
| 388 "view_visible", | 387 "view_visible", |
| 389 view_visible); | 388 view_visible); |
| 390 view_visible_ = view_visible; | 389 view_visible_ = view_visible; |
| 391 } | 390 } |
| 392 | 391 |
| 393 void BrowserViewRenderer::SetWindowVisibility(bool window_visible) { | 392 void BrowserViewRenderer::SetWindowVisibility(bool window_visible) { |
| 394 TRACE_EVENT_INSTANT1("android_webview", | 393 TRACE_EVENT_INSTANT1("android_webview", |
| 395 "BrowserViewRenderer::SetWindowVisibility", | 394 "BrowserViewRenderer::SetWindowVisibility", |
| 396 TRACE_EVENT_SCOPE_THREAD, | 395 TRACE_EVENT_SCOPE_THREAD, |
| 397 "window_visible", | 396 "window_visible", |
| 398 window_visible); | 397 window_visible); |
| 399 window_visible_ = window_visible; | 398 window_visible_ = window_visible; |
| 400 UpdateCompositorIsActive(); | |
| 401 } | 399 } |
| 402 | 400 |
| 403 void BrowserViewRenderer::OnSizeChanged(int width, int height) { | 401 void BrowserViewRenderer::OnSizeChanged(int width, int height) { |
| 404 TRACE_EVENT_INSTANT2("android_webview", | 402 TRACE_EVENT_INSTANT2("android_webview", |
| 405 "BrowserViewRenderer::OnSizeChanged", | 403 "BrowserViewRenderer::OnSizeChanged", |
| 406 TRACE_EVENT_SCOPE_THREAD, | 404 TRACE_EVENT_SCOPE_THREAD, |
| 407 "width", | 405 "width", |
| 408 width, | 406 width, |
| 409 "height", | 407 "height", |
| 410 height); | 408 height); |
| 411 size_.SetSize(width, height); | 409 size_.SetSize(width, height); |
| 412 if (offscreen_pre_raster_) | 410 if (offscreen_pre_raster_) |
| 413 UpdateMemoryPolicy(); | 411 UpdateMemoryPolicy(); |
| 414 } | 412 } |
| 415 | 413 |
| 416 void BrowserViewRenderer::OnAttachedToWindow(int width, int height) { | 414 void BrowserViewRenderer::OnAttachedToWindow(int width, int height) { |
| 417 TRACE_EVENT2("android_webview", | 415 TRACE_EVENT2("android_webview", |
| 418 "BrowserViewRenderer::OnAttachedToWindow", | 416 "BrowserViewRenderer::OnAttachedToWindow", |
| 419 "width", | 417 "width", |
| 420 width, | 418 width, |
| 421 "height", | 419 "height", |
| 422 height); | 420 height); |
| 423 attached_to_window_ = true; | 421 attached_to_window_ = true; |
| 424 size_.SetSize(width, height); | 422 size_.SetSize(width, height); |
| 425 if (offscreen_pre_raster_) | 423 if (offscreen_pre_raster_) |
| 426 UpdateMemoryPolicy(); | 424 UpdateMemoryPolicy(); |
| 427 UpdateCompositorIsActive(); | |
| 428 } | 425 } |
| 429 | 426 |
| 430 void BrowserViewRenderer::OnDetachedFromWindow() { | 427 void BrowserViewRenderer::OnDetachedFromWindow() { |
| 431 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDetachedFromWindow"); | 428 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDetachedFromWindow"); |
| 432 attached_to_window_ = false; | 429 attached_to_window_ = false; |
| 433 ReleaseHardware(); | 430 ReleaseHardware(); |
| 434 UpdateCompositorIsActive(); | |
| 435 } | 431 } |
| 436 | 432 |
| 437 void BrowserViewRenderer::ZoomBy(float delta) { | 433 void BrowserViewRenderer::ZoomBy(float delta) { |
| 438 if (!compositor_) | 434 if (!compositor_) |
| 439 return; | 435 return; |
| 440 compositor_->SynchronouslyZoomBy( | 436 compositor_->SynchronouslyZoomBy( |
| 441 delta, gfx::Point(size_.width() / 2, size_.height() / 2)); | 437 delta, gfx::Point(size_.width() / 2, size_.height() / 2)); |
| 442 } | 438 } |
| 443 | 439 |
| 444 void BrowserViewRenderer::OnComputeScroll(base::TimeTicks animation_time) { | 440 void BrowserViewRenderer::OnComputeScroll(base::TimeTicks animation_time) { |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 } | 497 } |
| 502 | 498 |
| 503 void BrowserViewRenderer::DidDestroyCompositor( | 499 void BrowserViewRenderer::DidDestroyCompositor( |
| 504 content::SynchronousCompositor* compositor) { | 500 content::SynchronousCompositor* compositor) { |
| 505 TRACE_EVENT_INSTANT0("android_webview", | 501 TRACE_EVENT_INSTANT0("android_webview", |
| 506 "BrowserViewRenderer::DidDestroyCompositor", | 502 "BrowserViewRenderer::DidDestroyCompositor", |
| 507 TRACE_EVENT_SCOPE_THREAD); | 503 TRACE_EVENT_SCOPE_THREAD); |
| 508 DCHECK(compositor_); | 504 DCHECK(compositor_); |
| 509 if (compositor_ == compositor) | 505 if (compositor_ == compositor) |
| 510 compositor_ = nullptr; | 506 compositor_ = nullptr; |
| 511 compositor->SetIsActive(false); | |
| 512 compositor_map_.erase(GetCompositorID(compositor)); | 507 compositor_map_.erase(GetCompositorID(compositor)); |
| 513 } | 508 } |
| 514 | 509 |
| 515 void BrowserViewRenderer::DidBecomeCurrent( | 510 void BrowserViewRenderer::DidBecomeCurrent( |
| 516 content::SynchronousCompositor* compositor) { | 511 content::SynchronousCompositor* compositor) { |
| 517 TRACE_EVENT_INSTANT0("android_webview", | 512 TRACE_EVENT_INSTANT0("android_webview", |
| 518 "BrowserViewRenderer::DidBecomeCurrent", | 513 "BrowserViewRenderer::DidBecomeCurrent", |
| 519 TRACE_EVENT_SCOPE_THREAD); | 514 TRACE_EVENT_SCOPE_THREAD); |
| 520 DCHECK(compositor); | 515 DCHECK(compositor); |
| 521 DCHECK(GetCompositorID(compositor)); | 516 DCHECK(GetCompositorID(compositor)); |
| 522 if (compositor_) | |
| 523 compositor_->SetIsActive(false); | |
| 524 | |
| 525 compositor_ = compositor; | 517 compositor_ = compositor; |
| 526 UpdateCompositorIsActive(); | |
| 527 } | 518 } |
| 528 | 519 |
| 529 void BrowserViewRenderer::SetDipScale(float dip_scale) { | 520 void BrowserViewRenderer::SetDipScale(float dip_scale) { |
| 530 dip_scale_ = dip_scale; | 521 dip_scale_ = dip_scale; |
| 531 CHECK_GT(dip_scale_, 0.f); | 522 CHECK_GT(dip_scale_, 0.f); |
| 532 } | 523 } |
| 533 | 524 |
| 534 gfx::Vector2d BrowserViewRenderer::max_scroll_offset() const { | 525 gfx::Vector2d BrowserViewRenderer::max_scroll_offset() const { |
| 535 DCHECK_GT(dip_scale_, 0.f); | 526 DCHECK_GT(dip_scale_, 0.f); |
| 536 return gfx::ToCeiledVector2d(gfx::ScaleVector2d( | 527 return gfx::ToCeiledVector2d(gfx::ScaleVector2d( |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 TRACE_EVENT_INSTANT0("android_webview", "BrowserViewRenderer::PostInvalidate", | 690 TRACE_EVENT_INSTANT0("android_webview", "BrowserViewRenderer::PostInvalidate", |
| 700 TRACE_EVENT_SCOPE_THREAD); | 691 TRACE_EVENT_SCOPE_THREAD); |
| 701 client_->PostInvalidate(); | 692 client_->PostInvalidate(); |
| 702 } | 693 } |
| 703 | 694 |
| 704 bool BrowserViewRenderer::CompositeSW(SkCanvas* canvas) { | 695 bool BrowserViewRenderer::CompositeSW(SkCanvas* canvas) { |
| 705 DCHECK(compositor_); | 696 DCHECK(compositor_); |
| 706 return compositor_->DemandDrawSw(canvas); | 697 return compositor_->DemandDrawSw(canvas); |
| 707 } | 698 } |
| 708 | 699 |
| 709 void BrowserViewRenderer::UpdateCompositorIsActive() { | |
| 710 if (compositor_) { | |
| 711 compositor_->SetIsActive(!is_paused_ && | |
| 712 (!attached_to_window_ || window_visible_)); | |
| 713 } | |
| 714 } | |
| 715 | |
| 716 std::string BrowserViewRenderer::ToString() const { | 700 std::string BrowserViewRenderer::ToString() const { |
| 717 std::string str; | 701 std::string str; |
| 718 base::StringAppendF(&str, "is_paused: %d ", is_paused_); | 702 base::StringAppendF(&str, "is_paused: %d ", is_paused_); |
| 719 base::StringAppendF(&str, "view_visible: %d ", view_visible_); | 703 base::StringAppendF(&str, "view_visible: %d ", view_visible_); |
| 720 base::StringAppendF(&str, "window_visible: %d ", window_visible_); | 704 base::StringAppendF(&str, "window_visible: %d ", window_visible_); |
| 721 base::StringAppendF(&str, "dip_scale: %f ", dip_scale_); | 705 base::StringAppendF(&str, "dip_scale: %f ", dip_scale_); |
| 722 base::StringAppendF(&str, "page_scale_factor: %f ", page_scale_factor_); | 706 base::StringAppendF(&str, "page_scale_factor: %f ", page_scale_factor_); |
| 723 base::StringAppendF(&str, "view size: %s ", size_.ToString().c_str()); | 707 base::StringAppendF(&str, "view size: %s ", size_.ToString().c_str()); |
| 724 base::StringAppendF(&str, "attached_to_window: %d ", attached_to_window_); | 708 base::StringAppendF(&str, "attached_to_window: %d ", attached_to_window_); |
| 725 base::StringAppendF(&str, | 709 base::StringAppendF(&str, |
| 726 "global visible rect: %s ", | 710 "global visible rect: %s ", |
| 727 last_on_draw_global_visible_rect_.ToString().c_str()); | 711 last_on_draw_global_visible_rect_.ToString().c_str()); |
| 728 base::StringAppendF( | 712 base::StringAppendF( |
| 729 &str, "scroll_offset_dip: %s ", scroll_offset_dip_.ToString().c_str()); | 713 &str, "scroll_offset_dip: %s ", scroll_offset_dip_.ToString().c_str()); |
| 730 base::StringAppendF(&str, | 714 base::StringAppendF(&str, |
| 731 "overscroll_rounding_error_: %s ", | 715 "overscroll_rounding_error_: %s ", |
| 732 overscroll_rounding_error_.ToString().c_str()); | 716 overscroll_rounding_error_.ToString().c_str()); |
| 733 base::StringAppendF( | 717 base::StringAppendF( |
| 734 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); | 718 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); |
| 735 base::StringAppendF(&str, "clear_view: %d ", clear_view_); | 719 base::StringAppendF(&str, "clear_view: %d ", clear_view_); |
| 736 return str; | 720 return str; |
| 737 } | 721 } |
| 738 | 722 |
| 739 } // namespace android_webview | 723 } // namespace android_webview |
| OLD | NEW |