| Index: chrome/android/testshell/tab_manager.cc
|
| diff --git a/chrome/android/testshell/tab_manager.cc b/chrome/android/testshell/tab_manager.cc
|
| index 97ccbe1bcff95621c6424df1b995945040acb826..fc379dd155aeea242fde5138d8128766cb5b16ef 100644
|
| --- a/chrome/android/testshell/tab_manager.cc
|
| +++ b/chrome/android/testshell/tab_manager.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/android/scoped_java_ref.h"
|
| #include "base/bind.h"
|
| #include "base/lazy_instance.h"
|
| +#include "base/message_loop.h"
|
| #include "chrome/browser/android/tab_base_android_impl.h"
|
| #include "content/public/browser/android/compositor.h"
|
| #include "content/public/browser/android/draw_delegate.h"
|
| @@ -22,9 +23,18 @@ using base::android::ScopedJavaLocalRef;
|
|
|
| namespace {
|
|
|
| +class CompositorClient : public content::Compositor::Client {
|
| + public:
|
| + virtual void ScheduleComposite() OVERRIDE;
|
| +};
|
| +
|
| struct GlobalState {
|
| + GlobalState()
|
| + : g_scheduled_composite(false) {}
|
| + CompositorClient client;
|
| scoped_ptr<content::Compositor> compositor;
|
| scoped_ptr<WebKit::WebLayer> root_layer;
|
| + bool g_scheduled_composite;
|
| };
|
|
|
| base::LazyInstance<GlobalState> g_global_state = LAZY_INSTANCE_INITIALIZER;
|
| @@ -33,20 +43,18 @@ content::Compositor* GetCompositor() {
|
| return g_global_state.Get().compositor.get();
|
| }
|
|
|
| -static void SurfacePresented(
|
| - const content::DrawDelegate::SurfacePresentedCallback& callback,
|
| - uint32 sync_point) {
|
| - callback.Run(sync_point);
|
| +void Composite() {
|
| + g_global_state.Get().g_scheduled_composite = false;
|
| + if (GetCompositor()) {
|
| + GetCompositor()->Composite();
|
| + }
|
| }
|
|
|
| -void DummyCallback(uint32) { }
|
| -
|
| -static void SurfaceUpdated(
|
| - uint64 texture,
|
| - content::RenderWidgetHostView* view,
|
| - const content::DrawDelegate::SurfacePresentedCallback& callback) {
|
| - GetCompositor()->OnSurfaceUpdated(base::Bind(
|
| - &SurfacePresented, callback));
|
| +void CompositorClient::ScheduleComposite() {
|
| + if (!g_global_state.Get().g_scheduled_composite) {
|
| + g_global_state.Get().g_scheduled_composite = true;
|
| + MessageLoop::current()->PostTask(FROM_HERE, base::Bind(&Composite));
|
| + }
|
| }
|
|
|
| } // anonymous namespace
|
| @@ -59,12 +67,10 @@ bool RegisterTabManager(JNIEnv* env) {
|
| }
|
|
|
| static void Init(JNIEnv* env, jclass clazz, jobject obj) {
|
| - content::DrawDelegate::SurfaceUpdatedCallback cb = base::Bind(
|
| - &SurfaceUpdated);
|
| - content::DrawDelegate::GetInstance()->SetUpdateCallback(cb);
|
| if (!GetCompositor()) {
|
| content::Compositor::Initialize();
|
| - g_global_state.Get().compositor.reset(content::Compositor::Create());
|
| + g_global_state.Get().compositor.reset(content::Compositor::Create(
|
| + &g_global_state.Get().client));
|
| DCHECK(!g_global_state.Get().root_layer.get());
|
| g_global_state.Get().root_layer.reset(WebKit::WebLayer::create());
|
| }
|
| @@ -95,7 +101,6 @@ static void ShowTab(JNIEnv* env, jclass clazz, jint jtab) {
|
| return;
|
| TabBaseAndroidImpl* tab = reinterpret_cast<TabBaseAndroidImpl*>(jtab);
|
| g_global_state.Get().root_layer->addChild(tab->tab_layer());
|
| - GetCompositor()->OnSurfaceUpdated(base::Bind(&DummyCallback));
|
| }
|
|
|
| static void HideTab(JNIEnv* env, jclass clazz, jint jtab) {
|
|
|