Remove typedefs.h from webrtc/ root (part 1) Split out webrtc-specific #defines from typedefs.h, into rtc_base/annotations.h and rtc_base/arch.h. Also removes the curiously named WEBRTC_CPU_DETECTION #define. BUG=webrtc:6854 Review-Url: https://codereview.webrtc.org/3007253002 Cr-Original-Commit-Position: refs/heads/master@{#19752} Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc Cr-Mirrored-Commit: a895836321e68b67ca2081c3bdbf6c08d8ee4b57
diff --git a/common_audio/resampler/sinc_resampler.cc b/common_audio/resampler/sinc_resampler.cc index acf7d0f..2f17ded 100644 --- a/common_audio/resampler/sinc_resampler.cc +++ b/common_audio/resampler/sinc_resampler.cc
@@ -160,12 +160,12 @@ AlignedMalloc(sizeof(float) * kKernelStorageSize, 16))), input_buffer_(static_cast<float*>( AlignedMalloc(sizeof(float) * input_buffer_size_, 16))), -#if defined(WEBRTC_CPU_DETECTION) +#if (defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__)) convolve_proc_(nullptr), #endif r1_(input_buffer_.get()), r2_(input_buffer_.get() + kKernelSize / 2) { -#if defined(WEBRTC_CPU_DETECTION) +#if (defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__)) InitializeCPUSpecificFeatures(); RTC_DCHECK(convolve_proc_); #endif
diff --git a/common_audio/resampler/sinc_resampler.h b/common_audio/resampler/sinc_resampler.h index fa92163..50059e5 100644 --- a/common_audio/resampler/sinc_resampler.h +++ b/common_audio/resampler/sinc_resampler.h
@@ -149,7 +149,7 @@ // TODO(ajm): Move to using a global static which must only be initialized // once by the user. We're not doing this initially, because we don't have // e.g. a LazyInstance helper in webrtc. -#if defined(WEBRTC_CPU_DETECTION) +#if (defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__)) typedef float (*ConvolveProc)(const float*, const float*, const float*, double); ConvolveProc convolve_proc_;
diff --git a/modules/audio_coding/neteq/neteq_impl.cc b/modules/audio_coding/neteq/neteq_impl.cc index 7858e84..f4ace1b 100644 --- a/modules/audio_coding/neteq/neteq_impl.cc +++ b/modules/audio_coding/neteq/neteq_impl.cc
@@ -935,7 +935,7 @@ static_cast<uint32_t>(output_size_samples_)); // Skipping break on purpose. Execution should move on into the // next case. - FALLTHROUGH(); + RTC_FALLTHROUGH(); } case kAudioRepetition: { // TODO(hlundin): Write test for this.
diff --git a/modules/audio_device/ios/voice_processing_audio_unit.mm b/modules/audio_device/ios/voice_processing_audio_unit.mm index 3701f3f..591a176 100644 --- a/modules/audio_device/ios/voice_processing_audio_unit.mm +++ b/modules/audio_device/ios/voice_processing_audio_unit.mm
@@ -434,12 +434,12 @@ case kStarted: Stop(); // Fall through. - FALLTHROUGH(); + RTC_FALLTHROUGH(); case kInitialized: Uninitialize(); break; case kUninitialized: - FALLTHROUGH(); + RTC_FALLTHROUGH(); case kInitRequired: break; }
diff --git a/modules/remote_bitrate_estimator/test/bwe.cc b/modules/remote_bitrate_estimator/test/bwe.cc index abc301c..566f93b 100644 --- a/modules/remote_bitrate_estimator/test/bwe.cc +++ b/modules/remote_bitrate_estimator/test/bwe.cc
@@ -97,7 +97,7 @@ case kBbrEstimator: return new BbrBweSender(observer, clock); case kTcpEstimator: - FALLTHROUGH(); + RTC_FALLTHROUGH(); case kNullEstimator: return new NullBweSender(); }
diff --git a/modules/rtp_rtcp/source/rtp_format_h264.cc b/modules/rtp_rtcp/source/rtp_format_h264.cc index 5aa7e27..eb33bcc 100644 --- a/modules/rtp_rtcp/source/rtp_format_h264.cc +++ b/modules/rtp_rtcp/source/rtp_format_h264.cc
@@ -574,7 +574,7 @@ } case H264::NaluType::kIdr: parsed_payload->frame_type = kVideoFrameKey; - FALLTHROUGH(); + RTC_FALLTHROUGH(); case H264::NaluType::kSlice: { rtc::Optional<uint32_t> pps_id = PpsParser::ParsePpsIdFromSlice( &payload_data[start_offset], end_offset - start_offset);
diff --git a/modules/video_coding/jitter_buffer.cc b/modules/video_coding/jitter_buffer.cc index a556080..eaf09be 100644 --- a/modules/video_coding/jitter_buffer.cc +++ b/modules/video_coding/jitter_buffer.cc
@@ -749,7 +749,7 @@ frame_event_->Set(); } } - FALLTHROUGH(); + RTC_FALLTHROUGH(); } // Note: There is no break here - continuing to kDecodableSession. case kDecodableSession: {
diff --git a/modules/video_coding/rtp_frame_reference_finder.cc b/modules/video_coding/rtp_frame_reference_finder.cc index e167e15..82af339 100644 --- a/modules/video_coding/rtp_frame_reference_finder.cc +++ b/modules/video_coding/rtp_frame_reference_finder.cc
@@ -71,7 +71,7 @@ case kHandOff: complete_frame = true; frame_callback_->OnCompleteFrame(std::move(*frame_it)); - FALLTHROUGH(); + RTC_FALLTHROUGH(); case kDrop: frame_it = stashed_frames_.erase(frame_it); }
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn index 902024f..76de9c0 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn
@@ -98,6 +98,8 @@ all_dependent_configs = [ ":rtc_base_approved_all_dependent_config" ] sources = [ + "annotations.h", + "arch.h", "array_view.h", "arraysize.h", "atomicops.h",
diff --git a/rtc_base/annotations.h b/rtc_base/annotations.h new file mode 100644 index 0000000..25dac33 --- /dev/null +++ b/rtc_base/annotations.h
@@ -0,0 +1,45 @@ +/* + * Copyright (c) 2017 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. + */ + +#ifndef WEBRTC_RTC_BASE_ANNOTATIONS_H_ +#define WEBRTC_RTC_BASE_ANNOTATIONS_H_ + +// Annotate a function indicating the caller must examine the return value. +// Use like: +// int foo() RTC_WARN_UNUSED_RESULT; +// To explicitly ignore a result, cast to void. +// TODO(kwiberg): Remove when we can use [[nodiscard]] from C++17. +#if defined(__clang__) +#define RTC_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) +#elif defined(__GNUC__) +// gcc has a __warn_unused_result__ attribute, but you can't quiet it by +// casting to void, so we don't use it. +#define RTC_WARN_UNUSED_RESULT +#else +#define RTC_WARN_UNUSED_RESULT +#endif + +// Macro to be used for switch-case fallthrough (required for enabling +// -Wimplicit-fallthrough warning on Clang). +#if defined(__clang__) +#define RTC_FALLTHROUGH() [[clang::fallthrough]] +#else +#define RTC_FALLTHROUGH() do { } while (0) +#endif + +// Prevent the compiler from warning about an unused variable. For example: +// int result = DoSomething(); +// assert(result == 17); +// RTC_UNUSED(result); +// Note: In most cases it is better to remove the unused variable rather than +// suppressing the compiler warning. +#define RTC_UNUSED(x) static_cast<void>(x) + +#endif // WEBRTC_RTC_BASE_ANNOTATIONS_H_
diff --git a/rtc_base/arch.h b/rtc_base/arch.h new file mode 100644 index 0000000..0137503 --- /dev/null +++ b/rtc_base/arch.h
@@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017 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. + */ + +// This file contains platform-specific defines. +// Much of it is derived from Chromium's build/build_config.h. + +#ifndef WEBRTC_RTC_BASE_ARCH_H_ +#define WEBRTC_RTC_BASE_ARCH_H_ + +// Processor architecture detection. For more info on what's defined, see: +// http://msdn.microsoft.com/en-us/library/b0084kay.aspx +// http://www.agner.org/optimize/calling_conventions.pdf +// or with gcc, run: "echo | gcc -E -dM -" +#if defined(_M_X64) || defined(__x86_64__) +#define WEBRTC_ARCH_X86_FAMILY +#define WEBRTC_ARCH_X86_64 +#define WEBRTC_ARCH_64_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__aarch64__) +#define WEBRTC_ARCH_ARM_FAMILY +#define WEBRTC_ARCH_64_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(_M_IX86) || defined(__i386__) +#define WEBRTC_ARCH_X86_FAMILY +#define WEBRTC_ARCH_X86 +#define WEBRTC_ARCH_32_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__ARMEL__) +#define WEBRTC_ARCH_ARM_FAMILY +#define WEBRTC_ARCH_32_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__MIPSEL__) +#define WEBRTC_ARCH_MIPS_FAMILY +#if defined(__LP64__) +#define WEBRTC_ARCH_64_BITS +#else +#define WEBRTC_ARCH_32_BITS +#endif +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__pnacl__) +#define WEBRTC_ARCH_32_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#else +#error Please add support for your architecture in rtc_base/arch.h +#endif + +#if !(defined(WEBRTC_ARCH_LITTLE_ENDIAN) ^ defined(WEBRTC_ARCH_BIG_ENDIAN)) +#error Define either WEBRTC_ARCH_LITTLE_ENDIAN or WEBRTC_ARCH_BIG_ENDIAN +#endif + +#endif // WEBRTC_RTC_BASE_ARCH_H_
diff --git a/rtc_base/checks.cc b/rtc_base/checks.cc index 533240f..ee0bbb8 100644 --- a/rtc_base/checks.cc +++ b/rtc_base/checks.cc
@@ -100,7 +100,7 @@ delete result; } -NO_RETURN FatalMessage::~FatalMessage() { +RTC_NO_RETURN FatalMessage::~FatalMessage() { fflush(stdout); fflush(stderr); stream_ << std::endl << "#" << std::endl; @@ -136,6 +136,8 @@ } // namespace rtc // Function to call from the C version of the RTC_CHECK and RTC_DCHECK macros. -NO_RETURN void rtc_FatalMessage(const char* file, int line, const char* msg) { +RTC_NO_RETURN void rtc_FatalMessage(const char* file, + int line, + const char* msg) { rtc::FatalMessage(file, line).stream() << msg; }
diff --git a/rtc_base/checks.h b/rtc_base/checks.h index f9507e2..d1a3ccb 100644 --- a/rtc_base/checks.h +++ b/rtc_base/checks.h
@@ -11,8 +11,6 @@ #ifndef WEBRTC_RTC_BASE_CHECKS_H_ #define WEBRTC_RTC_BASE_CHECKS_H_ -#include "webrtc/typedefs.h" - // If you for some reson need to know if DCHECKs are on, test the value of // RTC_DCHECK_IS_ON. (Test its value, not if it's defined; it'll always be // defined, to either a true or a false value.) @@ -22,10 +20,20 @@ #define RTC_DCHECK_IS_ON 0 #endif +// Annotate a function that will not return control flow to the caller. +#if defined(_MSC_VER) +#define RTC_NO_RETURN __declspec(noreturn) +#elif defined(__GNUC__) +#define RTC_NO_RETURN __attribute__ ((__noreturn__)) +#else +#define RTC_NO_RETURN +#endif + #ifdef __cplusplus extern "C" { #endif -NO_RETURN void rtc_FatalMessage(const char* file, int line, const char* msg); +RTC_NO_RETURN + void rtc_FatalMessage(const char* file, int line, const char* msg); #ifdef __cplusplus } // extern "C" #endif @@ -232,7 +240,7 @@ FatalMessage(const char* file, int line); // Used for RTC_CHECK_EQ(), etc. Takes ownership of the given string. FatalMessage(const char* file, int line, std::string* result); - NO_RETURN ~FatalMessage(); + RTC_NO_RETURN ~FatalMessage(); std::ostream& stream() { return stream_; }
diff --git a/rtc_base/httpbase.cc b/rtc_base/httpbase.cc index 64cb5d9..cb7bac1 100644 --- a/rtc_base/httpbase.cc +++ b/rtc_base/httpbase.cc
@@ -537,7 +537,7 @@ case SR_EOS: // Clean close, with no error. read_error = 0; - FALLTHROUGH(); // Fall through to HandleStreamClose. + RTC_FALLTHROUGH(); // Fall through to HandleStreamClose. case SR_ERROR: *error = HandleStreamClose(read_error); return true;
diff --git a/typedefs.h b/typedefs.h index bd0bee7..84a7c08 100644 --- a/typedefs.h +++ b/typedefs.h
@@ -8,118 +8,14 @@ * be found in the AUTHORS file in the root of the source tree. */ -// This file contains platform-specific typedefs and defines. -// Much of it is derived from Chromium's build/build_config.h. - #ifndef WEBRTC_TYPEDEFS_H_ #define WEBRTC_TYPEDEFS_H_ -// Processor architecture detection. For more info on what's defined, see: -// http://msdn.microsoft.com/en-us/library/b0084kay.aspx -// http://www.agner.org/optimize/calling_conventions.pdf -// or with gcc, run: "echo | gcc -E -dM -" -#if defined(_M_X64) || defined(__x86_64__) -#define WEBRTC_ARCH_X86_FAMILY -#define WEBRTC_ARCH_X86_64 -#define WEBRTC_ARCH_64_BITS -#define WEBRTC_ARCH_LITTLE_ENDIAN -#elif defined(__aarch64__) -#define WEBRTC_ARCH_ARM_FAMILY -#define WEBRTC_ARCH_64_BITS -#define WEBRTC_ARCH_LITTLE_ENDIAN -#elif defined(_M_IX86) || defined(__i386__) -#define WEBRTC_ARCH_X86_FAMILY -#define WEBRTC_ARCH_X86 -#define WEBRTC_ARCH_32_BITS -#define WEBRTC_ARCH_LITTLE_ENDIAN -#elif defined(__ARMEL__) -#define WEBRTC_ARCH_ARM_FAMILY -#define WEBRTC_ARCH_32_BITS -#define WEBRTC_ARCH_LITTLE_ENDIAN -#elif defined(__MIPSEL__) -#define WEBRTC_ARCH_MIPS_FAMILY -#if defined(__LP64__) -#define WEBRTC_ARCH_64_BITS -#else -#define WEBRTC_ARCH_32_BITS -#endif -#define WEBRTC_ARCH_LITTLE_ENDIAN -#elif defined(__pnacl__) -#define WEBRTC_ARCH_32_BITS -#define WEBRTC_ARCH_LITTLE_ENDIAN -#else -#error Please add support for your architecture in typedefs.h -#endif - -#if !(defined(WEBRTC_ARCH_LITTLE_ENDIAN) ^ defined(WEBRTC_ARCH_BIG_ENDIAN)) -#error Define either WEBRTC_ARCH_LITTLE_ENDIAN or WEBRTC_ARCH_BIG_ENDIAN -#endif - -// TODO(zhongwei.yao): WEBRTC_CPU_DETECTION is only used in one place; we should -// probably just remove it. -#if (defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__)) -#define WEBRTC_CPU_DETECTION -#endif +// TODO(solenberg): Delete this file once downstream projects have been updated. #include <stdint.h> -// Annotate a function indicating the caller must examine the return value. -// Use like: -// int foo() RTC_WARN_UNUSED_RESULT; -// To explicitly ignore a result, cast to void. -// TODO(kwiberg): Remove when we can use [[nodiscard]] from C++17. -#if defined(__clang__) -#define RTC_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) -#elif defined(__GNUC__) -// gcc has a __warn_unused_result__ attribute, but you can't quiet it by -// casting to void, so we don't use it. -#define RTC_WARN_UNUSED_RESULT -#else -#define RTC_WARN_UNUSED_RESULT -#endif - -// Put after a variable that might not be used, to prevent compiler warnings: -// int result ATTRIBUTE_UNUSED = DoSomething(); -// assert(result == 17); -// Deprecated since it only works with GCC & clang. See RTC_UNUSED below. -// TODO(terelius): Remove. -#ifndef ATTRIBUTE_UNUSED -#if defined(__GNUC__) || defined(__clang__) -#define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -#else -#define ATTRIBUTE_UNUSED -#endif -#endif - -// Macro to be used for switch-case fallthrough (required for enabling -// -Wimplicit-fallthrough warning on Clang). -#ifndef FALLTHROUGH -#if defined(__clang__) -#define FALLTHROUGH() [[clang::fallthrough]] -#else -#define FALLTHROUGH() do { } while (0) -#endif -#endif - -#ifndef NO_RETURN -// Annotate a function that will not return control flow to the caller. -#if defined(_MSC_VER) -#define NO_RETURN __declspec(noreturn) -#elif defined(__GNUC__) -#define NO_RETURN __attribute__ ((__noreturn__)) -#else -#define NO_RETURN -#endif -#endif - -// Prevent the compiler from warning about an unused variable. For example: -// int result = DoSomething(); -// assert(result == 17); -// RTC_UNUSED(result); -// Note: In most cases it is better to remove the unused variable rather than -// suppressing the compiler warning. -#ifndef RTC_UNUSED -#define RTC_UNUSED(x) static_cast<void>(x) -#endif // RTC_UNUSED +#include "webrtc/rtc_base/arch.h" +#include "webrtc/rtc_base/annotations.h" #endif // WEBRTC_TYPEDEFS_H_
diff --git a/video/rtp_video_stream_receiver.cc b/video/rtp_video_stream_receiver.cc index a47055a..500c0bc 100644 --- a/video/rtp_video_stream_receiver.cc +++ b/video/rtp_video_stream_receiver.cc
@@ -268,7 +268,7 @@ switch (tracker_.CopyAndFixBitstream(&packet)) { case video_coding::H264SpsPpsTracker::kRequestKeyframe: keyframe_request_sender_->RequestKeyFrame(); - FALLTHROUGH(); + RTC_FALLTHROUGH(); case video_coding::H264SpsPpsTracker::kDrop: return 0; case video_coding::H264SpsPpsTracker::kInsert:
diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc index 52dcbf0..7d810dc 100644 --- a/video/video_stream_encoder.cc +++ b/video/video_stream_encoder.cc
@@ -978,7 +978,7 @@ break; } // Scale down resolution. - FALLTHROUGH(); + RTC_FALLTHROUGH(); } case VideoSendStream::DegradationPreference::kMaintainFramerate: // Scale down resolution. @@ -1056,7 +1056,7 @@ break; } // Scale up resolution. - FALLTHROUGH(); + RTC_FALLTHROUGH(); } case VideoSendStream::DegradationPreference::kMaintainFramerate: { // Scale up resolution.