Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
impeller::RenderTargetCache Class Reference

An implementation of the [RenderTargetAllocator] that caches all allocated texture data for one frame. More...

#include <render_target_cache.h>

Inheritance diagram for impeller::RenderTargetCache:
impeller::RenderTargetAllocator

Public Member Functions

 RenderTargetCache (std::shared_ptr< Allocator > allocator, uint32_t keep_alive_frame_count=4)
 
 ~RenderTargetCache ()=default
 
void Start () override
 Mark the beginning of a frame workload.
 
void End () override
 Mark the end of a frame workload.
 
void DisableCache () override
 Disable any caching until the next call to EnabledCache.
 
void EnableCache () override
 Re-enable any caching if disabled.
 
RenderTarget CreateOffscreen (const Context &context, ISize size, int mip_count, std::string_view label="Offscreen", RenderTarget::AttachmentConfig color_attachment_config=RenderTarget::kDefaultColorAttachmentConfig, std::optional< RenderTarget::AttachmentConfig > stencil_attachment_config=RenderTarget::kDefaultStencilAttachmentConfig, const std::shared_ptr< Texture > &existing_color_texture=nullptr, const std::shared_ptr< Texture > &existing_depth_stencil_texture=nullptr, std::optional< PixelFormat > target_pixel_format=std::nullopt) override
 
RenderTarget CreateOffscreenMSAA (const Context &context, ISize size, int mip_count, std::string_view label="Offscreen MSAA", RenderTarget::AttachmentConfigMSAA color_attachment_config=RenderTarget::kDefaultColorAttachmentConfigMSAA, std::optional< RenderTarget::AttachmentConfig > stencil_attachment_config=RenderTarget::kDefaultStencilAttachmentConfig, const std::shared_ptr< Texture > &existing_color_msaa_texture=nullptr, const std::shared_ptr< Texture > &existing_color_resolve_texture=nullptr, const std::shared_ptr< Texture > &existing_depth_stencil_texture=nullptr, std::optional< PixelFormat > target_pixel_format=std::nullopt) override
 
size_t CachedTextureCount () const
 
std::vector< RenderTargetData >::const_iterator GetRenderTargetDataBegin () const
 Visible for testing.
 
std::vector< RenderTargetData >::const_iterator GetRenderTargetDataEnd () const
 Visible for testing.
 
- Public Member Functions inherited from impeller::RenderTargetAllocator
 RenderTargetAllocator (std::shared_ptr< Allocator > allocator)
 
virtual ~RenderTargetAllocator ()=default
 

Detailed Description

An implementation of the [RenderTargetAllocator] that caches all allocated texture data for one frame.

Any textures unused after a frame are immediately discarded.

Definition at line 18 of file render_target_cache.h.

Constructor & Destructor Documentation

◆ RenderTargetCache()

impeller::RenderTargetCache::RenderTargetCache ( std::shared_ptr< Allocator allocator,
uint32_t  keep_alive_frame_count = 4 
)
explicit

Definition at line 11 of file render_target_cache.cc.

13 : RenderTargetAllocator(std::move(allocator)),
14 keep_alive_frame_count_(keep_alive_frame_count) {}
RenderTargetAllocator(std::shared_ptr< Allocator > allocator)
std::shared_ptr< ImpellerAllocator > allocator

◆ ~RenderTargetCache()

impeller::RenderTargetCache::~RenderTargetCache ( )
default

Member Function Documentation

◆ CachedTextureCount()

size_t impeller::RenderTargetCache::CachedTextureCount ( ) const

Definition at line 172 of file render_target_cache.cc.

172 {
173 return render_target_data_.size();
174}

◆ CreateOffscreen()

RenderTarget impeller::RenderTargetCache::CreateOffscreen ( const Context context,
ISize  size,
int  mip_count,
std::string_view  label = "Offscreen",
RenderTarget::AttachmentConfig  color_attachment_config = RenderTarget::kDefaultColorAttachmentConfig,
std::optional< RenderTarget::AttachmentConfig stencil_attachment_config = RenderTarget::kDefaultStencilAttachmentConfig,
const std::shared_ptr< Texture > &  existing_color_texture = nullptr,
const std::shared_ptr< Texture > &  existing_depth_stencil_texture = nullptr,
std::optional< PixelFormat target_pixel_format = std::nullopt 
)
overridevirtual

Reimplemented from impeller::RenderTargetAllocator.

Definition at line 54 of file render_target_cache.cc.

63 {
64 if (size.IsEmpty()) {
65 return {};
66 }
67
68 FML_DCHECK(existing_color_texture == nullptr &&
69 existing_depth_stencil_texture == nullptr);
70 auto config = RenderTargetConfig{
71 .size = size,
72 .mip_count = static_cast<size_t>(mip_count),
73 .has_msaa = false,
74 .has_depth_stencil = stencil_attachment_config.has_value(),
75 };
76
77 if (CacheEnabled()) {
78 for (RenderTargetData& render_target_data : render_target_data_) {
79 const RenderTargetConfig other_config = render_target_data.config;
80 if (!render_target_data.used_this_frame && other_config == config) {
81 render_target_data.used_this_frame = true;
82 render_target_data.keep_alive_frame_count = keep_alive_frame_count_;
83 ColorAttachment color0 =
84 render_target_data.render_target.GetColorAttachment(0);
85 std::optional<DepthAttachment> depth =
86 render_target_data.render_target.GetDepthAttachment();
87 std::shared_ptr<Texture> depth_tex = depth ? depth->texture : nullptr;
89 context, size, mip_count, label, color_attachment_config,
90 stencil_attachment_config, color0.texture, depth_tex,
91 target_pixel_format);
92 }
93 }
94 }
95 RenderTarget created_target = RenderTargetAllocator::CreateOffscreen(
96 context, size, mip_count, label, color_attachment_config,
97 stencil_attachment_config, nullptr, nullptr, target_pixel_format);
98 if (!created_target.IsValid()) {
99 return created_target;
100 }
101 if (CacheEnabled()) {
102 render_target_data_.push_back(RenderTargetData{
103 .used_this_frame = true, //
104 .keep_alive_frame_count = keep_alive_frame_count_, //
105 .config = config, //
106 .render_target = created_target //
107 });
108 }
109 return created_target;
110}
virtual RenderTarget CreateOffscreen(const Context &context, ISize size, int mip_count, std::string_view label="Offscreen", RenderTarget::AttachmentConfig color_attachment_config=RenderTarget::kDefaultColorAttachmentConfig, std::optional< RenderTarget::AttachmentConfig > stencil_attachment_config=RenderTarget::kDefaultStencilAttachmentConfig, const std::shared_ptr< Texture > &existing_color_texture=nullptr, const std::shared_ptr< Texture > &existing_depth_stencil_texture=nullptr, std::optional< PixelFormat > target_pixel_format=std::nullopt)
#define FML_DCHECK(condition)
Definition logging.h:122
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size

References impeller::RenderTargetAllocator::CreateOffscreen(), FML_DCHECK, impeller::RenderTarget::IsValid(), impeller::RenderTargetConfig::size, and impeller::Attachment::texture.

◆ CreateOffscreenMSAA()

RenderTarget impeller::RenderTargetCache::CreateOffscreenMSAA ( const Context context,
ISize  size,
int  mip_count,
std::string_view  label = "Offscreen MSAA",
RenderTarget::AttachmentConfigMSAA  color_attachment_config = RenderTarget::kDefaultColorAttachmentConfigMSAA,
std::optional< RenderTarget::AttachmentConfig stencil_attachment_config = RenderTarget::kDefaultStencilAttachmentConfig,
const std::shared_ptr< Texture > &  existing_color_msaa_texture = nullptr,
const std::shared_ptr< Texture > &  existing_color_resolve_texture = nullptr,
const std::shared_ptr< Texture > &  existing_depth_stencil_texture = nullptr,
std::optional< PixelFormat target_pixel_format = std::nullopt 
)
overridevirtual

Reimplemented from impeller::RenderTargetAllocator.

Definition at line 112 of file render_target_cache.cc.

122 {
123 if (size.IsEmpty()) {
124 return {};
125 }
126
127 FML_DCHECK(existing_color_msaa_texture == nullptr &&
128 existing_color_resolve_texture == nullptr &&
129 existing_depth_stencil_texture == nullptr);
130 auto config = RenderTargetConfig{
131 .size = size,
132 .mip_count = static_cast<size_t>(mip_count),
133 .has_msaa = true,
134 .has_depth_stencil = stencil_attachment_config.has_value(),
135 };
136 if (CacheEnabled()) {
137 for (RenderTargetData& render_target_data : render_target_data_) {
138 const RenderTargetConfig other_config = render_target_data.config;
139 if (!render_target_data.used_this_frame && other_config == config) {
140 render_target_data.used_this_frame = true;
141 render_target_data.keep_alive_frame_count = keep_alive_frame_count_;
142 ColorAttachment color0 =
143 render_target_data.render_target.GetColorAttachment(0);
144 std::optional<DepthAttachment> depth =
145 render_target_data.render_target.GetDepthAttachment();
146 std::shared_ptr<Texture> depth_tex = depth ? depth->texture : nullptr;
148 context, size, mip_count, label, color_attachment_config,
149 stencil_attachment_config, color0.texture, color0.resolve_texture,
150 depth_tex, target_pixel_format);
151 }
152 }
153 }
154 RenderTarget created_target = RenderTargetAllocator::CreateOffscreenMSAA(
155 context, size, mip_count, label, color_attachment_config,
156 stencil_attachment_config, nullptr, nullptr, nullptr,
157 target_pixel_format);
158 if (!created_target.IsValid()) {
159 return created_target;
160 }
161 if (CacheEnabled()) {
162 render_target_data_.push_back(RenderTargetData{
163 .used_this_frame = true, //
164 .keep_alive_frame_count = keep_alive_frame_count_, //
165 .config = config, //
166 .render_target = created_target //
167 });
168 }
169 return created_target;
170}
virtual RenderTarget CreateOffscreenMSAA(const Context &context, ISize size, int mip_count, std::string_view label="Offscreen MSAA", RenderTarget::AttachmentConfigMSAA color_attachment_config=RenderTarget::kDefaultColorAttachmentConfigMSAA, std::optional< RenderTarget::AttachmentConfig > stencil_attachment_config=RenderTarget::kDefaultStencilAttachmentConfig, const std::shared_ptr< Texture > &existing_color_msaa_texture=nullptr, const std::shared_ptr< Texture > &existing_color_resolve_texture=nullptr, const std::shared_ptr< Texture > &existing_depth_stencil_texture=nullptr, std::optional< PixelFormat > target_pixel_format=std::nullopt)

References impeller::RenderTargetAllocator::CreateOffscreenMSAA(), FML_DCHECK, impeller::RenderTarget::IsValid(), impeller::Attachment::resolve_texture, impeller::RenderTargetConfig::size, and impeller::Attachment::texture.

◆ DisableCache()

void impeller::RenderTargetCache::DisableCache ( )
overridevirtual

Disable any caching until the next call to EnabledCache.

Reimplemented from impeller::RenderTargetAllocator.

Definition at line 38 of file render_target_cache.cc.

38 {
39 cache_disabled_count_++;
40}

◆ EnableCache()

void impeller::RenderTargetCache::EnableCache ( )
overridevirtual

Re-enable any caching if disabled.

Reimplemented from impeller::RenderTargetAllocator.

Definition at line 46 of file render_target_cache.cc.

46 {
47 FML_DCHECK(cache_disabled_count_ > 0);
48 if (cache_disabled_count_ == 0) {
49 return;
50 }
51 cache_disabled_count_--;
52}

References FML_DCHECK.

◆ End()

void impeller::RenderTargetCache::End ( )
overridevirtual

Mark the end of a frame workload.

   This may be used to deallocate any unused textures. 

Reimplemented from impeller::RenderTargetAllocator.

Definition at line 23 of file render_target_cache.cc.

23 {
24 cache_disabled_count_ = 0;
25 std::vector<RenderTargetData> retain;
26
27 for (RenderTargetData& td : render_target_data_) {
28 if (td.used_this_frame) {
29 retain.push_back(td);
30 } else if (td.keep_alive_frame_count > 0) {
31 td.keep_alive_frame_count--;
32 retain.push_back(td);
33 }
34 }
35 render_target_data_.swap(retain);
36}

◆ GetRenderTargetDataBegin()

std::vector< RenderTargetData >::const_iterator impeller::RenderTargetCache::GetRenderTargetDataBegin ( ) const
inline

Visible for testing.

Definition at line 87 of file render_target_cache.h.

88 {
89 return render_target_data_.begin();
90 }

◆ GetRenderTargetDataEnd()

std::vector< RenderTargetData >::const_iterator impeller::RenderTargetCache::GetRenderTargetDataEnd ( ) const
inline

Visible for testing.

Definition at line 93 of file render_target_cache.h.

93 {
94 return render_target_data_.end();
95 }

◆ Start()

void impeller::RenderTargetCache::Start ( )
overridevirtual

Mark the beginning of a frame workload.

  This may be used to reset any tracking state on whether or not a
  particular texture instance is still in use. 

Reimplemented from impeller::RenderTargetAllocator.

Definition at line 16 of file render_target_cache.cc.

16 {
17 cache_disabled_count_ = 0;
18 for (auto& td : render_target_data_) {
19 td.used_this_frame = false;
20 }
21}

The documentation for this class was generated from the following files: