diff options
author | 2023-01-18 16:35:03 +0000 | |
---|---|---|
committer | 2023-01-18 16:35:03 +0000 | |
commit | 1e1a387877dcee28fa1a8d80c0745b9ec7174dea (patch) | |
tree | 70e89a94f4916b41019c39a7bfbf0815ea099c07 /services/surfaceflinger/Layer.cpp | |
parent | 39bf1d612d52c444f3e28f399f688e5b2f6d74ab (diff) | |
parent | 8fc721bb338c6d13e8758c2139d073acab86e3e2 (diff) |
Merge "SF: Introduce LayerSnapshot and LayerSnapshotBuilder"
Diffstat (limited to 'services/surfaceflinger/Layer.cpp')
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 37 |
1 files changed, 9 insertions, 28 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index de9ea0420c..0179d62f08 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -128,6 +128,8 @@ TimeStats::SetFrameRateVote frameRateToSetFrameRateVotePayload(Layer::FrameRate using namespace ftl::flag_operators; using base::StringAppendF; +using frontend::LayerSnapshot; +using frontend::RoundedCornerState; using gui::GameMode; using gui::LayerMetadata; using gui::WindowInfo; @@ -208,7 +210,7 @@ Layer::Layer(const LayerCreationArgs& args) mSnapshot->name = getDebugName(); mSnapshot->textureName = mTextureName; mSnapshot->premultipliedAlpha = mPremultipliedAlpha; - mSnapshot->transform = {}; + mSnapshot->parentTransform = {}; } void Layer::onFirstRef() { @@ -473,7 +475,7 @@ void Layer::prepareBasicGeometryCompositionState() { snapshot->geomLayerTransform = getTransform(); snapshot->geomInverseLayerTransform = snapshot->geomLayerTransform.inverse(); snapshot->transparentRegionHint = getActiveTransparentRegion(drawingState); - snapshot->blurRegionTransform = getActiveTransform(drawingState).inverse(); + snapshot->localTransformInverse = getActiveTransform(drawingState).inverse(); snapshot->blendMode = static_cast<Hwc2::IComposerClient::BlendMode>(blendMode); snapshot->alpha = alpha; snapshot->backgroundBlurRadius = drawingState.backgroundBlurRadius; @@ -3526,7 +3528,7 @@ bool Layer::isOpaque(const Layer::State& s) const { } // If the buffer has no alpha channel, then we are opaque - if (hasBufferOrSidebandStream() && isOpaqueFormat(getPixelFormat())) { + if (hasBufferOrSidebandStream() && LayerSnapshot::isOpaqueFormat(getPixelFormat())) { return true; } @@ -3700,29 +3702,6 @@ bool Layer::isProtected() const { (mBufferInfo.mBuffer->getUsage() & GRALLOC_USAGE_PROTECTED); } -// As documented in libhardware header, formats in the range -// 0x100 - 0x1FF are specific to the HAL implementation, and -// are known to have no alpha channel -// TODO: move definition for device-specific range into -// hardware.h, instead of using hard-coded values here. -#define HARDWARE_IS_DEVICE_FORMAT(f) ((f) >= 0x100 && (f) <= 0x1FF) - -bool Layer::isOpaqueFormat(PixelFormat format) { - if (HARDWARE_IS_DEVICE_FORMAT(format)) { - return true; - } - switch (format) { - case PIXEL_FORMAT_RGBA_8888: - case PIXEL_FORMAT_BGRA_8888: - case PIXEL_FORMAT_RGBA_FP16: - case PIXEL_FORMAT_RGBA_1010102: - case PIXEL_FORMAT_R_8: - return false; - } - // in all other case, we have no blending (also for unknown formats) - return true; -} - bool Layer::needsFiltering(const DisplayDevice* display) const { if (!hasBufferOrSidebandStream()) { return false; @@ -3913,13 +3892,15 @@ void Layer::updateSnapshot(bool updateGeometry) { snapshot->shadowSettings.length = mEffectiveShadowRadius; } snapshot->contentOpaque = isOpaque(mDrawingState); + snapshot->layerOpaqueFlagSet = + (mDrawingState.flags & layer_state_t::eLayerOpaque) == layer_state_t::eLayerOpaque; snapshot->isHdrY410 = isHdrY410(); snapshot->bufferNeedsFiltering = bufferNeedsFiltering(); sp<Layer> p = mDrawingParent.promote(); if (p != nullptr) { - snapshot->transform = p->getTransform(); + snapshot->parentTransform = p->getTransform(); } else { - snapshot->transform.reset(); + snapshot->parentTransform.reset(); } snapshot->bufferSize = getBufferSize(mDrawingState); snapshot->externalTexture = mBufferInfo.mBuffer; |