summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHui Shu <hush@google.com>2014-12-02 17:02:30 -0800
committerHui Shu <hush@google.com>2014-12-03 01:22:52 +0000
commit27bf38b1f54481a4168f6630e5b71bed9dd803c6 (patch)
tree536f19b5226b54a3b7b076f41efa57b07a9dfc3e
parent2e7495267cd2641ae800832c9996637794c948cc (diff)
downloadchromium_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
-rw-r--r--content/browser/renderer_host/render_widget_host_view_android.cc22
-rw-r--r--content/browser/renderer_host/render_widget_host_view_android.h2
-rw-r--r--content/public/test/content_test_suite_base.cc3
-rw-r--r--content/test/run_all_unittests.cc9
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));