// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "flutter/flow/layers/layer_tree.h" #include "flutter/flow/layers/layer.h" #include "flutter/glue/trace_event.h" namespace flow { LayerTree::LayerTree() : frame_size_{}, rasterizer_tracing_threshold_(0), checkerboard_raster_cache_images_(false), checkerboard_offscreen_layers_(false) {} LayerTree::~LayerTree() = default; void LayerTree::Raster(CompositorContext::ScopedFrame& frame, bool ignore_raster_cache) { Preroll(frame, ignore_raster_cache); Paint(frame); } void LayerTree::Preroll(CompositorContext::ScopedFrame& frame, bool ignore_raster_cache) { TRACE_EVENT0("flutter", "LayerTree::Preroll"); SkColorSpace* color_space = frame.canvas() ? frame.canvas()->imageInfo().colorSpace() : nullptr; frame.context().raster_cache().SetCheckboardCacheImages( checkerboard_raster_cache_images_); Layer::PrerollContext context = { ignore_raster_cache ? nullptr : &frame.context().raster_cache(), frame.gr_context(), color_space, SkRect::MakeEmpty(), }; root_layer_->Preroll(&context, SkMatrix::I()); } #if defined(OS_FUCHSIA) void LayerTree::UpdateScene(SceneUpdateContext& context, mozart::client::ContainerNode& container) { TRACE_EVENT0("flutter", "LayerTree::UpdateScene"); SceneUpdateContext::Frame frame( context, SkRRect::MakeRect( SkRect::MakeIWH(frame_size_.width(), frame_size_.height())), SK_ColorTRANSPARENT, 0.f, 1.f, 1.f); if (root_layer_->needs_system_composite()) { root_layer_->UpdateScene(context); } if (root_layer_->needs_painting()) { frame.AddPaintedLayer(root_layer_.get()); } container.AddChild(frame.entity_node()); } #endif void LayerTree::Paint(CompositorContext::ScopedFrame& frame) { Layer::PaintContext context = {*frame.canvas(), frame.context().frame_time(), frame.context().engine_time(), frame.context().memory_usage(), checkerboard_offscreen_layers_}; TRACE_EVENT0("flutter", "LayerTree::Paint"); if (root_layer_->needs_painting()) root_layer_->Paint(context); } } // namespace flow