Merge "Fix aggressive caching of RenderNode snapshot" into sc-v2-dev am: ddd6bac7c8 am: 501a46b056
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15795422 Change-Id: Iced4bf7b7028fea8791477b95c6e504c36d00b03
This commit is contained in:
@@ -341,6 +341,7 @@ std::optional<RenderNode::SnapshotResult> RenderNode::updateSnapshotIfRequired(
|
||||
sk_sp<SkImage> snapshot = layerSurface->makeImageSnapshot();
|
||||
const auto subset = SkIRect::MakeWH(properties().getWidth(),
|
||||
properties().getHeight());
|
||||
uint32_t layerSurfaceGenerationId = layerSurface->generationID();
|
||||
// If we don't have an ImageFilter just return the snapshot
|
||||
if (imageFilter == nullptr) {
|
||||
mSnapshotResult.snapshot = snapshot;
|
||||
@@ -348,9 +349,10 @@ std::optional<RenderNode::SnapshotResult> RenderNode::updateSnapshotIfRequired(
|
||||
mSnapshotResult.outOffset = SkIPoint::Make(0.0f, 0.0f);
|
||||
mImageFilterClipBounds = clipBounds;
|
||||
mTargetImageFilter = nullptr;
|
||||
} else if (mSnapshotResult.snapshot == nullptr ||
|
||||
imageFilter != mTargetImageFilter.get() ||
|
||||
mImageFilterClipBounds != clipBounds) {
|
||||
mTargetImageFilterLayerSurfaceGenerationId = 0;
|
||||
} else if (mSnapshotResult.snapshot == nullptr || imageFilter != mTargetImageFilter.get() ||
|
||||
mImageFilterClipBounds != clipBounds ||
|
||||
mTargetImageFilterLayerSurfaceGenerationId != layerSurfaceGenerationId) {
|
||||
// Otherwise create a new snapshot with the given filter and snapshot
|
||||
mSnapshotResult.snapshot =
|
||||
snapshot->makeWithFilter(context,
|
||||
@@ -361,6 +363,7 @@ std::optional<RenderNode::SnapshotResult> RenderNode::updateSnapshotIfRequired(
|
||||
&mSnapshotResult.outOffset);
|
||||
mTargetImageFilter = sk_ref_sp(imageFilter);
|
||||
mImageFilterClipBounds = clipBounds;
|
||||
mTargetImageFilterLayerSurfaceGenerationId = layerSurfaceGenerationId;
|
||||
}
|
||||
|
||||
return mSnapshotResult;
|
||||
|
||||
@@ -396,6 +396,7 @@ private:
|
||||
* SkImageFilter used to create the mSnapshotResult
|
||||
*/
|
||||
sk_sp<SkImageFilter> mTargetImageFilter;
|
||||
uint32_t mTargetImageFilterLayerSurfaceGenerationId = 0;
|
||||
|
||||
/**
|
||||
* Clip bounds used to create the mSnapshotResult
|
||||
|
||||
Reference in New Issue
Block a user