// 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. #include "flutter/lib/ui/gpu/context.h" #include #include #include "flutter/fml/log_level.h" #include "flutter/fml/logging.h" #include "flutter/fml/make_copyable.h" #include "flutter/fml/memory/ref_ptr.h" #include "flutter/lib/ui/ui_dart_state.h" #include "third_party/tonic/dart_wrappable.h" namespace flutter { IMPLEMENT_WRAPPERTYPEINFO(ui, GpuContext); std::string GpuContext::InitializeDefault(Dart_Handle wrapper) { auto dart_state = UIDartState::Current(); if (!dart_state->IsImpellerEnabled()) { return "The GpuContext API requires the Impeller rendering backend to be " "enabled."; } // Grab the Impeller context from the IO manager. std::promise> context_promise; auto impeller_context_future = context_promise.get_future(); dart_state->GetTaskRunners().GetIOTaskRunner()->PostTask( fml::MakeCopyable([promise = std::move(context_promise), io_manager = dart_state->GetIOManager()]() mutable { promise.set_value(io_manager ? io_manager->GetImpellerContext() : nullptr); })); auto impeller_context = impeller_context_future.get(); if (!impeller_context) { return "Unable to retrieve the Impeller context."; } auto res = fml::MakeRefCounted(impeller_context); res->AssociateWithDartWrapper(wrapper); return ""; } GpuContext::GpuContext(std::shared_ptr context) : context_(std::move(context)) {} GpuContext::~GpuContext() = default; } // namespace flutter