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

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

Issue 12324005: Fix crash in VideoRendererBase::ThreadMain(). (Closed) Base URL: http://git.chromium.org/chromium/src.git@git-svn
Patch Set: Created 7 years, 10 months 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
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/debug/stack_trace.h"
8 #include "base/message_loop.h" 9 #include "base/message_loop.h"
9 #include "base/stl_util.h" 10 #include "base/stl_util.h"
10 #include "base/stringprintf.h" 11 #include "base/stringprintf.h"
11 #include "base/synchronization/lock.h" 12 #include "base/synchronization/lock.h"
12 #include "base/timer.h" 13 #include "base/timer.h"
13 #include "media/base/data_buffer.h" 14 #include "media/base/data_buffer.h"
14 #include "media/base/gmock_callback_support.h" 15 #include "media/base/gmock_callback_support.h"
15 #include "media/base/limits.h" 16 #include "media/base/limits.h"
16 #include "media/base/mock_filters.h" 17 #include "media/base/mock_filters.h"
17 #include "media/base/test_helpers.h" 18 #include "media/base/test_helpers.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 // We expect the video size to be set. 105 // We expect the video size to be set.
105 EXPECT_CALL(*this, OnNaturalSizeChanged(kNaturalSize)); 106 EXPECT_CALL(*this, OnNaturalSizeChanged(kNaturalSize));
106 107
107 // Start prerolling. 108 // Start prerolling.
108 QueuePrerollFrames(0); 109 QueuePrerollFrames(0);
109 Preroll(0, PIPELINE_OK); 110 Preroll(0, PIPELINE_OK);
110 } 111 }
111 112
112 void InitializeRenderer(PipelineStatus expected) { 113 void InitializeRenderer(PipelineStatus expected) {
113 SCOPED_TRACE(base::StringPrintf("InitializeRenderer(%d)", expected)); 114 SCOPED_TRACE(base::StringPrintf("InitializeRenderer(%d)", expected));
115 WaitableMessageLoopEvent event;
116 CallInitialize(event.GetPipelineStatusCB());
117 event.RunAndWaitForStatus(expected);
118 }
119
120 void CallInitialize(const PipelineStatusCB& status_cb) {
114 VideoRendererBase::VideoDecoderList decoders; 121 VideoRendererBase::VideoDecoderList decoders;
115 decoders.push_back(decoder_); 122 decoders.push_back(decoder_);
116
117 WaitableMessageLoopEvent event;
118 renderer_->Initialize( 123 renderer_->Initialize(
119 demuxer_stream_, 124 demuxer_stream_,
120 decoders, 125 decoders,
121 event.GetPipelineStatusCB(), 126 status_cb,
122 base::Bind(&MockStatisticsCB::OnStatistics, 127 base::Bind(&MockStatisticsCB::OnStatistics,
123 base::Unretained(&statistics_cb_object_)), 128 base::Unretained(&statistics_cb_object_)),
124 base::Bind(&VideoRendererBaseTest::OnTimeUpdate, 129 base::Bind(&VideoRendererBaseTest::OnTimeUpdate,
125 base::Unretained(this)), 130 base::Unretained(this)),
126 base::Bind(&VideoRendererBaseTest::OnNaturalSizeChanged, 131 base::Bind(&VideoRendererBaseTest::OnNaturalSizeChanged,
127 base::Unretained(this)), 132 base::Unretained(this)),
128 ended_event_.GetClosure(), 133 ended_event_.GetClosure(),
129 error_event_.GetPipelineStatusCB(), 134 error_event_.GetPipelineStatusCB(),
130 base::Bind(&VideoRendererBaseTest::GetTime, base::Unretained(this)), 135 base::Bind(&VideoRendererBaseTest::GetTime, base::Unretained(this)),
131 base::Bind(&VideoRendererBaseTest::GetDuration, 136 base::Bind(&VideoRendererBaseTest::GetDuration,
132 base::Unretained(this))); 137 base::Unretained(this)));
133 event.RunAndWaitForStatus(expected);
134 } 138 }
135 139
136 void Play() { 140 void Play() {
137 SCOPED_TRACE("Play()"); 141 SCOPED_TRACE("Play()");
138 WaitableMessageLoopEvent event; 142 WaitableMessageLoopEvent event;
139 renderer_->Play(event.GetClosure()); 143 renderer_->Play(event.GetClosure());
140 event.RunAndWait(); 144 event.RunAndWait();
141 } 145 }
142 146
143 void Preroll(int timestamp_ms, PipelineStatus expected) { 147 void Preroll(int timestamp_ms, PipelineStatus expected) {
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 365
362 DISALLOW_COPY_AND_ASSIGN(VideoRendererBaseTest); 366 DISALLOW_COPY_AND_ASSIGN(VideoRendererBaseTest);
363 }; 367 };
364 368
365 TEST_F(VideoRendererBaseTest, Initialize) { 369 TEST_F(VideoRendererBaseTest, Initialize) {
366 Initialize(); 370 Initialize();
367 EXPECT_EQ(0, GetCurrentTimestampInMs()); 371 EXPECT_EQ(0, GetCurrentTimestampInMs());
368 Shutdown(); 372 Shutdown();
369 } 373 }
370 374
375 static void ExpectNotCalled(PipelineStatus) {
376 base::debug::StackTrace stack;
377 ADD_FAILURE() << "Expected callback not to be called\n" << stack.ToString();
scherkus (not reviewing) 2013/02/20 08:26:11 I did this to get the stack trace of the callback
378 }
379
acolwell GONE FROM CHROMIUM 2013/02/20 17:01:14 You should add a test that allows the renderer to
scherkus (not reviewing) 2013/02/21 20:43:54 Done.
380 TEST_F(VideoRendererBaseTest, InitializeAndStop) {
381 EXPECT_CALL(*decoder_, Initialize(_, _, _))
382 .WillOnce(RunCallback<1>(PIPELINE_OK));
383 CallInitialize(base::Bind(&ExpectNotCalled));
384 Stop();
385
386 // ~VideoRendererBase() will CHECK() if we left anything initialized.
387 }
388
389 TEST_F(VideoRendererBaseTest, FlushAndStop) {
390 Initialize();
391 Pause();
392 renderer_->Flush(base::Bind(&ExpectNotCalled, PIPELINE_OK));
393 Stop();
394
395 // ~VideoRendererBase() will CHECK() if we left anything initialized.
396 }
397
371 TEST_F(VideoRendererBaseTest, Play) { 398 TEST_F(VideoRendererBaseTest, Play) {
372 Initialize(); 399 Initialize();
373 Play(); 400 Play();
374 Shutdown(); 401 Shutdown();
375 } 402 }
376 403
377 TEST_F(VideoRendererBaseTest, EndOfStream_DefaultFrameDuration) { 404 TEST_F(VideoRendererBaseTest, EndOfStream_DefaultFrameDuration) {
378 Initialize(); 405 Initialize();
379 Play(); 406 Play();
380 407
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 InSequence s; 634 InSequence s;
608 635
609 EXPECT_CALL(*decoder_, Initialize(_, _, _)) 636 EXPECT_CALL(*decoder_, Initialize(_, _, _))
610 .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED)); 637 .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED));
611 InitializeRenderer(DECODER_ERROR_NOT_SUPPORTED); 638 InitializeRenderer(DECODER_ERROR_NOT_SUPPORTED);
612 639
613 Stop(); 640 Stop();
614 } 641 }
615 642
616 } // namespace media 643 } // namespace media
OLDNEW
« media/filters/video_renderer_base.cc ('K') | « media/filters/video_renderer_base.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698