| // Copyright 2017 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. |
| |
| #ifndef FLUTTER_SHELL_COMMON_IO_MANAGER_H_ |
| #define FLUTTER_SHELL_COMMON_IO_MANAGER_H_ |
| |
| #include <memory> |
| |
| #include "flutter/flow/skia_gpu_object.h" |
| #include "flutter/fml/macros.h" |
| #include "flutter/fml/memory/weak_ptr.h" |
| #include "third_party/skia/include/gpu/GrContext.h" |
| |
| namespace shell { |
| |
| class IOManager { |
| public: |
| // Convenience methods for platforms to create a GrContext used to supply to |
| // the IOManager. The platforms may create the context themselves if they so |
| // desire. |
| static sk_sp<GrContext> CreateCompatibleResourceLoadingContext( |
| GrBackend backend); |
| |
| IOManager(sk_sp<GrContext> resource_context, |
| fml::RefPtr<fml::TaskRunner> unref_queue_task_runner); |
| |
| ~IOManager(); |
| |
| fml::WeakPtr<GrContext> GetResourceContext() const; |
| |
| fml::RefPtr<flow::SkiaUnrefQueue> GetSkiaUnrefQueue() const; |
| |
| private: |
| // Resource context management. |
| sk_sp<GrContext> resource_context_; |
| std::unique_ptr<fml::WeakPtrFactory<GrContext>> |
| resource_context_weak_factory_; |
| |
| // Unref queue management. |
| fml::RefPtr<flow::SkiaUnrefQueue> unref_queue_; |
| |
| fml::WeakPtrFactory<IOManager> weak_factory_; |
| |
| FML_DISALLOW_COPY_AND_ASSIGN(IOManager); |
| }; |
| |
| } // namespace shell |
| |
| #endif // FLUTTER_SHELL_COMMON_IO_MANAGER_H_ |