@@ -193,18 +193,19 @@ RasterStatus Rasterizer::Draw(
193193 .GetRasterTaskRunner ()
194194 ->RunsTasksOnCurrentThread ());
195195
196- RasterStatus raster_status = RasterStatus:: kFailed ;
196+ DoDrawResult draw_result ;
197197 LayerTreePipeline::Consumer consumer =
198- [&](std::unique_ptr<LayerTreeItem> item) {
198+ [this , &draw_result,
199+ &discard_callback](std::unique_ptr<LayerTreeItem> item) {
199200 std::unique_ptr<LayerTree> layer_tree = std::move (item->layer_tree );
200201 std::unique_ptr<FrameTimingsRecorder> frame_timings_recorder =
201202 std::move (item->frame_timings_recorder );
202203 float device_pixel_ratio = item->device_pixel_ratio ;
203204 if (discard_callback (*layer_tree.get ())) {
204- raster_status = RasterStatus::kDiscarded ;
205+ draw_result. raster_status = RasterStatus::kDiscarded ;
205206 } else {
206- raster_status = DoDraw (std::move (frame_timings_recorder),
207- std::move (layer_tree), device_pixel_ratio);
207+ draw_result = DoDraw (std::move (frame_timings_recorder),
208+ std::move (layer_tree), device_pixel_ratio);
208209 }
209210 };
210211
@@ -215,18 +216,15 @@ RasterStatus Rasterizer::Draw(
215216 // if the raster status is to resubmit the frame, we push the frame to the
216217 // front of the queue and also change the consume status to more available.
217218
218- bool should_resubmit_frame = ShouldResubmitFrame (raster_status);
219+ bool should_resubmit_frame = ShouldResubmitFrame (draw_result. raster_status );
219220 if (should_resubmit_frame) {
220- auto resubmitted_layer_tree_item = std::make_unique<LayerTreeItem>(
221- std::move (resubmitted_layer_tree_), std::move (resubmitted_recorder_),
222- resubmitted_pixel_ratio_);
223221 auto front_continuation = pipeline->ProduceIfEmpty ();
224- PipelineProduceResult result =
225- front_continuation. Complete ( std::move (resubmitted_layer_tree_item));
226- if (result .success ) {
222+ PipelineProduceResult pipeline_result = front_continuation. Complete (
223+ std::move (draw_result. resubmitted_layer_tree_item ));
224+ if (pipeline_result .success ) {
227225 consume_result = PipelineConsumeResult::MoreAvailable;
228226 }
229- } else if (raster_status == RasterStatus::kEnqueuePipeline ) {
227+ } else if (draw_result. raster_status == RasterStatus::kEnqueuePipeline ) {
230228 consume_result = PipelineConsumeResult::MoreAvailable;
231229 }
232230
@@ -255,7 +253,7 @@ RasterStatus Rasterizer::Draw(
255253 break ;
256254 }
257255
258- return raster_status;
256+ return draw_result. raster_status ;
259257}
260258
261259bool Rasterizer::ShouldResubmitFrame (const RasterStatus& raster_status) {
@@ -376,7 +374,7 @@ fml::Milliseconds Rasterizer::GetFrameBudget() const {
376374 return delegate_.GetFrameBudget ();
377375};
378376
379- RasterStatus Rasterizer::DoDraw (
377+ Rasterizer::DoDrawResult Rasterizer::DoDraw (
380378 std::unique_ptr<FrameTimingsRecorder> frame_timings_recorder,
381379 std::unique_ptr<flutter::LayerTree> layer_tree,
382380 float device_pixel_ratio) {
@@ -387,7 +385,9 @@ RasterStatus Rasterizer::DoDraw(
387385 ->RunsTasksOnCurrentThread ());
388386
389387 if (!layer_tree || !surface_) {
390- return RasterStatus::kFailed ;
388+ return DoDrawResult{
389+ .raster_status = RasterStatus::kFailed ,
390+ };
391391 }
392392
393393 PersistentCache* persistent_cache = PersistentCache::GetCacheForProcess ();
@@ -399,13 +399,18 @@ RasterStatus Rasterizer::DoDraw(
399399 last_layer_tree_ = std::move (layer_tree);
400400 last_device_pixel_ratio_ = device_pixel_ratio;
401401 } else if (ShouldResubmitFrame (raster_status)) {
402- resubmitted_pixel_ratio_ = device_pixel_ratio;
403- resubmitted_layer_tree_ = std::move (layer_tree);
404- resubmitted_recorder_ = frame_timings_recorder->CloneUntil (
405- FrameTimingsRecorder::State::kBuildEnd );
406- return raster_status;
402+ return DoDrawResult{
403+ .raster_status = raster_status,
404+ .resubmitted_layer_tree_item = std::make_unique<LayerTreeItem>(
405+ std::move (layer_tree),
406+ frame_timings_recorder->CloneUntil (
407+ FrameTimingsRecorder::State::kBuildEnd ),
408+ device_pixel_ratio),
409+ };
407410 } else if (raster_status == RasterStatus::kDiscarded ) {
408- return raster_status;
411+ return DoDrawResult{
412+ .raster_status = raster_status,
413+ };
409414 }
410415
411416 if (persistent_cache->IsDumpingSkp () &&
@@ -473,11 +478,15 @@ RasterStatus Rasterizer::DoDraw(
473478 if (raster_thread_merger_) {
474479 if (raster_thread_merger_->DecrementLease () ==
475480 fml::RasterThreadStatus::kUnmergedNow ) {
476- return RasterStatus::kEnqueuePipeline ;
481+ return DoDrawResult{
482+ .raster_status = RasterStatus::kEnqueuePipeline ,
483+ };
477484 }
478485 }
479486
480- return raster_status;
487+ return DoDrawResult{
488+ .raster_status = raster_status,
489+ };
481490}
482491
483492RasterStatus Rasterizer::DrawToSurface (
0 commit comments