• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
9 using base::TaskRunner;
10 
11 namespace media {
12 namespace cast {
13 
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)14 CastEnvironment::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 
~CastEnvironment()32 CastEnvironment::~CastEnvironment() {}
33 
PostTask(ThreadId identifier,const tracked_objects::Location & from_here,const base::Closure & task)34 bool 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 
PostDelayedTask(ThreadId identifier,const tracked_objects::Location & from_here,const base::Closure & task,base::TimeDelta delay)43 bool 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 
GetMessageTaskRunnerForThread(ThreadId identifier)53 scoped_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 
CurrentlyOn(ThreadId identifier)72 bool 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 
Clock() const90 base::TickClock* CastEnvironment::Clock() const {
91   return clock_;
92 }
93 
Logging()94 LoggingImpl* 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