if (type_ == TYPE_UI || type_ == TYPE_JAVA)
backend_->AttachToMessagePump();
#endif
+#if defined(USE_EFL)
+ if (type_ == TYPE_UI)
+ backend_->AttachToMessagePump();
+#endif
}
std::unique_ptr<MessagePump> MessageLoop::CreateMessagePump() {
// 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
}
#endif
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
void MessageLoopCurrentForUI::Attach() {
current_->AttachToMessagePump();
}
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
#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 {
type_ == MessageLoopBase::TYPE_JAVA);
static_cast<MessagePumpForUI*>(pump_.get())->Attach(this);
}
+#elif defined(USE_EFL)
+void MessageLoopImpl::AttachToMessagePump() {
+ DCHECK(type_ == MessageLoopBase::TYPE_UI);
+ static_cast<MessagePumpForUIEfl*>(pump_.get())->Attach(this);
+}
#endif // defined(OS_IOS)
void MessageLoopImpl::SetTimerSlack(TimerSlack timer_slack) {
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;
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();
}
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;
// 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.
return nullptr;
}
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
void ThreadControllerImpl::AttachToMessagePump() {
NOTREACHED();
}
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;
#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 {
void ThreadControllerWithMessagePumpImpl::AttachToMessagePump() {
static_cast<MessagePumpForUI*>(pump_.get())->Attach(this);
}
+#elif defined(USE_EFL)
+void ThreadControllerWithMessagePumpImpl::AttachToMessagePump() {
+ static_cast<MessagePumpForUIEfl*>(pump_.get())->Attach(this);
+}
#endif
bool ThreadControllerWithMessagePumpImpl::ShouldQuitRunLoopWhenIdle() {
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;
}
}
+void MessagePumpForUIEfl::Attach(Delegate* delegate) {
+ SetDelegate(delegate);
+}
+
void MessagePumpForUIEfl::PipeCallback(void* data, void*, unsigned int) {
static_cast<MessagePumpForUIEfl*>(data)->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;
if (!delayed_work_time.is_null())
ScheduleDelayedWork(delayed_work_time);
-#endif // EWK_BRINGUP
}
void MessagePumpForUIEfl::DoDelayedWork() {
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();
std::unordered_set<TimerPair*> 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_;