| Index: remoting/jingle_glue/jingle_thread.cc
|
| ===================================================================
|
| --- remoting/jingle_glue/jingle_thread.cc (revision 0)
|
| +++ remoting/jingle_glue/jingle_thread.cc (revision 0)
|
| @@ -0,0 +1,80 @@
|
| +// Copyright (c) 2010 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.
|
| +
|
| +#include "remoting/jingle_glue/jingle_thread.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/message_loop.h"
|
| +#include "talk/base/ssladapter.h"
|
| +
|
| +namespace remoting {
|
| +
|
| +const int kRunTasksMessageId = 1;
|
| +
|
| +TaskPump::TaskPump() {
|
| +}
|
| +
|
| +void TaskPump::WakeTasks() {
|
| + talk_base::Thread::Current()->Post(this);
|
| +}
|
| +
|
| +int64 TaskPump::CurrentTime() {
|
| + return static_cast<int64>(talk_base::Time());
|
| +}
|
| +
|
| +void TaskPump::OnMessage(talk_base::Message* pmsg) {
|
| + RunTasks();
|
| +}
|
| +
|
| +JingleThread::JingleThread()
|
| + : message_loop_(NULL),
|
| + task_pump_(NULL),
|
| + started_event_(true, false) { }
|
| +
|
| +JingleThread::~JingleThread() { }
|
| +
|
| +void JingleThread::Start() {
|
| + Thread::Start();
|
| + started_event_.Wait();
|
| +}
|
| +
|
| +void JingleThread::Run() {
|
| + LOG(INFO) << "Started Jingle thread.";
|
| +
|
| + MessageLoopForIO message_loop;
|
| + message_loop_ = &message_loop;
|
| +
|
| + TaskPump task_pump;
|
| + task_pump_ = &task_pump;
|
| +
|
| + // Signal after we've initialized |message_loop_| and |task_pump_|.
|
| + started_event_.Signal();
|
| +
|
| + Post(this, kRunTasksMessageId);
|
| +
|
| + Thread::Run();
|
| +
|
| + message_loop.RunAllPending();
|
| +
|
| + task_pump_ = NULL;
|
| + message_loop_ = NULL;
|
| +
|
| + LOG(INFO) << "Jingle thread finished.";
|
| +}
|
| +
|
| +// This method is called every 20ms to process tasks from |message_loop_|
|
| +// on this thread.
|
| +// TODO(sergeyu): Remove it when JingleThread moved to Chromium's base::Thread.
|
| +void JingleThread::PumpAuxiliaryLoops() {
|
| + MessageLoop::current()->RunAllPending();
|
| +
|
| + // Schedule next execution 20ms from now.
|
| + PostDelayed(20, this, kRunTasksMessageId);
|
| +}
|
| +
|
| +void JingleThread::OnMessage(talk_base::Message* msg) {
|
| + PumpAuxiliaryLoops();
|
| +}
|
| +
|
| +} // namespace remoting
|
|
|
| Property changes on: remoting/jingle_glue/jingle_thread.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|