diff --git a/BUILD.gn b/BUILD.gn index bc51df7c07..f2713f62d2 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -122,6 +122,10 @@ config("common_inherited_config") { defines = [ "WEBRTC_ENABLE_SYMBOL_EXPORT" ] } + if (rtc_dcheck_always_on) { + defines += [ "RTC_DCHECK_ALWAYS_ON" ] + } + if (build_with_mozilla) { defines += [ "WEBRTC_MOZILLA_BUILD" ] } diff --git a/rtc_base/checks.h b/rtc_base/checks.h index 21fca7e40f..e7584fb11c 100644 --- a/rtc_base/checks.h +++ b/rtc_base/checks.h @@ -14,7 +14,7 @@ // 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.) -#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) +#if !defined(NDEBUG) || defined(RTC_DCHECK_ALWAYS_ON) #define RTC_DCHECK_IS_ON 1 #else #define RTC_DCHECK_IS_ON 0 diff --git a/rtc_base/thread.cc b/rtc_base/thread.cc index 8ca9ce76a8..b54cdedf50 100644 --- a/rtc_base/thread.cc +++ b/rtc_base/thread.cc @@ -1044,7 +1044,7 @@ void Thread::QueuedTaskHandler::OnMessage(Message* msg) { } void Thread::AllowInvokesToThread(Thread* thread) { -#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) +#if (!defined(NDEBUG) || defined(RTC_DCHECK_ALWAYS_ON)) if (!IsCurrent()) { PostTask(webrtc::ToQueuedTask( [thread, this]() { AllowInvokesToThread(thread); })); @@ -1057,7 +1057,7 @@ void Thread::AllowInvokesToThread(Thread* thread) { } void Thread::DisallowAllInvokes() { -#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) +#if (!defined(NDEBUG) || defined(RTC_DCHECK_ALWAYS_ON)) if (!IsCurrent()) { PostTask(webrtc::ToQueuedTask([this]() { DisallowAllInvokes(); })); return; @@ -1082,7 +1082,7 @@ uint32_t Thread::GetCouldBeBlockingCallCount() const { // Returns true if no policies added or if there is at least one policy // that permits invocation to |target| thread. bool Thread::IsInvokeToThreadAllowed(rtc::Thread* target) { -#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) +#if (!defined(NDEBUG) || defined(RTC_DCHECK_ALWAYS_ON)) RTC_DCHECK_RUN_ON(this); if (!invoke_policy_enabled_) { return true; diff --git a/rtc_base/thread.h b/rtc_base/thread.h index 6e68f1a679..cb5a0e9cd0 100644 --- a/rtc_base/thread.h +++ b/rtc_base/thread.h @@ -400,15 +400,17 @@ class RTC_LOCKABLE RTC_EXPORT Thread : public webrtc::TaskQueueBase { // Allows invoke to specified |thread|. Thread never will be dereferenced and // will be used only for reference-based comparison, so instance can be safely - // deleted. If NDEBUG is defined and DCHECK_ALWAYS_ON is undefined do nothing. + // deleted. If NDEBUG is defined and RTC_DCHECK_ALWAYS_ON is undefined do + // nothing. void AllowInvokesToThread(Thread* thread); - // If NDEBUG is defined and DCHECK_ALWAYS_ON is undefined do nothing. + // If NDEBUG is defined and RTC_DCHECK_ALWAYS_ON is undefined do nothing. void DisallowAllInvokes(); // Returns true if |target| was allowed by AllowInvokesToThread() or if no // calls were made to AllowInvokesToThread and DisallowAllInvokes. Otherwise // returns false. - // If NDEBUG is defined and DCHECK_ALWAYS_ON is undefined always returns true. + // If NDEBUG is defined and RTC_DCHECK_ALWAYS_ON is undefined always returns + // true. bool IsInvokeToThreadAllowed(rtc::Thread* target); // Posts a task to invoke the functor on |this| thread asynchronously, i.e. diff --git a/rtc_base/thread_unittest.cc b/rtc_base/thread_unittest.cc index 789bdd943e..e603930564 100644 --- a/rtc_base/thread_unittest.cc +++ b/rtc_base/thread_unittest.cc @@ -366,7 +366,7 @@ TEST(ThreadTest, Wrap) { ThreadManager::Instance()->SetCurrentThread(current_thread); } -#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) +#if (!defined(NDEBUG) || defined(RTC_DCHECK_ALWAYS_ON)) TEST(ThreadTest, InvokeToThreadAllowedReturnsTrueWithoutPolicies) { // Create and start the thread. auto thread1 = Thread::CreateWithSocketServer(); @@ -410,7 +410,7 @@ TEST(ThreadTest, InvokesDisallowedWhenDisallowAllInvokes) { Thread* th_main = Thread::Current(); th_main->ProcessMessages(100); } -#endif // (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) +#endif // (!defined(NDEBUG) || defined(RTC_DCHECK_ALWAYS_ON)) TEST(ThreadTest, InvokesAllowedByDefault) { // Create and start the thread. diff --git a/tools_webrtc/coverage/generate_ios_coverage_command.py b/tools_webrtc/coverage/generate_ios_coverage_command.py index e01a75c049..ff17c58863 100644 --- a/tools_webrtc/coverage/generate_ios_coverage_command.py +++ b/tools_webrtc/coverage/generate_ios_coverage_command.py @@ -89,7 +89,7 @@ def GetGNArgs(is_simulator): target_cpu = 'x64' if is_simulator else 'arm64' return ([] + ['target_os="ios"'] + ['target_cpu="%s"' % target_cpu] + ['use_clang_coverage=true'] + ['is_component_build=false'] + - ['dcheck_always_on=true']) + ['rtc_dcheck_always_on=true']) def GenerateIOSSimulatorCommand(): @@ -103,7 +103,7 @@ def GenerateIOSSimulatorCommand(): [FormatIossimTest(t, is_xctest=True) for t in XC_TESTS] + [FormatIossimTest(t, is_xctest=False) for t in TESTS]) - print 'To get code coverage using iOS simulator just run following commands:' + print 'To get code coverage using iOS sim just run following commands:' print '' print ' '.join(gn_cmd) print '' diff --git a/tools_webrtc/mb/docs/user_guide.md b/tools_webrtc/mb/docs/user_guide.md index 8c66cd328c..a8857d2087 100644 --- a/tools_webrtc/mb/docs/user_guide.md +++ b/tools_webrtc/mb/docs/user_guide.md @@ -248,8 +248,8 @@ For example, if you had: } 'mixins': { 'bot': { - 'gyp_defines': 'use_goma=1 dcheck_always_on=0', - 'gn_args': 'use_goma=true dcheck_always_on=false', + 'gyp_defines': 'use_goma=1 rtc_dcheck_always_on=0', + 'gn_args': 'use_goma=true rtc_dcheck_always_on=false', }, 'debug': { 'gn_args': 'is_debug=true', @@ -267,8 +267,8 @@ For example, if you had: 'gyp_defines': 'component=shared_library', }, 'trybot': { - 'gyp_defines': 'dcheck_always_on=1', - 'gn_args': 'dcheck_always_on=true', + 'gyp_defines': 'rtc_dcheck_always_on=1', + 'gn_args': 'rtc_dcheck_always_on=true', } } } @@ -276,7 +276,7 @@ For example, if you had: and you ran `mb gen -c linux_release_trybot //out/Release`, it would translate into a call to `gyp_chromium -G Release` with `GYP_DEFINES` set to -`"use_goma=true dcheck_always_on=false dcheck_always_on=true"`. +`"use_goma=true rtc_dcheck_always_on=false rtc_dcheck_always_on=true"`. (From that you can see that mb is intentionally dumb and does not attempt to de-dup the flags, it lets gyp do that). diff --git a/tools_webrtc/mb/mb_config.pyl b/tools_webrtc/mb/mb_config.pyl index 253a57acc5..74678f875e 100644 --- a/tools_webrtc/mb/mb_config.pyl +++ b/tools_webrtc/mb/mb_config.pyl @@ -459,8 +459,8 @@ 'gn_args': 'is_clang=true', }, - 'dcheck_always_on': { - 'gn_args': 'dcheck_always_on=true', + 'rtc_dcheck_always_on': { + 'gn_args': 'rtc_dcheck_always_on=true', }, 'debug': { @@ -548,11 +548,11 @@ }, 'release_bot': { - 'mixins': ['pure_release_bot', 'dcheck_always_on'], + 'mixins': ['pure_release_bot', 'rtc_dcheck_always_on'], }, 'release_bot_no_goma': { - 'mixins': ['release', 'no_goma', 'dcheck_always_on'], + 'mixins': ['release', 'no_goma', 'rtc_dcheck_always_on'], }, 'tsan': { diff --git a/webrtc.gni b/webrtc.gni index a338d723ed..99d4488e3c 100644 --- a/webrtc.gni +++ b/webrtc.gni @@ -6,6 +6,7 @@ # in the file PATENTS. All contributing project authors may # be found in the AUTHORS file in the root of the source tree. import("//build/config/arm.gni") +import("//build/config/dcheck_always_on.gni") import("//build/config/features.gni") import("//build/config/mips.gni") import("//build/config/sanitizers/sanitizers.gni") @@ -36,6 +37,11 @@ if (is_mac) { } declare_args() { + # Separate control for dchecks in WebRTC. Defaults to Chromium's behavior if + # built with Chromium. + # When set to true, it will enable RTC_DCHECK() also in Release builds. + rtc_dcheck_always_on = build_with_chromium && dcheck_always_on + # Setting this to true will make RTC_EXPORT (see rtc_base/system/rtc_export.h) # expand to code that will manage symbols visibility. rtc_enable_symbol_export = false