• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  // Copyright 2013 The Flutter Authors. All rights reserved.
2  // Use of this source code is governed by a BSD-style license that can be
3  // found in the LICENSE file.
4  
5  #ifndef FLUTTER_FLOW_LAYERS_LAYER_TREE_H_
6  #define FLUTTER_FLOW_LAYERS_LAYER_TREE_H_
7  
8  #include <stdint.h>
9  
10  #include <memory>
11  
12  #include "flutter/flow/compositor_context.h"
13  #include "flutter/flow/layers/layer.h"
14  #include "flutter/fml/macros.h"
15  #include "flutter/fml/time/time_delta.h"
16  #include "third_party/skia/include/core/SkPicture.h"
17  #include "third_party/skia/include/core/SkSize.h"
18  
19  namespace flutter {
20  
21  class LayerTree {
22   public:
23    LayerTree();
24  
25    ~LayerTree();
26  
27    void Preroll(CompositorContext::ScopedFrame& frame,
28                 bool ignore_raster_cache = false);
29  
30  #if defined(OS_FUCHSIA)
31    void UpdateScene(SceneUpdateContext& context,
32                     scenic::ContainerNode& container);
33  #endif
34  
35    void Paint(CompositorContext::ScopedFrame& frame,
36               bool ignore_raster_cache = false) const;
37  
38    sk_sp<SkPicture> Flatten(const SkRect& bounds);
39  
root_layer()40    Layer* root_layer() const { return root_layer_.get(); }
41  
set_root_layer(std::shared_ptr<Layer> root_layer)42    void set_root_layer(std::shared_ptr<Layer> root_layer) {
43      root_layer_ = std::move(root_layer);
44    }
45  
frame_size()46    const SkISize& frame_size() const { return frame_size_; }
47  
set_frame_size(const SkISize & frame_size)48    void set_frame_size(const SkISize& frame_size) { frame_size_ = frame_size; }
49  
50    void RecordBuildTime(fml::TimePoint begin_start);
build_start()51    fml::TimePoint build_start() const { return build_start_; }
build_finish()52    fml::TimePoint build_finish() const { return build_finish_; }
build_time()53    fml::TimeDelta build_time() const { return build_finish_ - build_start_; }
54  
55    // The number of frame intervals missed after which the compositor must
56    // trace the rasterized picture to a trace file. Specify 0 to disable all
57    // tracing
set_rasterizer_tracing_threshold(uint32_t interval)58    void set_rasterizer_tracing_threshold(uint32_t interval) {
59      rasterizer_tracing_threshold_ = interval;
60    }
61  
rasterizer_tracing_threshold()62    uint32_t rasterizer_tracing_threshold() const {
63      return rasterizer_tracing_threshold_;
64    }
65  
set_checkerboard_raster_cache_images(bool checkerboard)66    void set_checkerboard_raster_cache_images(bool checkerboard) {
67      checkerboard_raster_cache_images_ = checkerboard;
68    }
69  
set_checkerboard_offscreen_layers(bool checkerboard)70    void set_checkerboard_offscreen_layers(bool checkerboard) {
71      checkerboard_offscreen_layers_ = checkerboard;
72    }
73  
74   private:
75    SkISize frame_size_;  // Physical pixels.
76    std::shared_ptr<Layer> root_layer_;
77    fml::TimePoint build_start_;
78    fml::TimePoint build_finish_;
79    uint32_t rasterizer_tracing_threshold_;
80    bool checkerboard_raster_cache_images_;
81    bool checkerboard_offscreen_layers_;
82  
83    FML_DISALLOW_COPY_AND_ASSIGN(LayerTree);
84  };
85  
86  }  // namespace flutter
87  
88  #endif  // FLUTTER_FLOW_LAYERS_LAYER_TREE_H_
89