Bug 964133 - Build webrtc.org unit tests; r=jesup,r=ted.mielczarik draft
authorDan Minor <dminor@mozilla.com>
Mon, 27 Mar 2017 15:51:16 -0400
changeset 552974 c9a757868d59cc0725f71b0708cfcb7b26c4a399
parent 552973 3df843511ecb40af2b6d83030453758e838e94be
child 552975 d1d5073a0801096af9fbc9ff6dcd5106ed6b3515
push id51529
push userdminor@mozilla.com
push dateWed, 29 Mar 2017 10:22:42 +0000
reviewersjesup, ted.mielczarik
bugs964133
milestone55.0a1
Bug 964133 - Build webrtc.org unit tests; r=jesup,r=ted.mielczarik This adds a moz.build file for the tests. The alternative would be to hack up the gyp files. Since gyp support has already been removed from upstream, this does not really buy us anything as far as maintainabily goes. Once gn support is available in our build system, we can remove this moz.build file and use the gn files instead. The include paths for the gtest and gmock headers in the webrtc.org tests are not compatible with where we export the headers. We could patch each unittest, but the include location has already changed upstream making this painful to maintain. Instead, we duplicate the relevant headers to the expected path. MozReview-Commit-ID: 1ADUAMxTCFq
media/webrtc/moz.build
media/webrtc/trunk/gtest/moz.build
media/webrtc/trunk/webrtc/base/sigslot.h
media/webrtc/trunk/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
media/webrtc/trunk/webrtc/modules/video_coding/media_optimization_unittest.cc
testing/gtest/moz.build
--- a/media/webrtc/moz.build
+++ b/media/webrtc/moz.build
@@ -56,16 +56,21 @@ GYP_DIRS += ['trunk']
 
 GYP_DIRS['trunk'].input = 'trunk/peerconnection.gyp'
 GYP_DIRS['trunk'].variables = gyp_vars
 # We allow warnings for third-party code that can be updated from upstream.
 GYP_DIRS['trunk'].sandbox_vars['ALLOW_COMPILER_WARNINGS'] = True
 GYP_DIRS['trunk'].sandbox_vars['FINAL_LIBRARY'] = 'webrtc'
 GYP_DIRS['trunk'].non_unified_sources += webrtc_non_unified_sources
 
+if CONFIG['ENABLE_TESTS']:
+    TEST_DIRS += [
+        'trunk/gtest',
+    ]
+
 if CONFIG['MOZ_WEBRTC_SIGNALING']:
     GYP_DIRS += ['signaling']
     GYP_DIRS['signaling'].input = 'signaling/signaling.gyp'
     GYP_DIRS['signaling'].variables = gyp_vars.copy()
     GYP_DIRS['signaling'].variables.update(
         build_for_test=0,
         build_for_standalone=0
     )
new file mode 100644
--- /dev/null
+++ b/media/webrtc/trunk/gtest/moz.build
@@ -0,0 +1,427 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# Once we have gn support available in the build system
+# (see Bug 1336429) we can use the gn build files directly
+# rather than building things here.
+
+ALLOW_COMPILER_WARNINGS = True
+
+DEFINES['GTEST_RELATIVE_PATH'] = True
+
+# Hit build errors on windows with xutility otherwise
+DISABLE_STL_WRAPPING = True
+
+LOCAL_INCLUDES += [
+    '../',
+    '/',
+    '/media/libopus/celt/',
+    '/media/libopus/include',
+    '/media/libopus/src',
+]
+
+USE_LIBS += [
+    '/media/webrtc/trunk/third_party/gflags/gflags_gflags/gflags',
+    '/testing/gtest/gtest',
+    'media_libjpeg',
+    'media_libopus',
+    'media_libvpx',
+    'mozglue',
+    'speex',
+    'webrtc',
+    'webrtc_common',
+    'webrtc_i420',
+    'webrtc_lib',
+    'webrtc_utility',
+    'webrtc_vp8',
+    'webrtc_vp9',
+    'yuv',
+]
+
+if CONFIG['OS_TARGET'] in ['Darwin', 'Linux', 'WINNT']:
+    if CONFIG['OS_TARGET'] == 'Linux':
+        DEFINES['WEBRTC_LINUX'] = True
+        DEFINES['WEBRTC_POSIX'] = True
+
+        LOCAL_INCLUDES += [
+            '../third_party/gflags/gen/posix/include',
+            '../third_party/gflags/gen/posix/include/private',
+        ]
+
+        OS_LIBS += [
+            'rt',
+            'X11',
+            'Xcomposite',
+            'Xdamage',
+            'Xext',
+            'Xfixes',
+            'Xrandr',
+            'Xrender',
+        ]
+    elif CONFIG['OS_TARGET'] == 'Darwin':
+        DEFINES['WEBRTC_MAC'] = True
+        DEFINES['WEBRTC_POSIX'] = True
+        DEFINES['MOZ_JEMALLOC_IMPL'] = True
+
+        LOCAL_INCLUDES += [
+            '../third_party/gflags/gen/posix/include',
+            '../third_party/gflags/gen/posix/include/private',
+        ]
+
+        OS_LIBS += [
+            '-framework AudioToolbox',
+            '-framework AudioUnit',
+            '-framework Carbon',
+            '-framework CoreAudio',
+            '-framework OpenGL',
+            '-framework AVFoundation',
+            '-framework CoreMedia',
+            '-framework QuartzCore',
+            '-framework Security',
+            '-framework SystemConfiguration',
+            '-framework IOKit',
+            '-F%s' % CONFIG['MACOS_PRIVATE_FRAMEWORKS_DIR'],
+            '-framework CoreUI',
+        ]
+
+        SOURCES += [
+            '../webrtc/modules/desktop_capture/screen_capturer_mac_unittest.cc',
+             'OSXRunLoopSingleton.cpp',
+        ]
+    elif CONFIG['OS_TARGET'] == 'WINNT':
+        DEFINES['WEBRTC_WIN'] = True
+
+        DEFINES['UNICODE'] = True
+        DEFINES['_UNICODE'] = True
+
+        LOCAL_INCLUDES += [
+            '../third_party/gflags/gen/win/include',
+            '../third_party/gflags/gen/win/include/private',
+        ]
+
+        OS_LIBS += [
+            "amstrmid",
+            "dmoguids",
+            'msdmo',
+            'strmiids',
+            "wmcodecdspuuid",
+        ]
+
+        SOURCES += [
+            '../webrtc/modules/desktop_capture/win/cursor_unittest.cc',
+        ]
+
+    UNIFIED_SOURCES += [
+        '../webrtc/audio/audio_receive_stream_unittest.cc',
+        '../webrtc/call/call_unittest.cc',
+        '../webrtc/common_audio/audio_converter_unittest.cc',
+        '../webrtc/common_audio/audio_ring_buffer_unittest.cc',
+        '../webrtc/common_audio/audio_util_unittest.cc',
+        '../webrtc/common_audio/blocker_unittest.cc',
+        '../webrtc/common_audio/fir_filter_unittest.cc',
+        '../webrtc/common_audio/lapped_transform_unittest.cc',
+        '../webrtc/common_audio/real_fourier_unittest.cc',
+        '../webrtc/common_audio/resampler/push_resampler_unittest.cc',
+        '../webrtc/common_audio/ring_buffer_unittest.cc',
+        '../webrtc/common_audio/swap_queue_unittest.cc',
+        '../webrtc/common_audio/wav_file_unittest.cc',
+        '../webrtc/common_audio/wav_header_unittest.cc',
+        '../webrtc/common_audio/window_generator_unittest.cc',
+        '../webrtc/common_video/i420_buffer_pool_unittest.cc',
+        '../webrtc/common_video/i420_video_frame_unittest.cc',
+    # Needs external resource to run
+    #    '../webrtc/common_video/libyuv/libyuv_unittest.cc',
+    # Needs external resource to run
+    #    '../webrtc/common_video/libyuv/scaler_unittest.cc',
+    # Won't compile as written
+    #    '../webrtc/modules/audio_coding/acm2/acm_neteq_unittest.cc',
+        '../webrtc/modules/audio_coding/acm2/call_statistics_unittest.cc',
+    # Stack overflow
+    #    '../webrtc/modules/audio_coding/acm2/codec_manager_unittest.cc',
+        '../webrtc/modules/audio_coding/acm2/initial_delay_manager_unittest.cc',
+    # Stack overflow
+    #    '../webrtc/modules/audio_coding/acm2/rent_a_codec_unittest.cc',
+        '../webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_coding/codecs/cng/cng_unittest.cc',
+        '../webrtc/modules/audio_coding/codecs/isac/fix/source/filterbanks_unittest.cc',
+        '../webrtc/modules/audio_coding/codecs/isac/fix/source/filters_unittest.cc',
+        '../webrtc/modules/audio_coding/codecs/isac/fix/source/lpc_masking_model_unittest.cc',
+        '../webrtc/modules/audio_coding/codecs/isac/fix/source/transform_unittest.cc',
+        '../webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_coding/codecs/opus/opus_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_coding/codecs/isac/main/source/isac_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_coding/neteq/audio_classifier_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/audio_multi_vector_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/audio_vector_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/background_noise_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/buffer_level_filter_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/comfort_noise_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/decision_logic_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/decoder_database_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/delay_manager_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/delay_peak_detector_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/dsp_helper_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/dtmf_buffer_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/dtmf_tone_generator_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/merge_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/nack_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_coding/neteq/neteq_stereo_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_coding/neteq/neteq_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/normal_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/packet_buffer_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/payload_splitter_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/post_decode_vad_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/random_vector_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/sync_buffer_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_coding/neteq/time_stretch_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/timestamp_scaler_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/tools/audio_loop.cc',
+        '../webrtc/modules/audio_coding/neteq/tools/input_audio_file.cc',
+        '../webrtc/modules/audio_coding/neteq/tools/input_audio_file_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/tools/packet.cc',
+        '../webrtc/modules/audio_coding/neteq/tools/packet_unittest.cc',
+        '../webrtc/modules/audio_coding/neteq/tools/rtp_file_source.cc',
+        '../webrtc/modules/audio_coding/neteq/tools/rtp_generator.cc',
+        '../webrtc/modules/audio_coding/test/target_delay_unittest.cc',
+        '../webrtc/modules/audio_conference_mixer/test/audio_conference_mixer_unittest.cc',
+        '../webrtc/modules/audio_device/fine_audio_buffer_unittest.cc',
+    # Seg faults
+    #    '../webrtc/modules/audio_processing/aec/system_delay_unittest.cc',
+        '../webrtc/modules/audio_processing/agc/agc_manager_direct_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_processing/agc/histogram_unittest.cc',
+        '../webrtc/modules/audio_processing/audio_processing_impl_unittest.cc',
+        '../webrtc/modules/audio_processing/beamformer/array_util_unittest.cc',
+        '../webrtc/modules/audio_processing/beamformer/complex_matrix_unittest.cc',
+        '../webrtc/modules/audio_processing/beamformer/covariance_matrix_generator_unittest.cc',
+        '../webrtc/modules/audio_processing/beamformer/matrix_unittest.cc',
+        '../webrtc/modules/audio_processing/echo_cancellation_impl_unittest.cc',
+        '../webrtc/modules/audio_processing/intelligibility/intelligibility_utils_unittest.cc',
+        '../webrtc/modules/audio_processing/splitting_filter_unittest.cc',
+        '../webrtc/modules/audio_processing/test/test_utils.cc',
+        '../webrtc/modules/audio_processing/transient/dyadic_decimator_unittest.cc',
+        '../webrtc/modules/audio_processing/transient/file_utils.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_processing/transient/file_utils_unittest.cc',
+        '../webrtc/modules/audio_processing/transient/moving_moments_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_processing/transient/transient_detector_unittest.cc',
+        '../webrtc/modules/audio_processing/transient/transient_suppressor_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_processing/transient/wpd_tree_unittest.cc',
+        '../webrtc/modules/audio_processing/utility/delay_estimator_unittest.cc',
+        '../webrtc/modules/audio_processing/vad/gmm_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_processing/vad/pitch_based_vad_unittest.cc',
+        '../webrtc/modules/audio_processing/vad/pitch_internal_unittest.cc',
+        '../webrtc/modules/audio_processing/vad/pole_zero_filter_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_processing/vad/standalone_vad_unittest.cc',
+        '../webrtc/modules/audio_processing/vad/vad_audio_proc_unittest.cc',
+        '../webrtc/modules/audio_processing/vad/vad_circular_buffer_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/audio_processing/vad/voice_activity_detector_unittest.cc',
+        '../webrtc/modules/bitrate_controller/bitrate_controller_unittest.cc',
+        '../webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc',
+        '../webrtc/modules/desktop_capture/desktop_region_unittest.cc',
+        '../webrtc/modules/desktop_capture/differ_block_unittest.cc',
+        '../webrtc/modules/desktop_capture/differ_unittest.cc',
+    # Stack overflow
+    #    '../webrtc/modules/desktop_capture/mouse_cursor_monitor_unittest.cc',
+    # Stack overflow
+    #    '../webrtc/modules/desktop_capture/screen_capturer_helper_unittest.cc',
+    # Stack overflow
+    #    '../webrtc/modules/desktop_capture/screen_capturer_unittest.cc',
+    # Stack overflow
+    #    '../webrtc/modules/desktop_capture/window_capturer_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/media_file/media_file_unittest.cc',
+        '../webrtc/modules/module_common_types_unittest.cc',
+        '../webrtc/modules/pacing/bitrate_prober_unittest.cc',
+        '../webrtc/modules/pacing/paced_sender_unittest.cc',
+        '../webrtc/modules/pacing/packet_router_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/inter_arrival_unittest.cc',
+    # Test fails
+    #    '../webrtc/modules/remote_bitrate_estimator/overuse_detector_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/rate_statistics_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.cc',
+        '../webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/send_time_history_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/bwe.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc',
+    # Requires external files
+    #    '../webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/estimators/nada_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/estimators/remb.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/estimators/tcp.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/metric_recorder.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/metric_recorder_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc',
+        '../webrtc/modules/rtp_rtcp/source/byte_io_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/fec_test_helper.cc',
+        '../webrtc/modules/rtp_rtcp/source/h264_bitstream_parser_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/h264_sps_parser_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/nack_rtx_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/packet_loss_stats_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/producer_fec_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/receive_statistics_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/remote_ntp_time_estimator_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/bye_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/voip_metric_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_utility_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtp_fec_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtp_format_vp8_test_helper.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtp_format_vp8_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtp_format_vp9_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtp_header_extension_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtp_packet_history_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtp_payload_registry_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/time_util_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/vp8_partition_aggregator_unittest.cc',
+        '../webrtc/modules/utility/source/audio_frame_operations_unittest.cc',
+        '../webrtc/modules/utility/source/process_thread_impl_unittest.cc',
+        '../webrtc/modules/video_capture/test/video_capture_unittest.cc',
+        '../webrtc/modules/video_coding/codecs/test/packet_manipulator.cc',
+        '../webrtc/modules/video_coding/codecs/test/predictive_packet_manipulator.cc',
+        '../webrtc/modules/video_coding/codecs/test/stats.cc',
+        '../webrtc/modules/video_coding/codecs/test/videoprocessor.cc',
+        '../webrtc/modules/video_coding/decoding_state_unittest.cc',
+        '../webrtc/modules/video_coding/media_optimization_unittest.cc',
+        '../webrtc/modules/video_coding/qm_select_unittest.cc',
+        '../webrtc/modules/video_coding/receiver_unittest.cc',
+        '../webrtc/modules/video_coding/session_info_unittest.cc',
+        '../webrtc/modules/video_coding/test/stream_generator.cc',
+        '../webrtc/modules/video_coding/timing_unittest.cc',
+        '../webrtc/modules/video_coding/utility/quality_scaler_unittest.cc',
+        '../webrtc/modules/video_coding/video_coding_robustness_unittest.cc',
+        '../webrtc/modules/video_coding/video_receiver_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/video_coding/video_sender_unittest.cc',
+    # Requires external files
+    #    '../webrtc/modules/video_processing/test/video_processing_unittest.cc',
+        '../webrtc/system_wrappers/source/aligned_array_unittest.cc',
+        '../webrtc/system_wrappers/source/aligned_malloc_unittest.cc',
+        '../webrtc/system_wrappers/source/clock_unittest.cc',
+        '../webrtc/system_wrappers/source/condition_variable_unittest.cc',
+        '../webrtc/system_wrappers/source/critical_section_unittest.cc',
+        '../webrtc/system_wrappers/source/data_log_c_helpers_unittest.c',
+        '../webrtc/system_wrappers/source/data_log_helpers_unittest.cc',
+    # Test failures
+    #    '../webrtc/system_wrappers/source/data_log_unittest.cc',
+        '../webrtc/system_wrappers/source/data_log_unittest_disabled.cc',
+        '../webrtc/system_wrappers/source/field_trial_default.cc',
+    # Test failures
+    #   '../webrtc/system_wrappers/source/logging_unittest.cc',
+        '../webrtc/system_wrappers/source/ntp_time_unittest.cc',
+        '../webrtc/system_wrappers/source/rtp_to_ntp_unittest.cc',
+        '../webrtc/system_wrappers/source/scoped_vector_unittest.cc',
+        '../webrtc/system_wrappers/source/stl_util_unittest.cc',
+        '../webrtc/system_wrappers/source/stringize_macros_unittest.cc',
+        '../webrtc/test/fake_texture_frame.cc',
+        '../webrtc/test/field_trial.cc',
+        '../webrtc/test/frame_generator.cc',
+        '../webrtc/test/frame_generator_capturer.cc',
+        '../webrtc/test/frame_generator_unittest.cc',
+        '../webrtc/test/rtcp_packet_parser.cc',
+        '../webrtc/test/rtp_file_reader.cc',
+    # Requires external files
+    #    '../webrtc/test/rtp_file_reader_unittest.cc',
+        '../webrtc/test/rtp_file_writer_unittest.cc',
+        '../webrtc/test/test_main.cc',
+        '../webrtc/test/testsupport/always_passing_unittest.cc',
+        '../webrtc/test/testsupport/fileutils.cc',
+        '../webrtc/test/testsupport/frame_reader.cc',
+        '../webrtc/test/testsupport/frame_reader_unittest.cc',
+        '../webrtc/test/testsupport/frame_writer.cc',
+        '../webrtc/test/testsupport/metrics/video_metrics.cc',
+    # Requires external files
+    #    '../webrtc/test/testsupport/metrics/video_metrics_unittest.cc',
+        '../webrtc/test/testsupport/packet_reader.cc',
+        '../webrtc/test/testsupport/packet_reader_unittest.cc',
+        '../webrtc/test/testsupport/trace_to_stderr.cc',
+        '../webrtc/test/vcm_capturer.cc',
+        '../webrtc/test/video_capturer.cc',
+        '../webrtc/video/call_stats_unittest.cc',
+        '../webrtc/video/encoder_state_feedback_unittest.cc',
+        '../webrtc/video/payload_router_unittest.cc',
+        '../webrtc/video/report_block_stats_unittest.cc',
+        '../webrtc/video/stream_synchronization_unittest.cc',
+        '../webrtc/video/video_capture_input_unittest.cc',
+        '../webrtc/video/video_decoder_unittest.cc',
+        '../webrtc/video/vie_codec_unittest.cc',
+        '../webrtc/video/vie_remb_unittest.cc',
+        '../webrtc/voice_engine/channel_unittest.cc',
+        '../webrtc/voice_engine/network_predictor_unittest.cc',
+        '../webrtc/voice_engine/transmit_mixer_unittest.cc',
+        '../webrtc/voice_engine/utility_unittest.cc',
+        '../webrtc/voice_engine/voe_audio_processing_unittest.cc',
+    # Fails VoEBaseTest.GetVersion!
+    #    '../webrtc/voice_engine/voe_base_unittest.cc',
+        'FakeIPC.cpp',
+    ]
+
+    # Unable to use unified build due to multiply defined symbols
+    SOURCES += [
+        '../webrtc/audio/audio_send_stream_unittest.cc',
+        '../webrtc/audio/audio_state_unittest.cc',
+        '../webrtc/modules/audio_processing/beamformer/nonlinear_beamformer_unittest.cc',
+        '../webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer_unittest.cc',
+        '../webrtc/modules/audio_processing/transient/wpd_node_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/test/bwe_unittest.cc',
+        '../webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/app_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/nack_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/pli_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/report_block_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/rrtr_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/sli_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr_unittest.cc',
+        '../webrtc/modules/rtp_rtcp/source/rtcp_packet_unittest.cc',
+        '../webrtc/modules/video_coding/codecs/test/packet_manipulator_unittest.cc',
+        '../webrtc/modules/video_coding/codecs/test/stats_unittest.cc',
+        '../webrtc/modules/video_coding/codecs/test/videoprocessor_unittest.cc',
+        '../webrtc/test/rtp_file_writer.cc',
+        '../webrtc/test/testsupport/frame_writer_unittest.cc',
+        '../webrtc/video/overuse_frame_detector_unittest.cc',
+        '../webrtc/video/video_encoder_unittest.cc',
+        '../webrtc/voice_engine/voe_codec_unittest.cc',
+        '../webrtc/voice_engine/voe_network_unittest.cc',
+        '../webrtc/voice_engine/voice_engine_fixture.cc',
+    ]
+
+    if CONFIG['GNU_CXX']:
+        CXXFLAGS += [
+            '-Wno-error=shadow',
+            '-Wno-inconsistent-missing-override',
+            '-Wno-overloaded-virtual',
+        ]
+
+    if CONFIG['_MSC_VER']:
+        # This is intended as a temporary workaround to enable warning free building
+        # with VS2015.
+        # reinterpret_cast': conversion from 'DWORD' to 'HANDLE' of greater size
+        CXXFLAGS += ['-wd4312']
+
+    Program('webrtc-gtest')
--- a/media/webrtc/trunk/webrtc/base/sigslot.h
+++ b/media/webrtc/trunk/webrtc/base/sigslot.h
@@ -2799,10 +2799,9 @@ namespace sigslot {
 				it = itNext;
 			}
 		}
 	};
 
 }; // namespace sigslot
 
 #endif // TALK_BASE_SIGSLOT_H__
-#endif // TALK_BASE_SIGSLOT_H__
 #endif // WEBRTC_BASE_SIGSLOT_H__
--- a/media/webrtc/trunk/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
+++ b/media/webrtc/trunk/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
@@ -88,16 +88,18 @@ class MockRtpRtcp : public RtpRtcp {
   MOCK_METHOD1(SetSequenceNumber, void(const uint16_t seq));
   MOCK_METHOD2(SetRtpStateForSsrc,
                bool(uint32_t ssrc, const RtpState& rtp_state));
   MOCK_METHOD2(GetRtpStateForSsrc, bool(uint32_t ssrc, RtpState* rtp_state));
   MOCK_CONST_METHOD0(SSRC,
       uint32_t());
   MOCK_METHOD1(SetSSRC,
       void(const uint32_t ssrc));
+  MOCK_METHOD1(SetRID,
+      int32_t(const char *rid));
   MOCK_CONST_METHOD1(CSRCs,
       int32_t(uint32_t arrOfCSRC[kRtpCsrcSize]));
   MOCK_METHOD1(SetCsrcs, void(const std::vector<uint32_t>& csrcs));
   MOCK_METHOD1(SetCSRCStatus,
       int32_t(const bool include));
   MOCK_METHOD1(SetRtxSendStatus, void(int modes));
   MOCK_CONST_METHOD0(RtxSendStatus, int());
   MOCK_METHOD1(SetRtxSsrc,
@@ -156,16 +158,22 @@ class MockRtpRtcp : public RtpRtcp {
   MOCK_METHOD1(RemoveMixedCNAME,
       int32_t(const uint32_t SSRC));
   MOCK_CONST_METHOD5(RTT,
       int32_t(const uint32_t remoteSSRC,
               int64_t* RTT,
               int64_t* avgRTT,
               int64_t* minRTT,
               int64_t* maxRTT));
+  MOCK_CONST_METHOD5(GetReportBlockInfo,
+      int32_t(const uint32_t remote_ssrc,
+              uint32_t* ntp_high,
+              uint32_t* ntp_low,
+              uint32_t* packets_received,
+              uint64_t* octets_received));
   MOCK_METHOD1(SendRTCP, int32_t(RTCPPacketType packetType));
   MOCK_METHOD1(SendCompoundRTCP,
                int32_t(const std::set<RTCPPacketType>& packetTypes));
   MOCK_METHOD1(SendRTCPReferencePictureSelection,
       int32_t(const uint64_t pictureID));
   MOCK_METHOD1(SendRTCPSliceLossIndication,
       int32_t(const uint8_t pictureID));
   MOCK_CONST_METHOD2(DataCountersRTP,
--- a/media/webrtc/trunk/webrtc/modules/video_coding/media_optimization_unittest.cc
+++ b/media/webrtc/trunk/webrtc/modules/video_coding/media_optimization_unittest.cc
@@ -128,17 +128,17 @@ TEST_F(TestMediaOptimization, ProtectsUs
     }
 
    public:
     uint32_t fec_rate_bps_;
   } protection_callback;
 
   media_opt_.SetProtectionMethod(kFec);
   media_opt_.SetEncodingData(kVideoCodecVP8, kCodecBitrateBps, kCodecBitrateBps,
-                             640, 480, 30, 1, 1000);
+                             640, 480, 30, 1, 1, 1000);
 
   // Using 10% of codec bitrate for FEC, should still be able to use all of it.
   protection_callback.fec_rate_bps_ = kCodecBitrateBps / 10;
   uint32_t target_bitrate = media_opt_.SetTargetRates(
       kMaxBitrateBps, 0, 0, &protection_callback, nullptr);
 
   EXPECT_EQ(kCodecBitrateBps, static_cast<int>(target_bitrate));
 
--- a/testing/gtest/moz.build
+++ b/testing/gtest/moz.build
@@ -4,29 +4,33 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 EXPORTS.gtest += [
     'MozGtestFriend.h',
 ]
 
 if CONFIG['ENABLE_TESTS']:
-    EXPORTS.gtest += [
+    gtest_exports = [
         'gtest/include/gtest/gtest-death-test.h',
         'gtest/include/gtest/gtest-message.h',
         'gtest/include/gtest/gtest-param-test.h',
         'gtest/include/gtest/gtest-printers.h',
         'gtest/include/gtest/gtest-spi.h',
         'gtest/include/gtest/gtest-test-part.h',
         'gtest/include/gtest/gtest-typed-test.h',
         'gtest/include/gtest/gtest.h',
         'gtest/include/gtest/gtest_pred_impl.h',
         'gtest/include/gtest/gtest_prod.h',
         'mozilla/MozGTestBench.h',
     ]
+    EXPORTS.gtest += gtest_exports
+
+    # webrtc.org unit tests use this include path
+    EXPORTS.testing.gtest.include.gtest += gtest_exports
 
     # GTest internal are exposed in gtest.h. See comment in gtest.h
     EXPORTS.gtest.internal += [
         'gtest/include/gtest/internal/gtest-death-test-internal.h',
         'gtest/include/gtest/internal/gtest-filepath.h',
         'gtest/include/gtest/internal/gtest-internal.h',
         'gtest/include/gtest/internal/gtest-linked_ptr.h',
         'gtest/include/gtest/internal/gtest-param-util-generated.h',
@@ -38,29 +42,33 @@ if CONFIG['ENABLE_TESTS']:
         'gtest/include/gtest/internal/gtest-type-util.h',
     ]
 
     EXPORTS.gtest.internal.custom += [
         'gtest/include/gtest/internal/custom/gtest-port.h',
         'gtest/include/gtest/internal/custom/gtest-printers.h',
     ]
 
-    EXPORTS.gmock += [
+    gmock_exports = [
         'gmock/include/gmock/gmock-actions.h',
         'gmock/include/gmock/gmock-cardinalities.h',
         'gmock/include/gmock/gmock-generated-actions.h',
         'gmock/include/gmock/gmock-generated-function-mockers.h',
         'gmock/include/gmock/gmock-generated-matchers.h',
         'gmock/include/gmock/gmock-generated-nice-strict.h',
         'gmock/include/gmock/gmock-matchers.h',
         'gmock/include/gmock/gmock-more-actions.h',
         'gmock/include/gmock/gmock-more-matchers.h',
         'gmock/include/gmock/gmock-spec-builders.h',
         'gmock/include/gmock/gmock.h',
     ]
+    EXPORTS.gmock += gmock_exports
+
+    # webrtc.org unit tests use this include path
+    EXPORTS.testing.gmock.include.gmock += gmock_exports
 
     # gmock also includes internal interfaces in it's public header
     EXPORTS.gmock.internal += [
         'gmock/include/gmock/internal/gmock-generated-internal-utils.h',
         'gmock/include/gmock/internal/gmock-internal-utils.h',
         'gmock/include/gmock/internal/gmock-port.h',
     ]