• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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