| Index: webrtc/voice_engine/test/auto_test/voe_stress_test.cc
|
| diff --git a/webrtc/voice_engine/test/auto_test/voe_stress_test.cc b/webrtc/voice_engine/test/auto_test/voe_stress_test.cc
|
| deleted file mode 100644
|
| index 117806c3c6c483276c4d12a9830e6f926de9694a..0000000000000000000000000000000000000000
|
| --- a/webrtc/voice_engine/test/auto_test/voe_stress_test.cc
|
| +++ /dev/null
|
| @@ -1,403 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license
|
| - * that can be found in the LICENSE file in the root of the source
|
| - * tree. An additional intellectual property rights grant can be found
|
| - * in the file PATENTS. All contributing project authors may
|
| - * be found in the AUTHORS file in the root of the source tree.
|
| - */
|
| -
|
| -// Some ideas of improvements:
|
| -// Break out common init and maybe terminate to separate function(s).
|
| -// How much trace should we have enabled?
|
| -// API error counter, to print info and return -1 if any error.
|
| -
|
| -#include <assert.h>
|
| -#include <stdio.h>
|
| -#include <stdlib.h>
|
| -#include <string.h>
|
| -#include <time.h>
|
| -#if defined(_WIN32)
|
| -#include <conio.h>
|
| -#endif
|
| -
|
| -#include "webrtc/voice_engine/test/auto_test/voe_stress_test.h"
|
| -
|
| -#include "webrtc/system_wrappers/include/sleep.h"
|
| -#include "webrtc/voice_engine/test/channel_transport/channel_transport.h"
|
| -#include "webrtc/voice_engine/test/auto_test/voe_standard_test.h"
|
| -#include "webrtc/voice_engine/test/auto_test/voe_test_defines.h"
|
| -#include "webrtc/voice_engine/voice_engine_defines.h" // defines build macros
|
| -
|
| -using namespace webrtc;
|
| -using namespace test;
|
| -
|
| -namespace voetest {
|
| -
|
| -#define VALIDATE_STRESS(expr) \
|
| - if (expr) \
|
| - { \
|
| - printf("Error at line: %i, %s \n", __LINE__, #expr); \
|
| - printf("Error code: %i \n", base->LastError()); \
|
| - }
|
| -
|
| -#ifdef _WIN32
|
| -// Pause if supported
|
| -#define PAUSE_OR_SLEEP(x) PAUSE;
|
| -#else
|
| -// Sleep a bit instead if pause not supported
|
| -#define PAUSE_OR_SLEEP(x) SleepMs(x);
|
| -#endif
|
| -
|
| -int VoEStressTest::DoTest() {
|
| - int test(-1);
|
| - while (test != 0) {
|
| - test = MenuSelection();
|
| - switch (test) {
|
| - case 0:
|
| - // Quit stress test
|
| - break;
|
| - case 1:
|
| - // All tests
|
| - StartStopTest();
|
| - CreateDeleteChannelsTest();
|
| - MultipleThreadsTest();
|
| - break;
|
| - case 2:
|
| - StartStopTest();
|
| - break;
|
| - case 3:
|
| - CreateDeleteChannelsTest();
|
| - break;
|
| - case 4:
|
| - MultipleThreadsTest();
|
| - break;
|
| - default:
|
| - // Should not be possible
|
| - printf("Invalid selection! (Test code error)\n");
|
| - assert(false);
|
| - } // switch
|
| - } // while
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -int VoEStressTest::MenuSelection() {
|
| - printf("------------------------------------------------\n");
|
| - printf("Select stress test\n\n");
|
| - printf(" (0) Quit\n");
|
| - printf(" (1) All\n");
|
| - printf("- - - - - - - - - - - - - - - - - - - - - - - - \n");
|
| - printf(" (2) Start/stop\n");
|
| - printf(" (3) Create/delete channels\n");
|
| - printf(" (4) Multiple threads\n");
|
| -
|
| - const int maxMenuSelection = 4;
|
| - int selection(-1);
|
| -
|
| - while ((selection < 0) || (selection > maxMenuSelection)) {
|
| - printf("\n: ");
|
| - int retval = scanf("%d", &selection);
|
| - if ((retval != 1) || (selection < 0) || (selection > maxMenuSelection)) {
|
| - printf("Invalid selection!\n");
|
| - }
|
| - }
|
| -
|
| - return selection;
|
| -}
|
| -
|
| -int VoEStressTest::StartStopTest() {
|
| - printf("------------------------------------------------\n");
|
| - printf("Running start/stop test\n");
|
| - printf("------------------------------------------------\n");
|
| -
|
| - printf("\nNOTE: this thest will fail after a while if Core audio is used\n");
|
| - printf("because MS returns AUDCLNT_E_CPUUSAGE_EXCEEDED (VoE Error 10013).\n");
|
| -
|
| - // Get sub-API pointers
|
| - VoEBase* base = _mgr.BasePtr();
|
| - VoENetwork* voe_network = _mgr.NetworkPtr();
|
| -
|
| - // Set trace
|
| - // VALIDATE_STRESS(base->SetTraceFileName(
|
| - // GetFilename("VoEStressTest_StartStop_trace.txt")));
|
| - // VALIDATE_STRESS(base->SetDebugTraceFileName(
|
| - // GetFilename("VoEStressTest_StartStop_trace_debug.txt")));
|
| - // VALIDATE_STRESS(base->SetTraceFilter(kTraceStateInfo |
|
| - // kTraceWarning | kTraceError |
|
| - // kTraceCritical | kTraceApiCall |
|
| - // kTraceMemory | kTraceInfo));
|
| - VALIDATE_STRESS(base->Init());
|
| - VALIDATE_STRESS(base->CreateChannel());
|
| -
|
| - ///////////// Start test /////////////
|
| -
|
| - int numberOfLoops(2000);
|
| - int loopSleep(200);
|
| - int i(0);
|
| - int markInterval(20);
|
| -
|
| - printf("Running %d loops with %d ms sleep. Mark every %d loop. \n",
|
| - numberOfLoops, loopSleep, markInterval);
|
| - printf("Test will take approximately %d minutes. \n",
|
| - numberOfLoops * loopSleep / 1000 / 60 + 1);
|
| -
|
| - std::unique_ptr<VoiceChannelTransport> voice_channel_transport(
|
| - new VoiceChannelTransport(voe_network, 0));
|
| -
|
| - for (i = 0; i < numberOfLoops; ++i) {
|
| - voice_channel_transport->SetSendDestination("127.0.0.1", 4800);
|
| - voice_channel_transport->SetLocalReceiver(4800);
|
| - VALIDATE_STRESS(base->StartPlayout(0));
|
| - VALIDATE_STRESS(base->StartSend(0));
|
| - if (!(i % markInterval))
|
| - MARK();
|
| - SleepMs(loopSleep);
|
| - VALIDATE_STRESS(base->StopSend(0));
|
| - VALIDATE_STRESS(base->StopPlayout(0));
|
| - }
|
| - ANL();
|
| -
|
| - VALIDATE_STRESS(voice_channel_transport->SetSendDestination("127.0.0.1",
|
| - 4800));
|
| - VALIDATE_STRESS(voice_channel_transport->SetLocalReceiver(4800));
|
| - VALIDATE_STRESS(base->StartPlayout(0));
|
| - VALIDATE_STRESS(base->StartSend(0));
|
| - printf("Verify that audio is good. \n");
|
| - PAUSE_OR_SLEEP(20000);
|
| - VALIDATE_STRESS(base->StopSend(0));
|
| - VALIDATE_STRESS(base->StopPlayout(0));
|
| -
|
| - ///////////// End test /////////////
|
| -
|
| -
|
| - // Terminate
|
| - VALIDATE_STRESS(base->DeleteChannel(0));
|
| - VALIDATE_STRESS(base->Terminate());
|
| -
|
| - printf("Test finished \n");
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -int VoEStressTest::CreateDeleteChannelsTest() {
|
| - printf("------------------------------------------------\n");
|
| - printf("Running create/delete channels test\n");
|
| - printf("------------------------------------------------\n");
|
| -
|
| - // Get sub-API pointers
|
| - VoEBase* base = _mgr.BasePtr();
|
| -
|
| - // Set trace
|
| - // VALIDATE_STRESS(base->SetTraceFileName(
|
| - // GetFilename("VoEStressTest_CreateChannels_trace.txt")));
|
| - // VALIDATE_STRESS(base->SetDebugTraceFileName(
|
| - // GetFilename("VoEStressTest_CreateChannels_trace_debug.txt")));
|
| - // VALIDATE_STRESS(base->SetTraceFilter(kTraceStateInfo |
|
| - // kTraceWarning | kTraceError |
|
| - // kTraceCritical | kTraceApiCall |
|
| - // kTraceMemory | kTraceInfo));
|
| - VALIDATE_STRESS(base->Init());
|
| -
|
| - ///////////// Start test /////////////
|
| -
|
| - int numberOfLoops(10000);
|
| - int loopSleep(10);
|
| - int i(0);
|
| - int markInterval(200);
|
| -
|
| - printf("Running %d loops with %d ms sleep. Mark every %d loop. \n",
|
| - numberOfLoops, loopSleep, markInterval);
|
| - printf("Test will take approximately %d minutes. \n",
|
| - numberOfLoops * loopSleep / 1000 / 60 + 1);
|
| -
|
| - // Some possible extensions include:
|
| - // Different sleep times (fixed or random) or zero.
|
| - // Start call on all or some channels.
|
| - // Two parts: first have a slight overweight to creating channels,
|
| - // then to deleting. (To ensure we hit max channels and go to zero.)
|
| - // Make sure audio is OK after test has finished.
|
| -
|
| - // Set up, start with maxChannels/2 channels
|
| - const int maxChannels = 100;
|
| - VALIDATE_STRESS(maxChannels < 1); // Should always have at least one channel
|
| - bool* channelState = new bool[maxChannels];
|
| - memset(channelState, 0, maxChannels * sizeof(bool));
|
| - int channel(0);
|
| - int noOfActiveChannels(0);
|
| - for (i = 0; i < (maxChannels / 2); ++i) {
|
| - channel = base->CreateChannel();
|
| - VALIDATE_STRESS(channel < 0);
|
| - if (channel >= 0) {
|
| - channelState[channel] = true;
|
| - ++noOfActiveChannels;
|
| - }
|
| - }
|
| - srand((unsigned int) time(NULL));
|
| - bool action(false);
|
| - double rnd(0.0);
|
| - int res(0);
|
| -
|
| - // Create/delete channels with slight
|
| - for (i = 0; i < numberOfLoops; ++i) {
|
| - // Randomize action (create or delete channel)
|
| - action = rand() <= (RAND_MAX / 2);
|
| - if (action) {
|
| - if (noOfActiveChannels < maxChannels) {
|
| - // Create new channel
|
| - channel = base->CreateChannel();
|
| - VALIDATE_STRESS(channel < 0);
|
| - if (channel >= 0) {
|
| - channelState[channel] = true;
|
| - ++noOfActiveChannels;
|
| - }
|
| - }
|
| - } else {
|
| - if (noOfActiveChannels > 0) {
|
| - // Delete random channel that's created [0, maxChannels - 1]
|
| - do {
|
| - rnd = static_cast<double> (rand());
|
| - channel = static_cast<int> (rnd /
|
| - (static_cast<double> (RAND_MAX) + 1.0f) *
|
| - maxChannels);
|
| - } while (!channelState[channel]); // Must find a created channel
|
| -
|
| - res = base->DeleteChannel(channel);
|
| - VALIDATE_STRESS(0 != res);
|
| - if (0 == res) {
|
| - channelState[channel] = false;
|
| - --noOfActiveChannels;
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (!(i % markInterval))
|
| - MARK();
|
| - SleepMs(loopSleep);
|
| - }
|
| - ANL();
|
| -
|
| - delete[] channelState;
|
| -
|
| - ///////////// End test /////////////
|
| -
|
| -
|
| - // Terminate
|
| - VALIDATE_STRESS(base->Terminate()); // Deletes all channels
|
| -
|
| - printf("Test finished \n");
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -int VoEStressTest::MultipleThreadsTest() {
|
| - printf("------------------------------------------------\n");
|
| - printf("Running multiple threads test\n");
|
| - printf("------------------------------------------------\n");
|
| -
|
| - // Get sub-API pointers
|
| - VoEBase* base = _mgr.BasePtr();
|
| -
|
| - // Set trace
|
| - // VALIDATE_STRESS(base->SetTraceFileName(
|
| - // GetFilename("VoEStressTest_MultipleThreads_trace.txt")));
|
| - // VALIDATE_STRESS(base->SetDebugTraceFileName(
|
| - // GetFilename("VoEStressTest_MultipleThreads_trace_debug.txt")));
|
| - // VALIDATE_STRESS(base->SetTraceFilter(kTraceStateInfo |
|
| - // kTraceWarning | kTraceError |
|
| - // kTraceCritical | kTraceApiCall |
|
| - // kTraceMemory | kTraceInfo));
|
| -
|
| - // Init
|
| - VALIDATE_STRESS(base->Init());
|
| - VALIDATE_STRESS(base->CreateChannel());
|
| -
|
| - ///////////// Start test /////////////
|
| -
|
| - int numberOfLoops(10000);
|
| - int loopSleep(0);
|
| - int i(0);
|
| - int markInterval(1000);
|
| -
|
| - printf("Running %d loops with %d ms sleep. Mark every %d loop. \n",
|
| - numberOfLoops, loopSleep, markInterval);
|
| - printf("Test will take approximately %d minutes. \n",
|
| - numberOfLoops * loopSleep / 1000 / 60 + 1);
|
| -
|
| - srand((unsigned int) time(NULL));
|
| - int rnd(0);
|
| -
|
| - // Start extra thread
|
| - _ptrExtraApiThread.reset(
|
| - new rtc::PlatformThread(RunExtraApi, this, "StressTestExtraApiThread"));
|
| - _ptrExtraApiThread->Start();
|
| -
|
| - // Some possible extensions include:
|
| - // Add more API calls to randomize
|
| - // More threads
|
| - // Different sleep times (fixed or random).
|
| - // Make sure audio is OK after test has finished.
|
| -
|
| - // Call random API functions here and in extra thread, ignore any error
|
| - for (i = 0; i < numberOfLoops; ++i) {
|
| - // This part should be equal to the marked part in the extra thread
|
| - // --- BEGIN ---
|
| - rnd = rand();
|
| - if (rnd < (RAND_MAX / 2)) {
|
| - // Start playout
|
| - base->StartPlayout(0);
|
| - } else {
|
| - // Stop playout
|
| - base->StopPlayout(0);
|
| - }
|
| - // --- END ---
|
| -
|
| - if (!(i % markInterval))
|
| - MARK();
|
| - SleepMs(loopSleep);
|
| - }
|
| - ANL();
|
| -
|
| - // Stop extra thread
|
| - _ptrExtraApiThread->Stop();
|
| -
|
| - ///////////// End test /////////////
|
| -
|
| - // Terminate
|
| - VALIDATE_STRESS(base->Terminate()); // Deletes all channels
|
| -
|
| - printf("Test finished \n");
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -// Thread functions
|
| -
|
| -bool VoEStressTest::RunExtraApi(void* ptr) {
|
| - return static_cast<VoEStressTest*> (ptr)->ProcessExtraApi();
|
| -}
|
| -
|
| -bool VoEStressTest::ProcessExtraApi() {
|
| - // Prepare
|
| - VoEBase* base = _mgr.BasePtr();
|
| - int rnd(0);
|
| -
|
| - // Call random API function, ignore any error
|
| -
|
| - // This part should be equal to the marked part in the main thread
|
| - // --- BEGIN ---
|
| - rnd = rand();
|
| - if (rnd < (RAND_MAX / 2)) {
|
| - // Start playout
|
| - base->StartPlayout(0);
|
| - } else {
|
| - // Stop playout
|
| - base->StopPlayout(0);
|
| - }
|
| - // --- END ---
|
| -
|
| - return true;
|
| -}
|
| -
|
| -} // namespace voetest
|
|
|