cast_environment.cc revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "media/cast/cast_environment.h" 6 7#include "base/logging.h" 8 9using base::TaskRunner; 10 11namespace media { 12namespace cast { 13 14CastEnvironment::CastEnvironment( 15 base::TickClock* clock, 16 scoped_refptr<TaskRunner> main_thread_proxy, 17 scoped_refptr<TaskRunner> audio_encode_thread_proxy, 18 scoped_refptr<TaskRunner> audio_decode_thread_proxy, 19 scoped_refptr<TaskRunner> video_encode_thread_proxy, 20 scoped_refptr<TaskRunner> video_decode_thread_proxy, 21 const CastLoggingConfig& config) 22 : clock_(clock), 23 main_thread_proxy_(main_thread_proxy), 24 audio_encode_thread_proxy_(audio_encode_thread_proxy), 25 audio_decode_thread_proxy_(audio_decode_thread_proxy), 26 video_encode_thread_proxy_(video_encode_thread_proxy), 27 video_decode_thread_proxy_(video_decode_thread_proxy), 28 logging_(new LoggingImpl(clock, main_thread_proxy, config)) { 29 DCHECK(main_thread_proxy) << "Main thread required"; 30} 31 32CastEnvironment::~CastEnvironment() {} 33 34bool CastEnvironment::PostTask(ThreadId identifier, 35 const tracked_objects::Location& from_here, 36 const base::Closure& task) { 37 scoped_refptr<TaskRunner> task_runner = 38 GetMessageTaskRunnerForThread(identifier); 39 40 return task_runner->PostTask(from_here, task); 41} 42 43bool CastEnvironment::PostDelayedTask(ThreadId identifier, 44 const tracked_objects::Location& from_here, 45 const base::Closure& task, 46 base::TimeDelta delay) { 47 scoped_refptr<TaskRunner> task_runner = 48 GetMessageTaskRunnerForThread(identifier); 49 50 return task_runner->PostDelayedTask(from_here, task, delay); 51} 52 53scoped_refptr<TaskRunner> CastEnvironment::GetMessageTaskRunnerForThread( 54 ThreadId identifier) { 55 switch (identifier) { 56 case CastEnvironment::MAIN: 57 return main_thread_proxy_; 58 case CastEnvironment::AUDIO_ENCODER: 59 return audio_encode_thread_proxy_; 60 case CastEnvironment::AUDIO_DECODER: 61 return audio_decode_thread_proxy_; 62 case CastEnvironment::VIDEO_ENCODER: 63 return video_encode_thread_proxy_; 64 case CastEnvironment::VIDEO_DECODER: 65 return video_decode_thread_proxy_; 66 default: 67 NOTREACHED() << "Invalid Thread identifier"; 68 return NULL; 69 } 70} 71 72bool CastEnvironment::CurrentlyOn(ThreadId identifier) { 73 switch (identifier) { 74 case CastEnvironment::MAIN: 75 return main_thread_proxy_->RunsTasksOnCurrentThread(); 76 case CastEnvironment::AUDIO_ENCODER: 77 return audio_encode_thread_proxy_->RunsTasksOnCurrentThread(); 78 case CastEnvironment::AUDIO_DECODER: 79 return audio_decode_thread_proxy_->RunsTasksOnCurrentThread(); 80 case CastEnvironment::VIDEO_ENCODER: 81 return video_encode_thread_proxy_->RunsTasksOnCurrentThread(); 82 case CastEnvironment::VIDEO_DECODER: 83 return video_decode_thread_proxy_->RunsTasksOnCurrentThread(); 84 default: 85 NOTREACHED() << "Invalid thread identifier"; 86 return false; 87 } 88} 89 90base::TickClock* CastEnvironment::Clock() const { 91 return clock_; 92} 93 94LoggingImpl* CastEnvironment::Logging() { 95 DCHECK(CurrentlyOn(CastEnvironment::MAIN)) << 96 "Must be called from main thread"; 97 return logging_.get(); 98} 99 100} // namespace cast 101} // namespace media 102