summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authormikhal@google.com <mikhal@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-26 09:53:38 +0000
committermikhal@google.com <mikhal@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-26 09:53:38 +0000
commit97f1994d4db7540975eb6900189dcbc0f5357687 (patch)
treee304fa4d606aed7506f1eace667d077d7b12bc83 /media
parent0a09791606cb88ac245f5548b99582cebc2cd4f9 (diff)
downloadchromium_src-97f1994d4db7540975eb6900189dcbc0f5357687.zip
chromium_src-97f1994d4db7540975eb6900189dcbc0f5357687.tar.gz
chromium_src-97f1994d4db7540975eb6900189dcbc0f5357687.tar.bz2
Adding thread checks : make sure that we are operating on the correct thread.
Review URL: https://codereview.chromium.org/24455003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@225427 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/cast/audio_receiver/audio_decoder.cc1
-rw-r--r--media/cast/audio_receiver/audio_decoder_unittest.cc2
-rw-r--r--media/cast/audio_receiver/audio_receiver.cc1
-rw-r--r--media/cast/audio_receiver/audio_receiver_unittest.cc2
-rw-r--r--media/cast/audio_sender/audio_encoder.cc2
-rw-r--r--media/cast/audio_sender/audio_sender.cc3
-rw-r--r--media/cast/cast_thread.cc17
-rw-r--r--media/cast/cast_thread.h2
-rw-r--r--media/cast/video_receiver/video_decoder.cc2
-rw-r--r--media/cast/video_receiver/video_decoder_unittest.cc4
-rw-r--r--media/cast/video_receiver/video_receiver.cc1
-rw-r--r--media/cast/video_receiver/video_receiver.h1
-rw-r--r--media/cast/video_receiver/video_receiver_unittest.cc2
13 files changed, 31 insertions, 9 deletions
diff --git a/media/cast/audio_receiver/audio_decoder.cc b/media/cast/audio_receiver/audio_decoder.cc
index 266c04e..7adeb2d 100644
--- a/media/cast/audio_receiver/audio_decoder.cc
+++ b/media/cast/audio_receiver/audio_decoder.cc
@@ -56,6 +56,7 @@ bool AudioDecoder::GetRawAudioFrame(int number_of_10ms_blocks,
int desired_frequency,
PcmAudioFrame* audio_frame,
uint32* rtp_timestamp) {
+ DCHECK(cast_thread_->CurrentlyOn(CastThread::AUDIO_DECODER));
if (!have_received_packets_) return false;
for (int i = 0; i < number_of_10ms_blocks; ++i) {
diff --git a/media/cast/audio_receiver/audio_decoder_unittest.cc b/media/cast/audio_receiver/audio_decoder_unittest.cc
index dbe3e32..09aa39a 100644
--- a/media/cast/audio_receiver/audio_decoder_unittest.cc
+++ b/media/cast/audio_receiver/audio_decoder_unittest.cc
@@ -24,7 +24,7 @@ class AudioDecoderTest : public ::testing::Test {
virtual void SetUp() {
task_runner_ = new test::FakeTaskRunner(&testing_clock_);
cast_thread_ = new CastThread(task_runner_, task_runner_, task_runner_,
- task_runner_, task_runner_);
+ NULL, NULL);
}
void Configure(const AudioReceiverConfig& audio_config) {
audio_decoder_ = new AudioDecoder(cast_thread_, audio_config);
diff --git a/media/cast/audio_receiver/audio_receiver.cc b/media/cast/audio_receiver/audio_receiver.cc
index cf8a8b8..ace8ffc 100644
--- a/media/cast/audio_receiver/audio_receiver.cc
+++ b/media/cast/audio_receiver/audio_receiver.cc
@@ -176,6 +176,7 @@ void AudioReceiver::DecodeAudioFrameThread(
int number_of_10ms_blocks,
int desired_frequency,
const AudioFrameDecodedCallback callback) {
+ DCHECK(cast_thread_->CurrentlyOn(CastThread::AUDIO_DECODER));
// TODO(mikhal): Allow the application to allocate this memory.
scoped_ptr<PcmAudioFrame> audio_frame(new PcmAudioFrame());
diff --git a/media/cast/audio_receiver/audio_receiver_unittest.cc b/media/cast/audio_receiver/audio_receiver_unittest.cc
index 0cb564b..aa1295a 100644
--- a/media/cast/audio_receiver/audio_receiver_unittest.cc
+++ b/media/cast/audio_receiver/audio_receiver_unittest.cc
@@ -42,7 +42,7 @@ class AudioReceiverTest : public ::testing::Test {
base::TimeDelta::FromMilliseconds(kStartMillisecond));
task_runner_ = new test::FakeTaskRunner(&testing_clock_);
cast_thread_ = new CastThread(task_runner_, task_runner_, task_runner_,
- task_runner_, task_runner_);
+ NULL, NULL);
}
void Configure(bool use_external_decoder) {
diff --git a/media/cast/audio_sender/audio_encoder.cc b/media/cast/audio_sender/audio_encoder.cc
index 175f82b..15517fa 100644
--- a/media/cast/audio_sender/audio_encoder.cc
+++ b/media/cast/audio_sender/audio_encoder.cc
@@ -75,7 +75,6 @@ AudioEncoder::AudioEncoder(scoped_refptr<CastThread> cast_thread,
new WebrtEncodedDataCallback(cast_thread, audio_config.codec,
audio_config.frequency)),
timestamp_(0) { // Must start at 0; used above.
-
if (audio_encoder_->InitializeSender() != 0) {
DCHECK(false) << "Invalid webrtc return value";
}
@@ -131,6 +130,7 @@ void AudioEncoder::EncodeAudioFrameThread(
const base::TimeTicks& recorded_time,
const FrameEncodedCallback& frame_encoded_callback,
const base::Closure release_callback) {
+ DCHECK(cast_thread_->CurrentlyOn(CastThread::AUDIO_ENCODER));
int samples_per_10ms = audio_frame->frequency / 100;
int number_of_10ms_blocks = audio_frame->samples.size() /
(samples_per_10ms * audio_frame->channels);
diff --git a/media/cast/audio_sender/audio_sender.cc b/media/cast/audio_sender/audio_sender.cc
index 39fccda..c48edb7 100644
--- a/media/cast/audio_sender/audio_sender.cc
+++ b/media/cast/audio_sender/audio_sender.cc
@@ -98,7 +98,6 @@ AudioSender::AudioSender(scoped_refptr<CastThread> cast_thread,
audio_config.rtcp_c_name),
clock_(&default_tick_clock_),
weak_factory_(this) {
-
rtcp_.SetRemoteSSRC(audio_config.incoming_feedback_ssrc);
if (!audio_config.use_external_encoder) {
@@ -137,7 +136,7 @@ void AudioSender::SendEncodedAudioFrame(
}
void AudioSender::ResendPackets(
- const MissingFramesAndPacketsMap& missing_frames_and_packets) {
+ const MissingFramesAndPacketsMap& missing_frames_and_packets) {
rtp_sender_.ResendPackets(missing_frames_and_packets);
}
diff --git a/media/cast/cast_thread.cc b/media/cast/cast_thread.cc
index 4d294c4..e474468 100644
--- a/media/cast/cast_thread.cc
+++ b/media/cast/cast_thread.cc
@@ -60,5 +60,22 @@ scoped_refptr<TaskRunner> CastThread::GetMessageTaskRunnerForThread(
}
}
+bool CastThread::CurrentlyOn(ThreadId identifier) {
+ switch (identifier) {
+ case CastThread::MAIN:
+ return main_thread_proxy_->RunsTasksOnCurrentThread();
+ case CastThread::AUDIO_ENCODER:
+ return audio_encode_thread_proxy_->RunsTasksOnCurrentThread();
+ case CastThread::AUDIO_DECODER:
+ return audio_decode_thread_proxy_->RunsTasksOnCurrentThread();
+ case CastThread::VIDEO_ENCODER:
+ return video_encode_thread_proxy_->RunsTasksOnCurrentThread();
+ case CastThread::VIDEO_DECODER:
+ return video_decode_thread_proxy_->RunsTasksOnCurrentThread();
+ default:
+ DCHECK(false) << "Wrong thread identifier";
+ }
+}
+
} // namespace cast
} // namespace media
diff --git a/media/cast/cast_thread.h b/media/cast/cast_thread.h
index b004157..323f03d 100644
--- a/media/cast/cast_thread.h
+++ b/media/cast/cast_thread.h
@@ -52,6 +52,8 @@ class CastThread : public base::RefCountedThreadSafe<CastThread> {
const base::Closure& task,
base::TimeDelta delay);
+ bool CurrentlyOn(ThreadId identifier);
+
private:
scoped_refptr<base::TaskRunner> GetMessageTaskRunnerForThread(
ThreadId identifier);
diff --git a/media/cast/video_receiver/video_decoder.cc b/media/cast/video_receiver/video_decoder.cc
index 238d6db..9e65b4d 100644
--- a/media/cast/video_receiver/video_decoder.cc
+++ b/media/cast/video_receiver/video_decoder.cc
@@ -47,7 +47,9 @@ void VideoDecoder::DecodeFrame(
const EncodedVideoFrame* encoded_frame,
const base::TimeTicks render_time,
const VideoFrameDecodedCallback& frame_decoded_callback) {
+ DCHECK(cast_thread_->CurrentlyOn(CastThread::VIDEO_DECODER));
DCHECK(encoded_frame->codec == codec_) << "Invalid codec";
+
// TODO(mikhal): Allow the application to allocate this memory.
scoped_ptr<I420VideoFrame> video_frame(new I420VideoFrame());
diff --git a/media/cast/video_receiver/video_decoder_unittest.cc b/media/cast/video_receiver/video_decoder_unittest.cc
index 0b95d12..c511681 100644
--- a/media/cast/video_receiver/video_decoder_unittest.cc
+++ b/media/cast/video_receiver/video_decoder_unittest.cc
@@ -52,8 +52,8 @@ class VideoDecoderTest : public ::testing::Test {
~VideoDecoderTest() {}
virtual void SetUp() {
task_runner_ = new test::FakeTaskRunner(&testing_clock_);
- cast_thread_ = new CastThread(task_runner_, task_runner_, task_runner_,
- task_runner_, task_runner_);
+ cast_thread_ = new CastThread(task_runner_, NULL, NULL,
+ NULL, task_runner_);
decoder_ = new VideoDecoder(cast_thread_, config_);
}
diff --git a/media/cast/video_receiver/video_receiver.cc b/media/cast/video_receiver/video_receiver.cc
index 4d0421c..c9c7590 100644
--- a/media/cast/video_receiver/video_receiver.cc
+++ b/media/cast/video_receiver/video_receiver.cc
@@ -176,6 +176,7 @@ void VideoReceiver::DecodeVideoFrameThread(
const base::TimeTicks render_time,
const VideoFrameDecodedCallback& frame_decoded_callback,
base::Closure frame_release_callback) {
+ DCHECK(cast_thread_->CurrentlyOn(CastThread::VIDEO_DECODER));
video_decoder_->DecodeVideoFrame(encoded_frame, render_time,
frame_decoded_callback, frame_release_callback);
// Release memory.
diff --git a/media/cast/video_receiver/video_receiver.h b/media/cast/video_receiver/video_receiver.h
index 40d0b03..fc358b6 100644
--- a/media/cast/video_receiver/video_receiver.h
+++ b/media/cast/video_receiver/video_receiver.h
@@ -38,7 +38,6 @@ class VideoDecoder;
class VideoReceiver : public base::NonThreadSafe,
public base::SupportsWeakPtr<VideoReceiver> {
public:
-
VideoReceiver(scoped_refptr<CastThread> cast_thread,
const VideoReceiverConfig& video_config,
PacedPacketSender* const packet_sender);
diff --git a/media/cast/video_receiver/video_receiver_unittest.cc b/media/cast/video_receiver/video_receiver_unittest.cc
index b1b1c0b..00fc9bd 100644
--- a/media/cast/video_receiver/video_receiver_unittest.cc
+++ b/media/cast/video_receiver/video_receiver_unittest.cc
@@ -55,7 +55,7 @@ class VideoReceiverTest : public ::testing::Test {
config_.codec = kVp8;
config_.use_external_decoder = false;
task_runner_ = new test::FakeTaskRunner(&testing_clock_);
- cast_thread_ = new CastThread(task_runner_, task_runner_, task_runner_,
+ cast_thread_ = new CastThread(task_runner_, NULL, NULL,
task_runner_, task_runner_);
receiver_.reset(new
PeerVideoReceiver(cast_thread_, config_, &mock_transport_));