#ifndef FLUTTER_SHELL_COMMON_SHELL_IO_MANAGER_H_
#define FLUTTER_SHELL_COMMON_SHELL_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 "flutter/lib/ui/io_manager.h"
#include "include/gpu/GrContext.h"
namespace flutter {
class ShellIOManager final : public IOManager {
public:
static sk_sp<GrContext> CreateCompatibleResourceLoadingContext(
GrBackend backend,
sk_sp<const GrGLInterface> gl_interface);
ShellIOManager(sk_sp<GrContext> resource_context,
fml::RefPtr<fml::TaskRunner> unref_queue_task_runner);
~ShellIOManager() override;
void NotifyResourceContextAvailable(sk_sp<GrContext> resource_context);
void UpdateResourceContext(sk_sp<GrContext> resource_context);
fml::WeakPtr<ShellIOManager> GetWeakPtr();
fml::WeakPtr<IOManager> GetWeakIOManager() const override;
fml::WeakPtr<GrContext> GetResourceContext() const override;
fml::RefPtr<flutter::SkiaUnrefQueue> GetSkiaUnrefQueue() const override;
private:
sk_sp<GrContext> resource_context_;
std::unique_ptr<fml::WeakPtrFactory<GrContext>>
resource_context_weak_factory_;
fml::RefPtr<flutter::SkiaUnrefQueue> unref_queue_;
fml::WeakPtrFactory<ShellIOManager> weak_factory_;
FML_DISALLOW_COPY_AND_ASSIGN(ShellIOManager);
};
}
#endif