From ac5c3e77c39d9726ec6c91d60ba1fae73283e11e Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Fri, 17 Jun 2022 11:26:59 -0700 Subject: [PATCH] jonahs feedback - faster smaller messages --- .../window/platform_message_response_dart.cc | 40 ++++++++++--------- .../tonic/typed_data/dart_byte_data.cc | 10 ++--- third_party/tonic/typed_data/dart_byte_data.h | 1 + 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/lib/ui/window/platform_message_response_dart.cc b/lib/ui/window/platform_message_response_dart.cc index a6b19d04e9efd..c1551cd1ef0b9 100644 --- a/lib/ui/window/platform_message_response_dart.cc +++ b/lib/ui/window/platform_message_response_dart.cc @@ -69,26 +69,28 @@ PlatformMessageResponseDart::~PlatformMessageResponseDart() { } void PlatformMessageResponseDart::Complete(std::unique_ptr data) { - PostCompletion(std::move(callback_), ui_task_runner_, &is_complete_, channel_, - [data = std::move(data)]() mutable { - void* mapping = data->GetMutableMapping(); - Dart_Handle byte_buffer; - if (mapping) { - size_t data_size = data->GetSize(); - byte_buffer = Dart_NewExternalTypedDataWithFinalizer( - /*type=*/Dart_TypedData_kByteData, - /*data=*/mapping, - /*length=*/data_size, - /*peer=*/data.release(), - /*external_allocation_size=*/data_size, - /*callback=*/MappingFinalizer); + PostCompletion( + std::move(callback_), ui_task_runner_, &is_complete_, channel_, + [data = std::move(data)]() mutable { + void* mapping = data->GetMutableMapping(); + Dart_Handle byte_buffer; + size_t data_size = data->GetSize(); + if (mapping && + data_size >= tonic::DartByteData::kExternalSizeThreshold) { + byte_buffer = Dart_NewExternalTypedDataWithFinalizer( + /*type=*/Dart_TypedData_kByteData, + /*data=*/mapping, + /*length=*/data_size, + /*peer=*/data.release(), + /*external_allocation_size=*/data_size, + /*callback=*/MappingFinalizer); - } else { - byte_buffer = tonic::DartByteData::Create( - data->GetMapping(), data->GetSize()); - } - return byte_buffer; - }); + } else { + byte_buffer = + tonic::DartByteData::Create(data->GetMapping(), data->GetSize()); + } + return byte_buffer; + }); } void PlatformMessageResponseDart::CompleteEmpty() { diff --git a/third_party/tonic/typed_data/dart_byte_data.cc b/third_party/tonic/typed_data/dart_byte_data.cc index cab038d14f85d..f4a557f17e946 100644 --- a/third_party/tonic/typed_data/dart_byte_data.cc +++ b/third_party/tonic/typed_data/dart_byte_data.cc @@ -11,17 +11,15 @@ namespace tonic { namespace { - -// For large objects it is more efficient to use an external typed data object -// with a buffer allocated outside the Dart heap. -const int kExternalSizeThreshold = 1000; - void FreeFinalizer(void* isolate_callback_data, void* peer) { free(peer); } - } // anonymous namespace +// For large objects it is more efficient to use an external typed data object +// with a buffer allocated outside the Dart heap. +const size_t DartByteData::kExternalSizeThreshold = 1000; + Dart_Handle DartByteData::Create(const void* data, size_t length) { if (length < kExternalSizeThreshold) { auto handle = DartByteData{data, length}.dart_handle(); diff --git a/third_party/tonic/typed_data/dart_byte_data.h b/third_party/tonic/typed_data/dart_byte_data.h index 9e14bc969fb8e..911d0d5da0d7e 100644 --- a/third_party/tonic/typed_data/dart_byte_data.h +++ b/third_party/tonic/typed_data/dart_byte_data.h @@ -14,6 +14,7 @@ namespace tonic { class DartByteData { public: + static const size_t kExternalSizeThreshold; static Dart_Handle Create(const void* data, size_t length); explicit DartByteData(Dart_Handle list);