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

Side by Side Diff: content/browser/renderer_host/media/video_capture_manager_unittest.cc

Issue 10662049: Move the device enumerate/open/close work to device thread from IO thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ready for review. Created 8 years, 6 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 | 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 // Unit test for VideoCaptureManager. 5 // Unit test for VideoCaptureManager.
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 public: 66 public:
67 virtual void OnError() {} 67 virtual void OnError() {}
68 void OnFrameInfo(const media::VideoCaptureCapability& info) {} 68 void OnFrameInfo(const media::VideoCaptureCapability& info) {}
69 virtual void OnIncomingCapturedFrame(const uint8* data, int length, 69 virtual void OnIncomingCapturedFrame(const uint8* data, int length,
70 base::Time timestamp) {} 70 base::Time timestamp) {}
71 }; 71 };
72 72
73 // Test class 73 // Test class
74 class VideoCaptureManagerTest : public testing::Test { 74 class VideoCaptureManagerTest : public testing::Test {
75 public: 75 public:
76 VideoCaptureManagerTest() 76 VideoCaptureManagerTest() {}
77 : vcm_(),
78 listener_(),
79 message_loop_(),
80 io_thread_(),
81 frame_observer_() {
82 }
83 virtual ~VideoCaptureManagerTest() {} 77 virtual ~VideoCaptureManagerTest() {}
84 78
85 protected: 79 protected:
86 virtual void SetUp() { 80 virtual void SetUp() {
87 listener_.reset(new media_stream::MockMediaStreamProviderListener()); 81 listener_.reset(new media_stream::MockMediaStreamProviderListener());
88 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); 82 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO));
89 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, 83 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO,
90 message_loop_.get())); 84 message_loop_.get()));
91 vcm_ = new media_stream::VideoCaptureManager(); 85 device_thread_.reset(new base::Thread("VideoCaptureManagerTestThread"));
86 CHECK(device_thread_->Start());
87 vcm_ = new media_stream::VideoCaptureManager(
88 device_thread_->message_loop_proxy());
92 vcm_->UseFakeDevice(); 89 vcm_->UseFakeDevice();
93 vcm_->Register(listener_.get()); 90 vcm_->Register(listener_.get());
94 frame_observer_.reset(new MockFrameObserver()); 91 frame_observer_.reset(new MockFrameObserver());
95 } 92 }
96 93
97 virtual void TearDown() { 94 virtual void TearDown() {
98 io_thread_.reset(); 95 io_thread_.reset();
96 device_thread_->Stop();
scherkus (not reviewing) 2012/06/27 00:52:31 nit: should we be stopping/resetting the threads i
no longer working on chromium 2012/06/27 14:07:16 I will remove the device_thread_ here and inject t
99 } 97 }
100 98
101 // Called on the VideoCaptureManager thread. 99 // Called on the VideoCaptureManager thread.
102 static void PostQuitMessageLoop(MessageLoop* message_loop) { 100 static void PostQuitMessageLoop(MessageLoop* message_loop) {
103 message_loop->PostTask(FROM_HERE, MessageLoop::QuitClosure()); 101 message_loop->PostTask(FROM_HERE, MessageLoop::QuitClosure());
104 } 102 }
105 103
106 // Called on the main thread. 104 // Called on the main thread.
107 static void PostQuitOnVideoCaptureManagerThread( 105 static void PostQuitOnVideoCaptureManagerThread(
108 MessageLoop* message_loop, media_stream::VideoCaptureManager* vcm) { 106 MessageLoop* message_loop, MessageLoop* device_message_loop) {
109 vcm->GetMessageLoop()->PostTask( 107 device_message_loop->PostTask(
110 FROM_HERE, base::Bind(&PostQuitMessageLoop, message_loop)); 108 FROM_HERE, base::Bind(&PostQuitMessageLoop, message_loop));
111 } 109 }
112 110
113 // SyncWithVideoCaptureManagerThread() waits until all pending tasks on the 111 // SyncWithVideoCaptureManagerThread() waits until all pending tasks on the
114 // video_capture_manager internal thread are executed while also processing 112 // video_capture_manager internal thread are executed while also processing
115 // pending task in message_loop_ on the current thread. It is used to 113 // pending task in message_loop_ on the current thread. It is used to
116 // synchronize with the video capture manager thread when we are stopping a 114 // synchronize with the video capture manager thread when we are stopping a
117 // video capture device. 115 // video capture device.
118 void SyncWithVideoCaptureManagerThread() { 116 void SyncWithVideoCaptureManagerThread() {
119 message_loop_->PostTask( 117 message_loop_->PostTask(
120 FROM_HERE, base::Bind(&PostQuitOnVideoCaptureManagerThread, 118 FROM_HERE, base::Bind(&PostQuitOnVideoCaptureManagerThread,
121 message_loop_.get(), 119 message_loop_.get(),
122 vcm_)); 120 device_thread_->message_loop()));
123 message_loop_->Run(); 121 message_loop_->Run();
124 } 122 }
125 scoped_refptr<media_stream::VideoCaptureManager> vcm_; 123 scoped_refptr<media_stream::VideoCaptureManager> vcm_;
126 scoped_ptr<media_stream::MockMediaStreamProviderListener> listener_; 124 scoped_ptr<media_stream::MockMediaStreamProviderListener> listener_;
127 scoped_ptr<MessageLoop> message_loop_; 125 scoped_ptr<MessageLoop> message_loop_;
128 scoped_ptr<BrowserThreadImpl> io_thread_; 126 scoped_ptr<BrowserThreadImpl> io_thread_;
127 scoped_ptr<base::Thread> device_thread_;
129 scoped_ptr<MockFrameObserver> frame_observer_; 128 scoped_ptr<MockFrameObserver> frame_observer_;
130 129
131 private: 130 private:
132 DISALLOW_COPY_AND_ASSIGN(VideoCaptureManagerTest); 131 DISALLOW_COPY_AND_ASSIGN(VideoCaptureManagerTest);
133 }; 132 };
134 133
135 // Test cases 134 // Test cases
136 135
137 // Try to open, start, stop and close a device. 136 // Try to open, start, stop and close a device.
138 TEST_F(VideoCaptureManagerTest, CreateAndClose) { 137 TEST_F(VideoCaptureManagerTest, CreateAndClose) {
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 // VideoCaptureManager destructor otherwise. 319 // VideoCaptureManager destructor otherwise.
321 vcm_->Close(video_session_id); 320 vcm_->Close(video_session_id);
322 vcm_->Stop(video_session_id, base::Closure()); 321 vcm_->Stop(video_session_id, base::Closure());
323 322
324 // Wait to check callbacks before removing the listener 323 // Wait to check callbacks before removing the listener
325 SyncWithVideoCaptureManagerThread(); 324 SyncWithVideoCaptureManagerThread();
326 vcm_->Unregister(); 325 vcm_->Unregister();
327 } 326 }
328 327
329 } // namespace 328 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698