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.