1*4e366538SXin Li# Deprecated Builds 2*4e366538SXin Li 3*4e366538SXin LiOlder documentation on build configs which are no longer supported. 4*4e366538SXin Li 5*4e366538SXin Li## Pre-requisites 6*4e366538SXin Li 7*4e366538SXin LiYou'll need to have depot tools installed: https://www.chromium.org/developers/how-tos/install-depot-tools 8*4e366538SXin LiRefer to chromium instructions for each platform for other prerequisites. 9*4e366538SXin Li 10*4e366538SXin Li## Getting the Code 11*4e366538SXin Li 12*4e366538SXin LiCreate a working directory, enter it, and run: 13*4e366538SXin Li 14*4e366538SXin Li gclient config https://chromium.googlesource.com/libyuv/libyuv 15*4e366538SXin Li gclient sync 16*4e366538SXin Li 17*4e366538SXin Li 18*4e366538SXin LiThen you'll get a .gclient file like: 19*4e366538SXin Li 20*4e366538SXin Li solutions = [ 21*4e366538SXin Li { "name" : "libyuv", 22*4e366538SXin Li "url" : "https://chromium.googlesource.com/libyuv/libyuv", 23*4e366538SXin Li "deps_file" : "DEPS", 24*4e366538SXin Li "managed" : True, 25*4e366538SXin Li "custom_deps" : { 26*4e366538SXin Li }, 27*4e366538SXin Li "safesync_url": "", 28*4e366538SXin Li }, 29*4e366538SXin Li ]; 30*4e366538SXin Li 31*4e366538SXin Li 32*4e366538SXin LiFor iOS add `;target_os=['ios'];` to your OSX .gclient and run `GYP_DEFINES="OS=ios" gclient sync.` 33*4e366538SXin Li 34*4e366538SXin LiBrowse the Git reprository: https://chromium.googlesource.com/libyuv/libyuv/+/master 35*4e366538SXin Li 36*4e366538SXin Li### Android 37*4e366538SXin LiFor Android add `;target_os=['android'];` to your Linux .gclient 38*4e366538SXin Li 39*4e366538SXin Li 40*4e366538SXin Li solutions = [ 41*4e366538SXin Li { "name" : "libyuv", 42*4e366538SXin Li "url" : "https://chromium.googlesource.com/libyuv/libyuv", 43*4e366538SXin Li "deps_file" : "DEPS", 44*4e366538SXin Li "managed" : True, 45*4e366538SXin Li "custom_deps" : { 46*4e366538SXin Li }, 47*4e366538SXin Li "safesync_url": "", 48*4e366538SXin Li }, 49*4e366538SXin Li ]; 50*4e366538SXin Li target_os = ["android", "unix"]; 51*4e366538SXin Li 52*4e366538SXin LiThen run: 53*4e366538SXin Li 54*4e366538SXin Li export GYP_DEFINES="OS=android" 55*4e366538SXin Li gclient sync 56*4e366538SXin Li 57*4e366538SXin LiCaveat: Theres an error with Google Play services updates. If you get the error "Your version of the Google Play services library is not up to date", run the following: 58*4e366538SXin Li 59*4e366538SXin Li cd chromium/src 60*4e366538SXin Li ./build/android/play_services/update.py download 61*4e366538SXin Li cd ../.. 62*4e366538SXin Li 63*4e366538SXin LiFor Windows the gclient sync must be done from an Administrator command prompt. 64*4e366538SXin Li 65*4e366538SXin LiThe sync will generate native build files for your environment using gyp (Windows: Visual Studio, OSX: XCode, Linux: make). This generation can also be forced manually: `gclient runhooks` 66*4e366538SXin Li 67*4e366538SXin LiTo get just the source (not buildable): 68*4e366538SXin Li 69*4e366538SXin Li git clone https://chromium.googlesource.com/libyuv/libyuv 70*4e366538SXin Li 71*4e366538SXin Li 72*4e366538SXin Li## Building the Library and Unittests 73*4e366538SXin Li 74*4e366538SXin Li### Windows 75*4e366538SXin Li 76*4e366538SXin Li set GYP_DEFINES=target_arch=ia32 77*4e366538SXin Li call python gyp_libyuv -fninja -G msvs_version=2013 78*4e366538SXin Li ninja -j7 -C out\Release 79*4e366538SXin Li ninja -j7 -C out\Debug 80*4e366538SXin Li 81*4e366538SXin Li set GYP_DEFINES=target_arch=x64 82*4e366538SXin Li call python gyp_libyuv -fninja -G msvs_version=2013 83*4e366538SXin Li ninja -C out\Debug_x64 84*4e366538SXin Li ninja -C out\Release_x64 85*4e366538SXin Li 86*4e366538SXin Li#### Building with clangcl 87*4e366538SXin Li set GYP_DEFINES=clang=1 target_arch=ia32 88*4e366538SXin Li call python tools\clang\scripts\update.py 89*4e366538SXin Li call python gyp_libyuv -fninja libyuv_test.gyp 90*4e366538SXin Li ninja -C out\Debug 91*4e366538SXin Li ninja -C out\Release 92*4e366538SXin Li 93*4e366538SXin Li### OSX 94*4e366538SXin Li 95*4e366538SXin LiClang 64 bit shown. Remove `clang=1` for GCC and change x64 to ia32 for 32 bit. 96*4e366538SXin Li 97*4e366538SXin Li GYP_DEFINES="clang=1 target_arch=x64" ./gyp_libyuv 98*4e366538SXin Li ninja -j7 -C out/Debug 99*4e366538SXin Li ninja -j7 -C out/Release 100*4e366538SXin Li 101*4e366538SXin Li GYP_DEFINES="clang=1 target_arch=ia32" ./gyp_libyuv 102*4e366538SXin Li ninja -j7 -C out/Debug 103*4e366538SXin Li ninja -j7 -C out/Release 104*4e366538SXin Li 105*4e366538SXin Li### iOS 106*4e366538SXin Lihttp://www.chromium.org/developers/how-tos/build-instructions-ios 107*4e366538SXin Li 108*4e366538SXin LiAdd to .gclient last line: `target_os=['ios'];` 109*4e366538SXin Li 110*4e366538SXin Liarmv7 111*4e366538SXin Li 112*4e366538SXin Li GYP_DEFINES="OS=ios target_arch=armv7 target_subarch=arm32" GYP_CROSSCOMPILE=1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv 113*4e366538SXin Li ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest 114*4e366538SXin Li ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest 115*4e366538SXin Li 116*4e366538SXin Liarm64 117*4e366538SXin Li 118*4e366538SXin Li GYP_DEFINES="OS=ios target_arch=arm64 target_subarch=arm64" GYP_CROSSCOMPILE=1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv 119*4e366538SXin Li ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest 120*4e366538SXin Li ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest 121*4e366538SXin Li 122*4e366538SXin Liboth armv7 and arm64 (fat) 123*4e366538SXin Li 124*4e366538SXin Li GYP_DEFINES="OS=ios target_arch=armv7 target_subarch=both" GYP_CROSSCOMPILE=1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv 125*4e366538SXin Li ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest 126*4e366538SXin Li ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest 127*4e366538SXin Li 128*4e366538SXin Lisimulator 129*4e366538SXin Li 130*4e366538SXin Li GYP_DEFINES="OS=ios target_arch=ia32 target_subarch=arm32" GYP_CROSSCOMPILE=1 GYP_GENERATOR_FLAGS="output_dir=out_sim" ./gyp_libyuv 131*4e366538SXin Li ninja -j7 -C out_sim/Debug-iphonesimulator libyuv_unittest 132*4e366538SXin Li ninja -j7 -C out_sim/Release-iphonesimulator libyuv_unittest 133*4e366538SXin Li 134*4e366538SXin Li### Android 135*4e366538SXin Lihttps://code.google.com/p/chromium/wiki/AndroidBuildInstructions 136*4e366538SXin Li 137*4e366538SXin LiAdd to .gclient last line: `target_os=['android'];` 138*4e366538SXin Li 139*4e366538SXin Liarmv7 140*4e366538SXin Li 141*4e366538SXin Li GYP_DEFINES="OS=android" GYP_CROSSCOMPILE=1 ./gyp_libyuv 142*4e366538SXin Li ninja -j7 -C out/Debug yuv_unittest_apk 143*4e366538SXin Li ninja -j7 -C out/Release yuv_unittest_apk 144*4e366538SXin Li 145*4e366538SXin Liarm64 146*4e366538SXin Li 147*4e366538SXin Li GYP_DEFINES="OS=android target_arch=arm64 target_subarch=arm64" GYP_CROSSCOMPILE=1 ./gyp_libyuv 148*4e366538SXin Li ninja -j7 -C out/Debug yuv_unittest_apk 149*4e366538SXin Li ninja -j7 -C out/Release yuv_unittest_apk 150*4e366538SXin Li 151*4e366538SXin Liia32 152*4e366538SXin Li 153*4e366538SXin Li GYP_DEFINES="OS=android target_arch=ia32" GYP_CROSSCOMPILE=1 ./gyp_libyuv 154*4e366538SXin Li ninja -j7 -C out/Debug yuv_unittest_apk 155*4e366538SXin Li ninja -j7 -C out/Release yuv_unittest_apk 156*4e366538SXin Li 157*4e366538SXin Li GYP_DEFINES="OS=android target_arch=ia32 android_full_debug=1" GYP_CROSSCOMPILE=1 ./gyp_libyuv 158*4e366538SXin Li ninja -j7 -C out/Debug yuv_unittest_apk 159*4e366538SXin Li 160*4e366538SXin Limipsel 161*4e366538SXin Li 162*4e366538SXin Li GYP_DEFINES="OS=android target_arch=mipsel" GYP_CROSSCOMPILE=1 ./gyp_libyuv 163*4e366538SXin Li ninja -j7 -C out/Debug yuv_unittest_apk 164*4e366538SXin Li ninja -j7 -C out/Release yuv_unittest_apk 165*4e366538SXin Li 166*4e366538SXin Liarm32 disassembly: 167*4e366538SXin Li 168*4e366538SXin Li llvm-objdump -d out/Release/obj/source/libyuv.row_neon.o 169*4e366538SXin Li 170*4e366538SXin Liarm64 disassembly: 171*4e366538SXin Li 172*4e366538SXin Li llvm-objdump -d out/Release/obj/source/libyuv.row_neon64.o 173*4e366538SXin Li 174*4e366538SXin LiRunning tests: 175*4e366538SXin Li 176*4e366538SXin Li build/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --release --gtest_filter=* 177*4e366538SXin Li 178*4e366538SXin LiRunning test as benchmark: 179*4e366538SXin Li 180*4e366538SXin Li build/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --release --gtest_filter=* -a "--libyuv_width=1280 --libyuv_height=720 --libyuv_repeat=999 --libyuv_flags=-1" 181*4e366538SXin Li 182*4e366538SXin LiRunning test with C code: 183*4e366538SXin Li 184*4e366538SXin Li build/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --release --gtest_filter=* -a "--libyuv_width=1280 --libyuv_height=720 --libyuv_repeat=999 --libyuv_flags=1 --libyuv_cpu_info=1" 185*4e366538SXin Li 186*4e366538SXin Li#### Building with GN 187*4e366538SXin Li 188*4e366538SXin Li gn gen out/Release "--args=is_debug=false target_cpu=\"x86\"" 189*4e366538SXin Li gn gen out/Debug "--args=is_debug=true target_cpu=\"x86\"" 190*4e366538SXin Li ninja -C out/Release 191*4e366538SXin Li ninja -C out/Debug 192*4e366538SXin Li 193*4e366538SXin Li### Building Offical with GN 194*4e366538SXin Li 195*4e366538SXin Li gn gen out/Official "--args=is_debug=false is_official_build=true is_chrome_branded=true" 196*4e366538SXin Li ninja -C out/Official 197*4e366538SXin Li 198*4e366538SXin Li#### Building mips with GN 199*4e366538SXin Li 200*4e366538SXin Limipsel 201*4e366538SXin Li gn gen out/Default "--args=is_debug=false target_cpu=\"mipsel\" target_os = \"android\" mips_arch_variant = \"r6\" mips_use_msa = true is_component_build = true is_clang = false" 202*4e366538SXin Li ninja -C out/Default 203*4e366538SXin Li 204*4e366538SXin Limips64el 205*4e366538SXin Li gn gen out/Default "--args=is_debug=false target_cpu=\"mips64el\" target_os = \"android\" mips_arch_variant = \"r6\" mips_use_msa = true is_component_build = true is_clang = false" 206*4e366538SXin Li ninja -C out/Default 207*4e366538SXin Li 208*4e366538SXin Li### Linux 209*4e366538SXin Li 210*4e366538SXin Li GYP_DEFINES="target_arch=x64" ./gyp_libyuv 211*4e366538SXin Li ninja -j7 -C out/Debug 212*4e366538SXin Li ninja -j7 -C out/Release 213*4e366538SXin Li 214*4e366538SXin Li GYP_DEFINES="target_arch=ia32" ./gyp_libyuv 215*4e366538SXin Li ninja -j7 -C out/Debug 216*4e366538SXin Li ninja -j7 -C out/Release 217*4e366538SXin Li 218*4e366538SXin Li#### CentOS 219*4e366538SXin Li 220*4e366538SXin LiOn CentOS 32 bit the following work around allows a sync: 221*4e366538SXin Li 222*4e366538SXin Li export GYP_DEFINES="host_arch=ia32" 223*4e366538SXin Li gclient sync 224*4e366538SXin Li 225*4e366538SXin Li### Windows Shared Library 226*4e366538SXin Li 227*4e366538SXin LiModify libyuv.gyp from 'static_library' to 'shared_library', and add 'LIBYUV_BUILDING_SHARED_LIBRARY' to 'defines'. 228*4e366538SXin Li 229*4e366538SXin Li gclient runhooks 230*4e366538SXin Li 231*4e366538SXin LiAfter this command follow the building the library instructions above. 232*4e366538SXin Li 233*4e366538SXin LiIf you get a compile error for atlthunk.lib on Windows, read http://www.chromium.org/developers/how-tos/build-instructions-windows 234*4e366538SXin Li 235*4e366538SXin Li 236*4e366538SXin Li### Build targets 237*4e366538SXin Li 238*4e366538SXin Li ninja -C out/Debug libyuv 239*4e366538SXin Li ninja -C out/Debug libyuv_unittest 240*4e366538SXin Li ninja -C out/Debug compare 241*4e366538SXin Li ninja -C out/Debug yuvconvert 242*4e366538SXin Li ninja -C out/Debug yuvconstants 243*4e366538SXin Li ninja -C out/Debug psnr 244*4e366538SXin Li ninja -C out/Debug cpuid 245*4e366538SXin Li 246*4e366538SXin Li 247*4e366538SXin Li## Building the Library with make 248*4e366538SXin Li 249*4e366538SXin Li### Linux 250*4e366538SXin Li 251*4e366538SXin Li make -j7 V=1 -f linux.mk 252*4e366538SXin Li make -j7 V=1 -f linux.mk clean 253*4e366538SXin Li make -j7 V=1 -f linux.mk CXX=clang++ 254*4e366538SXin Li 255*4e366538SXin Li## Building the Library with cmake 256*4e366538SXin Li 257*4e366538SXin LiInstall cmake: http://www.cmake.org/ 258*4e366538SXin Li 259*4e366538SXin LiDefault debug build: 260*4e366538SXin Li 261*4e366538SXin Li mkdir out 262*4e366538SXin Li cd out 263*4e366538SXin Li cmake .. 264*4e366538SXin Li cmake --build . 265*4e366538SXin Li 266*4e366538SXin LiRelease build/install 267*4e366538SXin Li 268*4e366538SXin Li mkdir out 269*4e366538SXin Li cd out 270*4e366538SXin Li cmake -DCMAKE_INSTALL_PREFIX="/usr/lib" -DCMAKE_BUILD_TYPE="Release" .. 271*4e366538SXin Li cmake --build . --config Release 272*4e366538SXin Li sudo cmake --build . --target install --config Release 273*4e366538SXin Li 274*4e366538SXin Li### Windows 8 Phone 275*4e366538SXin Li 276*4e366538SXin LiPre-requisite: 277*4e366538SXin Li 278*4e366538SXin Li* Install Visual Studio 2012 and Arm to your environment.<br> 279*4e366538SXin Li 280*4e366538SXin LiThen: 281*4e366538SXin Li 282*4e366538SXin Li call "c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_arm\vcvarsx86_arm.bat" 283*4e366538SXin Li 284*4e366538SXin Lior with Visual Studio 2013: 285*4e366538SXin Li 286*4e366538SXin Li call "c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_arm\vcvarsx86_arm.bat" 287*4e366538SXin Li nmake /f winarm.mk clean 288*4e366538SXin Li nmake /f winarm.mk 289*4e366538SXin Li 290*4e366538SXin Li### Windows Shared Library 291*4e366538SXin Li 292*4e366538SXin LiModify libyuv.gyp from 'static_library' to 'shared_library', and add 'LIBYUV_BUILDING_SHARED_LIBRARY' to 'defines'. Then run this. 293*4e366538SXin Li 294*4e366538SXin Li gclient runhooks 295*4e366538SXin Li 296*4e366538SXin LiAfter this command follow the building the library instructions above. 297*4e366538SXin Li 298*4e366538SXin LiIf you get a compile error for atlthunk.lib on Windows, read http://www.chromium.org/developers/how-tos/build-instructions-windows 299*4e366538SXin Li 300*4e366538SXin Li### 64 bit Windows 301*4e366538SXin Li 302*4e366538SXin Li set GYP_DEFINES=target_arch=x64 303*4e366538SXin Li gclient runhooks V=1 304*4e366538SXin Li 305*4e366538SXin Li### ARM Linux 306*4e366538SXin Li 307*4e366538SXin Li export GYP_DEFINES="target_arch=arm" 308*4e366538SXin Li export CROSSTOOL=`<path>`/arm-none-linux-gnueabi 309*4e366538SXin Li export CXX=$CROSSTOOL-g++ 310*4e366538SXin Li export CC=$CROSSTOOL-gcc 311*4e366538SXin Li export AR=$CROSSTOOL-ar 312*4e366538SXin Li export AS=$CROSSTOOL-as 313*4e366538SXin Li export RANLIB=$CROSSTOOL-ranlib 314*4e366538SXin Li gclient runhooks 315*4e366538SXin Li 316*4e366538SXin Li## Running Unittests 317*4e366538SXin Li 318*4e366538SXin Li### Windows 319*4e366538SXin Li 320*4e366538SXin Li out\Release\libyuv_unittest.exe --gtest_catch_exceptions=0 --gtest_filter="*" 321*4e366538SXin Li 322*4e366538SXin Li### OSX 323*4e366538SXin Li 324*4e366538SXin Li out/Release/libyuv_unittest --gtest_filter="*" 325*4e366538SXin Li 326*4e366538SXin Li### Linux 327*4e366538SXin Li 328*4e366538SXin Li out/Release/libyuv_unittest --gtest_filter="*" 329*4e366538SXin Li 330*4e366538SXin LiReplace --gtest_filter="*" with specific unittest to run. May include wildcards. e.g. 331*4e366538SXin Li 332*4e366538SXin Li out/Release/libyuv_unittest --gtest_filter=libyuvTest.I420ToARGB_Opt 333*4e366538SXin Li 334*4e366538SXin Li## CPU Emulator tools 335*4e366538SXin Li 336*4e366538SXin Li### Intel SDE (Software Development Emulator) 337*4e366538SXin Li 338*4e366538SXin LiPre-requisite: Install IntelSDE for Windows: http://software.intel.com/en-us/articles/intel-software-development-emulator 339*4e366538SXin Li 340*4e366538SXin LiThen run: 341*4e366538SXin Li 342*4e366538SXin Li c:\intelsde\sde -hsw -- out\release\libyuv_unittest.exe --gtest_filter=* 343*4e366538SXin Li 344*4e366538SXin Li 345*4e366538SXin Li## Memory tools 346*4e366538SXin Li 347*4e366538SXin Li### Running Dr Memory memcheck for Windows 348*4e366538SXin Li 349*4e366538SXin LiPre-requisite: Install Dr Memory for Windows and add it to your path: http://www.drmemory.org/docs/page_install_windows.html 350*4e366538SXin Li 351*4e366538SXin Li set GYP_DEFINES=build_for_tool=drmemory target_arch=ia32 352*4e366538SXin Li call python gyp_libyuv -fninja -G msvs_version=2013 353*4e366538SXin Li ninja -C out\Debug 354*4e366538SXin Li drmemory out\Debug\libyuv_unittest.exe --gtest_catch_exceptions=0 --gtest_filter=* 355*4e366538SXin Li 356*4e366538SXin Li### Running UBSan 357*4e366538SXin Li 358*4e366538SXin LiSee Chromium instructions for sanitizers: https://www.chromium.org/developers/testing/undefinedbehaviorsanitizer 359*4e366538SXin Li 360*4e366538SXin LiSanitizers available: TSan, MSan, ASan, UBSan, LSan 361*4e366538SXin Li 362*4e366538SXin Li GYP_DEFINES='ubsan=1' gclient runhooks 363*4e366538SXin Li ninja -C out/Release 364*4e366538SXin Li 365*4e366538SXin Li### Running Valgrind memcheck 366*4e366538SXin Li 367*4e366538SXin LiMemory errors and race conditions can be found by running tests under special memory tools. [Valgrind] [1] is an instrumentation framework for building dynamic analysis tools. Various tests and profilers are built upon it to find memory handling errors and memory leaks, for instance. 368*4e366538SXin Li 369*4e366538SXin Li[1]: http://valgrind.org 370*4e366538SXin Li 371*4e366538SXin Li solutions = [ 372*4e366538SXin Li { "name" : "libyuv", 373*4e366538SXin Li "url" : "https://chromium.googlesource.com/libyuv/libyuv", 374*4e366538SXin Li "deps_file" : "DEPS", 375*4e366538SXin Li "managed" : True, 376*4e366538SXin Li "custom_deps" : { 377*4e366538SXin Li "libyuv/chromium/src/third_party/valgrind": "https://chromium.googlesource.com/chromium/deps/valgrind/binaries", 378*4e366538SXin Li }, 379*4e366538SXin Li "safesync_url": "", 380*4e366538SXin Li }, 381*4e366538SXin Li ] 382*4e366538SXin Li 383*4e366538SXin LiThen run: 384*4e366538SXin Li 385*4e366538SXin Li GYP_DEFINES="clang=0 target_arch=x64 build_for_tool=memcheck" python gyp_libyuv 386*4e366538SXin Li ninja -C out/Debug 387*4e366538SXin Li valgrind out/Debug/libyuv_unittest 388*4e366538SXin Li 389*4e366538SXin Li 390*4e366538SXin LiFor more information, see http://www.chromium.org/developers/how-tos/using-valgrind 391*4e366538SXin Li 392*4e366538SXin Li### Running Thread Sanitizer (TSan) 393*4e366538SXin Li 394*4e366538SXin Li GYP_DEFINES="clang=0 target_arch=x64 build_for_tool=tsan" python gyp_libyuv 395*4e366538SXin Li ninja -C out/Debug 396*4e366538SXin Li valgrind out/Debug/libyuv_unittest 397*4e366538SXin Li 398*4e366538SXin LiFor more info, see http://www.chromium.org/developers/how-tos/using-valgrind/threadsanitizer 399*4e366538SXin Li 400*4e366538SXin Li### Running Address Sanitizer (ASan) 401*4e366538SXin Li 402*4e366538SXin Li GYP_DEFINES="clang=0 target_arch=x64 build_for_tool=asan" python gyp_libyuv 403*4e366538SXin Li ninja -C out/Debug 404*4e366538SXin Li valgrind out/Debug/libyuv_unittest 405*4e366538SXin Li 406*4e366538SXin LiFor more info, see http://dev.chromium.org/developers/testing/addresssanitizer 407*4e366538SXin Li 408*4e366538SXin Li## Benchmarking 409*4e366538SXin Li 410*4e366538SXin LiThe unittests can be used to benchmark. 411*4e366538SXin Li 412*4e366538SXin Li### Windows 413*4e366538SXin Li 414*4e366538SXin Li set LIBYUV_WIDTH=1280 415*4e366538SXin Li set LIBYUV_HEIGHT=720 416*4e366538SXin Li set LIBYUV_REPEAT=999 417*4e366538SXin Li set LIBYUV_FLAGS=-1 418*4e366538SXin Li out\Release\libyuv_unittest.exe --gtest_filter=*I420ToARGB_Opt 419*4e366538SXin Li 420*4e366538SXin Li 421*4e366538SXin Li### Linux and Mac 422*4e366538SXin Li 423*4e366538SXin Li LIBYUV_WIDTH=1280 LIBYUV_HEIGHT=720 LIBYUV_REPEAT=1000 out/Release/libyuv_unittest --gtest_filter=*I420ToARGB_Opt 424*4e366538SXin Li 425*4e366538SXin Li libyuvTest.I420ToARGB_Opt (547 ms) 426*4e366538SXin Li 427*4e366538SXin LiIndicates 0.547 ms/frame for 1280 x 720. 428*4e366538SXin Li 429*4e366538SXin Li## Making a change 430*4e366538SXin Li 431*4e366538SXin Li gclient sync 432*4e366538SXin Li git checkout -b mycl -t origin/master 433*4e366538SXin Li git pull 434*4e366538SXin Li <edit files> 435*4e366538SXin Li git add -u 436*4e366538SXin Li git commit -m "my change" 437*4e366538SXin Li git cl lint 438*4e366538SXin Li git cl try 439*4e366538SXin Li git cl upload -r [email protected] -s 440*4e366538SXin Li <once approved..> 441*4e366538SXin Li git cl land 442