- Aug 17, 2023
-
-
Huihong Luo authored
This reverts commit 56866118. Reason for revert: b/294998861 Change-Id: I8616665f69be8e827529ed3a76b337606b900dfc
-
- Aug 02, 2023
-
-
Huihong Luo authored
This improves performance by moving allocateHelper to a different thread, which is launched early so that the allocation is ready when it is needed. In addition, each display will only need at most one additional texture per frame, so replace the idea of a minimum pool with making sure there is either at least one texture in the pool or a future which will generate one. Bug: 256184546 Test: atest libcompositionengine_test Change-Id: Icb92a85c07b9f2911d1365aa9bbc8d0750a8c116 Merged-In: Icb92a85c07b9f2911d1365aa9bbc8d0750a8c116
-
- Jun 21, 2023
-
-
jimmyshiu authored
cache buffer rendering supposes to utilize the cpu gap after current frame finised and before the next frame. But it could take long and delay the next frame start time and cause jank eventually. Sending CPU LOAD UP hint to prevent stealing time from the next frame. Bug: 285991802 Test: PtsUiBench QHD Change-Id: Id619a8166ae253fef815a25a35fc4b82066144a9
-
- Apr 19, 2023
-
-
Vishnu Nair authored
with null Fixes a regression introduced in T which ignores a setBuffer call with a null buffer. The expected behavior should be to release the currently presented buffer from surfaceflinger. The subsequent frame will not present this layer so the region behind the layer will be composited instead. Bug: 241271897 Test: presubmit Change-Id: Ie06025c59c58cc75a267b783729996a3cbceef45
-
- Mar 28, 2023
-
-
Ady Abraham authored
When the next expected presentation time is not allocated for the previous frame, SF needs to wait before submitting it to HWC to prevent early presentation. Bug: 273419557 Test: tested by partner Test: atest ASurfaceControlTest Change-Id: Ia83755bbc71968369fd9176944b9a85135d8a04a
-
- Mar 24, 2023
-
-
Sally Qi authored
Bug: 267350616 Test: builds Change-Id: I75bb485f01ae2358c77133767f01cb63f8eda6f1
-
Sally Qi authored
- disable caching if hdr/sdr ratio > 1.01f, which we uses the extended brightness api. Bug: 273624686 Test: play HDR video in silkFX and make sure no overdimming obeserved; atest libcompositionengine_test Change-Id: Iae53c5928e4f91b4b73f9e4ee9dd7bb052e86090
-
- Feb 24, 2023
-
-
Vishnu Nair authored
- separate color and bgcolor in layer state so we don't set a color on a layer without a buffer - avoid using legacy layer state when latching a buffer - fix callback issue where invisible or offscreen layers were not invoking the callbacks - pass in layer snapshot for trusted presentation state - fix a screenshot issue where the root layer was skipped - pass in framerate changes to layer history Test: presubmit Test: atest SurfaceFlinger_test with new fe Bug: 238781169 Change-Id: Id9ff8a036dc283e21a05985c1c01ebd070b1df24
-
- Feb 17, 2023
-
-
Alec Mouri authored
Some system layers may need to be excluded from surfaceflinger caching for a variety of reasons, including power or image quality considerations. This provides a mechanism for those system layers to never be cached on the GPU. Bug: 259311918 Test: libcompositionengine_test Test: run test app and inspect planner state Change-Id: I35418ad5a41cb2546e3b27b0af290bf3c31a0180
-
- Feb 10, 2023
-
-
Chavi Weingarten authored
1. Ignore display overlays since we don't want screen decorations included in the occlusion 2. Handle occluded region as separate Rects to ensure that disconnected Rects in a Region are not considered occluding in the disconnected area. Test: LayerTrustedPresentationListenerTest Bug: 256993331 Change-Id: Ib0a4b850e2aafb42e206b8728fcc9b6013171f3f
-
- Jan 31, 2023
-
-
Patrick Williams authored
* Removes redundant logic for determining whether or not SurfaceFlinger should request texture filtering. * Fixes an issue where ScreenCaptureOutput was using incorrect values for its layer stack projection space. Bug: 238348307 Test: atest TextureFilteringTest Change-Id: I4ece87321ee73d10b86a2c01d53717d337c11926
-
- Jan 25, 2023
-
-
John Reck authored
Bug: 241001465 Test: manual currently, flagged off Change-Id: I707281b9acaf6ea218f1d9ce888fc7cdbf1cf7c9
-
- Dec 21, 2022
-
-
Brian Lindahl authored
This allows the memory for the active buffer to be freed as soon as possible by purging it from HWC cache as soon as the next buffer is sent to the layer. Bug: 258196272 Test: atest OutputLayerUncacheBufferTest Change-Id: I96c24390de5757ac99b369119e9ba031afb0b042
-
- Dec 17, 2022
-
-
Brian Lindahl authored
When an app discards graphic buffers, for example when a MediaCodec disconnects from a surface, those buffers will be uncached and removed from HWC buffer slots. The active buffer, however, should still remain active until the next buffer is queued up. Bug: 262037933 Bug: 258196272 Test: atest OutputLayerUncacheBufferTest Test: atest VtsHalGraphicsComposer3_TargetTest Test: atest VtsHalGraphicsComposerV2_2TargetTest Change-Id: I7c4eefb17e8bad694d698f9ad6d1d289f4af8d2c
-
- Dec 15, 2022
-
-
Brian Lindahl authored
When buffers are discarded by SurfaceFlinger clients, the memory should be free'd immediately. This includes clearing references to them from within the implementation of Composer HAL, specifically in cache slots associated with the layer. Since there is no HAL API to clear the slot directly, prior to writing any other buffer to the layer, we set the layer's buffer multiple times to a placeholder buffer, using each of the slot numbers that need to be cleared. This replaces the reference to the client-discarded buffer inside Composer HAL with a reference to the placeholder buffer, causing the reference count to drop, allowing the buffer memory to be freed. Bug: 258196272 Test: atest OutputLayerUncacheBufferTest Change-Id: Id85482e8859490566f0eedbd8d8729c47a7349fb
-
- Dec 09, 2022
-
-
Brian Lindahl authored
Stop caching buffers inside SurfaceFlinger and remove the tight coupling between SurfaceFlinger's ClientCache and the Hardware Composer cache. This allows a better seperation of responsibility, where buffer cache management is not split between HwcSlotGenerator and HwcBufferCache, but is instead solely handled by HwcBufferCache. Note that FramebufferSurface and VirtualDisplaySurface no longer use HwcBufferCache, but instead use their own cache slot management that is solely based on BufferQueue slot numbers. Also do minor refactoring in FramebufferSurface to simplify code. Bug: 258196272 Test: started and stopped multiple YouTube videos on adt4 and verified no change in graphic buffer usage Test: atest HwcBufferCacheTest Test: atest OutputPrepareTest Change-Id: Ica7955ab4bc70e3c70207390e36dff73a2fc4949
-
- Nov 17, 2022
-
-
Carlos Martinez Romero authored
Bug: 233818658 Test: Manual Change-Id: Iff92fc56c43aefdb4fd978e837969f8ddc9c24f4
-
- Nov 11, 2022
-
-
Leon Scroggins III authored
On a multi-display device, it is helpful to know which display particular methods are called for. Add information to traces specifying the name and id of the display. The device still needs to specify different names for displays (see b/254851304), but the traces will now show the id, which is helpful until the device is updated, at which point the names will be immediately helpful. Output: - Store a string that combines the readable name and the DisplayId. This saves allocation costs for the various places where we add this info to the trace. - Print the name and id in present and postFramebuffer. Although postFramebuffer is called by present, future CLs will move it to a separate thread, and this allows tracking which call applies to which display. DisplaySettings: - Add a field with the display name and id. This allows SkiaRenderEngine to print them as well. SkiaRenderEngine: - Print the name and id in drawLayersInternal - Replace the outdated text for the function name referring to the class as "SkiaGL" with a simple call to __func__. Display: - Print the name and id in chooseClientCompositionStrategy, which may also run in another thread. Bug: 241285473 Test: manual; look at traces Change-Id: I3081c4e4a7b5874139af6b5dd74a6a8ab0ad8cf7
-
- Nov 09, 2022
-
-
Patrick Williams authored
Bug: 238643986 Test: presubmits Test: go/wm-smoke Change-Id: I6dbbcd5ce5070ec1d801dca55b5bb89fafe839cb
-
- Nov 03, 2022
-
-
Patrick Williams authored
This CL allows CE instances without TimeStats. This will be used by the short lived CE instances created in the upcoming renderScreenImpl refactor. Bug: 238643986 Test: presubmits Change-Id: I7f996f3ce660b335f6228069aa04bba617806b68
-
- Oct 31, 2022
-
-
Patrick Williams authored
This change allows multiple instances of CompositionEngine to use the same RenderEngine instance which enables creating new instances of CompositionEngine to run off the main thread. This will be used in the refactor of SurfaceFlinger::renderScreenImpl to generate LayerSettings via CompositionEngine. Bug: 238643986 Test: presubmits Change-Id: I0c8dc30e091578d0d77afb434a52038db6e82288
-
- Oct 13, 2022
-
-
Vishnu Nair authored
Make LayerFE a standalone class with no links back to Layer. Pass LayerSnapshot from Layer into LayerFE before CompositionEngine::present and back after. Bug: 238781169 Test: go/wm-smoke Test: presubmit Change-Id: I5395fb717a931f88e2bf26395acd21e8b308961e
-
- Oct 04, 2022
-
-
Chavi Weingarten authored
The current logic only checks if dirty is not empty, but doesn't account for no content changing. Instead use the same logic that's in beginFrame to compute mustRecompute and use that when determining if the display should queue a buffer. This fixes an issue where a Displays first few frames could be black until the content is loaded. Bug: 239888440 Test: First frame from screenrecord is no longer black Change-Id: Ibb568302bf2d50db167a1f9ca76a0f37e2c65bf5 (cherry picked from commit 09fa1d66)
-
- Sep 29, 2022
-
-
Vishnu Nair authored
Adds LayerMetadata to LayerSnapshots. LayerMetadata is only populated when CE enables the new feature flag and the feature flag will only be enabled in ARC++'s CE. This change is necessary to split LayerFE from the Layer class as ARC++'s LayerFE subclass accesses LayerMetadata. Bug: 238781169 Test: go/wm-smoke Test: presubmit Change-Id: Iae405707897eedf5af9025fe628c1cd60b596e10
-
- Sep 13, 2022
-
-
Vishnu Nair authored
First step in breaking CE dependencies with frontend. FE should provide a snapshot of the state for CE to consume. This cl updates the composition state based on whether visible regions are dirty before calling into composition engine. Test: presubmit Test: go/wm-smoke Bug: 238781169 Change-Id: I6efd71cf66d9e1cae163c98ad4ce3097e09848af
-
- Sep 09, 2022
-
-
joenchen authored
After SurfaceFlinger receives the brightness commands, the commands are sent to HWC until the next frame presents. However, no following frames are present after the power mode is set to off, and HWC cannot receive the last brightness commands. This change forces SurfaceFlinger to flush the staged brightness to HWC prior to execution of power off. Bug: 239908529 Test: suspend and resume repeatedly Change-Id: Ia8fb04399e757de16e06e6516d86bdfcfabd5a2e
-
- Aug 25, 2022
-
-
Chavi Weingarten authored
The current logic only checks if dirty is not empty, but doesn't account for no content changing. Instead use the same logic that's in beginFrame to compute mustRecompute and use that when determining if the display should queue a buffer. This fixes an issue where a Displays first few frames could be black until the content is loaded. Bug: 239888440 Test: First frame from screenrecord is no longer black Change-Id: Ibb568302bf2d50db167a1f9ca76a0f37e2c65bf5
-
- Aug 24, 2022
-
-
Patrick Williams authored
Bug: b/232535621 Test: atest librenderengine_test Test: atest SurfaceFlinger_test Change-Id: If036ab847024751b8da97d6ed856db447db19f6f
-
Brian Johnson authored
the behavior in Output::composeSurfaces(). Bug: 240293363 Test: atest libcompositionengine_test. Fixed tests, added CachedSetTest::renderWhitePointNoColorTransform Change-Id: Ic0317b34978c2ae8d5c057c0a39ed889b86b3da0 Merged-In: Ic0317b34978c2ae8d5c057c0a39ed889b86b3da0
-
- Aug 23, 2022
-
-
Brian Johnson authored
Plumb through Output::getSkipColorTransform() into CachedSet, to match the behavior in Output::composeSurfaces(). Bug: 240293363 Test: atest libcompositionengine_test. Fixed tests, added CachedSetTest::renderWhitePointNoColorTransform Change-Id: Ic0317b34978c2ae8d5c057c0a39ed889b86b3da0
-
- Aug 16, 2022
-
-
Patrick Williams authored
Replace Layer::prepareClientCompositionList with Layer::prepareClientComposition now that at most one layer is returned for any call. Also changes OutputLayer::getOverrideCompositionList to return an optional for the same reason. Output::generateClientCompositionRequest is updated to use buffer ids instead of strong pointers to buffers when determining whether or not override settings are redundant. This is done to avoid duplicate checks on whether or not overrideInfo has a non-null buffer. Change-Id: I777f6ba8c3ca38ea31773e6fcbacb65fad287b03 Bug: b/188891810 Test: atest libcompositionengine_test
-
- Aug 10, 2022
-
-
Dominik Laskowski authored
The corresponding backdoor has been removed, and dumpsys output has no practical use. Bug: 241285477 Test: m libcompositionengine_test Change-Id: I1291b6164d5ef6efa9f94498f90206684dacb779
-
- Aug 07, 2022
-
-
Krzysztof Kosiński authored
Bug: 241680050 Test: presubmit Change-Id: I78a3effb33021b79d451f5e9f32a7d96226bdc60
-
- May 26, 2022
-
-
Huihong Luo authored
Layers with SOLID_COLOR compostion type may cause fence leaks, and since these layers are not frequently used, skipping them should be ok. Bug: 230073351 Test: manual, examine logs Change-Id: I50c2488c4c5b891bf0415f1d4bd29a6e0c49be5b
-
- May 16, 2022
-
-
Dominik Laskowski authored
ftl::yield, which lifts T to std::future<T>, incurs the cost of allocating, ref counting, and locking the latter's shared state. Consolidate the existing std::future extensions into ftl::Future, and optimize ftl::yield by including static storage for T within. Bug: 232436803 Test: simpleperf (-31% cycles in postFramebuffer) Change-Id: I9a7ca7de17e7af10515de97d2f6a0dfa24e35d7a
-
Dominik Laskowski authored
Convert the unique_fd of RenderEngineResult (and futures thereof) into sp<Fence> such that postFramebuffer does not duplicate release/present fences. Remove a few copies of shared futures/pointers with std::move. Bug: 232436803 Test: simpleperf (-33% cycles in sys_dup) Change-Id: Ia7c6c8333a712441f3612fb5c720ea2932799636
-
- May 12, 2022
-
-
Robert Carr authored
As of recently we have begun speculating on the composition strategy in cases where we expect GL composition to be present. This enables us to gain back main thread time by running chooseCompositionStrategy (sometimes a long call to HWC) in parallel with GL composition itself. Currently this is only enabled when no geometry changes. Unfortunately this doesn't help us a lot, since most of the cases where we have jank and issues with SF runtime are around animations. In this CL we try and expand the heuristic to cover more cases, including app launch. Now we expect that if we are sending the same output layers to HWC in the same order, and all we have changed is geometry, then the composition strategy will remain stable. We implement by hashing a subset of the values sent to HWC and detecting changes. Test: Existing tests pass. Play with phone lots, no mispredictions Merged-In: I1f41e2cc67b1b55780e1bf6e837d766b4c186161 Bug: 230617082 Change-Id: I1f41e2cc67b1b55780e1bf6e837d766b4c186161
-
- May 10, 2022
-
-
Robert Carr authored
As of recently we have begun speculating on the composition strategy in cases where we expect GL composition to be present. This enables us to gain back main thread time by running chooseCompositionStrategy (sometimes a long call to HWC) in parallel with GL composition itself. Currently this is only enabled when no geometry changes. Unfortunately this doesn't help us a lot, since most of the cases where we have jank and issues with SF runtime are around animations. In this CL we try and expand the heuristic to cover more cases, including app launch. Now we expect that if we are sending the same output layers to HWC in the same order, and all we have changed is geometry, then the composition strategy will remain stable. We implement by hashing a subset of the values sent to HWC and detecting changes. Test: Existing tests pass. Play with phone lots, no mispredictions Bug: 230617082 Change-Id: I1f41e2cc67b1b55780e1bf6e837d766b4c186161
-
- May 06, 2022
-
-
Tianhao Yao authored
Update the enableBorder API in SurfaceComposerClient so that width and color can be specified for the border. The information propagates through the pipe all the way to the render engine so it can render the correct color and width for the border Test:go/wm-smoke. Test: LayerBorder_test Bug: 226529222 Change-Id: Id3ab853d5b4d6899a915f729b0d7be701cb5b167
-
- May 05, 2022
-
-
Matt Buckley authored
Currently we issue hints at the end of the frame reporting what happened that frame. However, this is often too late anyway and lacks critical information not known until after the frame completes, like gpu timing. By waiting until the next frame start and using those timings along with information about gpu duration, the new expected present time, and the new wakeup time, we can instead use those timings to predict the duration of the upcoming frame and signal in advance of a frame drop. This patch also changes how and where frame timing is done and measures gpu duration so we can predict if a cpu speedup can help gpu composition happen earlier, preventing a drop that way. Bug: b/195990840 Test: manual Change-Id: I5f0ae796198631fced503dce8e6c495885fb256a
-