Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
[embedder] Allow for the backing stores to not be cached
  • Loading branch information
iskakaushik authored and RichardJCai committed Nov 23, 2020
commit 800dc43095ad39827221dad41c37188b51aa6115
2 changes: 2 additions & 0 deletions shell/platform/embedder/embedder.h
Original file line number Diff line number Diff line change
Expand Up @@ -858,6 +858,8 @@ typedef struct {
/// Indicates if this backing store was updated since the last time it was
/// associated with a presented layer.
bool did_update;
/// Indicates whether this backing store can be cached and re-used.
bool is_cacheable;
union {
/// The description of the OpenGL backing store.
FlutterOpenGLBackingStore open_gl;
Expand Down
9 changes: 7 additions & 2 deletions shell/platform/embedder/embedder_external_view_embedder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include "flutter/shell/platform/embedder/embedder_layers.h"
#include "flutter/shell/platform/embedder/embedder_render_target.h"
#include "flutter/shell/platform/embedder/embedder_struct_macros.h"
#include "third_party/skia/include/gpu/GrDirectContext.h"

namespace flutter {
Expand Down Expand Up @@ -263,8 +264,12 @@ void EmbedderExternalViewEmbedder::SubmitFrame(
// Hold all rendered layers in the render target cache for one frame to
// see if they may be reused next frame.
for (auto& render_target : matched_render_targets) {
render_target_cache_.CacheRenderTarget(render_target.first,
std::move(render_target.second));
const FlutterBackingStore* backing_store =
render_target.second->GetBackingStore();
if (SAFE_ACCESS(backing_store, is_cacheable, true)) {
render_target_cache_.CacheRenderTarget(render_target.first,
std::move(render_target.second));
}
}

frame->Submit();
Expand Down
3 changes: 2 additions & 1 deletion shell/platform/embedder/tests/embedder_assertions.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ inline bool operator==(const FlutterSoftwareBackingStore& a,
inline bool operator==(const FlutterBackingStore& a,
const FlutterBackingStore& b) {
if (!(a.struct_size == b.struct_size && a.user_data == b.user_data &&
a.type == b.type && a.did_update == b.did_update)) {
a.type == b.type && a.did_update == b.did_update &&
a.is_cacheable == b.is_cacheable)) {
return false;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ bool EmbedderTestBackingStoreProducer::CreateFramebuffer(

backing_store_out->type = kFlutterBackingStoreTypeOpenGL;
backing_store_out->user_data = surface.get();
backing_store_out->is_cacheable = true;
backing_store_out->open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;
backing_store_out->open_gl.framebuffer.target = framebuffer_info.fFormat;
backing_store_out->open_gl.framebuffer.name = framebuffer_info.fFBOID;
Expand Down Expand Up @@ -124,6 +125,7 @@ bool EmbedderTestBackingStoreProducer::CreateTexture(
}

backing_store_out->type = kFlutterBackingStoreTypeOpenGL;
backing_store_out->is_cacheable = true;
backing_store_out->user_data = surface.get();
backing_store_out->open_gl.type = kFlutterOpenGLTargetTypeTexture;
backing_store_out->open_gl.texture.target = texture_info.fTarget;
Expand Down Expand Up @@ -160,6 +162,7 @@ bool EmbedderTestBackingStoreProducer::CreateSoftware(
}

backing_store_out->type = kFlutterBackingStoreTypeSoftware;
backing_store_out->is_cacheable = true;
backing_store_out->user_data = surface.get();
backing_store_out->software.allocation = pixmap.addr();
backing_store_out->software.row_bytes = pixmap.rowBytes();
Expand Down
5 changes: 5 additions & 0 deletions shell/platform/embedder/tests/embedder_unittests.cc
Original file line number Diff line number Diff line change
Expand Up @@ -552,6 +552,7 @@ TEST_F(EmbedderTest,
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeSoftware;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.software.height = 600;

FlutterLayer layer = {};
Expand Down Expand Up @@ -585,6 +586,7 @@ TEST_F(EmbedderTest,
FlutterBackingStore backing_store = *layers[2]->backing_store;
backing_store.type = kFlutterBackingStoreTypeSoftware;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.software.height = 600;

FlutterLayer layer = {};
Expand Down Expand Up @@ -618,6 +620,7 @@ TEST_F(EmbedderTest,
FlutterBackingStore backing_store = *layers[4]->backing_store;
backing_store.type = kFlutterBackingStoreTypeSoftware;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.software.height = 600;

FlutterLayer layer = {};
Expand Down Expand Up @@ -862,6 +865,7 @@ TEST_F(EmbedderTest, VerifyB143464703WithSoftwareBackend) {
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeSoftware;
backing_store.did_update = true;
backing_store.is_cacheable = true;

FlutterLayer layer = {};
layer.struct_size = sizeof(layer);
Expand Down Expand Up @@ -894,6 +898,7 @@ TEST_F(EmbedderTest, VerifyB143464703WithSoftwareBackend) {
FlutterBackingStore backing_store = *layers[2]->backing_store;
backing_store.type = kFlutterBackingStoreTypeSoftware;
backing_store.did_update = true;
backing_store.is_cacheable = true;

FlutterLayer layer = {};
layer.struct_size = sizeof(layer);
Expand Down
30 changes: 30 additions & 0 deletions shell/platform/embedder/tests/embedder_unittests_gl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderToOpenGLFramebuffer) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;

FlutterLayer layer = {};
Expand Down Expand Up @@ -117,6 +118,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderToOpenGLFramebuffer) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;

FlutterLayer layer = {};
Expand Down Expand Up @@ -178,6 +180,7 @@ TEST_F(EmbedderTest, RasterCacheDisabledWithPlatformViews) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;

FlutterLayer layer = {};
Expand Down Expand Up @@ -210,6 +213,7 @@ TEST_F(EmbedderTest, RasterCacheDisabledWithPlatformViews) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;

FlutterLayer layer = {};
Expand Down Expand Up @@ -282,6 +286,7 @@ TEST_F(EmbedderTest, RasterCacheEnabled) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;

FlutterLayer layer = {};
Expand Down Expand Up @@ -351,6 +356,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderToOpenGLTexture) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -383,6 +389,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderToOpenGLTexture) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -443,6 +450,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderToSoftwareBuffer) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeSoftware;
backing_store.did_update = true;
backing_store.is_cacheable = true;
ASSERT_FLOAT_EQ(
backing_store.software.row_bytes * backing_store.software.height,
800 * 4 * 600.0);
Expand Down Expand Up @@ -477,6 +485,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderToSoftwareBuffer) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeSoftware;
backing_store.did_update = true;
backing_store.is_cacheable = true;
FlutterLayer layer = {};
layer.struct_size = sizeof(layer);
layer.type = kFlutterLayerContentTypeBackingStore;
Expand Down Expand Up @@ -537,6 +546,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderKnownScene) {
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -570,6 +580,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderKnownScene) {
FlutterBackingStore backing_store = *layers[2]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -603,6 +614,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderKnownScene) {
FlutterBackingStore backing_store = *layers[4]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -720,6 +732,7 @@ TEST_F(EmbedderTest, CustomCompositorMustWorkWithCustomTaskRunner) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -752,6 +765,7 @@ TEST_F(EmbedderTest, CustomCompositorMustWorkWithCustomTaskRunner) {
backing_store.struct_size = sizeof(backing_store);
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -834,6 +848,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderWithRootLayerOnly) {
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -901,6 +916,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderWithPlatformLayerOnBottom) {
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1021,6 +1037,7 @@ TEST_F(EmbedderTest,
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1054,6 +1071,7 @@ TEST_F(EmbedderTest,
FlutterBackingStore backing_store = *layers[2]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1087,6 +1105,7 @@ TEST_F(EmbedderTest,
FlutterBackingStore backing_store = *layers[4]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1365,6 +1384,7 @@ TEST_F(EmbedderTest, CanRenderGradientWithCompositorOnNonRootLayer) {
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1398,6 +1418,7 @@ TEST_F(EmbedderTest, CanRenderGradientWithCompositorOnNonRootLayer) {
FlutterBackingStore backing_store = *layers[2]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1478,6 +1499,7 @@ TEST_F(EmbedderTest, CanRenderGradientWithCompositorOnNonRootLayerWithXform) {
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1511,6 +1533,7 @@ TEST_F(EmbedderTest, CanRenderGradientWithCompositorOnNonRootLayerWithXform) {
FlutterBackingStore backing_store = *layers[2]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1822,6 +1845,7 @@ TEST_F(EmbedderTest,
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1855,6 +1879,7 @@ TEST_F(EmbedderTest,
FlutterBackingStore backing_store = *layers[2]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1917,6 +1942,7 @@ TEST_F(
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -1950,6 +1976,7 @@ TEST_F(
FlutterBackingStore backing_store = *layers[2]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -2083,6 +2110,7 @@ TEST_F(EmbedderTest, PlatformViewMutatorsAreValid) {
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -2179,6 +2207,7 @@ TEST_F(EmbedderTest, PlatformViewMutatorsAreValidWithPixelRatio) {
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down Expand Up @@ -2281,6 +2310,7 @@ TEST_F(EmbedderTest,
FlutterBackingStore backing_store = *layers[0]->backing_store;
backing_store.type = kFlutterBackingStoreTypeOpenGL;
backing_store.did_update = true;
backing_store.is_cacheable = true;
backing_store.open_gl.type = kFlutterOpenGLTargetTypeTexture;

FlutterLayer layer = {};
Expand Down