diff options
author | Hui Shu <hush@google.com> | 2014-12-02 17:02:30 -0800 |
---|---|---|
committer | Hui Shu <hush@google.com> | 2014-12-03 01:22:52 +0000 |
commit | 27bf38b1f54481a4168f6630e5b71bed9dd803c6 (patch) | |
tree | 536f19b5226b54a3b7b076f41efa57b07a9dfc3e | |
parent | 2e7495267cd2641ae800832c9996637794c948cc (diff) | |
download | chromium_org-27bf38b1f54481a4168f6630e5b71bed9dd803c6.tar.gz |
Cherry pick: Detect if we're using browser composior in RWHVA
Cherry pick from:
https://crrev.com/a43a08a85da0a2d2ed78a850fa9f8efe8c0028b9
Original description:
Detecting if we're using synchronous compositor is unreliable because
the synchronous compositor could be created either before or after
RWHVA constructor.
Instead, we can detect if we're using browser compositor in RWHVA. And
this can be done reliably at RWHVA construction time.
Conflicts:
content/test/run_all_unittests.cc,
content/browser/renderer_host/render_widget_host_view_android.cc
BUG: 18377042
Change-Id: I5ad377de0c8651a76eb51776eca7e7ad3fd3e9cd
4 files changed, 23 insertions, 13 deletions
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc index a20a7da14e..78074678e2 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc @@ -279,9 +279,7 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( gesture_provider_(CreateGestureProviderConfig(), this), gesture_text_selector_(this), accelerated_surface_route_id_(0), - using_synchronous_compositor_(SynchronousCompositorImpl::FromID( - widget_host->GetProcess()->GetID(), - widget_host->GetRoutingID()) != NULL), + using_browser_compositor_(CompositorImpl::IsInitialized()), frame_evictor_(new DelegatedFrameEvictor(this)), locks_on_frame_count_(0), observing_root_window_(false), @@ -669,7 +667,7 @@ void RenderWidgetHostViewAndroid::OnDidChangeBodyBackgroundColor( } void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame(bool enabled) { - DCHECK(!using_synchronous_compositor_); + DCHECK(using_browser_compositor_); TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame", "enabled", enabled); if (enabled) @@ -835,7 +833,7 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( return; } base::TimeTicks start_time = base::TimeTicks::Now(); - if (!using_synchronous_compositor_ && !IsSurfaceAvailableForCopy()) { + if (using_browser_compositor_ && !IsSurfaceAvailableForCopy()) { callback.Run(false, SkBitmap()); return; } @@ -847,7 +845,7 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( gfx::Rect src_subrect_in_pixel = ConvertRectToPixel(device_scale_factor, src_subrect); - if (using_synchronous_compositor_) { + if (!using_browser_compositor_) { SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback, color_type); UMA_HISTOGRAM_TIMES("Compositing.CopyFromSurfaceTimeSynchronous", @@ -1137,12 +1135,12 @@ void RenderWidgetHostViewAndroid::SetOverlayVideoMode(bool enabled) { bool RenderWidgetHostViewAndroid::SupportsAnimation() const { // The synchronous (WebView) compositor does not have a proper browser // compositor with which to drive animations. - return !using_synchronous_compositor_; + return using_browser_compositor_; } void RenderWidgetHostViewAndroid::SetNeedsAnimate() { DCHECK(content_view_core_); - DCHECK(!using_synchronous_compositor_); + DCHECK(using_browser_compositor_); content_view_core_->GetWindowAndroid()->SetNeedsAnimate(); } @@ -1166,7 +1164,7 @@ void RenderWidgetHostViewAndroid::OnSelectionEvent( scoped_ptr<TouchHandleDrawable> RenderWidgetHostViewAndroid::CreateDrawable() { DCHECK(content_view_core_); - if (using_synchronous_compositor_) + if (!using_browser_compositor_) return content_view_core_->CreatePopupTouchHandleDrawable(); return scoped_ptr<TouchHandleDrawable>(new CompositedTouchHandleDrawable( @@ -1277,7 +1275,7 @@ void RenderWidgetHostViewAndroid::RemoveLayers() { void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) { // The synchronous compositor does not requre BeginFrame messages. - if (using_synchronous_compositor_) + if (!using_browser_compositor_) requests &= FLUSH_INPUT; bool should_request_vsync = !outstanding_vsync_requests_ && requests; @@ -1385,7 +1383,7 @@ gfx::Rect RenderWidgetHostViewAndroid::GetBoundsInRootWindow() { gfx::GLSurfaceHandle RenderWidgetHostViewAndroid::GetCompositingSurface() { gfx::GLSurfaceHandle handle = gfx::GLSurfaceHandle(gfx::kNullPluginWindow, gfx::NATIVE_TRANSPORT); - if (CompositorImpl::IsInitialized()) { + if (using_browser_compositor_) { handle.parent_client_id = ImageTransportFactoryAndroid::GetInstance()->GetChannelID(); } @@ -1659,7 +1657,7 @@ void RenderWidgetHostViewAndroid::OnAttachCompositor() { void RenderWidgetHostViewAndroid::OnDetachCompositor() { DCHECK(content_view_core_); - DCHECK(!using_synchronous_compositor_); + DCHECK(using_browser_compositor_); RunAckCallbacks(); overscroll_effect_.reset(); } diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h index 22bb69446c..4af85c2ce5 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.h +++ b/content/browser/renderer_host/render_widget_host_view_android.h @@ -404,7 +404,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid // Size to use if we have no backing ContentViewCore gfx::Size default_size_; - const bool using_synchronous_compositor_; + const bool using_browser_compositor_; scoped_ptr<DelegatedFrameEvictor> frame_evictor_; diff --git a/content/public/test/content_test_suite_base.cc b/content/public/test/content_test_suite_base.cc index 6fa29b068b..c5aa264a1b 100644 --- a/content/public/test/content_test_suite_base.cc +++ b/content/public/test/content_test_suite_base.cc @@ -29,6 +29,7 @@ #include "base/android/jni_android.h" #include "content/browser/android/browser_jni_registrar.h" #include "content/common/android/common_jni_registrar.h" +#include "content/public/browser/android/compositor.h" #include "media/base/android/media_jni_registrar.h" #include "net/android/net_jni_registrar.h" #include "ui/base/android/ui_base_jni_registrar.h" @@ -72,6 +73,8 @@ void ContentTestSuiteBase::Initialize() { net::android::RegisterJni(env); ui::android::RegisterJni(env); ui::shell_dialogs::RegisterJni(env); + + content::Compositor::Initialize(); #endif testing::UnitTest::GetInstance()->listeners().Append( diff --git a/content/test/run_all_unittests.cc b/content/test/run_all_unittests.cc index fcfa2b098b..105691c3b2 100644 --- a/content/test/run_all_unittests.cc +++ b/content/test/run_all_unittests.cc @@ -7,7 +7,16 @@ #include "content/public/test/unittest_test_suite.h" #include "content/test/content_test_suite.h" +#if defined(OS_ANDROID) +#include "content/browser/gpu/browser_gpu_channel_host_factory.h" +#endif + int main(int argc, char** argv) { +#if defined(OS_ANDROID) + // Android wants to call GetChannelId() (even though GPU channels + // are not getting created in content_unittests). + content::BrowserGpuChannelHostFactory::Initialize(false); +#endif content::UnitTestTestSuite test_suite( new content::ContentTestSuite(argc, argv)); |