Merge changes I2440a161,I3e478b11 into sc-dev
* changes: Fix initialization of snapshot SkImage instance Conditionally cache RenderEffect results
This commit is contained in:
@@ -50,6 +50,7 @@ bool Properties::showDirtyRegions = false;
|
|||||||
bool Properties::skipEmptyFrames = true;
|
bool Properties::skipEmptyFrames = true;
|
||||||
bool Properties::useBufferAge = true;
|
bool Properties::useBufferAge = true;
|
||||||
bool Properties::enablePartialUpdates = true;
|
bool Properties::enablePartialUpdates = true;
|
||||||
|
bool Properties::enableRenderEffectCache = false;
|
||||||
|
|
||||||
DebugLevel Properties::debugLevel = kDebugDisabled;
|
DebugLevel Properties::debugLevel = kDebugDisabled;
|
||||||
OverdrawColorSet Properties::overdrawColorSet = OverdrawColorSet::Default;
|
OverdrawColorSet Properties::overdrawColorSet = OverdrawColorSet::Default;
|
||||||
|
|||||||
@@ -224,6 +224,7 @@ public:
|
|||||||
static bool skipEmptyFrames;
|
static bool skipEmptyFrames;
|
||||||
static bool useBufferAge;
|
static bool useBufferAge;
|
||||||
static bool enablePartialUpdates;
|
static bool enablePartialUpdates;
|
||||||
|
static bool enableRenderEffectCache;
|
||||||
|
|
||||||
// TODO: Move somewhere else?
|
// TODO: Move somewhere else?
|
||||||
static constexpr float textGamma = 1.45f;
|
static constexpr float textGamma = 1.45f;
|
||||||
|
|||||||
@@ -231,14 +231,33 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const {
|
|||||||
SkASSERT(properties.effectiveLayerType() == LayerType::RenderLayer);
|
SkASSERT(properties.effectiveLayerType() == LayerType::RenderLayer);
|
||||||
SkPaint paint;
|
SkPaint paint;
|
||||||
layerNeedsPaint(layerProperties, alphaMultiplier, &paint);
|
layerNeedsPaint(layerProperties, alphaMultiplier, &paint);
|
||||||
|
sk_sp<SkImage> snapshotImage;
|
||||||
|
auto* imageFilter = layerProperties.getImageFilter();
|
||||||
|
auto recordingContext = canvas->recordingContext();
|
||||||
|
// On some GL vendor implementations, caching the result of
|
||||||
|
// getLayerSurface->makeImageSnapshot() causes a call to
|
||||||
|
// Fence::waitForever without a corresponding signal. This would
|
||||||
|
// lead to ANRs throughout the system.
|
||||||
|
// Instead only cache the SkImage created with the SkImageFilter
|
||||||
|
// for supported devices. Otherwise just create a new SkImage with
|
||||||
|
// the corresponding SkImageFilter each time.
|
||||||
|
// See b/193145089 and b/197263715
|
||||||
|
if (!Properties::enableRenderEffectCache) {
|
||||||
|
snapshotImage = renderNode->getLayerSurface()->makeImageSnapshot();
|
||||||
|
if (imageFilter) {
|
||||||
|
auto subset = SkIRect::MakeWH(srcBounds.width(), srcBounds.height());
|
||||||
|
snapshotImage = snapshotImage->makeWithFilter(recordingContext, imageFilter,
|
||||||
|
subset, clipBounds.roundOut(),
|
||||||
|
&srcBounds, &offset);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
const auto snapshotResult = renderNode->updateSnapshotIfRequired(
|
const auto snapshotResult = renderNode->updateSnapshotIfRequired(
|
||||||
canvas->recordingContext(),
|
recordingContext, layerProperties.getImageFilter(), clipBounds.roundOut());
|
||||||
layerProperties.getImageFilter(),
|
snapshotImage = snapshotResult->snapshot;
|
||||||
clipBounds.roundOut()
|
|
||||||
);
|
|
||||||
sk_sp<SkImage> snapshotImage = snapshotResult->snapshot;
|
|
||||||
srcBounds = snapshotResult->outSubset;
|
srcBounds = snapshotResult->outSubset;
|
||||||
offset = snapshotResult->outOffset;
|
offset = snapshotResult->outOffset;
|
||||||
|
}
|
||||||
|
|
||||||
const auto dstBounds = SkIRect::MakeXYWH(offset.x(),
|
const auto dstBounds = SkIRect::MakeXYWH(offset.x(),
|
||||||
offset.y(),
|
offset.y(),
|
||||||
srcBounds.width(),
|
srcBounds.width(),
|
||||||
|
|||||||
@@ -146,6 +146,9 @@ void EglManager::initialize() {
|
|||||||
LOG_ALWAYS_FATAL("Unsupported wide color space.");
|
LOG_ALWAYS_FATAL("Unsupported wide color space.");
|
||||||
}
|
}
|
||||||
mHasWideColorGamutSupport = EglExtensions.glColorSpace && hasWideColorSpaceExtension;
|
mHasWideColorGamutSupport = EglExtensions.glColorSpace && hasWideColorSpaceExtension;
|
||||||
|
|
||||||
|
auto* vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
|
||||||
|
Properties::enableRenderEffectCache = (strcmp(vendor, "Qualcomm") != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
EGLConfig EglManager::load8BitsConfig(EGLDisplay display, EglManager::SwapBehavior swapBehavior) {
|
EGLConfig EglManager::load8BitsConfig(EGLDisplay display, EglManager::SwapBehavior swapBehavior) {
|
||||||
|
|||||||
Reference in New Issue
Block a user