diff --git a/engine/src/flutter/ci/licenses_golden/licenses_flutter b/engine/src/flutter/ci/licenses_golden/licenses_flutter index 155a0f8612..2802bed8a4 100644 --- a/engine/src/flutter/ci/licenses_golden/licenses_flutter +++ b/engine/src/flutter/ci/licenses_golden/licenses_flutter @@ -120,7 +120,6 @@ FILE: ../../../flutter/flow/texture.h FILE: ../../../flutter/flow/view_holder.cc FILE: ../../../flutter/flow/view_holder.h FILE: ../../../flutter/flutter_kernel_transformers/lib/track_widget_constructor_locations.dart -FILE: ../../../flutter/fml/arraysize.h FILE: ../../../flutter/fml/base32.cc FILE: ../../../flutter/fml/base32.h FILE: ../../../flutter/fml/base32_unittest.cc @@ -215,6 +214,7 @@ FILE: ../../../flutter/fml/platform/win/message_loop_win.h FILE: ../../../flutter/fml/platform/win/native_library_win.cc FILE: ../../../flutter/fml/platform/win/paths_win.cc FILE: ../../../flutter/fml/platform/win/wstring_conversion.h +FILE: ../../../flutter/fml/size.h FILE: ../../../flutter/fml/string_view.cc FILE: ../../../flutter/fml/string_view.h FILE: ../../../flutter/fml/string_view_unittest.cc diff --git a/engine/src/flutter/fml/BUILD.gn b/engine/src/flutter/fml/BUILD.gn index 759a152408..26f51d99c9 100644 --- a/engine/src/flutter/fml/BUILD.gn +++ b/engine/src/flutter/fml/BUILD.gn @@ -6,7 +6,6 @@ import("//build/fuchsia/sdk.gni") source_set("fml") { sources = [ - "arraysize.h", "base32.cc", "base32.h", "build_config.h", @@ -47,6 +46,7 @@ source_set("fml") { "native_library.h", "paths.cc", "paths.h", + "size.h", "string_view.cc", "string_view.h", "synchronization/atomic_object.h", diff --git a/engine/src/flutter/fml/arraysize.h b/engine/src/flutter/fml/arraysize.h deleted file mode 100644 index 636939812b..0000000000 --- a/engine/src/flutter/fml/arraysize.h +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FML_ARRAYSIZE_H_ -#define FLUTTER_FML_ARRAYSIZE_H_ - -#include - -#ifndef arraysize -template -char (&ArraySizeHelper(T (&array)[N]))[N]; -#define arraysize(array) (sizeof(ArraySizeHelper(array))) -#endif - -#endif // FLUTTER_FML_ARRAYSIZE_H_ diff --git a/engine/src/flutter/fml/command_line_unittest.cc b/engine/src/flutter/fml/command_line_unittest.cc index c04619e483..31907a0fb4 100644 --- a/engine/src/flutter/fml/command_line_unittest.cc +++ b/engine/src/flutter/fml/command_line_unittest.cc @@ -6,8 +6,8 @@ #include -#include "flutter/fml/arraysize.h" #include "flutter/fml/macros.h" +#include "flutter/fml/size.h" #include "gtest/gtest.h" namespace fml { @@ -197,7 +197,7 @@ TEST(CommandLineTest, CommmandLineFromIterators) { { static const char* const argv[] = {"my_program", "--flag=value", "arg"}; - auto cl = CommandLineFromIterators(argv, argv + arraysize(argv)); + auto cl = CommandLineFromIterators(argv, argv + fml::size(argv)); EXPECT_TRUE(cl.has_argv0()); EXPECT_EQ(argv[0], cl.argv0()); std::vector expected_options = { @@ -211,7 +211,7 @@ TEST(CommandLineTest, CommmandLineFromIterators) { TEST(CommandLineTest, CommandLineFromArgcArgv) { static const char* const argv[] = {"my_program", "--flag=value", "arg"}; - const int argc = static_cast(arraysize(argv)); + const int argc = static_cast(fml::size(argv)); auto cl = CommandLineFromArgcArgv(argc, argv); EXPECT_TRUE(cl.has_argv0()); diff --git a/engine/src/flutter/fml/size.h b/engine/src/flutter/fml/size.h new file mode 100644 index 0000000000..4ffd7f3eec --- /dev/null +++ b/engine/src/flutter/fml/size.h @@ -0,0 +1,19 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef FLUTTER_FML_SIZE_H_ +#define FLUTTER_FML_SIZE_H_ + +#include + +namespace fml { + +template +constexpr std::size_t size(T (&array)[N]) { + return N; +} + +} // namespace fml + +#endif // FLUTTER_FML_SIZE_H_ diff --git a/engine/src/flutter/fml/synchronization/waitable_event_unittest.cc b/engine/src/flutter/fml/synchronization/waitable_event_unittest.cc index aa420910d7..97b886b6a9 100644 --- a/engine/src/flutter/fml/synchronization/waitable_event_unittest.cc +++ b/engine/src/flutter/fml/synchronization/waitable_event_unittest.cc @@ -16,12 +16,6 @@ #include "flutter/fml/macros.h" #include "gtest/gtest.h" -#ifndef arraysize -template -char (&ArraySizeHelper(T (&array)[N]))[N]; -#define arraysize(array) (sizeof(ArraySizeHelper(array))) -#endif - namespace fml { namespace { diff --git a/engine/src/flutter/runtime/dart_vm.cc b/engine/src/flutter/runtime/dart_vm.cc index 134065a676..a09a87d106 100644 --- a/engine/src/flutter/runtime/dart_vm.cc +++ b/engine/src/flutter/runtime/dart_vm.cc @@ -10,11 +10,11 @@ #include #include "flutter/common/settings.h" -#include "flutter/fml/arraysize.h" #include "flutter/fml/compiler_specific.h" #include "flutter/fml/file.h" #include "flutter/fml/logging.h" #include "flutter/fml/mapping.h" +#include "flutter/fml/size.h" #include "flutter/fml/synchronization/count_down_latch.h" #include "flutter/fml/synchronization/thread_annotations.h" #include "flutter/fml/time/time_delta.h" @@ -292,11 +292,11 @@ DartVM::DartVM(std::shared_ptr vm_data, args.push_back(profiler_flag); } - PushBackAll(&args, kDartLanguageArgs, arraysize(kDartLanguageArgs)); + PushBackAll(&args, kDartLanguageArgs, fml::size(kDartLanguageArgs)); if (IsRunningPrecompiledCode()) { PushBackAll(&args, kDartPrecompilationArgs, - arraysize(kDartPrecompilationArgs)); + fml::size(kDartPrecompilationArgs)); } // Enable Dart assertions if we are not running precompiled code. We run non- @@ -318,42 +318,42 @@ DartVM::DartVM(std::shared_ptr vm_data, // Debug mode uses the JIT, disable code page write protection to avoid // memory page protection changes before and after every compilation. PushBackAll(&args, kDartWriteProtectCodeArgs, - arraysize(kDartWriteProtectCodeArgs)); + fml::size(kDartWriteProtectCodeArgs)); #endif if (enable_asserts) { - PushBackAll(&args, kDartAssertArgs, arraysize(kDartAssertArgs)); + PushBackAll(&args, kDartAssertArgs, fml::size(kDartAssertArgs)); } if (settings_.start_paused) { - PushBackAll(&args, kDartStartPausedArgs, arraysize(kDartStartPausedArgs)); + PushBackAll(&args, kDartStartPausedArgs, fml::size(kDartStartPausedArgs)); } if (settings_.disable_service_auth_codes) { PushBackAll(&args, kDartDisableServiceAuthCodesArgs, - arraysize(kDartDisableServiceAuthCodesArgs)); + fml::size(kDartDisableServiceAuthCodesArgs)); } if (settings_.endless_trace_buffer || settings_.trace_startup) { // If we are tracing startup, make sure the trace buffer is endless so we // don't lose early traces. PushBackAll(&args, kDartEndlessTraceBufferArgs, - arraysize(kDartEndlessTraceBufferArgs)); + fml::size(kDartEndlessTraceBufferArgs)); } if (settings_.trace_systrace) { PushBackAll(&args, kDartSystraceTraceBufferArgs, - arraysize(kDartSystraceTraceBufferArgs)); - PushBackAll(&args, kDartTraceStreamsArgs, arraysize(kDartTraceStreamsArgs)); + fml::size(kDartSystraceTraceBufferArgs)); + PushBackAll(&args, kDartTraceStreamsArgs, fml::size(kDartTraceStreamsArgs)); } if (settings_.trace_startup) { - PushBackAll(&args, kDartTraceStartupArgs, arraysize(kDartTraceStartupArgs)); + PushBackAll(&args, kDartTraceStartupArgs, fml::size(kDartTraceStartupArgs)); } #if defined(OS_FUCHSIA) - PushBackAll(&args, kDartFuchsiaTraceArgs, arraysize(kDartFuchsiaTraceArgs)); - PushBackAll(&args, kDartTraceStreamsArgs, arraysize(kDartTraceStreamsArgs)); + PushBackAll(&args, kDartFuchsiaTraceArgs, fml::size(kDartFuchsiaTraceArgs)); + PushBackAll(&args, kDartTraceStreamsArgs, fml::size(kDartTraceStreamsArgs)); #endif for (size_t i = 0; i < settings_.dart_flags.size(); i++) diff --git a/engine/src/flutter/shell/gpu/gpu_surface_gl.cc b/engine/src/flutter/shell/gpu/gpu_surface_gl.cc index f92c34cad7..d344e7225a 100644 --- a/engine/src/flutter/shell/gpu/gpu_surface_gl.cc +++ b/engine/src/flutter/shell/gpu/gpu_surface_gl.cc @@ -4,8 +4,8 @@ #include "gpu_surface_gl.h" -#include "flutter/fml/arraysize.h" #include "flutter/fml/logging.h" +#include "flutter/fml/size.h" #include "flutter/fml/trace_event.h" #include "flutter/shell/common/persistent_cache.h" #include "third_party/skia/include/core/SkColorFilter.h" diff --git a/engine/src/flutter/shell/platform/android/flutter_main.cc b/engine/src/flutter/shell/platform/android/flutter_main.cc index 16b1fbcff7..bae67459e0 100644 --- a/engine/src/flutter/shell/platform/android/flutter_main.cc +++ b/engine/src/flutter/shell/platform/android/flutter_main.cc @@ -8,7 +8,6 @@ #include -#include "flutter/fml/arraysize.h" #include "flutter/fml/command_line.h" #include "flutter/fml/file.h" #include "flutter/fml/macros.h" @@ -16,6 +15,7 @@ #include "flutter/fml/paths.h" #include "flutter/fml/platform/android/jni_util.h" #include "flutter/fml/platform/android/paths_android.h" +#include "flutter/fml/size.h" #include "flutter/lib/ui/plugins/callback_cache.h" #include "flutter/runtime/dart_vm.h" #include "flutter/runtime/start_up.h" @@ -145,7 +145,7 @@ bool FlutterMain::Register(JNIEnv* env) { return false; } - return env->RegisterNatives(clazz, methods, arraysize(methods)) == 0; + return env->RegisterNatives(clazz, methods, fml::size(methods)) == 0; } } // namespace flutter diff --git a/engine/src/flutter/shell/platform/android/platform_view_android_jni.cc b/engine/src/flutter/shell/platform/android/platform_view_android_jni.cc index 38db3453ce..4a40f605f5 100644 --- a/engine/src/flutter/shell/platform/android/platform_view_android_jni.cc +++ b/engine/src/flutter/shell/platform/android/platform_view_android_jni.cc @@ -11,11 +11,11 @@ #include "flutter/assets/directory_asset_bundle.h" #include "flutter/assets/zip_asset_store.h" #include "flutter/common/settings.h" -#include "flutter/fml/arraysize.h" #include "flutter/fml/file.h" #include "flutter/fml/platform/android/jni_util.h" #include "flutter/fml/platform/android/jni_weak_ref.h" #include "flutter/fml/platform/android/scoped_java_ref.h" +#include "flutter/fml/size.h" #include "flutter/lib/ui/plugins/callback_cache.h" #include "flutter/runtime/dart_service_isolate.h" #include "flutter/shell/common/run_configuration.h" @@ -650,7 +650,7 @@ bool RegisterApi(JNIEnv* env) { }; if (env->RegisterNatives(g_flutter_jni_class->obj(), flutter_jni_methods, - arraysize(flutter_jni_methods)) != 0) { + fml::size(flutter_jni_methods)) != 0) { FML_LOG(ERROR) << "Failed to RegisterNatives with FlutterJNI"; return false; } @@ -755,7 +755,7 @@ bool PlatformViewAndroid::Register(JNIEnv* env) { if (env->RegisterNatives(g_flutter_callback_info_class->obj(), callback_info_methods, - arraysize(callback_info_methods)) != 0) { + fml::size(callback_info_methods)) != 0) { FML_LOG(ERROR) << "Failed to RegisterNatives with FlutterCallbackInfo"; return false; } diff --git a/engine/src/flutter/shell/platform/android/vsync_waiter_android.cc b/engine/src/flutter/shell/platform/android/vsync_waiter_android.cc index 513cc6ff74..7fa284fb65 100644 --- a/engine/src/flutter/shell/platform/android/vsync_waiter_android.cc +++ b/engine/src/flutter/shell/platform/android/vsync_waiter_android.cc @@ -8,10 +8,10 @@ #include #include "flutter/common/task_runners.h" -#include "flutter/fml/arraysize.h" #include "flutter/fml/logging.h" #include "flutter/fml/platform/android/jni_util.h" #include "flutter/fml/platform/android/scoped_java_ref.h" +#include "flutter/fml/size.h" #include "flutter/fml/trace_event.h" namespace flutter { @@ -102,7 +102,7 @@ bool VsyncWaiterAndroid::Register(JNIEnv* env) { FML_CHECK(g_async_wait_for_vsync_method_ != nullptr); - return env->RegisterNatives(clazz, methods, arraysize(methods)) == 0; + return env->RegisterNatives(clazz, methods, fml::size(methods)) == 0; } } // namespace flutter diff --git a/engine/src/flutter/shell/platform/fuchsia/dart-pkg/fuchsia/sdk_ext/fuchsia.cc b/engine/src/flutter/shell/platform/fuchsia/dart-pkg/fuchsia/sdk_ext/fuchsia.cc index 72939661a1..5960a2ddee 100644 --- a/engine/src/flutter/shell/platform/fuchsia/dart-pkg/fuchsia/sdk_ext/fuchsia.cc +++ b/engine/src/flutter/shell/platform/fuchsia/dart-pkg/fuchsia/sdk_ext/fuchsia.cc @@ -15,7 +15,7 @@ #include "dart-pkg/zircon/sdk_ext/handle.h" #include "dart-pkg/zircon/sdk_ext/natives.h" #include "dart-pkg/zircon/sdk_ext/system.h" -#include "flutter/fml/arraysize.h" +#include "flutter/fml/size.h" #include "third_party/dart/runtime/include/dart_api.h" #include "third_party/tonic/dart_binding_macros.h" #include "third_party/tonic/dart_class_library.h" @@ -64,7 +64,7 @@ Dart_NativeFunction NativeLookup(Dart_Handle name, FML_DCHECK(function_name != nullptr); FML_DCHECK(auto_setup_scope != nullptr); *auto_setup_scope = true; - size_t num_entries = arraysize(Entries); + size_t num_entries = fml::size(Entries); for (size_t i = 0; i < num_entries; ++i) { const struct NativeEntries& entry = Entries[i]; if (!strcmp(function_name, entry.name) && @@ -78,7 +78,7 @@ Dart_NativeFunction NativeLookup(Dart_Handle name, } const uint8_t* NativeSymbol(Dart_NativeFunction native_function) { - size_t num_entries = arraysize(Entries); + size_t num_entries = fml::size(Entries); for (size_t i = 0; i < num_entries; ++i) { const struct NativeEntries& entry = Entries[i]; if (entry.function == native_function) {