| Index: remoting/jingle_glue/jingle_thread.cc
|
| diff --git a/remoting/jingle_glue/jingle_thread.cc b/remoting/jingle_glue/jingle_thread.cc
|
| index 9dc3915a3b9f4fc6d1fa40a8bcd1d9c2101827bb..2f3ba0039ab083e563fb2910573de3de85b030f2 100644
|
| --- a/remoting/jingle_glue/jingle_thread.cc
|
| +++ b/remoting/jingle_glue/jingle_thread.cc
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -15,16 +15,33 @@ namespace remoting {
|
| const uint32 kRunTasksMessageId = 1;
|
| const uint32 kStopMessageId = 2;
|
|
|
| -class JingleThread::JingleMessagePump : public base::MessagePump,
|
| - public talk_base::MessageHandler {
|
| +namespace {
|
| +
|
| +class JingleMessagePump : public base::MessagePump,
|
| + public talk_base::MessageHandler {
|
| public:
|
| - JingleMessagePump(JingleThread* thread) : thread_(thread) { }
|
| + JingleMessagePump(talk_base::Thread* thread)
|
| + : thread_(thread), delegate_(NULL) {
|
| + }
|
| +
|
| + virtual void Run(Delegate* delegate) {
|
| + delegate_ = delegate;
|
| +
|
| + talk_base::Thread::Current()->Thread::Run();
|
| + // Call Restart() so that we can run again.
|
| + talk_base::Thread::Current()->Restart();
|
| +
|
| + delegate_ = NULL;
|
| + }
|
| +
|
| + virtual void Quit() {
|
| + talk_base::Thread::Current()->Quit();
|
| + }
|
|
|
| - virtual void Run(Delegate* delegate) { NOTIMPLEMENTED(); }
|
| - virtual void Quit() { NOTIMPLEMENTED(); }
|
| virtual void ScheduleWork() {
|
| thread_->Post(this, kRunTasksMessageId);
|
| }
|
| +
|
| virtual void ScheduleDelayedWork(const base::TimeTicks& time) {
|
| delayed_work_time_ = time;
|
| ScheduleNextDelayedTask();
|
| @@ -32,21 +49,19 @@ class JingleThread::JingleMessagePump : public base::MessagePump,
|
|
|
| void OnMessage(talk_base::Message* msg) {
|
| DCHECK(msg->message_id == kRunTasksMessageId);
|
| + DCHECK(delegate_);
|
|
|
| // Clear currently pending messages in case there were delayed tasks.
|
| // Will schedule it again from ScheduleNextDelayedTask() if neccessary.
|
| thread_->Clear(this, kRunTasksMessageId);
|
|
|
| - // This code is executed whenever we get new message in |message_loop_|.
|
| - // JingleMessagePump posts new tasks in the jingle thread.
|
| - // TODO(sergeyu): Remove it when JingleThread moved on Chromium's
|
| - // base::Thread.
|
| - base::MessagePump::Delegate* delegate = thread_->message_loop();
|
| // Process all pending tasks.
|
| while (true) {
|
| - if (delegate->DoWork())
|
| + if (delegate_->DoWork())
|
| continue;
|
| - if (delegate->DoDelayedWork(&delayed_work_time_))
|
| + if (delegate_->DoDelayedWork(&delayed_work_time_))
|
| + continue;
|
| + if (delegate_->DoIdleWork())
|
| continue;
|
| break;
|
| }
|
| @@ -56,8 +71,6 @@ class JingleThread::JingleMessagePump : public base::MessagePump,
|
|
|
| private:
|
| void ScheduleNextDelayedTask() {
|
| - DCHECK_EQ(thread_->message_loop(), MessageLoop::current());
|
| -
|
| if (!delayed_work_time_.is_null()) {
|
| base::TimeTicks now = base::TimeTicks::Now();
|
| int delay = static_cast<int>((delayed_work_time_ - now).InMilliseconds());
|
| @@ -69,27 +82,20 @@ class JingleThread::JingleMessagePump : public base::MessagePump,
|
| }
|
| }
|
|
|
| - JingleThread* thread_;
|
| + talk_base::Thread* thread_;
|
| + Delegate* delegate_;
|
| base::TimeTicks delayed_work_time_;
|
| };
|
|
|
| -class JingleThread::JingleMessageLoop : public MessageLoop {
|
| - public:
|
| - JingleMessageLoop(JingleThread* thread)
|
| - : MessageLoop(MessageLoop::TYPE_IO) {
|
| - pump_ = new JingleMessagePump(thread);
|
| - }
|
| +} // namespace
|
|
|
| - void Initialize() {
|
| - jingle_message_loop_state_.reset(new AutoRunState(this));
|
| - }
|
| +JingleThreadMessageLoop::JingleThreadMessageLoop(talk_base::Thread* thread)
|
| + : MessageLoop(MessageLoop::TYPE_IO) {
|
| + pump_ = new JingleMessagePump(thread);
|
| +}
|
|
|
| - private:
|
| - // AutoRunState sets |state_| for this message loop. It needs to be
|
| - // created here because we never call Run() or RunAllPending() for
|
| - // the thread.
|
| - scoped_ptr<AutoRunState> jingle_message_loop_state_;
|
| -};
|
| +JingleThreadMessageLoop::~JingleThreadMessageLoop() {
|
| +}
|
|
|
| TaskPump::TaskPump() {
|
| }
|
| @@ -121,8 +127,7 @@ void JingleThread::Start() {
|
| }
|
|
|
| void JingleThread::Run() {
|
| - JingleMessageLoop message_loop(this);
|
| - message_loop.Initialize();
|
| + JingleThreadMessageLoop message_loop(this);
|
| message_loop_ = &message_loop;
|
|
|
| TaskPump task_pump;
|
| @@ -131,7 +136,7 @@ void JingleThread::Run() {
|
| // Signal after we've initialized |message_loop_| and |task_pump_|.
|
| started_event_.Signal();
|
|
|
| - Thread::Run();
|
| + message_loop.Run();
|
|
|
| stopped_event_.Signal();
|
|
|
| @@ -153,7 +158,6 @@ MessageLoop* JingleThread::message_loop() {
|
| return message_loop_;
|
| }
|
|
|
| - // Returns task pump if the thread is running, otherwise NULL is returned.
|
| TaskPump* JingleThread::task_pump() {
|
| return task_pump_;
|
| }
|
|
|