@@ -40,13 +40,6 @@ Scene::Scene(std::shared_ptr<flutter::Layer> rootLayer,
4040 uint32_t rasterizerTracingThreshold,
4141 bool checkerboardRasterCacheImages,
4242 bool checkerboardOffscreenLayers) {
43- // Currently only supports a single window.
44- auto viewport_metrics = UIDartState::Current ()
45- ->platform_configuration ()
46- ->get_window (0 )
47- ->viewport_metrics ();
48- device_pixel_ratio_ = static_cast <float >(viewport_metrics.device_pixel_ratio );
49-
5043 layer_tree_config_ = std::make_unique<LayerTree::Config>();
5144 layer_tree_config_->root_layer = std::move (rootLayer);
5245 layer_tree_config_->rasterizer_tracing_threshold = rasterizerTracingThreshold;
@@ -65,19 +58,22 @@ void Scene::dispose() {
6558
6659Dart_Handle Scene::toImageSync (uint32_t width,
6760 uint32_t height,
61+ double pixel_ratio,
6862 Dart_Handle raw_image_handle) {
6963 TRACE_EVENT0 (" flutter" , " Scene::toImageSync" );
7064
7165 if (!layer_tree_config_) {
7266 return tonic::ToDart (" Scene's layer tree has been taken away." );
7367 }
7468
75- Scene::RasterizeToImage (width, height, raw_image_handle);
69+ Scene::RasterizeToImage (width, height, static_cast <float >(pixel_ratio),
70+ raw_image_handle);
7671 return Dart_Null ();
7772}
7873
7974Dart_Handle Scene::toImage (uint32_t width,
8075 uint32_t height,
76+ double pixel_ratio,
8177 Dart_Handle raw_image_callback) {
8278 TRACE_EVENT0 (" flutter" , " Scene::toImage" );
8379
@@ -86,7 +82,8 @@ Dart_Handle Scene::toImage(uint32_t width,
8682 }
8783
8884 return Picture::RasterizeLayerTreeToImage (
89- BuildLayerTree (width, height, device_pixel_ratio_), raw_image_callback);
85+ BuildLayerTree (width, height, static_cast <float >(pixel_ratio)),
86+ raw_image_callback);
9087}
9188
9289static sk_sp<DlImage> CreateDeferredImage (
@@ -114,6 +111,7 @@ static sk_sp<DlImage> CreateDeferredImage(
114111
115112void Scene::RasterizeToImage (uint32_t width,
116113 uint32_t height,
114+ float pixel_ratio,
117115 Dart_Handle raw_image_handle) {
118116 auto * dart_state = UIDartState::Current ();
119117 if (!dart_state) {
@@ -126,17 +124,17 @@ void Scene::RasterizeToImage(uint32_t width,
126124 auto image = CanvasImage::Create ();
127125 auto dl_image = CreateDeferredImage (
128126 dart_state->IsImpellerEnabled (),
129- BuildLayerTree (width, height, device_pixel_ratio_),
130- std::move (snapshot_delegate), std::move (raster_task_runner),
131- std::move (unref_queue));
127+ BuildLayerTree (width, height, pixel_ratio), std::move (snapshot_delegate),
128+ std::move (raster_task_runner), std::move (unref_queue));
132129 image->set_image (dl_image);
133130 image->AssociateWithDartWrapper (raw_image_handle);
134131}
135132
136133std::unique_ptr<flutter::LayerTree> Scene::takeLayerTree (uint64_t width,
137- uint64_t height) {
134+ uint64_t height,
135+ float pixel_ratio) {
138136 if (layer_tree_config_ != nullptr ) {
139- auto layer_tree = BuildLayerTree (width, height, device_pixel_ratio_ );
137+ auto layer_tree = BuildLayerTree (width, height, pixel_ratio );
140138 // TODO(dkwingsmt): We don't need to reset here. But certain unit tests test
141139 // it. Let's keep it this way for now.
142140 layer_tree_config_.reset ();
@@ -149,6 +147,7 @@ std::unique_ptr<flutter::LayerTree> Scene::takeLayerTree(uint64_t width,
149147std::unique_ptr<LayerTree> Scene::BuildLayerTree (uint32_t width,
150148 uint32_t height,
151149 float pixel_ratio) {
150+ FML_CHECK (layer_tree_config_ != nullptr );
152151 return std::make_unique<LayerTree>(*layer_tree_config_,
153152 SkISize::Make (width, height), pixel_ratio);
154153}
0 commit comments