OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/renderer_host/render_widget_host_view_android.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_android.h" |
6 | 6 |
7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 1392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1403 return; | 1403 return; |
1404 | 1404 |
1405 observing_root_window_ = true; | 1405 observing_root_window_ = true; |
1406 if (host_) | 1406 if (host_) |
1407 host_->Send(new ViewMsg_SetBeginFramePaused(host_->GetRoutingID(), false)); | 1407 host_->Send(new ViewMsg_SetBeginFramePaused(host_->GetRoutingID(), false)); |
1408 view_.GetWindowAndroid()->AddObserver(this); | 1408 view_.GetWindowAndroid()->AddObserver(this); |
1409 // When using browser compositor, DelegatedFrameHostAndroid provides the BFS. | 1409 // When using browser compositor, DelegatedFrameHostAndroid provides the BFS. |
1410 if (!using_browser_compositor_) | 1410 if (!using_browser_compositor_) |
1411 SetBeginFrameSource(view_.GetWindowAndroid()->GetBeginFrameSource()); | 1411 SetBeginFrameSource(view_.GetWindowAndroid()->GetBeginFrameSource()); |
1412 | 1412 |
1413 ui::WindowAndroidCompositor* compositor = | 1413 CompositorImpl* compositor = |
1414 view_.GetWindowAndroid()->GetCompositor(); | 1414 static_cast<CompositorImpl*>(view_.GetWindowAndroid()->GetCompositor()); |
1415 if (compositor) { | 1415 if (compositor) |
1416 delegated_frame_host_->RegisterFrameSinkHierarchy( | 1416 delegated_frame_host_->AttachToCompositor(compositor); |
1417 compositor->GetFrameSinkId()); | |
1418 } | |
1419 } | 1417 } |
1420 | 1418 |
1421 void RenderWidgetHostViewAndroid::StopObservingRootWindow() { | 1419 void RenderWidgetHostViewAndroid::StopObservingRootWindow() { |
1422 if (!(view_.GetWindowAndroid())) { | 1420 if (!(view_.GetWindowAndroid())) { |
1423 DCHECK(!observing_root_window_); | 1421 DCHECK(!observing_root_window_); |
1424 return; | 1422 return; |
1425 } | 1423 } |
1426 | 1424 |
1427 if (!observing_root_window_) | 1425 if (!observing_root_window_) |
1428 return; | 1426 return; |
1429 | 1427 |
1430 // Reset window state variables to their defaults. | 1428 // Reset window state variables to their defaults. |
1431 is_window_activity_started_ = true; | 1429 is_window_activity_started_ = true; |
1432 is_window_visible_ = true; | 1430 is_window_visible_ = true; |
1433 observing_root_window_ = false; | 1431 observing_root_window_ = false; |
1434 if (host_) | 1432 if (host_) |
1435 host_->Send(new ViewMsg_SetBeginFramePaused(host_->GetRoutingID(), true)); | 1433 host_->Send(new ViewMsg_SetBeginFramePaused(host_->GetRoutingID(), true)); |
1436 view_.GetWindowAndroid()->RemoveObserver(this); | 1434 view_.GetWindowAndroid()->RemoveObserver(this); |
1437 if (!using_browser_compositor_) | 1435 if (!using_browser_compositor_) |
1438 SetBeginFrameSource(nullptr); | 1436 SetBeginFrameSource(nullptr); |
1439 // If the DFH has already been destroyed, it will have cleaned itself up. | 1437 // If the DFH has already been destroyed, it will have cleaned itself up. |
1440 // This happens in some WebView cases. | 1438 // This happens in some WebView cases. |
1441 if (delegated_frame_host_) | 1439 if (delegated_frame_host_) |
1442 delegated_frame_host_->UnregisterFrameSinkHierarchy(); | 1440 delegated_frame_host_->DetachFromCompositor(); |
1443 DCHECK(!begin_frame_source_); | 1441 DCHECK(!begin_frame_source_); |
1444 } | 1442 } |
1445 | 1443 |
1446 void RenderWidgetHostViewAndroid::SendBeginFrame(cc::BeginFrameArgs args) { | 1444 void RenderWidgetHostViewAndroid::SendBeginFrame(cc::BeginFrameArgs args) { |
1447 TRACE_EVENT2("cc", "RenderWidgetHostViewAndroid::SendBeginFrame", | 1445 TRACE_EVENT2("cc", "RenderWidgetHostViewAndroid::SendBeginFrame", |
1448 "frame_number", args.sequence_number, "frame_time_us", | 1446 "frame_number", args.sequence_number, "frame_time_us", |
1449 args.frame_time.ToInternalValue()); | 1447 args.frame_time.ToInternalValue()); |
1450 | 1448 |
1451 // Synchronous compositor does not use deadline-based scheduling. | 1449 // Synchronous compositor does not use deadline-based scheduling. |
1452 // TODO(brianderson): Replace this hardcoded deadline after Android | 1450 // TODO(brianderson): Replace this hardcoded deadline after Android |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1815 | 1813 |
1816 void RenderWidgetHostViewAndroid::OnDetachedFromWindow() { | 1814 void RenderWidgetHostViewAndroid::OnDetachedFromWindow() { |
1817 StopObservingRootWindow(); | 1815 StopObservingRootWindow(); |
1818 OnDetachCompositor(); | 1816 OnDetachCompositor(); |
1819 } | 1817 } |
1820 | 1818 |
1821 void RenderWidgetHostViewAndroid::OnAttachCompositor() { | 1819 void RenderWidgetHostViewAndroid::OnAttachCompositor() { |
1822 DCHECK(content_view_core_); | 1820 DCHECK(content_view_core_); |
1823 CreateOverscrollControllerIfPossible(); | 1821 CreateOverscrollControllerIfPossible(); |
1824 if (observing_root_window_) { | 1822 if (observing_root_window_) { |
1825 ui::WindowAndroidCompositor* compositor = | 1823 CompositorImpl* compositor = |
1826 view_.GetWindowAndroid()->GetCompositor(); | 1824 static_cast<CompositorImpl*>(view_.GetWindowAndroid()->GetCompositor()); |
1827 delegated_frame_host_->RegisterFrameSinkHierarchy( | 1825 delegated_frame_host_->AttachToCompositor(compositor); |
1828 compositor->GetFrameSinkId()); | |
1829 } | 1826 } |
1830 } | 1827 } |
1831 | 1828 |
1832 void RenderWidgetHostViewAndroid::OnDetachCompositor() { | 1829 void RenderWidgetHostViewAndroid::OnDetachCompositor() { |
1833 DCHECK(content_view_core_); | 1830 DCHECK(content_view_core_); |
1834 DCHECK(using_browser_compositor_); | 1831 DCHECK(using_browser_compositor_); |
1835 RunAckCallbacks(); | 1832 RunAckCallbacks(); |
1836 overscroll_controller_.reset(); | 1833 overscroll_controller_.reset(); |
1837 delegated_frame_host_->UnregisterFrameSinkHierarchy(); | 1834 delegated_frame_host_->DetachFromCompositor(); |
1838 } | 1835 } |
1839 | 1836 |
1840 void RenderWidgetHostViewAndroid::OnBeginFrame(const cc::BeginFrameArgs& args) { | 1837 void RenderWidgetHostViewAndroid::OnBeginFrame(const cc::BeginFrameArgs& args) { |
1841 TRACE_EVENT0("cc,benchmark", "RenderWidgetHostViewAndroid::OnBeginFrame"); | 1838 TRACE_EVENT0("cc,benchmark", "RenderWidgetHostViewAndroid::OnBeginFrame"); |
1842 if (!host_) | 1839 if (!host_) |
1843 return; | 1840 return; |
1844 | 1841 |
1845 // In sync mode, we disregard missed frame args to ensure that | 1842 // In sync mode, we disregard missed frame args to ensure that |
1846 // SynchronousCompositorBrowserFilter::SyncStateAfterVSync will be called | 1843 // SynchronousCompositorBrowserFilter::SyncStateAfterVSync will be called |
1847 // during WindowAndroid::WindowBeginFrameSource::OnVSync() observer iteration. | 1844 // during WindowAndroid::WindowBeginFrameSource::OnVSync() observer iteration. |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1986 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor(); | 1983 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor(); |
1987 if (!compositor) | 1984 if (!compositor) |
1988 return; | 1985 return; |
1989 | 1986 |
1990 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>( | 1987 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>( |
1991 overscroll_refresh_handler, compositor, | 1988 overscroll_refresh_handler, compositor, |
1992 ui::GetScaleFactorForNativeView(GetNativeView())); | 1989 ui::GetScaleFactorForNativeView(GetNativeView())); |
1993 } | 1990 } |
1994 | 1991 |
1995 } // namespace content | 1992 } // namespace content |
OLD | NEW |