mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Fixes https://github.com/flutter/flutter/issues/116070 Fixes https://github.com/flutter/flutter/issues/126202 Introduces `DlRegion` class which implements subset of `SkRegion` required to get non-overlapping rectangles from region. The implementation is different and faster than `SkRegion` for this particular use-case (`display_list_region_benchmarks`): Edit: Updated benchmark to latest revision and natively (initial run went through rosetta) ``` ---------------------------------------------------------------------------- Benchmark Time CPU Iterations ---------------------------------------------------------------------------- BM_RegionBenchmarkDlRegion/Tiny 616 us 616 us 908 BM_RegionBenchmarkSkRegion/Tiny 70559 us 70557 us 10 BM_RegionBenchmarkDlRegion/Small 1315 us 1314 us 537 BM_RegionBenchmarkSkRegion/Small 121736 us 121717 us 6 BM_RegionBenchmarkDlRegion/Medium 1079 us 1079 us 650 BM_RegionBenchmarkSkRegion/Medium 22039 us 22035 us 32 BM_RegionBenchmarkDlRegion/Large 399 us 399 us 1763 BM_RegionBenchmarkSkRegion/Large 1510 us 1510 us 466 ``` ## Pre-launch Checklist - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [X] I read and followed the [Flutter Style Guide] and the [C++, Objective-C, Java style guides]. - [X] I listed at least one issue that this PR fixes in the description above. - [X] I added new tests to check the change I am making or feature I am adding, or Hixie said the PR is test-exempt. See [testing the engine] for instructions on writing and running engine tests. - [X] I updated/added relevant documentation (doc comments with `///`). - [X] I signed the [CLA]. - [X] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style [testing the engine]: https://github.com/flutter/flutter/wiki/Testing-the-engine [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat
281 lines
8.7 KiB
Plaintext
281 lines
8.7 KiB
Plaintext
# 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.
|
|
|
|
import("//build/toolchain/clang.gni")
|
|
import("//flutter/common/config.gni")
|
|
import("//flutter/examples/examples.gni")
|
|
import("//flutter/shell/platform/config.gni")
|
|
import("//flutter/shell/platform/glfw/config.gni")
|
|
import("//flutter/testing/testing.gni")
|
|
import("//third_party/dart/build/dart/copy_tree.gni")
|
|
|
|
# Whether to build the dartdevc sdk, libraries, and source files
|
|
# required for the flutter web sdk.
|
|
# TODO(jacksongardner): remove this poorly named argument once the recipes stop
|
|
# using it. https://github.com/flutter/flutter/issues/113303
|
|
declare_args() {
|
|
full_dart_sdk = false
|
|
}
|
|
|
|
config("config") {
|
|
include_dirs = [ ".." ]
|
|
if (is_win) {
|
|
if (current_cpu != "x86") {
|
|
cflags = [ "/WX" ] # Treat warnings as errors.
|
|
}
|
|
}
|
|
}
|
|
|
|
config("export_dynamic_symbols") {
|
|
# --dynamic-list is the GNU linker syntax supported by ELF linkers.
|
|
# -exported_symbols_list is the macOS linker syntax. The different flags
|
|
# accept files formatted differently, so we have exported_symbols.sym for GNU
|
|
# linker syntax, and exported_symbols_mac.sym for the macOS linker syntax.
|
|
if (is_linux || is_fuchsia) {
|
|
inputs = [ "//flutter/common/exported_symbols.sym" ]
|
|
ldflags = [ "-Wl,--dynamic-list=" + rebase_path(inputs[0], root_build_dir) ]
|
|
} else if (is_mac) {
|
|
inputs = [ "//flutter/common/exported_symbols_mac.sym" ]
|
|
ldflags = [
|
|
"-Xlinker",
|
|
"-exported_symbols_list",
|
|
"-Xlinker",
|
|
rebase_path(inputs[0], root_build_dir),
|
|
]
|
|
}
|
|
}
|
|
|
|
group("flutter") {
|
|
testonly = true
|
|
|
|
# Compile the engine.
|
|
public_deps = [
|
|
":unittests",
|
|
"//flutter/shell/platform/embedder:flutter_engine",
|
|
"//flutter/sky",
|
|
]
|
|
|
|
# Ensure the example for a sample embedder compiles.
|
|
if (build_embedder_examples) {
|
|
public_deps += [
|
|
"//flutter/examples/glfw",
|
|
"//flutter/examples/vulkan_glfw",
|
|
]
|
|
|
|
if (!is_mac) {
|
|
public_deps += [ "//flutter/examples/glfw_drm" ]
|
|
}
|
|
}
|
|
|
|
# If enabled, compile the SDK / snapshot.
|
|
if (!is_fuchsia) {
|
|
public_deps += [ "//flutter/lib/snapshot:generate_snapshot_bins" ]
|
|
|
|
if (build_engine_artifacts) {
|
|
public_deps += [
|
|
"//flutter/build/dart:dart_sdk",
|
|
"//flutter/flutter_frontend_server:frontend_server",
|
|
|
|
# This must be listed explicitly for desktop cross-builds since
|
|
# //flutter/lib/snapshot:generate_snapshot_bin will only build
|
|
# gen_snapshot for the host and not the target.
|
|
"//third_party/dart/runtime/bin:gen_snapshot",
|
|
|
|
# Impeller artifacts - compiler and libtessellator
|
|
"//flutter/impeller/compiler:impellerc",
|
|
"//flutter/impeller/tessellator:tessellator_shared",
|
|
|
|
# path_ops
|
|
"//flutter/tools/path_ops",
|
|
]
|
|
|
|
if (host_os == "linux") {
|
|
public_deps += [
|
|
# Built alongside gen_snapshot for 64 bit targets
|
|
"//third_party/dart/runtime/bin:analyze_snapshot",
|
|
]
|
|
}
|
|
|
|
if (full_dart_sdk) {
|
|
public_deps += [ "//flutter/web_sdk" ]
|
|
}
|
|
}
|
|
}
|
|
|
|
if (build_engine_artifacts) {
|
|
public_deps += [
|
|
"//flutter/shell/testing",
|
|
"//flutter/tools/const_finder",
|
|
"//flutter/tools/font-subset",
|
|
]
|
|
}
|
|
|
|
# Compile all benchmark targets if enabled.
|
|
if (enable_unittests && !is_win && !is_fuchsia) {
|
|
public_deps += [
|
|
"//flutter/display_list:display_list_benchmarks",
|
|
"//flutter/display_list:display_list_builder_benchmarks",
|
|
"//flutter/display_list:display_list_region_benchmarks",
|
|
"//flutter/fml:fml_benchmarks",
|
|
"//flutter/impeller/geometry:geometry_benchmarks",
|
|
"//flutter/lib/ui:ui_benchmarks",
|
|
"//flutter/shell/common:shell_benchmarks",
|
|
"//flutter/third_party/txt:txt_benchmarks",
|
|
]
|
|
}
|
|
|
|
if ((flutter_runtime_mode == "debug" || flutter_runtime_mode == "profile") &&
|
|
(is_ios || is_android)) {
|
|
public_deps += [ "//flutter/testing/scenario_app" ]
|
|
}
|
|
|
|
if (is_android && flutter_runtime_mode == "profile" &&
|
|
current_cpu == "arm64") {
|
|
public_deps += [ "//flutter/testing/android_background_image" ]
|
|
}
|
|
}
|
|
|
|
group("unittests") {
|
|
testonly = true
|
|
|
|
public_deps = []
|
|
if (is_android) {
|
|
public_deps +=
|
|
[ "//flutter/shell/platform/android:flutter_shell_native_unittests" ]
|
|
}
|
|
|
|
# Compile all unittests targets if enabled.
|
|
if (enable_unittests) {
|
|
public_deps += [
|
|
"//flutter/display_list:display_list_rendertests",
|
|
"//flutter/display_list:display_list_unittests",
|
|
"//flutter/flow:flow_unittests",
|
|
"//flutter/fml:fml_unittests",
|
|
"//flutter/lib/ui:ui_unittests",
|
|
"//flutter/runtime:dart_plugin_registrant_unittests",
|
|
"//flutter/runtime:no_dart_plugin_registrant_unittests",
|
|
"//flutter/runtime:runtime_unittests",
|
|
"//flutter/shell/common:shell_unittests",
|
|
"//flutter/shell/platform/embedder:embedder_a11y_unittests",
|
|
"//flutter/shell/platform/embedder:embedder_proctable_unittests",
|
|
"//flutter/shell/platform/embedder:embedder_unittests",
|
|
"//flutter/testing:testing_unittests",
|
|
"//flutter/testing/dart",
|
|
"//flutter/testing/smoke_test_failure",
|
|
"//flutter/third_party/tonic/tests:tonic_unittests",
|
|
"//flutter/third_party/txt:txt_unittests",
|
|
]
|
|
|
|
# The accessibility library only supports Mac and Windows at the moment.
|
|
if (is_mac || is_win) {
|
|
public_deps +=
|
|
[ "//flutter/third_party/accessibility:accessibility_unittests" ]
|
|
}
|
|
|
|
if (is_fuchsia) {
|
|
public_deps += [ "//flutter/shell/platform/fuchsia:tests" ]
|
|
}
|
|
|
|
if (is_mac || is_linux || is_win) {
|
|
public_deps += [
|
|
"//flutter/impeller:impeller_dart_unittests",
|
|
"//flutter/impeller:impeller_unittests",
|
|
]
|
|
}
|
|
|
|
if (is_mac) {
|
|
public_deps += [
|
|
"//flutter/impeller/golden_tests:impeller_golden_tests",
|
|
"//flutter/shell/platform/darwin:flutter_channels_unittests",
|
|
"//flutter/third_party/spring_animation:spring_animation_unittests",
|
|
]
|
|
}
|
|
|
|
if (!is_win && !is_fuchsia) {
|
|
public_deps += [
|
|
"//flutter/shell/platform/android/external_view_embedder:android_external_view_embedder_unittests",
|
|
"//flutter/shell/platform/android/jni:jni_unittests",
|
|
"//flutter/shell/platform/android/platform_view_android_delegate:platform_view_android_delegate_unittests",
|
|
]
|
|
}
|
|
|
|
# Unit tests for desktop embeddings should only be built if the desktop
|
|
# embeddings are being built.
|
|
if (enable_desktop_embeddings) {
|
|
public_deps += [
|
|
"//flutter/shell/platform/common:common_cpp_core_unittests",
|
|
"//flutter/shell/platform/common/client_wrapper:client_wrapper_unittests",
|
|
]
|
|
|
|
if (!is_fuchsia) {
|
|
# These tests require the embedder and thus cannot run on fuchsia.
|
|
# TODO(): Enable when embedder works on fuchsia.
|
|
public_deps +=
|
|
[ "//flutter/shell/platform/common:common_cpp_unittests" ]
|
|
|
|
# These tests require GLFW and thus cannot run on fuchsia.
|
|
public_deps += [ "//flutter/shell/platform/glfw/client_wrapper:client_wrapper_glfw_unittests" ]
|
|
}
|
|
|
|
if (is_linux) {
|
|
public_deps +=
|
|
[ "//flutter/shell/platform/linux:flutter_linux_unittests" ]
|
|
if (build_glfw_shell) {
|
|
public_deps +=
|
|
[ "//flutter/shell/platform/glfw:flutter_glfw_unittests" ]
|
|
}
|
|
}
|
|
|
|
if (is_mac) {
|
|
public_deps += [ "//flutter/shell/platform/darwin/macos:flutter_desktop_darwin_unittests" ]
|
|
}
|
|
|
|
if (is_win) {
|
|
public_deps += [
|
|
"//flutter/shell/platform/windows:flutter_windows_unittests",
|
|
"//flutter/shell/platform/windows/client_wrapper:client_wrapper_windows_unittests",
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (build_engine_artifacts) {
|
|
group("archives") {
|
|
testonly = true
|
|
|
|
deps = [ "//flutter/build/archives:artifacts" ]
|
|
}
|
|
}
|
|
|
|
group("dist") {
|
|
testonly = true
|
|
|
|
deps = [ "//flutter/sky/dist" ]
|
|
}
|
|
|
|
if (is_fuchsia && enable_unittests) {
|
|
group("fuchsia_tests") {
|
|
testonly = true
|
|
|
|
deps = [ "//flutter/shell/platform/fuchsia:tests" ]
|
|
}
|
|
}
|
|
|
|
# On Windows, when targeting Android, we only build gen_snapshot. This
|
|
# top-level target provides a convenient shorthand for the full path into the
|
|
# Dart tree, and is less ambiguous than specifying the binary to build since
|
|
# we can specify the toolchain to use, too.
|
|
if (host_os == "win") {
|
|
_gen_snapshot_target =
|
|
"//third_party/dart/runtime/bin:gen_snapshot($host_toolchain)"
|
|
copy("gen_snapshot") {
|
|
deps = [ _gen_snapshot_target ]
|
|
|
|
gen_snapshot_out_dir = get_label_info(_gen_snapshot_target, "root_out_dir")
|
|
sources = [ "$gen_snapshot_out_dir/gen_snapshot.exe" ]
|
|
outputs = [ "$root_build_dir/gen_snapshot/gen_snapshot.exe" ]
|
|
}
|
|
}
|