Home | History | Annotate | Download | only in surfaceflinger

Lines Matching full:layer

47 #include "Layer.h"
103 const sp<LayerBase>& layer,
113 const int c = cmp(a+mid, &layer);
119 while (order<count && !cmp(&layer, a+order)) {
128 layers.insertAt(layer, order);
129 lookup.add(layer, order);
133 ssize_t SurfaceFlinger::LayerVector::remove(const sp<LayerBase>& layer)
135 const ssize_t keyIndex = lookup.indexOfKey(layer);
138 LOGE_IF(layers[index]!=layer,
139 "LayerVector[%p]: layers[%u]=%p, layer=%p",
140 this, int(index), layers[index].get(), layer.get());
155 const sp<LayerBase>& layer,
159 ssize_t err = remove(layer);
161 err = add(layer, cmp);
257 sp<LayerBaseClient> layer(layers[i].promote());
258 if (layer != 0) {
259 purgatorizeLayer_l(layer);
574 //LOGD("ditching layer %p", ditchedLayers[i].get());
594 const sp<LayerBase>& layer = currentLayers[i];
595 uint32_t trFlags = layer->getTransactionFlags(eTransactionNeeded);
598 const uint32_t flags = layer->doTransaction(0);
599 if (flags & Layer::eVisibleRegion)
650 const sp<LayerBase>& layer(previousLayers[i]);
651 if (currentLayers.indexOf( layer ) < 0) {
652 // this layer is not visible anymore
653 ditchedLayers.add(layer);
654 mDirtyRegionRemovedLayer.orSelf(layer->visibleRegionScreen);
688 const sp<LayerBase>& layer = currentLayers[i];
689 layer->validateVisibility(planeTransform);
692 const Layer::State& s(layer->drawingState());
701 * and not fully transparent. This is essentially the layer's
716 const bool translucent = layer->needsBlending();
717 const Rect bounds(layer->visibleBounds());
723 visibleRegion.subtractSelf(layer->transparentRegionScreen);
727 const int32_t layerOrientation = layer->getOrientation();
730 // the opaque region is the layer's footprint
739 // Update aboveCoveredLayers for next (lower) layer
745 // compute this layer's dirty region
746 if (layer->contentDirty) {
750 dirty.orSelf(layer->visibleRegionScreen);
751 layer->contentDirty = false;
766 const Region oldVisibleRegion = layer->visibleRegionScreen;
767 const Region oldCoveredRegion = layer->coveredRegionScreen;
776 // Update aboveOpaqueLayers for next (lower) layer
780 layer->setVisibleRegion(visibleRegion);
781 layer->setCoveredRegion(coveredRegion);
783 // If a secure layer is partially visible, lock-down the screen!
784 if (layer->isSecure() && !visibleRegion.isEmpty()) {
789 // invalidate the areas where a layer was removed
830 const sp<LayerBase>& layer = layers[i];
831 layer->lockPageFlip(recomputeVisibleRegions);
843 const sp<LayerBase>& layer = layers[i];
844 layer->unlockPageFlip(planeTransform, mDirtyRegion);
917 const sp<LayerBase>& layer = layers[i];
918 const Region& visibleRegion(layer->visibleRegionScreen);
922 layer->draw(clip);
934 const sp<LayerBase>& layer = layers[i];
935 layer->finishPageFlip();
1056 status_t SurfaceFlinger::addLayer(const sp<LayerBase>& layer)
1059 addLayer_l(layer);
1064 status_t SurfaceFlinger::removeLayer(const sp<LayerBase>& layer)
1067 status_t err = purgatorizeLayer_l(layer);
1073 status_t SurfaceFlinger::invalidateLayerVisibility(const sp<LayerBase>& layer)
1075 layer->forceVisibilityTransaction();
1080 status_t SurfaceFlinger::addLayer_l(const sp<LayerBase>& layer)
1082 if (layer == 0)
1085 layer, &LayerBase::compareCurrentStateZ);
1086 sp<LayerBaseClient> lbc = LayerBase::dynamicCast< LayerBaseClient* >(layer.get());
1098 sp<LayerBaseClient> layer =
1100 if (layer != 0) {
1101 mLayerMap.removeItem(layer->serverIndex());
1110 // remove the layer from the main list (through a transaction).
1115 // it's possible that we don't find a layer, because it might
1232 sp<LayerBaseClient> layer;
1258 layer = createPushBuffersSurfaceLocked(client, d, id,
1261 layer = createNormalSurfaceLocked(client, d, id,
1266 layer = createBlurSurfaceLocked(client, d, id, w, h, flags);
1269 layer = createDimSurfaceLocked(client, d, id, w, h, flags);
1273 if (layer != 0) {
1274 layer->setName(name);
1276 surfaceHandle = layer->getSurface();
1305 sp<Layer> layer = new Layer(this, display, client, id);
1306 status_t err = layer->setBuffers(w, h, format, flags);
1308 layer->initStates(w, h, flags);
1309 addLayer_l(layer);
1312 layer.clear();
1314 return layer;
1321 sp<LayerBlur> layer = new LayerBlur(this, display, client, id);
1322 layer->initStates(w, h, flags);
1323 addLayer_l(layer);
1324 return layer;
1331 sp<LayerDim> layer = new LayerDim(this, display, client, id);
1332 layer->initStates(w, h, flags);
1333 addLayer_l(layer);
1334 return layer;
1341 sp<LayerBuffer> layer = new LayerBuffer(this, display, client, id);
1342 layer->initStates(w, h, flags);
1343 addLayer_l(layer);
1344 return layer;
1360 sp<LayerBaseClient> layer = getLayerUser_l(index);
1361 if (layer != 0) {
1362 err = purgatorizeLayer_l(layer);
1370 status_t SurfaceFlinger::destroySurface(const sp<LayerBaseClient>& layer)
1376 sp<LayerBaseClient> layer;
1379 SurfaceFlinger* flinger, const sp<LayerBaseClient>& layer)
1380 : flinger(flinger), layer(layer) { }
1382 sp<LayerBaseClient> l(layer);
1383 layer.clear(); // clear it outside of the lock;
1386 * remove the layer from the current list -- chances are that it's
1395 "error removing layer=%p (%s)", l.get(), strerror(-err));
1400 mEventQueue.postMessage( new MessageDestroySurface(this, layer) );
1414 sp<LayerBaseClient> layer(getLayerUser_l(s.surface | cid));
1415 if (layer != 0) {
1418 if (layer->setPosition(s.x, s.y))
1422 if (layer->setLayer(s.z)) {
1424 layer, &Layer::compareCurrentStateZ);
1431 if (layer->setSize(s.w, s.h)) {
1437 if (layer->setAlpha(uint8_t(255.0f*s.alpha+0.5f)))
1441 if (layer->setMatrix(s.matrix))
1445 if (layer->setTransparentRegionHint(s.transparentRegion))
1449 if (layer->setFlags(s.flags, s.mask))
1462 sp<LayerBaseClient> layer = mLayerMap.valueFor(s);
1463 return layer;
1526 const sp<LayerBase>& layer = currentLayers[i];
1527 const Layer::State& s = layer->drawingState();
1534 layer->getTypeID(), layer.get(),
1535 s.z, layer->tx(), layer->ty(), s.w, s.h,
1536 layer->needsBlending(), layer->needsDithering(),
1537 layer->contentDirty,
1545 LayerBase::dynamicCast< LayerBaseClient* >(layer.get());
1559 /*** Layer ***/
1560 sp<Layer> l = LayerBase::dynamicCast< Layer* >(layer.get());
1589 layer->transparentRegionScreen.dump(result, "transparentRegionScreen");
1590 layer->visibleRegionScreen.dump(result, "visibleRegionScreen");
1745 status_t Client::bindLayer(const sp<LayerBaseClient>& layer, int32_t id)
1750 return mLayers.insertAt(layer, idx);