Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Side by Side Diff: media/filters/video_renderer_base_unittest.cc

Issue 11428095: Pass in media message loop to VideoRendererBase and enforce calling on the right thread. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/callback.h" 6 #include "base/callback.h"
7 #include "base/callback_helpers.h" 7 #include "base/callback_helpers.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
(...skipping 22 matching lines...) Expand all
33 static const int kFrameDurationInMs = 10; 33 static const int kFrameDurationInMs = 10;
34 static const int kVideoDurationInMs = kFrameDurationInMs * 100; 34 static const int kVideoDurationInMs = kFrameDurationInMs * 100;
35 static const gfx::Size kNaturalSize(16u, 16u); 35 static const gfx::Size kNaturalSize(16u, 16u);
36 36
37 class VideoRendererBaseTest : public ::testing::Test { 37 class VideoRendererBaseTest : public ::testing::Test {
38 public: 38 public:
39 VideoRendererBaseTest() 39 VideoRendererBaseTest()
40 : decoder_(new MockVideoDecoder()), 40 : decoder_(new MockVideoDecoder()),
41 demuxer_stream_(new MockDemuxerStream()) { 41 demuxer_stream_(new MockDemuxerStream()) {
42 renderer_ = new VideoRendererBase( 42 renderer_ = new VideoRendererBase(
43 message_loop_.message_loop_proxy(),
43 base::Bind(&VideoRendererBaseTest::OnPaint, base::Unretained(this)), 44 base::Bind(&VideoRendererBaseTest::OnPaint, base::Unretained(this)),
44 base::Bind(&VideoRendererBaseTest::OnSetOpaque, base::Unretained(this)), 45 base::Bind(&VideoRendererBaseTest::OnSetOpaque, base::Unretained(this)),
45 true); 46 true);
46 47
47 EXPECT_CALL(*demuxer_stream_, type()) 48 EXPECT_CALL(*demuxer_stream_, type())
48 .WillRepeatedly(Return(DemuxerStream::VIDEO)); 49 .WillRepeatedly(Return(DemuxerStream::VIDEO));
49 50
50 // We expect these to be called but we don't care how/when. 51 // We expect these to be called but we don't care how/when.
51 EXPECT_CALL(*decoder_, Stop(_)) 52 EXPECT_CALL(*decoder_, Stop(_))
52 .WillRepeatedly(RunClosure<0>()); 53 .WillRepeatedly(RunClosure<0>());
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 base::TimeDelta GetTime() { 291 base::TimeDelta GetTime() {
291 base::AutoLock l(lock_); 292 base::AutoLock l(lock_);
292 return time_; 293 return time_;
293 } 294 }
294 295
295 base::TimeDelta GetDuration() { 296 base::TimeDelta GetDuration() {
296 return duration_; 297 return duration_;
297 } 298 }
298 299
299 void FrameRequested(const VideoDecoder::ReadCB& read_cb) { 300 void FrameRequested(const VideoDecoder::ReadCB& read_cb) {
300 // TODO(scherkus): Make VideoRendererBase call on right thread. 301 DCHECK_EQ(&message_loop_, MessageLoop::current());
301 if (&message_loop_ != MessageLoop::current()) {
302 message_loop_.PostTask(FROM_HERE, base::Bind(
303 &VideoRendererBaseTest::FrameRequested, base::Unretained(this),
304 read_cb));
305 return;
306 }
307
308 CHECK(read_cb_.is_null()); 302 CHECK(read_cb_.is_null());
309 read_cb_ = read_cb; 303 read_cb_ = read_cb;
310 304
311 // Wake up WaitForPendingRead() if needed. 305 // Wake up WaitForPendingRead() if needed.
312 if (!pending_read_cb_.is_null()) 306 if (!pending_read_cb_.is_null())
313 base::ResetAndReturn(&pending_read_cb_).Run(); 307 base::ResetAndReturn(&pending_read_cb_).Run();
314 308
315 if (decode_results_.empty()) 309 if (decode_results_.empty())
316 return; 310 return;
317 311
318 SatisfyPendingRead(); 312 SatisfyPendingRead();
319 } 313 }
320 314
321 void FlushRequested(const base::Closure& callback) { 315 void FlushRequested(const base::Closure& callback) {
322 // TODO(scherkus): Make VideoRendererBase call on right thread. 316 DCHECK_EQ(&message_loop_, MessageLoop::current());
323 if (&message_loop_ != MessageLoop::current()) {
324 message_loop_.PostTask(FROM_HERE, base::Bind(
325 &VideoRendererBaseTest::FlushRequested, base::Unretained(this),
326 callback));
327 return;
328 }
329
330 decode_results_.clear(); 317 decode_results_.clear();
331 if (!read_cb_.is_null()) { 318 if (!read_cb_.is_null()) {
332 QueueAbortedRead(); 319 QueueAbortedRead();
333 SatisfyPendingRead(); 320 SatisfyPendingRead();
334 } 321 }
335 322
336 message_loop_.PostTask(FROM_HERE, callback); 323 message_loop_.PostTask(FROM_HERE, callback);
337 } 324 }
338 325
339 MessageLoop message_loop_; 326 MessageLoop message_loop_;
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 InSequence s; 605 InSequence s;
619 606
620 EXPECT_CALL(*decoder_, Initialize(_, _, _)) 607 EXPECT_CALL(*decoder_, Initialize(_, _, _))
621 .WillOnce(RunCallback<1>(PIPELINE_ERROR_DECODE)); 608 .WillOnce(RunCallback<1>(PIPELINE_ERROR_DECODE));
622 InitializeRenderer(PIPELINE_ERROR_DECODE); 609 InitializeRenderer(PIPELINE_ERROR_DECODE);
623 610
624 Stop(); 611 Stop();
625 } 612 }
626 613
627 } // namespace media 614 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698