[fuchsia][sysmem2] move to sysmem2 protocols (#53138)

Switch flutter from sysmem(1) protocols to sysmem2 protocols.

This is part of the overall sysmem(1) to sysmem2 migration.

fixes flutter/flutter#151154
diff --git a/shell/platform/fuchsia/flutter/software_surface.cc b/shell/platform/fuchsia/flutter/software_surface.cc
index 1184f63..63abbc4 100644
--- a/shell/platform/fuchsia/flutter/software_surface.cc
+++ b/shell/platform/fuchsia/flutter/software_surface.cc
@@ -28,13 +28,13 @@
 
 constexpr SkColorType kSkiaColorType = kRGBA_8888_SkColorType;
 
-uint32_t BytesPerRow(const fuchsia::sysmem::SingleBufferSettings& settings,
+uint32_t BytesPerRow(const fuchsia::sysmem2::SingleBufferSettings& settings,
                      uint32_t bytes_per_pixel,
                      uint32_t image_width) {
   const uint32_t bytes_per_row_divisor =
-      settings.image_format_constraints.bytes_per_row_divisor;
+      settings.image_format_constraints().bytes_per_row_divisor();
   const uint32_t min_bytes_per_row =
-      settings.image_format_constraints.min_bytes_per_row;
+      settings.image_format_constraints().min_bytes_per_row();
   const uint32_t unrounded_bytes_per_row =
       std::max(image_width * bytes_per_pixel, min_bytes_per_row);
   const uint32_t roundup_bytes =
@@ -46,7 +46,7 @@
 }  // namespace
 
 SoftwareSurface::SoftwareSurface(
-    fuchsia::sysmem::AllocatorSyncPtr& sysmem_allocator,
+    fuchsia::sysmem2::AllocatorSyncPtr& sysmem_allocator,
     fuchsia::ui::composition::AllocatorPtr& flatland_allocator,
     const SkISize& size)
     : wait_for_surface_read_finished_(this) {
@@ -102,7 +102,7 @@
 }
 
 bool SoftwareSurface::SetupSkiaSurface(
-    fuchsia::sysmem::AllocatorSyncPtr& sysmem_allocator,
+    fuchsia::sysmem2::AllocatorSyncPtr& sysmem_allocator,
     fuchsia::ui::composition::AllocatorPtr& flatland_allocator,
     const SkISize& size) {
   if (size.isEmpty()) {
@@ -112,9 +112,10 @@
 
   // Allocate a "local" sysmem token to represent flutter's handle to the
   // sysmem buffer.
-  fuchsia::sysmem::BufferCollectionTokenSyncPtr local_token;
-  zx_status_t allocate_status =
-      sysmem_allocator->AllocateSharedCollection(local_token.NewRequest());
+  fuchsia::sysmem2::BufferCollectionTokenSyncPtr local_token;
+  zx_status_t allocate_status = sysmem_allocator->AllocateSharedCollection(
+      std::move(fuchsia::sysmem2::AllocatorAllocateSharedCollectionRequest{}
+                    .set_token_request(local_token.NewRequest())));
   if (allocate_status != ZX_OK) {
     FML_LOG(ERROR) << "Failed to allocate collection: "
                    << zx_status_get_string(allocate_status);
@@ -123,14 +124,19 @@
 
   // Create a single Duplicate of the token and Sync it; the single duplicate
   // token represents scenic's handle to the sysmem buffer.
-  std::vector<fuchsia::sysmem::BufferCollectionTokenHandle> duplicate_tokens;
+  fuchsia::sysmem2::BufferCollectionToken_DuplicateSync_Result duplicate_result;
   zx_status_t duplicate_status = local_token->DuplicateSync(
-      std::vector<zx_rights_t>{ZX_RIGHT_SAME_RIGHTS}, &duplicate_tokens);
+      std::move(fuchsia::sysmem2::BufferCollectionTokenDuplicateSyncRequest{}
+                    .set_rights_attenuation_masks(
+                        std::vector<zx_rights_t>{ZX_RIGHT_SAME_RIGHTS})),
+      &duplicate_result);
   if (duplicate_status != ZX_OK) {
     FML_LOG(ERROR) << "Failed to duplicate collection token: "
                    << zx_status_get_string(duplicate_status);
     return false;
   }
+  auto duplicate_tokens =
+      std::move(*duplicate_result.response().mutable_tokens());
   if (duplicate_tokens.size() != 1u) {
     FML_LOG(ERROR) << "Failed to duplicate collection token: Incorrect number "
                       "of tokens returned.";
@@ -153,7 +159,8 @@
 
   fuchsia::ui::composition::RegisterBufferCollectionArgs args;
   args.set_export_token(std::move(export_token));
-  args.set_buffer_collection_token(std::move(scenic_token));
+  args.set_buffer_collection_token(
+      fuchsia::sysmem::BufferCollectionTokenHandle(scenic_token.TakeChannel()));
   args.set_usage(
       fuchsia::ui::composition::RegisterBufferCollectionUsage::DEFAULT);
   flatland_allocator->RegisterBufferCollection(
@@ -167,9 +174,11 @@
       });
 
   // Acquire flutter's local handle to the sysmem buffer.
-  fuchsia::sysmem::BufferCollectionSyncPtr buffer_collection;
-  zx_status_t bind_status = sysmem_allocator->BindSharedCollection(
-      std::move(local_token), buffer_collection.NewRequest());
+  fuchsia::sysmem2::BufferCollectionSyncPtr buffer_collection;
+  zx_status_t bind_status = sysmem_allocator->BindSharedCollection(std::move(
+      fuchsia::sysmem2::AllocatorBindSharedCollectionRequest{}
+          .set_token(std::move(local_token))
+          .set_buffer_collection_request(buffer_collection.NewRequest())));
   if (bind_status != ZX_OK) {
     FML_LOG(ERROR) << "Failed to bind collection token: "
                    << zx_status_get_string(bind_status);
@@ -178,32 +187,26 @@
 
   // Set flutter's constraints on the sysmem buffer.  Software rendering only
   // requires CPU access to the surface and a basic R8G8B8A8 pixel format.
-  fuchsia::sysmem::BufferCollectionConstraints constraints;
-  constraints.min_buffer_count = 1;
-  constraints.usage.cpu =
-      fuchsia::sysmem::cpuUsageWrite | fuchsia::sysmem::cpuUsageWriteOften;
-  constraints.has_buffer_memory_constraints = true;
-  constraints.buffer_memory_constraints.physically_contiguous_required = false;
-  constraints.buffer_memory_constraints.secure_required = false;
-  constraints.buffer_memory_constraints.ram_domain_supported = true;
-  constraints.buffer_memory_constraints.cpu_domain_supported = true;
-  constraints.buffer_memory_constraints.inaccessible_domain_supported = false;
-  constraints.image_format_constraints_count = 1;
-  fuchsia::sysmem::ImageFormatConstraints& image_constraints =
-      constraints.image_format_constraints[0];
-  image_constraints = fuchsia::sysmem::ImageFormatConstraints();
-  image_constraints.min_coded_width = static_cast<uint32_t>(size.fWidth);
-  image_constraints.min_coded_height = static_cast<uint32_t>(size.fHeight);
-  image_constraints.min_bytes_per_row = static_cast<uint32_t>(size.fWidth) * 4;
-  image_constraints.pixel_format.type =
-      fuchsia::sysmem::PixelFormatType::R8G8B8A8;
-  image_constraints.color_spaces_count = 1;
-  image_constraints.color_space[0].type = fuchsia::sysmem::ColorSpaceType::SRGB;
-  image_constraints.pixel_format.has_format_modifier = true;
-  image_constraints.pixel_format.format_modifier.value =
-      fuchsia::sysmem::FORMAT_MODIFIER_LINEAR;
-  zx_status_t set_constraints_status =
-      buffer_collection->SetConstraints(true, constraints);
+  fuchsia::sysmem2::BufferCollectionConstraints constraints;
+  constraints.set_min_buffer_count(1);
+  constraints.mutable_usage()->set_cpu(fuchsia::sysmem2::CPU_USAGE_WRITE |
+                                       fuchsia::sysmem2::CPU_USAGE_WRITE_OFTEN);
+  auto& bmc = *constraints.mutable_buffer_memory_constraints();
+  bmc.set_physically_contiguous_required(false);
+  bmc.set_secure_required(false);
+  bmc.set_ram_domain_supported(true);
+  bmc.set_cpu_domain_supported(true);
+  bmc.set_inaccessible_domain_supported(false);
+  auto& ifc = constraints.mutable_image_format_constraints()->emplace_back();
+  ifc.set_min_size(fuchsia::math::SizeU{static_cast<uint32_t>(size.fWidth),
+                                        static_cast<uint32_t>(size.fHeight)});
+  ifc.set_min_bytes_per_row(static_cast<uint32_t>(size.fWidth) * 4);
+  ifc.set_pixel_format(fuchsia::images2::PixelFormat::R8G8B8A8);
+  ifc.mutable_color_spaces()->emplace_back(fuchsia::images2::ColorSpace::SRGB);
+  ifc.set_pixel_format_modifier(fuchsia::images2::PixelFormatModifier::LINEAR);
+  zx_status_t set_constraints_status = buffer_collection->SetConstraints(
+      std::move(fuchsia::sysmem2::BufferCollectionSetConstraintsRequest{}
+                    .set_constraints(std::move(constraints))));
   if (set_constraints_status != ZX_OK) {
     FML_LOG(ERROR) << "Failed to set constraints: "
                    << zx_status_get_string(set_constraints_status);
@@ -211,30 +214,39 @@
   }
 
   // Wait for sysmem to allocate, now that constraints are set.
-  fuchsia::sysmem::BufferCollectionInfo_2 buffer_collection_info;
-  zx_status_t allocation_status = ZX_OK;
+  fuchsia::sysmem2::BufferCollection_WaitForAllBuffersAllocated_Result
+      wait_result;
   zx_status_t wait_for_allocated_status =
-      buffer_collection->WaitForBuffersAllocated(&allocation_status,
-                                                 &buffer_collection_info);
-  if (allocation_status != ZX_OK) {
-    FML_LOG(ERROR) << "Failed to allocate: "
-                   << zx_status_get_string(allocation_status);
-    return false;
-  }
+      buffer_collection->WaitForAllBuffersAllocated(&wait_result);
   if (wait_for_allocated_status != ZX_OK) {
     FML_LOG(ERROR) << "Failed to wait for allocate: "
                    << zx_status_get_string(wait_for_allocated_status);
     return false;
   }
+  if (!wait_result.is_response()) {
+    if (wait_result.is_framework_err()) {
+      FML_LOG(ERROR) << "Failed to allocate (framework_err): "
+                     << fidl::ToUnderlying(wait_result.framework_err());
+    } else {
+      FML_DCHECK(wait_result.is_err());
+      FML_LOG(ERROR) << "Failed to allocate (err): "
+                     << static_cast<uint32_t>(wait_result.err());
+    }
+    return false;
+  }
+  auto buffer_collection_info =
+      std::move(*wait_result.response().mutable_buffer_collection_info());
 
   // Cache the allocated surface VMO and metadata.
-  FML_CHECK(buffer_collection_info.settings.buffer_settings.size_bytes != 0);
-  FML_CHECK(buffer_collection_info.buffers[0].vmo != ZX_HANDLE_INVALID);
-  surface_vmo_ = std::move(buffer_collection_info.buffers[0].vmo);
+  FML_CHECK(buffer_collection_info.settings().buffer_settings().size_bytes() !=
+            0);
+  FML_CHECK(buffer_collection_info.buffers()[0].vmo().is_valid());
+  surface_vmo_ =
+      std::move(*buffer_collection_info.mutable_buffers()->at(0).mutable_vmo());
   surface_size_bytes_ =
-      buffer_collection_info.settings.buffer_settings.size_bytes;
-  if (buffer_collection_info.settings.buffer_settings.coherency_domain ==
-      fuchsia::sysmem::CoherencyDomain::RAM) {
+      buffer_collection_info.settings().buffer_settings().size_bytes();
+  if (buffer_collection_info.settings().buffer_settings().coherency_domain() ==
+      fuchsia::sysmem2::CoherencyDomain::RAM) {
     // RAM coherency domain requires a cache clean when writes are finished.
     needs_cache_clean_ = true;
   }
@@ -252,7 +264,7 @@
 
   // Now that the buffer is CPU-readable, it's safe to discard flutter's
   // connection to sysmem.
-  zx_status_t close_status = buffer_collection->Close();
+  zx_status_t close_status = buffer_collection->Release();
   if (close_status != ZX_OK) {
     FML_LOG(ERROR) << "Failed to close buffer: "
                    << zx_status_get_string(close_status);
@@ -261,9 +273,9 @@
 
   // Wrap the buffer in a software-rendered Skia surface.
   const uint64_t vmo_offset =
-      buffer_collection_info.buffers[0].vmo_usable_start;
+      buffer_collection_info.buffers()[0].vmo_usable_start();
   const size_t vmo_stride =
-      BytesPerRow(buffer_collection_info.settings, 4u, size.width());
+      BytesPerRow(buffer_collection_info.settings(), 4u, size.width());
   SkSurfaceProps sk_surface_props(0, kUnknown_SkPixelGeometry);
   sk_surface_ = SkSurfaces::WrapPixels(
       SkImageInfo::Make(size, kSkiaColorType, kPremul_SkAlphaType,
diff --git a/shell/platform/fuchsia/flutter/software_surface.h b/shell/platform/fuchsia/flutter/software_surface.h
index 8ea4c0d..e42cdfc 100644
--- a/shell/platform/fuchsia/flutter/software_surface.h
+++ b/shell/platform/fuchsia/flutter/software_surface.h
@@ -5,7 +5,7 @@
 #ifndef FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_SOFTWARE_SURFACE_H_
 #define FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_SOFTWARE_SURFACE_H_
 
-#include <fuchsia/sysmem/cpp/fidl.h>
+#include <fuchsia/sysmem2/cpp/fidl.h>
 #include <fuchsia/ui/composition/cpp/fidl.h>
 #include <lib/async/cpp/wait.h>
 #include <lib/zx/event.h>
@@ -25,7 +25,7 @@
 
 class SoftwareSurface final : public SurfaceProducerSurface {
  public:
-  SoftwareSurface(fuchsia::sysmem::AllocatorSyncPtr& sysmem_allocator,
+  SoftwareSurface(fuchsia::sysmem2::AllocatorSyncPtr& sysmem_allocator,
                   fuchsia::ui::composition::AllocatorPtr& flatland_allocator,
                   const SkISize& size);
 
@@ -79,7 +79,7 @@
                              const zx_packet_signal_t* signal);
 
   bool SetupSkiaSurface(
-      fuchsia::sysmem::AllocatorSyncPtr& sysmem_allocator,
+      fuchsia::sysmem2::AllocatorSyncPtr& sysmem_allocator,
       fuchsia::ui::composition::AllocatorPtr& flatland_allocator,
       const SkISize& size);
 
diff --git a/shell/platform/fuchsia/flutter/software_surface_producer.cc b/shell/platform/fuchsia/flutter/software_surface_producer.cc
index d279a92..10c53ce 100644
--- a/shell/platform/fuchsia/flutter/software_surface_producer.cc
+++ b/shell/platform/fuchsia/flutter/software_surface_producer.cc
@@ -49,10 +49,12 @@
 
 SoftwareSurfaceProducer::SoftwareSurfaceProducer() {
   zx_status_t status = fdio_service_connect(
-      "/svc/fuchsia.sysmem.Allocator",
+      "/svc/fuchsia.sysmem2.Allocator",
       sysmem_allocator_.NewRequest().TakeChannel().release());
-  sysmem_allocator_->SetDebugClientInfo(GetCurrentProcessName(),
-                                        GetCurrentProcessId());
+  sysmem_allocator_->SetDebugClientInfo(
+      std::move(fuchsia::sysmem2::AllocatorSetDebugClientInfoRequest{}
+                    .set_name(GetCurrentProcessName())
+                    .set_id(GetCurrentProcessId())));
   FML_DCHECK(status == ZX_OK);
 
   status = fdio_service_connect(
diff --git a/shell/platform/fuchsia/flutter/software_surface_producer.h b/shell/platform/fuchsia/flutter/software_surface_producer.h
index af81492..bcd478d 100644
--- a/shell/platform/fuchsia/flutter/software_surface_producer.h
+++ b/shell/platform/fuchsia/flutter/software_surface_producer.h
@@ -5,7 +5,7 @@
 #ifndef FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_SOFTWARE_SURFACE_PRODUCER_H_
 #define FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_SOFTWARE_SURFACE_PRODUCER_H_
 
-#include <fuchsia/sysmem/cpp/fidl.h>
+#include <fuchsia/sysmem2/cpp/fidl.h>
 #include <fuchsia/ui/composition/cpp/fidl.h>
 
 #include <unordered_map>
@@ -54,7 +54,7 @@
 
   void TraceStats();
 
-  fuchsia::sysmem::AllocatorSyncPtr sysmem_allocator_;
+  fuchsia::sysmem2::AllocatorSyncPtr sysmem_allocator_;
   fuchsia::ui::composition::AllocatorPtr flatland_allocator_;
 
   // These surfaces are available for re-use.
diff --git a/shell/platform/fuchsia/flutter/surface_producer.h b/shell/platform/fuchsia/flutter/surface_producer.h
index bd03531..591d157 100644
--- a/shell/platform/fuchsia/flutter/surface_producer.h
+++ b/shell/platform/fuchsia/flutter/surface_producer.h
@@ -5,6 +5,7 @@
 #ifndef FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_SURFACE_PRODUCER_H_
 #define FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_SURFACE_PRODUCER_H_
 
+#include <fuchsia/sysmem2/cpp/fidl.h>
 #include <fuchsia/ui/composition/cpp/fidl.h>
 #include <lib/zx/event.h>
 
diff --git a/shell/platform/fuchsia/flutter/tests/integration/embedder/flutter-embedder-test.cc b/shell/platform/fuchsia/flutter/tests/integration/embedder/flutter-embedder-test.cc
index 6dd7982..2646442 100644
--- a/shell/platform/fuchsia/flutter/tests/integration/embedder/flutter-embedder-test.cc
+++ b/shell/platform/fuchsia/flutter/tests/integration/embedder/flutter-embedder-test.cc
@@ -237,11 +237,7 @@
                     Protocol{fuchsia::logger::LogSink::Name_},
                     Protocol{fuchsia::inspect::InspectSink::Name_},
                     Protocol{fuchsia::sysmem::Allocator::Name_},
-
-                    // Replace "fuchsia.sysmem2.Allocator" with
-                    // fuchsia::sysmem2::Allocator::Name_
-                    // when available (fuchsia SDK >= 19).
-                    Protocol{"fuchsia.sysmem2.Allocator"},
+                    Protocol{fuchsia::sysmem2::Allocator::Name_},
                     Protocol{fuchsia::tracing::provider::Registry::Name_},
                     Protocol{kVulkanLoaderServiceName},
                 },
@@ -254,11 +250,7 @@
       .capabilities = {Protocol{fuchsia::logger::LogSink::Name_},
                        Protocol{fuchsia::inspect::InspectSink::Name_},
                        Protocol{fuchsia::sysmem::Allocator::Name_},
-
-                       // Replace "fuchsia.sysmem2.Allocator" with
-                       // fuchsia::sysmem2::Allocator::Name_
-                       // when available (fuchsia SDK >= 19).
-                       Protocol{"fuchsia.sysmem2.Allocator"},
+                       Protocol{fuchsia::sysmem2::Allocator::Name_},
                        Protocol{fuchsia::tracing::provider::Registry::Name_},
                        Protocol{kVulkanLoaderServiceName}},
       .source = ParentRef{},
diff --git a/shell/platform/fuchsia/flutter/tests/integration/utils/portable_ui_test.cc b/shell/platform/fuchsia/flutter/tests/integration/utils/portable_ui_test.cc
index af529b5..45b2f3c 100644
--- a/shell/platform/fuchsia/flutter/tests/integration/utils/portable_ui_test.cc
+++ b/shell/platform/fuchsia/flutter/tests/integration/utils/portable_ui_test.cc
@@ -82,11 +82,7 @@
       .capabilities = {Protocol{fuchsia::logger::LogSink::Name_},
                        Protocol{fuchsia::inspect::InspectSink::Name_},
                        Protocol{fuchsia::sysmem::Allocator::Name_},
-
-                       // Replace string with
-                       // fuchsia::sysmem2::Allocator::Name_
-                       // when available (fuchsia SDK >= 19).
-                       Protocol{"fuchsia.sysmem2.Allocator"},
+                       Protocol{fuchsia::sysmem2::Allocator::Name_},
                        Protocol{fuchsia::tracing::provider::Registry::Name_},
                        Protocol{fuchsia::ui::input::ImeService::Name_},
                        Protocol{kPosixSocketProviderName},
diff --git a/shell/platform/fuchsia/flutter/tests/integration/utils/portable_ui_test.h b/shell/platform/fuchsia/flutter/tests/integration/utils/portable_ui_test.h
index 363dba7..62b5417 100644
--- a/shell/platform/fuchsia/flutter/tests/integration/utils/portable_ui_test.h
+++ b/shell/platform/fuchsia/flutter/tests/integration/utils/portable_ui_test.h
@@ -5,7 +5,7 @@
 #ifndef FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_TESTS_INTEGRATION_UTILS_PORTABLE_UI_TEST_H_
 #define FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_TESTS_INTEGRATION_UTILS_PORTABLE_UI_TEST_H_
 
-#include <fuchsia/sysmem/cpp/fidl.h>
+#include <fuchsia/sysmem2/cpp/fidl.h>
 #include <fuchsia/ui/app/cpp/fidl.h>
 #include <fuchsia/ui/composition/cpp/fidl.h>
 #include <fuchsia/ui/display/singleton/cpp/fidl.h>
diff --git a/shell/platform/fuchsia/flutter/vulkan_surface.cc b/shell/platform/fuchsia/flutter/vulkan_surface.cc
index 8cda71c..6b4778f 100644
--- a/shell/platform/fuchsia/flutter/vulkan_surface.cc
+++ b/shell/platform/fuchsia/flutter/vulkan_surface.cc
@@ -44,7 +44,7 @@
 const VkSysmemColorSpaceFUCHSIA kSrgbColorSpace = {
     .sType = VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA,
     .pNext = nullptr,
-    .colorSpace = static_cast<uint32_t>(fuchsia::sysmem::ColorSpaceType::SRGB),
+    .colorSpace = static_cast<uint32_t>(fuchsia::images2::ColorSpace::SRGB),
 };
 
 }  // namespace
@@ -147,7 +147,7 @@
 
 VulkanSurface::VulkanSurface(
     vulkan::VulkanProvider& vulkan_provider,
-    fuchsia::sysmem::AllocatorSyncPtr& sysmem_allocator,
+    fuchsia::sysmem2::AllocatorSyncPtr& sysmem_allocator,
     fuchsia::ui::composition::AllocatorPtr& flatland_allocator,
     sk_sp<GrDirectContext> context,
     const SkISize& size)
@@ -263,7 +263,7 @@
 }
 
 bool VulkanSurface::AllocateDeviceMemory(
-    fuchsia::sysmem::AllocatorSyncPtr& sysmem_allocator,
+    fuchsia::sysmem2::AllocatorSyncPtr& sysmem_allocator,
     fuchsia::ui::composition::AllocatorPtr& flatland_allocator,
     sk_sp<GrDirectContext> context,
     const SkISize& size) {
@@ -273,17 +273,21 @@
     return false;
   }
 
-  fuchsia::sysmem::BufferCollectionTokenSyncPtr vulkan_token;
-  zx_status_t status =
-      sysmem_allocator->AllocateSharedCollection(vulkan_token.NewRequest());
+  fuchsia::sysmem2::BufferCollectionTokenSyncPtr vulkan_token;
+  zx_status_t status = sysmem_allocator->AllocateSharedCollection(
+      std::move(fuchsia::sysmem2::AllocatorAllocateSharedCollectionRequest{}
+                    .set_token_request(vulkan_token.NewRequest())));
   LOG_AND_RETURN(status != ZX_OK,
                  "VulkanSurface: Failed to allocate collection");
-  fuchsia::sysmem::BufferCollectionTokenSyncPtr scenic_token;
-  status = vulkan_token->Duplicate(std::numeric_limits<uint32_t>::max(),
-                                   scenic_token.NewRequest());
+  fuchsia::sysmem2::BufferCollectionTokenSyncPtr scenic_token;
+  status = vulkan_token->Duplicate(
+      std::move(fuchsia::sysmem2::BufferCollectionTokenDuplicateRequest{}
+                    .set_rights_attenuation_mask(ZX_RIGHT_SAME_RIGHTS)
+                    .set_token_request(scenic_token.NewRequest())));
   LOG_AND_RETURN(status != ZX_OK,
                  "VulkanSurface: Failed to duplicate collection token");
-  status = vulkan_token->Sync();
+  fuchsia::sysmem2::Node_Sync_Result sync_result;
+  status = vulkan_token->Sync(&sync_result);
   LOG_AND_RETURN(status != ZX_OK,
                  "VulkanSurface: Failed to sync collection token");
 
@@ -292,7 +296,8 @@
 
   fuchsia::ui::composition::RegisterBufferCollectionArgs args;
   args.set_export_token(std::move(export_token));
-  args.set_buffer_collection_token(std::move(scenic_token));
+  args.set_buffer_collection_token(fuchsia::sysmem::BufferCollectionTokenHandle(
+      scenic_token.Unbind().TakeChannel()));
   args.set_usage(
       fuchsia::ui::composition::RegisterBufferCollectionUsage::DEFAULT);
   flatland_allocator->RegisterBufferCollection(
diff --git a/shell/platform/fuchsia/flutter/vulkan_surface.h b/shell/platform/fuchsia/flutter/vulkan_surface.h
index 17ef7c5..3e051b1 100644
--- a/shell/platform/fuchsia/flutter/vulkan_surface.h
+++ b/shell/platform/fuchsia/flutter/vulkan_surface.h
@@ -5,6 +5,7 @@
 #ifndef FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_VULKAN_SURFACE_H_
 #define FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_VULKAN_SURFACE_H_
 
+#include <fuchsia/sysmem2/cpp/fidl.h>
 #include <lib/async/cpp/wait.h>
 #include <lib/zx/event.h>
 #include <lib/zx/vmo.h>
@@ -44,7 +45,7 @@
 class VulkanSurface final : public SurfaceProducerSurface {
  public:
   VulkanSurface(vulkan::VulkanProvider& vulkan_provider,
-                fuchsia::sysmem::AllocatorSyncPtr& sysmem_allocator,
+                fuchsia::sysmem2::AllocatorSyncPtr& sysmem_allocator,
                 fuchsia::ui::composition::AllocatorPtr& flatland_allocator,
                 sk_sp<GrDirectContext> context,
                 const SkISize& size);
@@ -135,7 +136,7 @@
                      const zx_packet_signal_t* signal);
 
   bool AllocateDeviceMemory(
-      fuchsia::sysmem::AllocatorSyncPtr& sysmem_allocator,
+      fuchsia::sysmem2::AllocatorSyncPtr& sysmem_allocator,
       fuchsia::ui::composition::AllocatorPtr& flatland_allocator,
       sk_sp<GrDirectContext> context,
       const SkISize& size);
diff --git a/shell/platform/fuchsia/flutter/vulkan_surface_pool.cc b/shell/platform/fuchsia/flutter/vulkan_surface_pool.cc
index 94df4a0..8d49a0a 100644
--- a/shell/platform/fuchsia/flutter/vulkan_surface_pool.cc
+++ b/shell/platform/fuchsia/flutter/vulkan_surface_pool.cc
@@ -35,10 +35,12 @@
   FML_CHECK(context_ != nullptr);
 
   zx_status_t status = fdio_service_connect(
-      "/svc/fuchsia.sysmem.Allocator",
+      "/svc/fuchsia.sysmem2.Allocator",
       sysmem_allocator_.NewRequest().TakeChannel().release());
-  sysmem_allocator_->SetDebugClientInfo(GetCurrentProcessName(),
-                                        GetCurrentProcessId());
+  sysmem_allocator_->SetDebugClientInfo(
+      std::move(fuchsia::sysmem2::AllocatorSetDebugClientInfoRequest{}
+                    .set_name(GetCurrentProcessName())
+                    .set_id(GetCurrentProcessId())));
   FML_DCHECK(status == ZX_OK);
 
   status = fdio_service_connect(
diff --git a/shell/platform/fuchsia/flutter/vulkan_surface_pool.h b/shell/platform/fuchsia/flutter/vulkan_surface_pool.h
index b6ddf25..df4d0b9 100644
--- a/shell/platform/fuchsia/flutter/vulkan_surface_pool.h
+++ b/shell/platform/fuchsia/flutter/vulkan_surface_pool.h
@@ -42,7 +42,7 @@
  private:
   vulkan::VulkanProvider& vulkan_provider_;
   sk_sp<GrDirectContext> context_;
-  fuchsia::sysmem::AllocatorSyncPtr sysmem_allocator_;
+  fuchsia::sysmem2::AllocatorSyncPtr sysmem_allocator_;
   fuchsia::ui::composition::AllocatorPtr flatland_allocator_;
   std::vector<std::unique_ptr<VulkanSurface>> available_surfaces_;
   std::unordered_map<uintptr_t, std::unique_ptr<VulkanSurface>>