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

Unified Diff: content/renderer/media/media_stream_video_track_unittest.cc

Issue 264363005: Cast: deliver video frames on the IO thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed tests Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/media_stream_video_track_unittest.cc
diff --git a/content/renderer/media/media_stream_video_track_unittest.cc b/content/renderer/media/media_stream_video_track_unittest.cc
index 758c568f3075d11c4de7a7b3b8944d0ff3a6be9d..5a55e5a2a4a7e3ff7790933f98103d71599b4f1c 100644
--- a/content/renderer/media/media_stream_video_track_unittest.cc
+++ b/content/renderer/media/media_stream_video_track_unittest.cc
@@ -2,9 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/callback.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/threading/thread_checker.h"
#include "content/child/child_process.h"
#include "content/renderer/media/media_stream_video_track.h"
#include "content/renderer/media/mock_media_stream_video_sink.h"
@@ -73,8 +77,8 @@ class MediaStreamVideoTrackTest : public ::testing::Test {
}
private:
- scoped_ptr<ChildProcess> child_process_;
base::MessageLoopForUI message_loop_;
+ scoped_ptr<ChildProcess> child_process_;
blink::WebMediaStreamSource blink_source_;
// |mock_source_| is owned by |webkit_source_|.
MockMediaStreamVideoSource* mock_source_;
@@ -84,7 +88,8 @@ class MediaStreamVideoTrackTest : public ::testing::Test {
TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
MockMediaStreamVideoSink sink;
blink::WebMediaStreamTrack track = CreateTrack();
- MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink, sink.GetDeliverFrameCB(), track);
DeliverVideoFrameAndWaitForRenderer(&sink);
EXPECT_EQ(1, sink.number_of_frames());
@@ -103,10 +108,54 @@ TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
EXPECT_EQ(2, sink.number_of_frames());
}
+class CheckThreadHelper {
+ public:
+ CheckThreadHelper(base::Closure callback, bool* correct)
+ : callback_(callback),
+ correct_(correct) {
+ }
+
+ ~CheckThreadHelper() {
+ *correct_ = thread_checker_.CalledOnValidThread();
tommi (sloooow) - chröme 2014/05/09 16:20:50 doesn't CalledOnValidThread always return true in
Alpha Left Google 2014/05/09 17:33:23 Sneaky! Changed it to use ThreadCheckerImpl direct
+ callback_.Run();
+ }
+
+ private:
+ base::Closure callback_;
+ bool* correct_;
+ base::ThreadChecker thread_checker_;
+};
+
+void CheckThreadVideoFrameReceiver(
+ CheckThreadHelper* helper,
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format) {
+ // Do nothing.
+}
+
+// Checks that the callback given to the track is reset on the right thread.
+TEST_F(MediaStreamVideoTrackTest, ResetCallbackOnThread) {
+ MockMediaStreamVideoSink sink;
+ blink::WebMediaStreamTrack track = CreateTrack();
+
+ base::RunLoop run_loop;
+ bool correct = false;
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink,
+ base::Bind(
+ &CheckThreadVideoFrameReceiver,
+ base::Owned(new CheckThreadHelper(run_loop.QuitClosure(), &correct))),
+ track);
+ MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
+ run_loop.Run();
+ EXPECT_TRUE(correct) << "Not called on correct thread.";
+}
+
TEST_F(MediaStreamVideoTrackTest, SetEnabled) {
MockMediaStreamVideoSink sink;
blink::WebMediaStreamTrack track = CreateTrack();
- MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink, sink.GetDeliverFrameCB(), track);
MediaStreamVideoTrack* video_track =
MediaStreamVideoTrack::GetVideoTrack(track);
@@ -137,7 +186,8 @@ TEST_F(MediaStreamVideoTrackTest, SetEnabled) {
TEST_F(MediaStreamVideoTrackTest, SourceStopped) {
MockMediaStreamVideoSink sink;
blink::WebMediaStreamTrack track = CreateTrack();
- MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink, sink.GetDeliverFrameCB(), track);
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
mock_source()->StopSource();
@@ -148,7 +198,8 @@ TEST_F(MediaStreamVideoTrackTest, SourceStopped) {
TEST_F(MediaStreamVideoTrackTest, StopLastTrack) {
MockMediaStreamVideoSink sink1;
blink::WebMediaStreamTrack track1 = CreateTrack();
- MediaStreamVideoSink::AddToVideoTrack(&sink1, track1);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink1, sink1.GetDeliverFrameCB(), track1);
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink1.state());
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
@@ -156,7 +207,8 @@ TEST_F(MediaStreamVideoTrackTest, StopLastTrack) {
MockMediaStreamVideoSink sink2;
blink::WebMediaStreamTrack track2 = CreateTrack();
- MediaStreamVideoSink::AddToVideoTrack(&sink2, track2);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink2, sink2.GetDeliverFrameCB(), track2);
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink2.state());
MediaStreamVideoTrack* native_track1 =
« no previous file with comments | « content/renderer/media/media_stream_video_track.cc ('k') | content/renderer/media/mock_media_stream_video_sink.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698