diff options
author | 2018-07-05 17:18:21 -0700 | |
---|---|---|
committer | 2018-12-02 09:27:05 -0800 | |
commit | 1b6531ccf5dab13a6817c7519693df220d0944a1 (patch) | |
tree | 2873750c9ee97e4bf11d557997bfe27137e16040 /services/surfaceflinger/SurfaceFlinger.cpp | |
parent | 49109214fec02f0734cbfee3c58f6974b0c694b2 (diff) |
Rounded corners
Test: visual
Test: /data/nativetest64/SurfaceFlinger_test/SurfaceFlinger_test
Fixes: 111514493
Change-Id: Ie8f400bbcea3e9653295ea7b75c7eef568fd76c4
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 3e5920f852..5b3c47713e 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1687,6 +1687,10 @@ void SurfaceFlinger::calculateWorkingSet() { layer->forceClientComposition(*displayId); } + if (layer->getRoundedCornerState().radius > 0.0f) { + layer->forceClientComposition(*displayId); + } + if (layer->getForceClientComposition(*displayId)) { ALOGV("[%s] Requesting Client composition", layer->getName().string()); layer->setCompositionType(*displayId, HWC2::Composition::Client); @@ -2876,6 +2880,7 @@ void SurfaceFlinger::computeVisibleRegions(const sp<const DisplayDevice>& displa // compute the opaque region const int32_t layerOrientation = tr.getOrientation(); if (layer->getAlpha() == 1.0f && !translucent && + layer->getRoundedCornerState().radius == 0.0f && ((layerOrientation & ui::Transform::ROT_INVALID) == false)) { // the opaque region is the layer's footprint opaqueRegion = visibleRegion; @@ -3166,7 +3171,7 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<DisplayDevice>& display) { const Layer::State& state(layer->getDrawingState()); if (layer->getClearClientTarget(*displayId) && !firstLayer && layer->isOpaque(state) && (layer->getAlpha() == 1.0f) && - hasClientComposition) { + layer->getRoundedCornerState().radius == 0.0f && hasClientComposition) { // never clear the very first layer since we're // guaranteed the FB is already cleared layer->clearWithOpenGL(renderArea); @@ -3586,6 +3591,10 @@ uint32_t SurfaceFlinger::setClientStateLocked(const ComposerState& composerState if (layer->setCrop_legacy(s.crop_legacy, !geometryAppliesWithResize)) flags |= eTraversalNeeded; } + if (what & layer_state_t::eCornerRadiusChanged) { + if (layer->setCornerRadius(s.cornerRadius)) + flags |= eTraversalNeeded; + } if (what & layer_state_t::eLayerStackChanged) { ssize_t idx = mCurrentState.layersSortedByZ.indexOf(layer); // We only allow setting layer stacks for top level layers, |