diff options
author | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-24 13:09:08 +0000 |
---|---|---|
committer | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-24 13:09:08 +0000 |
commit | 7f14cecb6320d376210401220ebe407300e2368e (patch) | |
tree | 361fa8ed1c2b67729cf4c79a79cc27925bde8cdd /media/cast/test/encode_decode_test.cc | |
parent | 2eccbb3f4891f515ffb070aae7ecda2524cb7964 (diff) | |
download | chromium_src-7f14cecb6320d376210401220ebe407300e2368e.zip chromium_src-7f14cecb6320d376210401220ebe407300e2368e.tar.gz chromium_src-7f14cecb6320d376210401220ebe407300e2368e.tar.bz2 |
Fixes for memory and threading issues in cast
This change fixes one issue in media/cast code.
TickClock is not owned by CastEnvironment
TickClock assigned to CastEnvironment is owned by the creator of
CastSender/CastReceiver. However CastEnvironment is ref-counted.
This means it is possible that TickClock is deleted but deferenced
by some objects that still uses CastEnvironment.
Fixing this requires a sweeping change in unit tests. And it also
affects End2End test. The result is that CastEnvironment is shared
between CastSender and CastReceiver. This adds requirements to
log filtering because now a CastEnvironment used by CastSender can
see receiver events.
Tested this patch with valgrind and cast_unittests reports no error.
BUG=336887
Review URL: https://codereview.chromium.org/145443005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@246863 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/cast/test/encode_decode_test.cc')
-rw-r--r-- | media/cast/test/encode_decode_test.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/media/cast/test/encode_decode_test.cc b/media/cast/test/encode_decode_test.cc index 9464872..1d5fe56 100644 --- a/media/cast/test/encode_decode_test.cc +++ b/media/cast/test/encode_decode_test.cc @@ -73,14 +73,16 @@ class EncodeDecodeTestFrameCallback : class EncodeDecodeTest : public ::testing::Test { protected: EncodeDecodeTest() - : task_runner_(new test::FakeTaskRunner(&testing_clock_)), + : testing_clock_(new base::SimpleTestTickClock()), + task_runner_(new test::FakeTaskRunner(testing_clock_)), // CastEnvironment will only be used by the vp8 decoder; Enable only the // video decoder and main threads. - cast_environment_(new CastEnvironment(&testing_clock_, task_runner_, + cast_environment_(new CastEnvironment( + scoped_ptr<base::TickClock>(testing_clock_).Pass(), task_runner_, NULL, NULL, NULL, task_runner_, NULL, GetDefaultCastReceiverLoggingConfig())), test_callback_(new EncodeDecodeTestFrameCallback()) { - testing_clock_.Advance( + testing_clock_->Advance( base::TimeDelta::FromMilliseconds(kStartMillisecond)); encoder_config_.max_number_of_video_buffers_used = 1; encoder_config_.number_of_cores = 1; @@ -112,7 +114,7 @@ class EncodeDecodeTest : public ::testing::Test { scoped_ptr<Vp8Encoder> encoder_; scoped_ptr<Vp8Decoder> decoder_; scoped_refptr<media::VideoFrame> video_frame_; - base::SimpleTestTickClock testing_clock_; + base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. scoped_refptr<test::FakeTaskRunner> task_runner_; scoped_refptr<CastEnvironment> cast_environment_; scoped_refptr<EncodeDecodeTestFrameCallback> test_callback_; |