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

Side by Side Diff: webrtc/video/video_quality_test.cc

Issue 1476453002: Clean up PlatformThread. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: IsRunning DCHECK Created 5 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
« no previous file with comments | « webrtc/video/video_capture_input.cc ('k') | webrtc/video_engine/vie_channel.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <stdio.h> 10 #include <stdio.h>
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 graph_title_(graph_title), 62 graph_title_(graph_title),
63 ssrc_to_analyze_(ssrc_to_analyze), 63 ssrc_to_analyze_(ssrc_to_analyze),
64 frames_to_process_(duration_frames), 64 frames_to_process_(duration_frames),
65 frames_recorded_(0), 65 frames_recorded_(0),
66 frames_processed_(0), 66 frames_processed_(0),
67 dropped_frames_(0), 67 dropped_frames_(0),
68 last_render_time_(0), 68 last_render_time_(0),
69 rtp_timestamp_delta_(0), 69 rtp_timestamp_delta_(0),
70 avg_psnr_threshold_(avg_psnr_threshold), 70 avg_psnr_threshold_(avg_psnr_threshold),
71 avg_ssim_threshold_(avg_ssim_threshold), 71 avg_ssim_threshold_(avg_ssim_threshold),
72 stats_polling_thread_(&PollStatsThread, this, "StatsPoller"),
72 comparison_available_event_(EventWrapper::Create()), 73 comparison_available_event_(EventWrapper::Create()),
73 done_(EventWrapper::Create()) { 74 done_(EventWrapper::Create()) {
74 // Create thread pool for CPU-expensive PSNR/SSIM calculations. 75 // Create thread pool for CPU-expensive PSNR/SSIM calculations.
75 76
76 // Try to use about as many threads as cores, but leave kMinCoresLeft alone, 77 // Try to use about as many threads as cores, but leave kMinCoresLeft alone,
77 // so that we don't accidentally starve "real" worker threads (codec etc). 78 // so that we don't accidentally starve "real" worker threads (codec etc).
78 // Also, don't allocate more than kMaxComparisonThreads, even if there are 79 // Also, don't allocate more than kMaxComparisonThreads, even if there are
79 // spare cores. 80 // spare cores.
80 81
81 uint32_t num_cores = CpuInfo::DetectNumberOfCores(); 82 uint32_t num_cores = CpuInfo::DetectNumberOfCores();
82 RTC_DCHECK_GE(num_cores, 1u); 83 RTC_DCHECK_GE(num_cores, 1u);
83 static const uint32_t kMinCoresLeft = 4; 84 static const uint32_t kMinCoresLeft = 4;
84 static const uint32_t kMaxComparisonThreads = 8; 85 static const uint32_t kMaxComparisonThreads = 8;
85 86
86 if (num_cores <= kMinCoresLeft) { 87 if (num_cores <= kMinCoresLeft) {
87 num_cores = 1; 88 num_cores = 1;
88 } else { 89 } else {
89 num_cores -= kMinCoresLeft; 90 num_cores -= kMinCoresLeft;
90 num_cores = std::min(num_cores, kMaxComparisonThreads); 91 num_cores = std::min(num_cores, kMaxComparisonThreads);
91 } 92 }
92 93
93 for (uint32_t i = 0; i < num_cores; ++i) { 94 for (uint32_t i = 0; i < num_cores; ++i) {
94 rtc::scoped_ptr<PlatformThread> thread = PlatformThread::CreateThread( 95 rtc::PlatformThread* thread =
95 &FrameComparisonThread, this, "Analyzer"); 96 new rtc::PlatformThread(&FrameComparisonThread, this, "Analyzer");
96 EXPECT_TRUE(thread->Start()); 97 thread->Start();
97 comparison_thread_pool_.push_back(thread.release()); 98 comparison_thread_pool_.push_back(thread);
98 } 99 }
99 100
100 stats_polling_thread_ =
101 PlatformThread::CreateThread(&PollStatsThread, this, "StatsPoller");
102 } 101 }
103 102
104 ~VideoAnalyzer() { 103 ~VideoAnalyzer() {
105 for (PlatformThread* thread : comparison_thread_pool_) { 104 for (rtc::PlatformThread* thread : comparison_thread_pool_) {
106 EXPECT_TRUE(thread->Stop()); 105 thread->Stop();
107 delete thread; 106 delete thread;
108 } 107 }
109 } 108 }
110 109
111 virtual void SetReceiver(PacketReceiver* receiver) { receiver_ = receiver; } 110 virtual void SetReceiver(PacketReceiver* receiver) { receiver_ = receiver; }
112 111
113 DeliveryStatus DeliverPacket(MediaType media_type, 112 DeliveryStatus DeliverPacket(MediaType media_type,
114 const uint8_t* packet, 113 const uint8_t* packet,
115 size_t length, 114 size_t length,
116 const PacketTime& packet_time) override { 115 const PacketTime& packet_time) override {
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 last_rendered_frame_ = video_frame; 213 last_rendered_frame_ = video_frame;
215 } 214 }
216 215
217 bool IsTextureSupported() const override { return false; } 216 bool IsTextureSupported() const override { return false; }
218 217
219 void Wait() { 218 void Wait() {
220 // Frame comparisons can be very expensive. Wait for test to be done, but 219 // Frame comparisons can be very expensive. Wait for test to be done, but
221 // at time-out check if frames_processed is going up. If so, give it more 220 // at time-out check if frames_processed is going up. If so, give it more
222 // time, otherwise fail. Hopefully this will reduce test flakiness. 221 // time, otherwise fail. Hopefully this will reduce test flakiness.
223 222
224 EXPECT_TRUE(stats_polling_thread_->Start()); 223 stats_polling_thread_.Start();
225 224
226 int last_frames_processed = -1; 225 int last_frames_processed = -1;
227 EventTypeWrapper eventType; 226 EventTypeWrapper eventType;
228 int iteration = 0; 227 int iteration = 0;
229 while ((eventType = done_->Wait(VideoQualityTest::kDefaultTimeoutMs)) != 228 while ((eventType = done_->Wait(VideoQualityTest::kDefaultTimeoutMs)) !=
230 kEventSignaled) { 229 kEventSignaled) {
231 int frames_processed; 230 int frames_processed;
232 { 231 {
233 rtc::CritScope crit(&comparison_lock_); 232 rtc::CritScope crit(&comparison_lock_);
234 frames_processed = frames_processed_; 233 frames_processed = frames_processed_;
(...skipping 15 matching lines...) Expand all
250 last_frames_processed = frames_processed; 249 last_frames_processed = frames_processed;
251 } 250 }
252 251
253 if (iteration > 0) 252 if (iteration > 0)
254 printf("- Farewell, sweet Concorde!\n"); 253 printf("- Farewell, sweet Concorde!\n");
255 254
256 // Signal stats polling thread if that is still waiting and stop it now, 255 // Signal stats polling thread if that is still waiting and stop it now,
257 // since it uses the send_stream_ reference that might be reclaimed after 256 // since it uses the send_stream_ reference that might be reclaimed after
258 // returning from this method. 257 // returning from this method.
259 done_->Set(); 258 done_->Set();
260 EXPECT_TRUE(stats_polling_thread_->Stop()); 259 stats_polling_thread_.Stop();
261 } 260 }
262 261
263 VideoCaptureInput* input_; 262 VideoCaptureInput* input_;
264 test::LayerFilteringTransport* const transport_; 263 test::LayerFilteringTransport* const transport_;
265 PacketReceiver* receiver_; 264 PacketReceiver* receiver_;
266 VideoSendStream* send_stream_; 265 VideoSendStream* send_stream_;
267 266
268 private: 267 private:
269 struct FrameComparison { 268 struct FrameComparison {
270 FrameComparison() 269 FrameComparison()
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 std::deque<VideoFrame> frames_ GUARDED_BY(crit_); 594 std::deque<VideoFrame> frames_ GUARDED_BY(crit_);
596 VideoFrame last_rendered_frame_ GUARDED_BY(crit_); 595 VideoFrame last_rendered_frame_ GUARDED_BY(crit_);
597 std::map<uint32_t, int64_t> send_times_ GUARDED_BY(crit_); 596 std::map<uint32_t, int64_t> send_times_ GUARDED_BY(crit_);
598 std::map<uint32_t, int64_t> recv_times_ GUARDED_BY(crit_); 597 std::map<uint32_t, int64_t> recv_times_ GUARDED_BY(crit_);
599 std::map<uint32_t, size_t> encoded_frame_sizes_ GUARDED_BY(crit_); 598 std::map<uint32_t, size_t> encoded_frame_sizes_ GUARDED_BY(crit_);
600 VideoFrame first_send_frame_ GUARDED_BY(crit_); 599 VideoFrame first_send_frame_ GUARDED_BY(crit_);
601 const double avg_psnr_threshold_; 600 const double avg_psnr_threshold_;
602 const double avg_ssim_threshold_; 601 const double avg_ssim_threshold_;
603 602
604 rtc::CriticalSection comparison_lock_; 603 rtc::CriticalSection comparison_lock_;
605 std::vector<PlatformThread*> comparison_thread_pool_; 604 std::vector<rtc::PlatformThread*> comparison_thread_pool_;
606 rtc::scoped_ptr<PlatformThread> stats_polling_thread_; 605 rtc::PlatformThread stats_polling_thread_;
607 const rtc::scoped_ptr<EventWrapper> comparison_available_event_; 606 const rtc::scoped_ptr<EventWrapper> comparison_available_event_;
608 std::deque<FrameComparison> comparisons_ GUARDED_BY(comparison_lock_); 607 std::deque<FrameComparison> comparisons_ GUARDED_BY(comparison_lock_);
609 const rtc::scoped_ptr<EventWrapper> done_; 608 const rtc::scoped_ptr<EventWrapper> done_;
610 }; 609 };
611 610
612 VideoQualityTest::VideoQualityTest() : clock_(Clock::GetRealTimeClock()) {} 611 VideoQualityTest::VideoQualityTest() : clock_(Clock::GetRealTimeClock()) {}
613 612
614 void VideoQualityTest::TestBody() {} 613 void VideoQualityTest::TestBody() {}
615 614
616 std::string VideoQualityTest::GenerateGraphTitle() const { 615 std::string VideoQualityTest::GenerateGraphTitle() const {
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 send_stream_->Stop(); 1064 send_stream_->Stop();
1066 receive_stream->Stop(); 1065 receive_stream->Stop();
1067 1066
1068 call->DestroyVideoReceiveStream(receive_stream); 1067 call->DestroyVideoReceiveStream(receive_stream);
1069 call->DestroyVideoSendStream(send_stream_); 1068 call->DestroyVideoSendStream(send_stream_);
1070 1069
1071 transport.StopSending(); 1070 transport.StopSending();
1072 } 1071 }
1073 1072
1074 } // namespace webrtc 1073 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/video_capture_input.cc ('k') | webrtc/video_engine/vie_channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698