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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 817603002: cc: Make scheduling be driven by vsync for android webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Small fix after rebase. 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
OLDNEW
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 "base/android/build_info.h" 9 #include "base/android/build_info.h"
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 SkColor color) { 803 SkColor color) {
804 if (cached_background_color_ == color) 804 if (cached_background_color_ == color)
805 return; 805 return;
806 806
807 cached_background_color_ = color; 807 cached_background_color_ = color;
808 if (content_view_core_) 808 if (content_view_core_)
809 content_view_core_->OnBackgroundColorChanged(color); 809 content_view_core_->OnBackgroundColorChanged(color);
810 } 810 }
811 811
812 void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrames(bool enabled) { 812 void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrames(bool enabled) {
813 DCHECK(using_browser_compositor_);
814 TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::OnSetNeedsBeginFrames", 813 TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::OnSetNeedsBeginFrames",
815 "enabled", enabled); 814 "enabled", enabled);
816 if (enabled) 815 if (enabled)
817 RequestVSyncUpdate(PERSISTENT_BEGIN_FRAME); 816 RequestVSyncUpdate(PERSISTENT_BEGIN_FRAME);
818 else 817 else
819 outstanding_vsync_requests_ &= ~PERSISTENT_BEGIN_FRAME; 818 outstanding_vsync_requests_ &= ~PERSISTENT_BEGIN_FRAME;
820 } 819 }
821 820
822 void RenderWidgetHostViewAndroid::OnStartContentIntent( 821 void RenderWidgetHostViewAndroid::OnStartContentIntent(
823 const GURL& content_url) { 822 const GURL& content_url) {
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after
1505 1504
1506 if (!layer_.get()) 1505 if (!layer_.get())
1507 return; 1506 return;
1508 1507
1509 content_view_core_->RemoveLayer(layer_); 1508 content_view_core_->RemoveLayer(layer_);
1510 if (overscroll_controller_) 1509 if (overscroll_controller_)
1511 overscroll_controller_->Disable(); 1510 overscroll_controller_->Disable();
1512 } 1511 }
1513 1512
1514 void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) { 1513 void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) {
1515 // The synchronous compositor does not requre BeginFrame messages.
1516 if (!using_browser_compositor_)
1517 requests &= FLUSH_INPUT;
1518
1519 bool should_request_vsync = !outstanding_vsync_requests_ && requests; 1514 bool should_request_vsync = !outstanding_vsync_requests_ && requests;
1520 outstanding_vsync_requests_ |= requests; 1515 outstanding_vsync_requests_ |= requests;
1521 // Note that if we're not currently observing the root window, outstanding 1516 // Note that if we're not currently observing the root window, outstanding
1522 // vsync requests will be pushed if/when we resume observing in 1517 // vsync requests will be pushed if/when we resume observing in
1523 // |StartObservingRootWindow()|. 1518 // |StartObservingRootWindow()|.
1524 if (observing_root_window_ && should_request_vsync) 1519 if (observing_root_window_ && should_request_vsync)
1525 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate(); 1520 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate();
1526 } 1521 }
1527 1522
1528 void RenderWidgetHostViewAndroid::StartObservingRootWindow() { 1523 void RenderWidgetHostViewAndroid::StartObservingRootWindow() {
(...skipping 20 matching lines...) Expand all
1549 return; 1544 return;
1550 1545
1551 observing_root_window_ = false; 1546 observing_root_window_ = false;
1552 content_view_core_->GetWindowAndroid()->RemoveObserver(this); 1547 content_view_core_->GetWindowAndroid()->RemoveObserver(this);
1553 } 1548 }
1554 1549
1555 void RenderWidgetHostViewAndroid::SendBeginFrame(base::TimeTicks frame_time, 1550 void RenderWidgetHostViewAndroid::SendBeginFrame(base::TimeTicks frame_time,
1556 base::TimeDelta vsync_period) { 1551 base::TimeDelta vsync_period) {
1557 TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::SendBeginFrame", 1552 TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::SendBeginFrame",
1558 "frame_time_us", frame_time.ToInternalValue()); 1553 "frame_time_us", frame_time.ToInternalValue());
1559 base::TimeTicks display_time = frame_time + vsync_period;
1560 1554
1561 base::TimeTicks deadline = 1555 if (using_browser_compositor_) {
1562 display_time - host_->GetEstimatedBrowserCompositeTime(); 1556 base::TimeTicks display_time = frame_time + vsync_period;
1563 1557
1564 host_->Send(new ViewMsg_BeginFrame( 1558 base::TimeTicks deadline =
1565 host_->GetRoutingID(), 1559 display_time - host_->GetEstimatedBrowserCompositeTime();
1566 cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, 1560
1567 vsync_period, cc::BeginFrameArgs::NORMAL))); 1561 host_->Send(new ViewMsg_BeginFrame(
1562 host_->GetRoutingID(),
1563 cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline,
1564 vsync_period, cc::BeginFrameArgs::NORMAL)));
1565 } else {
1566 SynchronousCompositorImpl* compositor = SynchronousCompositorImpl::FromID(
1567 host_->GetProcess()->GetID(), host_->GetRoutingID());
1568
1569 compositor->SendBeginFrame(cc::BeginFrameArgs::Create(
1570 BEGINFRAME_FROM_HERE, frame_time, base::TimeTicks(), vsync_period,
1571 cc::BeginFrameArgs::NORMAL));
1572 }
1568 } 1573 }
1569 1574
1570 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { 1575 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
1571 bool needs_animate = false; 1576 bool needs_animate = false;
1572 if (overscroll_controller_) { 1577 if (overscroll_controller_) {
1573 needs_animate |= overscroll_controller_->Animate( 1578 needs_animate |= overscroll_controller_->Animate(
1574 frame_time, content_view_core_->GetLayer().get()); 1579 frame_time, content_view_core_->GetLayer().get());
1575 } 1580 }
1576 if (selection_controller_) 1581 if (selection_controller_)
1577 needs_animate |= selection_controller_->Animate(frame_time); 1582 needs_animate |= selection_controller_->Animate(frame_time);
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
1880 RunAckCallbacks(cc::SurfaceDrawStatus::DRAW_SKIPPED); 1885 RunAckCallbacks(cc::SurfaceDrawStatus::DRAW_SKIPPED);
1881 overscroll_controller_.reset(); 1886 overscroll_controller_.reset();
1882 } 1887 }
1883 1888
1884 void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time, 1889 void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time,
1885 base::TimeDelta vsync_period) { 1890 base::TimeDelta vsync_period) {
1886 TRACE_EVENT0("cc,benchmark", "RenderWidgetHostViewAndroid::OnVSync"); 1891 TRACE_EVENT0("cc,benchmark", "RenderWidgetHostViewAndroid::OnVSync");
1887 if (!host_) 1892 if (!host_)
1888 return; 1893 return;
1889 1894
1890 const uint32 current_vsync_requests = outstanding_vsync_requests_; 1895 if (outstanding_vsync_requests_ & FLUSH_INPUT) {
1891 outstanding_vsync_requests_ = 0; 1896 outstanding_vsync_requests_ &= ~FLUSH_INPUT;
1897 host_->FlushInput();
1898 }
1892 1899
1893 if (current_vsync_requests & FLUSH_INPUT) 1900 if (outstanding_vsync_requests_ & BEGIN_FRAME ||
1894 host_->FlushInput(); 1901 outstanding_vsync_requests_ & PERSISTENT_BEGIN_FRAME) {
1895 1902 outstanding_vsync_requests_ &= ~BEGIN_FRAME;
1896 if (current_vsync_requests & BEGIN_FRAME ||
1897 current_vsync_requests & PERSISTENT_BEGIN_FRAME) {
1898 SendBeginFrame(frame_time, vsync_period); 1903 SendBeginFrame(frame_time, vsync_period);
1899 } 1904 }
1900 1905
1901 if (current_vsync_requests & PERSISTENT_BEGIN_FRAME) 1906 // This allows for SendBeginFrame to modify outstanding_vsync_requests.
1902 RequestVSyncUpdate(PERSISTENT_BEGIN_FRAME); 1907 uint32 outstanding_vsync_requests = outstanding_vsync_requests_;
1908 outstanding_vsync_requests_ = 0;
1909 RequestVSyncUpdate(outstanding_vsync_requests);
1903 } 1910 }
1904 1911
1905 void RenderWidgetHostViewAndroid::OnAnimate(base::TimeTicks begin_frame_time) { 1912 void RenderWidgetHostViewAndroid::OnAnimate(base::TimeTicks begin_frame_time) {
1906 if (Animate(begin_frame_time)) 1913 if (Animate(begin_frame_time))
1907 SetNeedsAnimate(); 1914 SetNeedsAnimate();
1908 } 1915 }
1909 1916
1910 void RenderWidgetHostViewAndroid::OnLostResources() { 1917 void RenderWidgetHostViewAndroid::OnLostResources() {
1911 ReleaseLocksOnSurface(); 1918 ReleaseLocksOnSurface();
1912 if (layer_.get()) 1919 if (layer_.get())
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
2047 results->orientationAngle = display.RotationAsDegree(); 2054 results->orientationAngle = display.RotationAsDegree();
2048 results->orientationType = 2055 results->orientationType =
2049 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); 2056 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display);
2050 gfx::DeviceDisplayInfo info; 2057 gfx::DeviceDisplayInfo info;
2051 results->depth = info.GetBitsPerPixel(); 2058 results->depth = info.GetBitsPerPixel();
2052 results->depthPerComponent = info.GetBitsPerComponent(); 2059 results->depthPerComponent = info.GetBitsPerComponent();
2053 results->isMonochrome = (results->depthPerComponent == 0); 2060 results->isMonochrome = (results->depthPerComponent == 0);
2054 } 2061 }
2055 2062
2056 } // namespace content 2063 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698