1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/test/auto_test/voe_cpu_test.h"
12aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h>
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string.h>
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <time.h>
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32)
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <conio.h>
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
20aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h"
21aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org#include "webrtc/test/channel_transport/include/channel_transport.h"
228510750bf2847dcdca26d914974c6d51d1e311a7pbos@webrtc.org#include "webrtc/voice_engine/test/auto_test/voe_test_defines.h"
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgusing namespace webrtc;
25aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.orgusing namespace test;
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace voetest {
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define CHECK(expr)                                             \
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (expr)                                                   \
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {                                                           \
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        printf("Error at line: %i, %s \n", __LINE__, #expr);    \
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        printf("Error code: %i \n", base->LastError());  \
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        PAUSE												    \
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return -1;                                              \
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoECpuTest::VoECpuTest(VoETestManager& mgr)
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    : _mgr(mgr) {
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoECpuTest::DoTest() {
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  printf("------------------------------------------------\n");
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  printf(" CPU Reference Test\n");
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  printf("------------------------------------------------\n");
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  VoEBase* base = _mgr.BasePtr();
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  VoEFile* file = _mgr.FilePtr();
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  VoECodec* codec = _mgr.CodecPtr();
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  VoEAudioProcessing* apm = _mgr.APMPtr();
52aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org  VoENetwork* voe_network = _mgr.NetworkPtr();
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int channel(-1);
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CodecInst isac;
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  isac.pltype = 104;
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  strcpy(isac.plname, "ISAC");
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  isac.pacsize = 960;
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  isac.plfreq = 32000;
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  isac.channels = 1;
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  isac.rate = -1;
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(base->Init());
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  channel = base->CreateChannel();
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
67aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org  scoped_ptr<VoiceChannelTransport> voice_socket_transport(
68aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org      new VoiceChannelTransport(voe_network, channel));
69aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org
70aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org  CHECK(voice_socket_transport->SetSendDestination("127.0.0.1", 5566));
71aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org  CHECK(voice_socket_transport->SetLocalReceiver(5566));
72aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(codec->SetRecPayloadType(channel, isac));
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(codec->SetSendCodec(channel, isac));
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(base->StartReceive(channel));
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(base->StartPlayout(channel));
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(base->StartSend(channel));
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(file->StartPlayingFileAsMicrophone(channel, _mgr.AudioFilename(),
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org          true, true));
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(codec->SetVADStatus(channel, true));
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(apm->SetAgcStatus(true, kAgcAdaptiveAnalog));
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(apm->SetNsStatus(true, kNsModerateSuppression));
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(apm->SetEcStatus(true, kEcAec));
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  TEST_LOG("\nMeasure CPU and memory while running a full-duplex"
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    " iSAC-swb call.\n\n");
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  PAUSE
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(base->StopSend(channel));
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(base->StopPlayout(channel));
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(base->StopReceive(channel));
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  base->DeleteChannel(channel);
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  CHECK(base->Terminate());
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  return 0;
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1013b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org}  // namespace voetest
102