blob: bd03531c167d0838d07130f1de3cb13f32f91a33 [file] [log] [blame]
// 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.
#ifndef FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_SURFACE_PRODUCER_H_
#define FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_SURFACE_PRODUCER_H_
#include <fuchsia/ui/composition/cpp/fidl.h>
#include <lib/zx/event.h>
#include <functional>
#include <memory>
#include <vector>
#include "third_party/skia/include/core/SkSize.h"
#include "third_party/skia/include/core/SkSurface.h"
#include "third_party/skia/include/gpu/GrDirectContext.h"
namespace flutter_runner {
using ReleaseImageCallback = std::function<void()>;
// This represents an abstract notion of a "rendering surface", which is a
// destination for pixels drawn by some rendering engine. In this case, the
// rendering engine is Skia combined with one of its rendering backends.
//
// In addition to allowing Skia-based drawing via `GetSkiaSurface`, this
// rendering surface can be shared with Scenic via `SetImageId`,
// `GetBufferCollectionImportToken`, `GetAcquireFene`, and `GetReleaseFence`.
class SurfaceProducerSurface {
public:
virtual ~SurfaceProducerSurface() = default;
virtual bool IsValid() const = 0;
virtual SkISize GetSize() const = 0;
virtual void SetImageId(uint32_t image_id) = 0;
virtual uint32_t GetImageId() = 0;
virtual sk_sp<SkSurface> GetSkiaSurface() const = 0;
virtual fuchsia::ui::composition::BufferCollectionImportToken
GetBufferCollectionImportToken() = 0;
virtual zx::event GetAcquireFence() = 0;
virtual zx::event GetReleaseFence() = 0;
virtual void SetReleaseImageCallback(
ReleaseImageCallback release_image_callback) = 0;
virtual size_t AdvanceAndGetAge() = 0;
virtual bool FlushSessionAcquireAndReleaseEvents() = 0;
virtual void SignalWritesFinished(
const std::function<void(void)>& on_writes_committed) = 0;
};
// This represents an abstract notion of "surface producer", which serves as a
// source for `SurfaceProducerSurface`s. Produces surfaces should be returned
// to this `SurfaceProducer` via `SubmitSurfaces`, at which point they will be
// shared with Scenic.
class SurfaceProducer {
public:
virtual ~SurfaceProducer() = default;
virtual GrDirectContext* gr_context() const = 0;
virtual std::unique_ptr<SurfaceProducerSurface> ProduceOffscreenSurface(
const SkISize& size) = 0;
virtual std::unique_ptr<SurfaceProducerSurface> ProduceSurface(
const SkISize& size) = 0;
virtual void SubmitSurfaces(
std::vector<std::unique_ptr<SurfaceProducerSurface>> surfaces) = 0;
};
} // namespace flutter_runner
#endif // FLUTTER_SHELL_PLATFORM_FUCHSIA_FLUTTER_SURFACE_PRODUCER_H_