1 /* 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 // 12 // vie_autotest_defines.h 13 // 14 15 16 #ifndef WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_VIE_AUTOTEST_DEFINES_H_ 17 #define WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_VIE_AUTOTEST_DEFINES_H_ 18 19 #include <assert.h> 20 #include <stdarg.h> 21 #include <stdio.h> 22 23 #include <string> 24 25 #include "testing/gtest/include/gtest/gtest.h" 26 #include "webrtc/engine_configurations.h" 27 #include "webrtc/system_wrappers/interface/sleep.h" 28 29 #if defined(_WIN32) 30 #include <windows.h> 31 #elif defined (WEBRTC_ANDROID) 32 #include <android/log.h> 33 #elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC) 34 #include <stdlib.h> 35 #include <string.h> 36 #include <sys/time.h> 37 #include <time.h> 38 #endif 39 40 // Choose how to log 41 //#define VIE_LOG_TO_FILE 42 #define VIE_LOG_TO_STDOUT 43 44 // Choose one way to test error 45 #define VIE_ASSERT_ERROR 46 47 #define VIE_LOG_FILE_NAME "ViEAutotestLog.txt" 48 49 #undef RGB 50 #define RGB(r,g,b) r|g<<8|b<<16 51 52 enum { kAutoTestSleepTimeMs = 5000 }; 53 enum { kAutoTestFullStackSleepTimeMs = 20000 }; 54 55 struct AutoTestSize { 56 unsigned int width; 57 unsigned int height; AutoTestSizeAutoTestSize58 AutoTestSize() : 59 width(0), height(0) { 60 } AutoTestSizeAutoTestSize61 AutoTestSize(unsigned int iWidth, unsigned int iHeight) : 62 width(iWidth), height(iHeight) { 63 } 64 }; 65 66 struct AutoTestOrigin { 67 unsigned int x; 68 unsigned int y; AutoTestOriginAutoTestOrigin69 AutoTestOrigin() : 70 x(0), y(0) { 71 } AutoTestOriginAutoTestOrigin72 AutoTestOrigin(unsigned int iX, unsigned int iY) : 73 x(iX), y(iY) { 74 } 75 }; 76 77 struct AutoTestRect { 78 AutoTestSize size; 79 AutoTestOrigin origin; AutoTestRectAutoTestRect80 AutoTestRect() : 81 size(), origin() { 82 } 83 AutoTestRectAutoTestRect84 AutoTestRect(unsigned int iX, unsigned int iY, unsigned int iWidth, unsigned int iHeight) : 85 size(iX, iY), origin(iWidth, iHeight) { 86 } 87 CopyAutoTestRect88 void Copy(AutoTestRect iRect) { 89 origin.x = iRect.origin.x; 90 origin.y = iRect.origin.y; 91 size.width = iRect.size.width; 92 size.height = iRect.size.height; 93 } 94 }; 95 96 // ============================================ 97 98 class ViETest { 99 public: Init()100 static int Init() { 101 #ifdef VIE_LOG_TO_FILE 102 log_file_ = fopen(VIE_LOG_FILE_NAME, "w+t"); 103 #else 104 log_file_ = NULL; 105 #endif 106 log_str_ = new char[kMaxLogSize]; 107 memset(log_str_, 0, kMaxLogSize); 108 return 0; 109 } 110 Terminate()111 static int Terminate() { 112 if (log_file_) { 113 fclose(log_file_); 114 log_file_ = NULL; 115 } 116 if (log_str_) { 117 delete[] log_str_; 118 log_str_ = NULL; 119 } 120 return 0; 121 } 122 Log(const char * fmt,...)123 static void Log(const char* fmt, ...) { 124 va_list va; 125 va_start(va, fmt); 126 memset(log_str_, 0, kMaxLogSize); 127 vsprintf(log_str_, fmt, va); 128 va_end(va); 129 130 WriteToSuitableOutput(log_str_); 131 } 132 133 // Writes to a suitable output, depending on platform and log mode. WriteToSuitableOutput(const char * message)134 static void WriteToSuitableOutput(const char* message) { 135 #ifdef VIE_LOG_TO_FILE 136 if (log_file_) 137 { 138 fwrite(log_str_, 1, strlen(log_str_), log_file_); 139 fwrite("\n", 1, 1, log_file_); 140 fflush(log_file_); 141 } 142 #endif 143 #ifdef VIE_LOG_TO_STDOUT 144 #if WEBRTC_ANDROID 145 __android_log_write(ANDROID_LOG_DEBUG, "*WebRTCN*", log_str_); 146 #else 147 printf("%s\n", log_str_); 148 #endif 149 #endif 150 } 151 152 // Deprecated(phoglund): Prefer to use googletest macros in all cases 153 // except the custom call case. TestError(bool expr,const char * fmt,...)154 static int TestError(bool expr, const char* fmt, ...) { 155 if (!expr) { 156 va_list va; 157 va_start(va, fmt); 158 memset(log_str_, 0, kMaxLogSize); 159 vsprintf(log_str_, fmt, va); 160 #ifdef WEBRTC_ANDROID 161 __android_log_write(ANDROID_LOG_ERROR, "*WebRTCN*", log_str_); 162 #endif 163 WriteToSuitableOutput(log_str_); 164 va_end(va); 165 166 AssertError(log_str_); 167 return 1; 168 } 169 return 0; 170 } 171 172 // Returns a suitable path to write trace and result files to. 173 // You should always use this when you want to write output files. 174 // The returned path is guaranteed to end with a path separator. 175 // This function may be run at any time during the program's execution. 176 // Implemented in vie_autotest.cc 177 static std::string GetResultOutputPath(); 178 179 private: AssertError(const char * message)180 static void AssertError(const char* message) { 181 #ifdef VIE_ASSERT_ERROR 182 assert(false); 183 #endif 184 } 185 186 static FILE* log_file_; 187 enum { 188 kMaxLogSize = 512 189 }; 190 static char* log_str_; 191 }; 192 193 #define AutoTestSleep webrtc::SleepMs 194 195 #endif // WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_VIE_AUTOTEST_DEFINES_H_ 196