From 82698e0a4bb3719d544b50a51966e064fc96aa0b Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Mon, 15 Jan 2024 22:58:56 -0800 Subject: [PATCH 1/5] [Impeller] Flutter GPU: Run unittests on CI and fix HostBuffer. --- lib/gpu/host_buffer.cc | 3 ++- lib/gpu/host_buffer.h | 4 +++- lib/gpu/lib/src/buffer.dart | 2 +- testing/run_tests.py | 10 ++++++++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/gpu/host_buffer.cc b/lib/gpu/host_buffer.cc index 6d76464c6c787..eb4b6fae088e6 100644 --- a/lib/gpu/host_buffer.cc +++ b/lib/gpu/host_buffer.cc @@ -31,8 +31,9 @@ size_t HostBuffer::EmplaceBytes(const tonic::DartByteData& byte_data) { host_buffer_->Emplace(byte_data.data(), byte_data.length_in_bytes(), impeller::DefaultUniformAlignment()); emplacements_[current_offset_] = view; + size_t previous_offset = current_offset_; current_offset_ += view.range.length; - return view.range.offset; + return previous_offset; } std::optional HostBuffer::GetBufferViewForOffset( diff --git a/lib/gpu/host_buffer.h b/lib/gpu/host_buffer.h index 75d33c739ac39..31a5750303b41 100644 --- a/lib/gpu/host_buffer.h +++ b/lib/gpu/host_buffer.h @@ -48,7 +48,9 @@ class HostBuffer : public RefCountedDartWrappable { extern "C" { FLUTTER_GPU_EXPORT -extern void InternalFlutterGpu_HostBuffer_Initialize(Dart_Handle wrapper); +extern void InternalFlutterGpu_HostBuffer_Initialize( + Dart_Handle wrapper, + flutter::gpu::Context* context); FLUTTER_GPU_EXPORT extern size_t InternalFlutterGpu_HostBuffer_EmplaceBytes( diff --git a/lib/gpu/lib/src/buffer.dart b/lib/gpu/lib/src/buffer.dart index abed1a7a04949..de1389231ad36 100644 --- a/lib/gpu/lib/src/buffer.dart +++ b/lib/gpu/lib/src/buffer.dart @@ -161,7 +161,7 @@ base class HostBuffer extends NativeFieldWrapperClass1 with Buffer { } /// Wrap with native counterpart. - @Native( + @Native)>( symbol: 'InternalFlutterGpu_HostBuffer_Initialize') external void _initialize(GpuContext gpuContext); diff --git a/testing/run_tests.py b/testing/run_tests.py index 8693bad5ab4c9..2517c091123ce 100755 --- a/testing/run_tests.py +++ b/testing/run_tests.py @@ -553,6 +553,16 @@ def make_test(name, flags=None, extra_env=None): extra_env=extra_env, ) + # Run the Flutter GPU test suite. + run_engine_executable( + build_dir, + 'impeller_dart_unittests', + executable_filter, + shuffle_flags + ['--enable_vulkan_validation'], + coverage=coverage, + extra_env=extra_env, + ) + def run_engine_benchmarks(build_dir, executable_filter): logger.info('Running Engine Benchmarks.') From 8f92b56ffff9adb1a61bf945694d3907a287042d Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Tue, 16 Jan 2024 01:15:27 -0800 Subject: [PATCH 2/5] print debugging --- runtime/dart_snapshot.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/runtime/dart_snapshot.cc b/runtime/dart_snapshot.cc index 5943524aa9f80..294f1be538a5a 100644 --- a/runtime/dart_snapshot.cc +++ b/runtime/dart_snapshot.cc @@ -63,6 +63,7 @@ static std::shared_ptr SearchMapping( // invalid mapping. If all the other methods for resolving the data also // fail, the engine will stop with accompanying error logs. if (auto mapping = embedder_mapping_callback()) { + FML_LOG(ERROR) << "SearchMapping: return mapping"; return mapping; } } @@ -70,6 +71,7 @@ static std::shared_ptr SearchMapping( // Attempt to open file at path specified. if (!file_path.empty()) { if (auto file_mapping = GetFileMapping(file_path, is_executable)) { + FML_LOG(ERROR) << "SearchMapping: return file_mapping"; return file_mapping; } } @@ -80,6 +82,8 @@ static std::shared_ptr SearchMapping( auto symbol_mapping = std::make_unique( native_library, native_library_symbol_name); if (symbol_mapping->GetMapping() != nullptr) { + FML_LOG(ERROR) + << "SearchMapping: return symbol_mapping (native library path)"; return symbol_mapping; } } @@ -90,10 +94,13 @@ static std::shared_ptr SearchMapping( auto symbol_mapping = std::make_unique( loaded_process, native_library_symbol_name); if (symbol_mapping->GetMapping() != nullptr) { + FML_LOG(ERROR) + << "SearchMapping: return symbol_mapping (current process)"; return symbol_mapping; } } + FML_LOG(ERROR) << "SearchMapping: return nullptr"; return nullptr; } @@ -101,13 +108,26 @@ static std::shared_ptr SearchMapping( static std::shared_ptr ResolveVMData( const Settings& settings) { + FML_LOG(ERROR) << "static ResolveVMData(settings)"; #if DART_SNAPSHOT_STATIC_LINK + FML_LOG(ERROR) << "Static link"; return std::make_unique(kDartVmSnapshotData, 0, // size nullptr, // release_func true // dontneed_safe ); #else // DART_SNAPSHOT_STATIC_LINK + FML_LOG(ERROR) << "Not static link; search mapping"; + FML_LOG(ERROR) << "settings.vm_snapshot_data: " + << static_cast(settings.vm_snapshot_data); + FML_LOG(ERROR) << "settings.vm_snapshot_data_path: " + << settings.vm_snapshot_data_path; + FML_LOG(ERROR) << "settings.application_library_path: "; + for (const auto& path : settings.application_library_path) { + FML_LOG(ERROR) << " - " << path; + } + FML_LOG(ERROR) << "native_library_symbol_name: " + << DartSnapshot::kVMDataSymbol; return SearchMapping( settings.vm_snapshot_data, // embedder_mapping_callback settings.vm_snapshot_data_path, // file_path @@ -186,6 +206,7 @@ fml::RefPtr DartSnapshot::VMSnapshotFromSettings( if (snapshot->IsValid()) { return snapshot; } + FML_LOG(ERROR) << "Snapshot not valid"; return nullptr; } From f9957c4a06146a9be00d5486d8079596f3f02f18 Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Tue, 16 Jan 2024 02:11:14 -0800 Subject: [PATCH 3/5] Export symbols --- impeller/BUILD.gn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/impeller/BUILD.gn b/impeller/BUILD.gn index 3bfe85a0fb072..50dea3437af8e 100644 --- a/impeller/BUILD.gn +++ b/impeller/BUILD.gn @@ -137,6 +137,8 @@ if (impeller_supports_rendering) { testonly = true + public_configs = [ "//flutter:export_dynamic_symbols" ] + deps = [ "renderer:renderer_dart_unittests" ] } } From 91687e588a71ff4ae8c5af246ed6cee0adc9789f Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Tue, 16 Jan 2024 02:39:06 -0800 Subject: [PATCH 4/5] Revert "print debugging" This reverts commit 8f92b56ffff9adb1a61bf945694d3907a287042d. --- runtime/dart_snapshot.cc | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/runtime/dart_snapshot.cc b/runtime/dart_snapshot.cc index 294f1be538a5a..5943524aa9f80 100644 --- a/runtime/dart_snapshot.cc +++ b/runtime/dart_snapshot.cc @@ -63,7 +63,6 @@ static std::shared_ptr SearchMapping( // invalid mapping. If all the other methods for resolving the data also // fail, the engine will stop with accompanying error logs. if (auto mapping = embedder_mapping_callback()) { - FML_LOG(ERROR) << "SearchMapping: return mapping"; return mapping; } } @@ -71,7 +70,6 @@ static std::shared_ptr SearchMapping( // Attempt to open file at path specified. if (!file_path.empty()) { if (auto file_mapping = GetFileMapping(file_path, is_executable)) { - FML_LOG(ERROR) << "SearchMapping: return file_mapping"; return file_mapping; } } @@ -82,8 +80,6 @@ static std::shared_ptr SearchMapping( auto symbol_mapping = std::make_unique( native_library, native_library_symbol_name); if (symbol_mapping->GetMapping() != nullptr) { - FML_LOG(ERROR) - << "SearchMapping: return symbol_mapping (native library path)"; return symbol_mapping; } } @@ -94,13 +90,10 @@ static std::shared_ptr SearchMapping( auto symbol_mapping = std::make_unique( loaded_process, native_library_symbol_name); if (symbol_mapping->GetMapping() != nullptr) { - FML_LOG(ERROR) - << "SearchMapping: return symbol_mapping (current process)"; return symbol_mapping; } } - FML_LOG(ERROR) << "SearchMapping: return nullptr"; return nullptr; } @@ -108,26 +101,13 @@ static std::shared_ptr SearchMapping( static std::shared_ptr ResolveVMData( const Settings& settings) { - FML_LOG(ERROR) << "static ResolveVMData(settings)"; #if DART_SNAPSHOT_STATIC_LINK - FML_LOG(ERROR) << "Static link"; return std::make_unique(kDartVmSnapshotData, 0, // size nullptr, // release_func true // dontneed_safe ); #else // DART_SNAPSHOT_STATIC_LINK - FML_LOG(ERROR) << "Not static link; search mapping"; - FML_LOG(ERROR) << "settings.vm_snapshot_data: " - << static_cast(settings.vm_snapshot_data); - FML_LOG(ERROR) << "settings.vm_snapshot_data_path: " - << settings.vm_snapshot_data_path; - FML_LOG(ERROR) << "settings.application_library_path: "; - for (const auto& path : settings.application_library_path) { - FML_LOG(ERROR) << " - " << path; - } - FML_LOG(ERROR) << "native_library_symbol_name: " - << DartSnapshot::kVMDataSymbol; return SearchMapping( settings.vm_snapshot_data, // embedder_mapping_callback settings.vm_snapshot_data_path, // file_path @@ -206,7 +186,6 @@ fml::RefPtr DartSnapshot::VMSnapshotFromSettings( if (snapshot->IsValid()) { return snapshot; } - FML_LOG(ERROR) << "Snapshot not valid"; return nullptr; } From 6de75e0c257acb1730639e2c6b32c22900097e12 Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Tue, 16 Jan 2024 02:56:41 -0800 Subject: [PATCH 5/5] Depend on snapshot --- impeller/BUILD.gn | 2 -- impeller/renderer/BUILD.gn | 3 +++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/impeller/BUILD.gn b/impeller/BUILD.gn index 50dea3437af8e..3bfe85a0fb072 100644 --- a/impeller/BUILD.gn +++ b/impeller/BUILD.gn @@ -137,8 +137,6 @@ if (impeller_supports_rendering) { testonly = true - public_configs = [ "//flutter:export_dynamic_symbols" ] - deps = [ "renderer:renderer_dart_unittests" ] } } diff --git a/impeller/renderer/BUILD.gn b/impeller/renderer/BUILD.gn index 3e0c7b5770420..39e98fd6a4058 100644 --- a/impeller/renderer/BUILD.gn +++ b/impeller/renderer/BUILD.gn @@ -149,12 +149,15 @@ impeller_component("renderer_dart_unittests") { sources = [ "renderer_dart_unittests.cc" ] + public_configs = [ "//flutter:export_dynamic_symbols" ] + deps = [ ":renderer", "../fixtures:flutter_gpu_fixtures", "../fixtures:flutter_gpu_shaders", "../playground:playground_test", "//flutter/lib/gpu", + "//flutter/lib/snapshot", "//flutter/runtime:runtime", "//flutter/testing:fixture_test", "//flutter/testing:testing",