| // Copyright 2013 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 "media/cast/cast_environment.h" |
| |
| #include "base/logging.h" |
| |
| using base::TaskRunner; |
| |
| namespace media { |
| namespace cast { |
| |
| CastEnvironment::CastEnvironment( |
| base::TickClock* clock, |
| scoped_refptr<TaskRunner> main_thread_proxy, |
| scoped_refptr<TaskRunner> audio_encode_thread_proxy, |
| scoped_refptr<TaskRunner> audio_decode_thread_proxy, |
| scoped_refptr<TaskRunner> video_encode_thread_proxy, |
| scoped_refptr<TaskRunner> video_decode_thread_proxy, |
| const CastLoggingConfig& config) |
| : clock_(clock), |
| main_thread_proxy_(main_thread_proxy), |
| audio_encode_thread_proxy_(audio_encode_thread_proxy), |
| audio_decode_thread_proxy_(audio_decode_thread_proxy), |
| video_encode_thread_proxy_(video_encode_thread_proxy), |
| video_decode_thread_proxy_(video_decode_thread_proxy), |
| logging_(new LoggingImpl(clock, main_thread_proxy, config)) { |
| DCHECK(main_thread_proxy) << "Main thread required"; |
| } |
| |
| CastEnvironment::~CastEnvironment() {} |
| |
| bool CastEnvironment::PostTask(ThreadId identifier, |
| const tracked_objects::Location& from_here, |
| const base::Closure& task) { |
| scoped_refptr<TaskRunner> task_runner = |
| GetMessageTaskRunnerForThread(identifier); |
| |
| return task_runner->PostTask(from_here, task); |
| } |
| |
| bool CastEnvironment::PostDelayedTask(ThreadId identifier, |
| const tracked_objects::Location& from_here, |
| const base::Closure& task, |
| base::TimeDelta delay) { |
| scoped_refptr<TaskRunner> task_runner = |
| GetMessageTaskRunnerForThread(identifier); |
| |
| return task_runner->PostDelayedTask(from_here, task, delay); |
| } |
| |
| scoped_refptr<TaskRunner> CastEnvironment::GetMessageTaskRunnerForThread( |
| ThreadId identifier) { |
| switch (identifier) { |
| case CastEnvironment::MAIN: |
| return main_thread_proxy_; |
| case CastEnvironment::AUDIO_ENCODER: |
| return audio_encode_thread_proxy_; |
| case CastEnvironment::AUDIO_DECODER: |
| return audio_decode_thread_proxy_; |
| case CastEnvironment::VIDEO_ENCODER: |
| return video_encode_thread_proxy_; |
| case CastEnvironment::VIDEO_DECODER: |
| return video_decode_thread_proxy_; |
| default: |
| NOTREACHED() << "Invalid Thread identifier"; |
| return NULL; |
| } |
| } |
| |
| bool CastEnvironment::CurrentlyOn(ThreadId identifier) { |
| switch (identifier) { |
| case CastEnvironment::MAIN: |
| return main_thread_proxy_->RunsTasksOnCurrentThread(); |
| case CastEnvironment::AUDIO_ENCODER: |
| return audio_encode_thread_proxy_->RunsTasksOnCurrentThread(); |
| case CastEnvironment::AUDIO_DECODER: |
| return audio_decode_thread_proxy_->RunsTasksOnCurrentThread(); |
| case CastEnvironment::VIDEO_ENCODER: |
| return video_encode_thread_proxy_->RunsTasksOnCurrentThread(); |
| case CastEnvironment::VIDEO_DECODER: |
| return video_decode_thread_proxy_->RunsTasksOnCurrentThread(); |
| default: |
| NOTREACHED() << "Invalid thread identifier"; |
| return false; |
| } |
| } |
| |
| base::TickClock* CastEnvironment::Clock() const { |
| return clock_; |
| } |
| |
| LoggingImpl* CastEnvironment::Logging() { |
| DCHECK(CurrentlyOn(CastEnvironment::MAIN)) << |
| "Must be called from main thread"; |
| return logging_.get(); |
| } |
| |
| } // namespace cast |
| } // namespace media |