5#include "flutter/lib/ui/compositing/scene.h"
7#include "flutter/fml/trace_event.h"
8#include "flutter/lib/ui/painting/display_list_deferred_image_gpu_skia.h"
9#include "flutter/lib/ui/painting/image.h"
10#include "flutter/lib/ui/painting/picture.h"
11#include "flutter/lib/ui/ui_dart_state.h"
12#include "flutter/lib/ui/window/platform_configuration.h"
13#if IMPELLER_SUPPORTS_RENDERING
14#include "flutter/lib/ui/painting/display_list_deferred_image_gpu_impeller.h"
28 std::shared_ptr<flutter::Layer> rootLayer,
29 uint32_t rasterizerTracingThreshold,
30 bool checkerboardRasterCacheImages,
31 bool checkerboardOffscreenLayers) {
32 auto scene = fml::MakeRefCounted<Scene>(
33 std::move(rootLayer), rasterizerTracingThreshold,
34 checkerboardRasterCacheImages, checkerboardOffscreenLayers);
35 scene->AssociateWithDartWrapper(scene_handle);
38Scene::Scene(std::shared_ptr<flutter::Layer> rootLayer,
39 uint32_t rasterizerTracingThreshold,
40 bool checkerboardRasterCacheImages,
41 bool checkerboardOffscreenLayers) {
42 layer_tree_config_.
root_layer = std::move(rootLayer);
45 checkerboardRasterCacheImages;
47 checkerboardOffscreenLayers;
53 return layer_tree_config_.
root_layer !=
nullptr;
70 Scene::RasterizeToImage(
width,
height, raw_image_handle);
89 std::unique_ptr<LayerTree> layer_tree,
93#if IMPELLER_SUPPORTS_RENDERING
96 std::move(snapshot_delegate),
97 std::move(raster_task_runner));
101 const auto& frame_size = layer_tree->frame_size();
106 image_info, std::move(layer_tree), std::move(snapshot_delegate),
107 raster_task_runner, std::move(unref_queue));
110void Scene::RasterizeToImage(uint32_t
width,
117 auto unref_queue = dart_state->GetSkiaUnrefQueue();
118 auto snapshot_delegate = dart_state->GetSnapshotDelegate();
119 auto raster_task_runner = dart_state->GetTaskRunners().GetRasterTaskRunner();
123 dart_state->IsImpellerEnabled(), BuildLayerTree(
width,
height),
124 std::move(snapshot_delegate), std::move(raster_task_runner),
125 std::move(unref_queue));
126 image->set_image(dl_image);
127 image->AssociateWithDartWrapper(raw_image_handle);
135std::unique_ptr<LayerTree> Scene::BuildLayerTree(uint32_t
width,
140 return std::make_unique<LayerTree>(layer_tree_config_,
@ kPremul_SkAlphaType
pixel components are premultiplied by alpha
@ kRGBA_8888_SkColorType
pixel with 8 bits for red, green, blue, alpha; in 32-bit word
static fml::RefPtr< CanvasImage > Create()
static sk_sp< DlDeferredImageGPUImpeller > Make(std::unique_ptr< LayerTree > layer_tree, fml::TaskRunnerAffineWeakPtr< SnapshotDelegate > snapshot_delegate, fml::RefPtr< fml::TaskRunner > raster_task_runner)
static sk_sp< DlDeferredImageGPUSkia > MakeFromLayerTree(const SkImageInfo &image_info, std::unique_ptr< LayerTree > layer_tree, fml::TaskRunnerAffineWeakPtr< SnapshotDelegate > snapshot_delegate, const fml::RefPtr< fml::TaskRunner > &raster_task_runner, fml::RefPtr< SkiaUnrefQueue > unref_queue)
static Dart_Handle RasterizeLayerTreeToImage(std::unique_ptr< LayerTree > layer_tree, Dart_Handle raw_image_callback)
static void create(Dart_Handle scene_handle, std::shared_ptr< flutter::Layer > rootLayer, uint32_t rasterizerTracingThreshold, bool checkerboardRasterCacheImages, bool checkerboardOffscreenLayers)
std::unique_ptr< flutter::LayerTree > takeLayerTree(uint64_t width, uint64_t height)
Dart_Handle toImage(uint32_t width, uint32_t height, Dart_Handle raw_image_handle)
Dart_Handle toImageSync(uint32_t width, uint32_t height, Dart_Handle raw_image_handle)
static UIDartState * Current()
struct _Dart_Handle * Dart_Handle
DART_EXPORT Dart_Handle Dart_Null(void)
#define IMPLEMENT_WRAPPERTYPEINFO(LibraryName, ClassName)
static sk_sp< DlImage > CreateDeferredImage(bool impeller, std::unique_ptr< LayerTree > layer_tree, fml::TaskRunnerAffineWeakPtr< SnapshotDelegate > snapshot_delegate, fml::RefPtr< fml::TaskRunner > raster_task_runner, fml::RefPtr< SkiaUnrefQueue > unref_queue)
Dart_Handle ToDart(const T &object)
static constexpr SkISize Make(int32_t w, int32_t h)
static SkImageInfo Make(int width, int height, SkColorType ct, SkAlphaType at)
bool checkerboard_raster_cache_images
bool checkerboard_offscreen_layers
std::shared_ptr< Layer > root_layer
uint32_t rasterizer_tracing_threshold
#define TRACE_EVENT0(category_group, name)