From 56bb8f9ccee8092674618a46a7e17b8c27005b61 Mon Sep 17 00:00:00 2001 From: Chandan Padhi Date: Wed, 8 May 2019 11:36:40 +0530 Subject: [PATCH] [M73 Dev][EFL] Attach MessagePump::Delegate to MessagePumpForUIEfl Due to changes in chromium upstream, MessageLoop is no longer a MessagePump::Delegate. Therefore, below piece of code becomes invalid and had to be removed. Delegate* delegate = MessageLoopForUI::current(); Due to this, calls to Delegate methods are not made which breaks the loop and ecore_pipe_write() does not get executed resulting in white screen at webview launch. This commit attaches MessagePump::Delegate to MessagePumpForUIEfl. Change-Id: I674dac8ca736a5c6ff2172c5f5938325b706b5ab Signed-off-by: Chandan Padhi --- base/message_loop/message_loop.cc | 4 ++++ base/message_loop/message_loop.h | 2 +- base/message_loop/message_loop_current.cc | 2 +- base/message_loop/message_loop_current.h | 2 +- base/message_loop/message_loop_impl.cc | 7 +++++++ base/message_loop/message_loop_impl.h | 2 +- .../task/sequence_manager/sequence_manager_impl.cc | 2 +- base/task/sequence_manager/sequence_manager_impl.h | 2 +- base/task/sequence_manager/thread_controller.h | 2 +- .../sequence_manager/thread_controller_impl.cc | 2 +- .../task/sequence_manager/thread_controller_impl.h | 2 +- .../thread_controller_with_message_pump_impl.cc | 6 ++++++ .../thread_controller_with_message_pump_impl.h | 2 +- .../base/message_loop/message_pump_for_ui_efl.cc | 22 +++++++--------------- .../base/message_loop/message_pump_for_ui_efl.h | 18 ++++++++++++------ 15 files changed, 46 insertions(+), 31 deletions(-) diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc index f72f17d..f2f8151 100644 --- a/base/message_loop/message_loop.cc +++ b/base/message_loop/message_loop.cc @@ -260,6 +260,10 @@ void MessageLoop::BindToCurrentThread() { if (type_ == TYPE_UI || type_ == TYPE_JAVA) backend_->AttachToMessagePump(); #endif +#if defined(USE_EFL) + if (type_ == TYPE_UI) + backend_->AttachToMessagePump(); +#endif } std::unique_ptr MessageLoop::CreateMessagePump() { diff --git a/base/message_loop/message_loop.h b/base/message_loop/message_loop.h index 1adfd4c..a43edf7 100644 --- a/base/message_loop/message_loop.h +++ b/base/message_loop/message_loop.h @@ -203,7 +203,7 @@ class BASE_EXPORT MessageLoopBase { // Whether task execution is allowed at the moment. virtual bool IsTaskExecutionAllowed() const = 0; -#if defined(OS_IOS) || defined(OS_ANDROID) +#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL) virtual void AttachToMessagePump() = 0; #endif diff --git a/base/message_loop/message_loop_current.cc b/base/message_loop/message_loop_current.cc index dca4654..e379005 100644 --- a/base/message_loop/message_loop_current.cc +++ b/base/message_loop/message_loop_current.cc @@ -176,7 +176,7 @@ bool MessageLoopCurrentForUI::WatchFileDescriptor( } #endif -#if defined(OS_IOS) || defined(OS_ANDROID) +#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL) void MessageLoopCurrentForUI::Attach() { current_->AttachToMessagePump(); } diff --git a/base/message_loop/message_loop_current.h b/base/message_loop/message_loop_current.h index 56c147d..6fe16af 100644 --- a/base/message_loop/message_loop_current.h +++ b/base/message_loop/message_loop_current.h @@ -243,7 +243,7 @@ class BASE_EXPORT MessageLoopCurrentForUI : public MessageLoopCurrent { MessagePumpForUI::FdWatcher* delegate); #endif -#if defined(OS_IOS) || defined(OS_ANDROID) +#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL) // Forwards to MessageLoopForUI::Attach(). // TODO(https://crbug.com/825327): Plumb the actual MessageLoopForUI* to // callers and remove ability to access this method from diff --git a/base/message_loop/message_loop_impl.cc b/base/message_loop/message_loop_impl.cc index a72f713..f977b35 100644 --- a/base/message_loop/message_loop_impl.cc +++ b/base/message_loop/message_loop_impl.cc @@ -29,6 +29,8 @@ #include "base/message_loop/message_pump_mac.h" #elif defined(OS_ANDROID) #include "base/message_loop/message_pump_android.h" +#elif defined(USE_EFL) +#include "base/message_loop/message_pump_for_ui_efl.h" #endif namespace base { @@ -287,6 +289,11 @@ void MessageLoopImpl::AttachToMessagePump() { type_ == MessageLoopBase::TYPE_JAVA); static_cast(pump_.get())->Attach(this); } +#elif defined(USE_EFL) +void MessageLoopImpl::AttachToMessagePump() { + DCHECK(type_ == MessageLoopBase::TYPE_UI); + static_cast(pump_.get())->Attach(this); +} #endif // defined(OS_IOS) void MessageLoopImpl::SetTimerSlack(TimerSlack timer_slack) { diff --git a/base/message_loop/message_loop_impl.h b/base/message_loop/message_loop_impl.h index bfcdf0c..7afc397 100644 --- a/base/message_loop/message_loop_impl.h +++ b/base/message_loop/message_loop_impl.h @@ -70,7 +70,7 @@ class BASE_EXPORT MessageLoopImpl : public MessageLoopBase, bool IsIdleForTesting() override; void SetTaskExecutionAllowed(bool allowed) override; bool IsTaskExecutionAllowed() const override; -#if defined(OS_IOS) || defined(OS_ANDROID) +#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL) void AttachToMessagePump() override; #endif void SetTimerSlack(TimerSlack timer_slack) override; diff --git a/base/task/sequence_manager/sequence_manager_impl.cc b/base/task/sequence_manager/sequence_manager_impl.cc index 0c5cda2..2147ebd 100644 --- a/base/task/sequence_manager/sequence_manager_impl.cc +++ b/base/task/sequence_manager/sequence_manager_impl.cc @@ -886,7 +886,7 @@ bool SequenceManagerImpl::IsTaskExecutionAllowed() const { return controller_->IsTaskExecutionAllowed(); } -#if defined(OS_IOS) || defined(OS_ANDROID) +#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL) void SequenceManagerImpl::AttachToMessagePump() { return controller_->AttachToMessagePump(); } diff --git a/base/task/sequence_manager/sequence_manager_impl.h b/base/task/sequence_manager/sequence_manager_impl.h index e3838c1..2525f77 100644 --- a/base/task/sequence_manager/sequence_manager_impl.h +++ b/base/task/sequence_manager/sequence_manager_impl.h @@ -158,7 +158,7 @@ class BASE_EXPORT SequenceManagerImpl void SetAddQueueTimeToTasks(bool enable) override; void SetTaskExecutionAllowed(bool allowed) override; bool IsTaskExecutionAllowed() const override; -#if defined(OS_IOS) || defined(OS_ANDROID) +#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL) void AttachToMessagePump() override; #endif bool IsIdleForTesting() override; diff --git a/base/task/sequence_manager/thread_controller.h b/base/task/sequence_manager/thread_controller.h index 81fd9f9..763f399 100644 --- a/base/task/sequence_manager/thread_controller.h +++ b/base/task/sequence_manager/thread_controller.h @@ -93,7 +93,7 @@ class ThreadController { // Returns true if the current run loop should quit when idle. virtual bool ShouldQuitRunLoopWhenIdle() = 0; -#if defined(OS_IOS) || defined(OS_ANDROID) +#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL) // On iOS, the main message loop cannot be Run(). Instead call // AttachToMessagePump(), which connects this ThreadController to the // UI thread's CFRunLoop and allows PostTask() to work. diff --git a/base/task/sequence_manager/thread_controller_impl.cc b/base/task/sequence_manager/thread_controller_impl.cc index 94f8ab3..947cc7f 100644 --- a/base/task/sequence_manager/thread_controller_impl.cc +++ b/base/task/sequence_manager/thread_controller_impl.cc @@ -335,7 +335,7 @@ MessagePump* ThreadControllerImpl::GetBoundMessagePump() const { return nullptr; } -#if defined(OS_IOS) || defined(OS_ANDROID) +#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL) void ThreadControllerImpl::AttachToMessagePump() { NOTREACHED(); } diff --git a/base/task/sequence_manager/thread_controller_impl.h b/base/task/sequence_manager/thread_controller_impl.h index e938f2d..675212c 100644 --- a/base/task/sequence_manager/thread_controller_impl.h +++ b/base/task/sequence_manager/thread_controller_impl.h @@ -57,7 +57,7 @@ class BASE_EXPORT ThreadControllerImpl : public ThreadController, void SetTaskExecutionAllowed(bool allowed) override; bool IsTaskExecutionAllowed() const override; MessagePump* GetBoundMessagePump() const override; -#if defined(OS_IOS) || defined(OS_ANDROID) +#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL) void AttachToMessagePump() override; #endif bool ShouldQuitRunLoopWhenIdle() override; diff --git a/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc b/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc index 9ba1ab4..fa0d67b 100644 --- a/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc +++ b/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc @@ -14,6 +14,8 @@ #include "base/message_loop/message_pump_mac.h" #elif defined(OS_ANDROID) #include "base/message_loop/message_pump_android.h" +#elif defined(USE_EFL) +#include "base/message_loop/message_pump_for_ui_efl.h" #endif namespace base { @@ -422,6 +424,10 @@ void ThreadControllerWithMessagePumpImpl::AttachToMessagePump() { void ThreadControllerWithMessagePumpImpl::AttachToMessagePump() { static_cast(pump_.get())->Attach(this); } +#elif defined(USE_EFL) +void ThreadControllerWithMessagePumpImpl::AttachToMessagePump() { + static_cast(pump_.get())->Attach(this); +} #endif bool ThreadControllerWithMessagePumpImpl::ShouldQuitRunLoopWhenIdle() { diff --git a/base/task/sequence_manager/thread_controller_with_message_pump_impl.h b/base/task/sequence_manager/thread_controller_with_message_pump_impl.h index 7a6bd51..5f166da 100644 --- a/base/task/sequence_manager/thread_controller_with_message_pump_impl.h +++ b/base/task/sequence_manager/thread_controller_with_message_pump_impl.h @@ -61,7 +61,7 @@ class BASE_EXPORT ThreadControllerWithMessagePumpImpl void SetTaskExecutionAllowed(bool allowed) override; bool IsTaskExecutionAllowed() const override; MessagePump* GetBoundMessagePump() const override; -#if defined(OS_IOS) || defined(OS_ANDROID) +#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL) void AttachToMessagePump() override; #endif bool ShouldQuitRunLoopWhenIdle() override; diff --git a/tizen_src/chromium_impl/base/message_loop/message_pump_for_ui_efl.cc b/tizen_src/chromium_impl/base/message_loop/message_pump_for_ui_efl.cc index 486fd01..9f82953 100644 --- a/tizen_src/chromium_impl/base/message_loop/message_pump_for_ui_efl.cc +++ b/tizen_src/chromium_impl/base/message_loop/message_pump_for_ui_efl.cc @@ -125,6 +125,10 @@ void MessagePumpForUIEfl::ScheduleDelayedWork( } } +void MessagePumpForUIEfl::Attach(Delegate* delegate) { + SetDelegate(delegate); +} + void MessagePumpForUIEfl::PipeCallback(void* data, void*, unsigned int) { static_cast(data)->DoWork(); } @@ -154,34 +158,23 @@ void MessagePumpForUIEfl::DoWork() { work_scheduled_ = false; } -#if !defined(EWK_BRINGUP) // FIXME: m73 bringup - Delegate* delegate = base::MessageLoopForUI::current(); - -// Added as part M67 bringup need to check why -// MessagePumpForUIEfl::DoWork is called even after -// MessageLoop is destructed. -#if defined(EWK_BRINGUP) // FIXME: m67 bringup - if (!delegate) - return; -#endif - if (!run_loop_) { run_loop_ = new RunLoop(); bool result = run_loop_->BeforeRun(); DCHECK(result); } - bool more_work_is_plausible = delegate->DoWork(); + bool more_work_is_plausible = delegate_->DoWork(); base::TimeTicks delayed_work_time; - more_work_is_plausible |= delegate->DoDelayedWork(&delayed_work_time); + more_work_is_plausible |= delegate_->DoDelayedWork(&delayed_work_time); if (more_work_is_plausible) { ScheduleWork(); return; } - more_work_is_plausible |= delegate->DoIdleWork(); + more_work_is_plausible |= delegate_->DoIdleWork(); if (more_work_is_plausible) { ScheduleWork(); return; @@ -189,7 +182,6 @@ void MessagePumpForUIEfl::DoWork() { if (!delayed_work_time.is_null()) ScheduleDelayedWork(delayed_work_time); -#endif // EWK_BRINGUP } void MessagePumpForUIEfl::DoDelayedWork() { diff --git a/tizen_src/chromium_impl/base/message_loop/message_pump_for_ui_efl.h b/tizen_src/chromium_impl/base/message_loop/message_pump_for_ui_efl.h index fab5ccd..64768f5 100644 --- a/tizen_src/chromium_impl/base/message_loop/message_pump_for_ui_efl.h +++ b/tizen_src/chromium_impl/base/message_loop/message_pump_for_ui_efl.h @@ -22,14 +22,17 @@ typedef std::pair TimerPair; class BASE_EXPORT MessagePumpForUIEfl : public base::MessagePump { public: MessagePumpForUIEfl(); - virtual ~MessagePumpForUIEfl(); + ~MessagePumpForUIEfl(); - virtual void Run(Delegate*) override; - virtual void Quit() override; - virtual void ScheduleWork() override; - virtual void ScheduleDelayedWork(const base::TimeTicks&) override; + void Run(Delegate*) override; + void Quit() override; + void ScheduleWork() override; + void ScheduleDelayedWork(const base::TimeTicks&) override; + + void Attach(Delegate* delegate); private: + void SetDelegate(Delegate* delegate) { delegate_ = delegate; } static void PipeCallback(void*, void*, unsigned int); static Eina_Bool TimerCallback(void*); void DoWork(); @@ -40,7 +43,10 @@ class BASE_EXPORT MessagePumpForUIEfl : public base::MessagePump { std::unordered_set pending_timers_; Ecore_Pipe* pipe_; Ecore_Timer* schedule_delayed_work_timer_; - Delegate* delegate_; + + // The MessagePump::Delegate for this pump. + Delegate* delegate_ = nullptr; + RunLoop* run_loop_; base::Lock schedule_work_lock_; bool keep_running_; -- 2.7.4