Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / video / call_perf_tests.cc
index 0637ec3..4766ff8 100644 (file)
@@ -45,6 +45,39 @@ static const uint32_t kReceiverLocalSsrc = 0x123456;
 static const uint8_t kSendPayloadType = 125;
 
 class CallPerfTest : public ::testing::Test {
+ public:
+  CallPerfTest()
+      : send_stream_(NULL), fake_encoder_(Clock::GetRealTimeClock()) {}
+ protected:
+  VideoSendStream::Config GetSendTestConfig(Call* call) {
+    VideoSendStream::Config config = call->GetDefaultSendConfig();
+    config.encoder = &fake_encoder_;
+    config.internal_source = false;
+    config.rtp.ssrcs.push_back(kSendSsrc);
+    test::FakeEncoder::SetCodecSettings(&config.codec, 1);
+    config.codec.plType = kSendPayloadType;
+    return config;
+  }
+  void RunVideoSendTest(Call* call,
+                        const VideoSendStream::Config& config,
+                        test::RtpRtcpObserver* observer) {
+    send_stream_ = call->CreateVideoSendStream(config);
+    scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer(
+        test::FrameGeneratorCapturer::Create(
+            send_stream_->Input(), 320, 240, 30, Clock::GetRealTimeClock()));
+    send_stream_->StartSending();
+    frame_generator_capturer->Start();
+
+    EXPECT_EQ(kEventSignaled, observer->Wait());
+
+    observer->StopSending();
+    frame_generator_capturer->Stop();
+    send_stream_->StopSending();
+    call->DestroyVideoSendStream(send_stream_);
+  }
+
+  VideoSendStream* send_stream_;
+  test::FakeEncoder fake_encoder_;
 };
 
 class SyncRtcpObserver : public test::RtpRtcpObserver {
@@ -230,20 +263,15 @@ TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSync) {
   audio_observer.SetReceivers(&voe_packet_receiver, &voe_packet_receiver);
 
   internal::TransportAdapter transport_adapter(audio_observer.SendTransport());
+  transport_adapter.Enable();
   EXPECT_EQ(0,
             voe_network->RegisterExternalTransport(channel, transport_adapter));
 
   observer.SetReceivers(receiver_call->Receiver(), sender_call->Receiver());
 
-  test::FakeEncoder fake_encoder(Clock::GetRealTimeClock());
   test::FakeDecoder fake_decoder;
 
-  VideoSendStream::Config send_config = sender_call->GetDefaultSendConfig();
-  send_config.rtp.ssrcs.push_back(kSendSsrc);
-  send_config.encoder = &fake_encoder;
-  send_config.internal_source = false;
-  test::FakeEncoder::SetCodecSettings(&send_config.codec, 1);
-  send_config.codec.plType = kSendPayloadType;
+  VideoSendStream::Config send_config = GetSendTestConfig(sender_call.get());
 
   VideoReceiveStream::Config receive_config =
       receiver_call->GetDefaultReceiveConfig();
@@ -300,4 +328,28 @@ TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSync) {
   receiver_call->DestroyVideoReceiveStream(receive_stream);
   VoiceEngine::Delete(voice_engine);
 }
+
+TEST_F(CallPerfTest, RegisterCpuOveruseObserver) {
+  // Verifies that either a normal or overuse callback is triggered.
+  class OveruseCallbackObserver : public test::RtpRtcpObserver,
+                                  public webrtc::OveruseCallback {
+   public:
+    OveruseCallbackObserver() : RtpRtcpObserver(kLongTimeoutMs) {}
+
+    virtual void OnOveruse() OVERRIDE {
+      observation_complete_->Set();
+    }
+    virtual void OnNormalUse() OVERRIDE {
+      observation_complete_->Set();
+    }
+  };
+
+  OveruseCallbackObserver observer;
+  Call::Config call_config(observer.SendTransport());
+  call_config.overuse_callback = &observer;
+  scoped_ptr<Call> call(Call::Create(call_config));
+
+  VideoSendStream::Config send_config = GetSendTestConfig(call.get());
+  RunVideoSendTest(call.get(), send_config, &observer);
+}
 }  // namespace webrtc