Index: media/cast/test/cast_benchmarks.cc |
diff --git a/media/cast/test/cast_benchmarks.cc b/media/cast/test/cast_benchmarks.cc |
index 8ef123e5008912d9ed33383c7364315374f221cb..aa89e943234a26e0840b18e1dff64916ee218ad2 100644 |
--- a/media/cast/test/cast_benchmarks.cc |
+++ b/media/cast/test/cast_benchmarks.cc |
@@ -32,6 +32,8 @@ |
#include "base/bind_helpers.h" |
#include "base/command_line.h" |
#include "base/debug/profiler.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/run_loop.h" |
#include "base/stl_util.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/stringprintf.h" |
@@ -81,12 +83,10 @@ void UpdateCastTransportStatus(CastTransportStatus status) { |
EXPECT_TRUE(result); |
} |
-void AudioInitializationStatus(CastInitializationStatus status) { |
- EXPECT_EQ(STATUS_AUDIO_INITIALIZED, status); |
-} |
- |
-void VideoInitializationStatus(CastInitializationStatus status) { |
- EXPECT_EQ(STATUS_VIDEO_INITIALIZED, status); |
+void ExpectSuccessAndRunCallback(const base::Closure& done_cb, |
+ OperationalStatus status) { |
+ EXPECT_EQ(STATUS_INITIALIZED, status); |
+ done_cb.Run(); |
} |
void IgnoreRawEvents(const std::vector<PacketEvent>& packet_events, |
@@ -346,13 +346,22 @@ class RunOneBenchmark { |
cast_sender_ = |
CastSender::Create(cast_environment_sender_, &transport_sender_); |
- // Initializing audio and video senders. |
- cast_sender_->InitializeAudio(audio_sender_config_, |
- base::Bind(&AudioInitializationStatus)); |
- cast_sender_->InitializeVideo(video_sender_config_, |
- base::Bind(&VideoInitializationStatus), |
- CreateDefaultVideoEncodeAcceleratorCallback(), |
- CreateDefaultVideoEncodeMemoryCallback()); |
+ // Initializing audio and video senders. The funny dance here is to |
+ // synchronize on the asynchronous initialization process. |
+ base::RunLoop run_loop; |
+ base::WeakPtrFactory<RunOneBenchmark> weak_factory(this); |
+ cast_sender_->InitializeAudio( |
+ audio_sender_config_, |
+ base::Bind(&ExpectSuccessAndRunCallback, run_loop.QuitClosure())); |
+ run_loop.Run(); // Wait for quit closure to run. |
+ weak_factory.InvalidateWeakPtrs(); |
+ cast_sender_->InitializeVideo( |
+ video_sender_config_, |
+ base::Bind(&ExpectSuccessAndRunCallback, run_loop.QuitClosure()), |
+ CreateDefaultVideoEncodeAcceleratorCallback(), |
+ CreateDefaultVideoEncodeMemoryCallback()); |
+ run_loop.Run(); // Wait for quit closure to run. |
+ weak_factory.InvalidateWeakPtrs(); |
receiver_to_sender_.Initialize( |
CreateSimplePipe(p).Pass(), |