1
0
Fork 0
Commit graph

46 commits

Author SHA1 Message Date
Manasi Navare
b23482b05c drm_hwcomposer: Add HDCP state tracking to request it to be enabled
This adds HDCP state tracking through Client to HwcDisplay
When Client requests HDCP to be enabled for secure layers
Hdcpstate in the corresponding HwcDisplay is set up.
This is parsed to set the Content Protection and HDCP Content Type
properties for the connector in the next commit

Change-Id: I60dd4359ee2f87faba1df83c7faf286b34af43f6
Signed-off-by: Manasi Navare <navaremanasi@google.com>
2025-10-14 19:10:56 +00:00
Andrew Wolfers
ff954db228 drm_hwcomposer: Add buildflag guards around libsync deps
This change adds the buildflag HAS_LIBSYNC for managing
availability of libsync. This is necessary for the
unittests target for which libsync doesn't provide the
necessary variant.

DrmAtomicStateManager.cpp is the only file which depends
on libsync. Guards have been added using the HAS_LIBSYNC
flag, such that any method which would depend on libsync
is now stubbed when it is unavailable.

Change-Id: I101083074a9fad98e1c40c27b55f2eddf1c53581
2025-10-02 15:06:06 +00:00
Su Hong Koo
7e7e0609ee drm_hwcomposer: Add tracing around validate/present paths
Add perferto tracing around validate and present paths. Specifically
around code that blocks on the main thread (e.g. commit, fence waits).
These should increase the visibility of what is blocking the
presentation hot path in perfetto traces.

Change-Id: I6db60648c5e1d5f1a666ebc52f5ae5ad57e0e82a
2025-09-24 12:11:22 -04:00
Drew Davenport
ac727c57ae drm_hwcomposer: Fix used_plane state tracking
Ensure that the next frame's list of used_planes is correct. The list of
used planes for the new frame is initialized to the previous frame's
list of planes when creating the AtomicRequest. If there is a
composition as a part of this request, the list should be cleared before
creating the new composition, since the list will be re-populated.

Neglecting to clear this left planes on the list when they shouldn't
have been, or the same plane multiple times. This led to some spurious
commit and validation failures on single display configurations, but on
multiple display configurations also resulted in highly visible stuttering.

Change-Id: Ie3fa1fc120fde13ee80f9a144c459526be2822cb
2025-09-19 10:20:08 -06:00
Drew Davenport
5a1d68b1f8 drm_hwcomposer: Preserve DrmAtomicStateManager state
The next frame's state needs to be initialized with the current frame's
state to ensure that it doesn't get reset incorrectly.

Change-Id: I00caab6ad4116dceba67cbd945b83c4d45277a39
2025-09-12 10:15:36 -06:00
Andrew Wolfers
9255d0d10b drm_hwcomposer: Migrate to android::drm_hwcomposer namespace
Change-Id: I2859aa8f55532d88231389724956fc77b0625339
2025-09-08 18:53:00 +00:00
Drew Davenport
5c7f0d6e53 drm_hwcomposer: const-correctness
Make AtomicCommitArgs const in the different helper functions to build
the AtomicRequest. Additionally, reorder the parameters to reflect the
convention that input parameters are listed first, and out parameters
are listed after.

Change-Id: I0277ec4129fbcd6312e6df9ae3f15600e9755520
2025-09-05 14:57:03 -06:00
Drew Davenport
9e59a16a2c drm_hwcomposer: Don't reset writeback fence
It's not necessary to close the fence after waiting.

Change-Id: I6cfa4dc9e2cfa9fff8a2d40a50b4badf8cb7ce1f
2025-09-05 14:55:26 -06:00
Drew Davenport
faab5a4912 drm_hwcomposer: Make some structs private
Move structs definitions that are only used inside the
DrmAtomicStateManager class to private.

Change-Id: I6f3c48cf14645dae721d0e4f9d9b1e5767f08914
2025-09-05 14:55:24 -06:00
Drew Davenport
c4c008f63a drm_hwcomposer: Use AtomicRequest struct
Add AtomicRequest struct to wrap the pending DrmModeAtomicReq and
related kms objects and state for the pending atomic commit.

After the AtomicRequest's property set has been committed, update the
internal DrmAtomicStateManager state to reflect what has been committed.

Change-Id: I49d39649eb957d69f724b53b91577a347a75527e
2025-09-05 14:54:55 -06:00
Drew Davenport
88527cddf2 drm_hwcomposer: Clear new frame state
Rather than initializing the state associated with a new frame by
copying committed_frame_state_, check committed_frame_state_ directly
when needed.

Change-Id: I62043e15e70669ce6a8ac4635101d13d8efd7f15
2025-09-05 13:42:58 -06:00
Gil Dekel
860b363563 drm_hwcomposer: Defer display rect update to prevent state pollution
A test commit or failed modesets, particularly when with modes of a
different resolution, would cause all subsequent pafe-flip commits to
fail.

The root cause was a premature state update within
SetDisplayModeIfNeeded. The `whole_display_rect_` member was being
modified during the commit preparation phase. This polluted the state
manager's internal view of the active display size, causing subsequent
frame compositions to be built with incorrect dimensions, which were
then rejected by the kernel on certain drivers that cannot handle
scaling on the fly.

This change fixes the issue by deferring the state update until after a
commit is successfully applied:

1. `whole_display_rect_` is now only updated inside `CommitFrame` after
   a modesetting commit has been successfully applied to hardware.

2. `SetCompositionIfNeeded` is updated to use the dimensions from the
   incoming `args.display_mode`, if available, when preparing a modeset.
   Otherwise it will use the existing size in `whole_display_rect_`.
   This ensures the plane is correctly configured for either the
   requested mode, or the currently active one (for page-flips).

This prevents test-only operations from having side effects and ensures
the state manager's internal state remains consistent. It also prevents
state pollution on failed modesets.

Change-Id: Icf08b32c13879d394f883f34e6fed3d96a748a4f
Co-authored-by: Lucas Berthou <berlu@google.com>
Signed-off-by: Gil Dekel <gildekel@google.com>
2025-08-13 13:09:01 -04:00
Gil Dekel
3b2050b7f2 drm_hwcomposer: Re-enable MRR on AL devices
Configuration groups for the Multiple Refresh Rate (MRR) feature support
is currently disabled in DRM HWComposer. This is because it is
insufficient to group modes solely based on their active region size.

The primary reasons for this insufficiency are:
1. drm-hwc clients may assume they can seamlessly switch between
   configurations within the same group to support variable refresh
   rates.
2. Not all System-on-a-Chip (SoC) architectures support seamless mode
   transitions.
3. For SoCs that do support seamless switching, transitions often depend
   on other hardware-specific properties like matching blanking periods.
4. A fallback to a non-seamless (blocking) modeset is unacceptable for
   internal displays if a seamless transition fails, as this causes
   flickering. The current framework does not handle such failures
   gracefully.

To Resolve these challenges and re-enable seamless Multiple Refresh-Rate
transitions on internal panels, we add logic to validate all configs
against the preferred initial active config. This validation preforms a
seamless modeset test on each available config against the config that
was set during the display initialization. Configs that fail the
screening are assigned new group IDs.

Caveats:
1. Currently, this is only implemented for internal panels. External
   display seamless transition between variable refresh rates is not
   support. However this work can be extended to support seamless
   transitions on external displays as well.
2. Grouping is only preformed for the preffered/active config at the
   time of display init, and is valid only for the duration of the
   current full modeset commit. No other groups are not created (since
   they cannot be validated), and any new full commits will not honor
   the guarantee provided by the check. This work can be extended to
   refresh and validate all configs within the same group ID of any
   incoming full modeset commit.

Change-Id: Ie2661e74bd3ff704b40c8c7ef50c56e604e5e8df
Signed-off-by: Gil Dekel <gildekel@google.com>
2025-07-29 16:14:12 -04:00
Gil Dekel
109a3d3553 drm_hwcomposer: Return bool for CommitFrame and ExecuteAtomicCommit
Error codes are never checked and working with errors as booleans
results in somewhat counter-intuitive logic.

Change CommitFrame() and ExecuteAtomicCommit() to return bools instead.

Change-Id: I5e8041fd4ddc99ef06184081a7f6def028bbe356
Signed-off-by: Gil Dekel <gildekel@google.com>
2025-07-29 14:47:47 -04:00
Lucas Berthou
446c229f98 drm_hwcomposer: refactor drmAtomicStateManager
This is a prerequisit to allow for multi-display commit at once.
It also removes the cognitive complexity of CommitFrame through addition
of helpers for all drm properties to be set.

Change-Id: Ifad7e574c9ea6ced09c677923868ce29656f33f3
Signed-off-by: Lucas Berthou <berlu@google.com>
2025-07-15 21:50:01 +00:00
Drew Davenport
e91805b9ae drm_hwcomposer: Cleanly exit DrmAtomicStateManager helper thread
Now that the helper thread doesn't acquire the global lock, we can wait
for the helper thread to exit without risk of deadlock.

Change-Id: Ibaf8a1a64fb1aa64f8b75fd9a8ae1eff81dae0df
2025-06-12 01:39:23 +00:00
Drew Davenport
6443ccecc2 drm_hwcomposer: Remove main_lock and protect shared state
Remove the usage of main_lock_ and ensure that mutex_ is held for no
larger a scope than is necessary.

Reorder some class members to keep protected members together.

Change-Id: Iaf29cf53e11d692fb3779b61b147abfcacf95746
2025-06-12 01:39:23 +00:00
Drew Davenport
457c6b2520 drm_hwcomposer: Use queue for tracked KmsObjects
The distinction between active/staged isn't important for state
tracking, so simplify management of these by using a std::queue.

Change-Id: I1871d3c2f5c6e6686baa9b6473bbbb7072077efc
2025-06-12 01:39:23 +00:00
Drew Davenport
9715b7c9e9 drm_hwcomposer: Separate KmsState and KmsObjects
Since the helper thread doesn't need to access KmsState, and we are only
using the most recently committed state, track the KmsState separately
from the KmsObjects.

The tracked KmsState doesn't need to be synchronized with the helper
thread.

Change-Id: Ic62e0753ee11d3870eb31892f18023688558ff9a
2025-06-12 01:39:23 +00:00
Drew Davenport
c75973027a drm_hwcomposer: Use most recently committed state
When preparing the properties for a commit, the state for the currently
active frame is used, rather than the last committed frame. This is
incorrect and could lead to a scenario such as:

- Frame N: commit enables plane 1
- Frame N+1: commit uses plane 1, 2, 3
- Frame N+2: if executed before staged_frame_state_ is moved to
    active_frame_state_, the new KmsState::used_framebuffers will be
    initialized to {1}
  - commit uses planes 1, 2
  - plane 3 is not disabled by the unused_planes code in CommitFrame

A similar problem exists for the KmsState::crtc_active_state.

To avoid this issue, always use the last committed state, regardless of
whether the previous frame has been presented or not.

Change-Id: I840b5b0ca3a3cf477882cacf6b1d5c0313ae80cf
2025-06-12 01:39:23 +00:00
Drew Davenport
80d7c469d5 drm_hwcomposer: Gather kms objects for a commit in a struct
Define DrmAtomicStateManager::KmsObjects struct to distinguish between
objects that are tracked for lifetime management and state that is
tracked for the purpose of preparing subsequent commits.

Change-Id: I5402959f17298102a904b83fbbf01577ae673e48
2025-06-12 01:39:23 +00:00
Drew Davenport
b9e2bdb8f3 drm_hwcomposer: Add thread annotations for DrmAtomicStateManager
Shared state is protected by a combination of the local mutex_ and the
global lock. This change attempts to document and enforce that more
clearly using clang-tidy thread annotations.

Change unique_lock usage to lock_guard for cases that do not require
release of the mutex such as when using a condition variable.

Temporarily add a main_lock_ mutex which mirrors how
the global lock is being used for synchronization. Lock this at the
entry point to all public methods. This lock will be removed as a part
of subsequent refactoring and it used to more cleanly break up the
following changes in this series.

Some state is not properly protected by any lock, so temporarily disable
the warnings around access to that state until the synchronization is
resolved in subsequent changes.

Change-Id: I6f4f30c4e97f266146b0879c5255d6f2432f12a3
2025-06-12 01:39:23 +00:00
Sasha McIntosh
c469d14a19 drm_hwcomposer: Fixup downstream cherry-picks
Wrap Android16 APIs in an if block to prevent breaking Android15
integration.

s/AidlHdcpLevels/drm::HdcpLevels

Add support for external HDR displays (dropped in previous cleanup).

clang-format-diff-19 nits

Change-Id: I897e0b42e0065a61ecfe28c280094b6c375d8a72
Signed-off-by: Sasha McIntosh <sashamcintosh@google.com>
2025-05-20 13:36:18 -04:00
Sasha McIntosh
447858ca48 drm_hwcomposer: Set min bpc on modeset
When HDR10 is the desired output type for the display mode, request a minimum
bpc of 8 from the connector. This ensures the quality of the HDR content and
allows the caller to retry with SDR if there is insufficient bandwidth.

Change-Id: I897e0b42e0065a61ecfe28c280094b6c375d8a72
Signed-off-by: Sasha McIntosh <sashamcintosh@google.com>
2025-05-20 13:36:18 -04:00
Manasi Navare
2d4621a7c3 drm_hwcomposer: Teardown the pipeline and DRM resources on disconnect
This commit properly tears down the display pieline when the
display is disconnected. This frees up the DRM CRTC and other
resources used by the connector. This ensures that the
consecutive hotplugs work correctly to reallocate the CRTCs
when new displays are connected.

This was verified by ensuring the CRTCs, mode, connectors
are freed up in modetest.

This fixes the issue of display not coming back after
screen timeout and fixes the Android VTS SetPowerMode(Off) failures

Fixes: 025ea5bfbb ("drm_hwcomposer: Teardown the pipeline and DRM
resources on disconnect")
Change-Id: Icdca56433b5cd565d1658b1a415565adc7980088
Signed-off-by: Manasi Navare <navaremanasi@google.com>
2025-05-15 17:22:28 +00:00
Drew Davenport
c72fe085db Revert "drm_hwcomposer: Teardown the pipeline and DRM resources on disconnect"
This reverts commit 025ea5bfbb.

The commit regresses the behavior when a display is disabled via
setPowerMode(OFF) and re-enabled via setPowerMode(ON).

Signed-off-by: Drew Davenport <ddavenport@google.com>
2025-04-21 11:43:10 -06:00
Manasi Navare
025ea5bfbb drm_hwcomposer: Teardown the pipeline and DRM resources on disconnect
This commit properly tears down the display pieline when the
display is disconnected. This frees up the DRM CRTC and other
resources used by the connector. This ensures that the
consecutive hotplugs work correctly to reallocate the CRTCs
when new displays are connected.

This was verified by ensuring the CRTCs, mode, connectors
are freed up in modetest.

Change-Id: Icdca56433b5cd565d1658b1a415565adc7980088
Signed-off-by: Manasi Navare <navaremanasi@google.com>
2025-04-14 18:47:46 +00:00
Mark Yacoub
385b47c876 drm_hwcomposer: Implement display readback using writeback connectors
[Why]
Android requires a readback mechanism to validate display output,
especially in automated testing environments. This implementation is
particularly beneficial for writing automated tests with VKMS, as it
provides a reliable way to directly validate the rendered output.

[How]
Implement support for display readback using DRM/KMS writeback
connectors. This patch:
- Adds buffer management for readback operations
- Implements proper fence handling for both input and output operations
- Integrates with DRM atomic interface to configure writeback connectors
- Provides buffer readiness signaling to client applications

The implementation verifies hardware compatibility by finding matching
writeback connectors for displays and handles all resource lifecycle
management including buffer replacement and cleanup. This allows
tests to directly capture and verify the rendered output, ensuring
correctness and stability.

Test: VtsHalGraphicsComposer3_ReadbackTest
Change-Id: I12ec3d696b95bba79cbc560c525f573271a501bb
Signed-off-by: Mark Yacoub <markyacoub@google.com>
2025-04-11 17:33:23 -04:00
Andrew Wolfers
6fa3500c7f drm_hwcomposer: Commit damage
This change adds per-plane damage info to atomic commit.

Change-Id: I55e6285a0b83fac6342fd736342b3950c488b508
Signed-off-by: Andrew Wolfers <aswolfers@google.com>
2025-04-09 15:08:46 +00:00
Drew Davenport
2d71839c8a drm_hwcomposer: Remove HWC2 SetContentType
Add a new function to set the HDMI content type, and call this from the
frontend.

Change-Id: I338a00b7a142c6d2e2c3a727e8e7df7d24c1594d
Signed-off-by: Drew Davenport <ddavenport@google.com>
2025-04-02 17:51:09 -06:00
Roman Stratiienko
4e15bfc948 drm_hwcomposer: Support default values for Rect structures
This commit introduces two improvements:
1. Introduces frontend-agnostic structures for rects.
2. Support default values in them so that the backend can handle
   cases where rects are not specified by the client, like
   the client layer display frame, etc.
   This reduces the complexity of the Internal layer, making it
   feasible to use a single Frontend<->Internal layer API for
   regular layers, as well as for the Client and Output layers.

Change-Id: Iab5030ad523d36ea4c5af142f6f628952467d6ab
Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
2025-02-05 22:39:35 +02:00
Sasha McIntosh
f9062b6964 drm_hwcomposer: Set HDR metadata on the connector
Implement a function to set HDR metadata on the connector. Support HDR10
and HLG, which are common HDR types.

Change-Id: Id3dbe8eea2ee6b8ba700af23845a43e2070dd14e
Signed-off-by: Sasha McIntosh <sashamcintosh@google.com>
2025-01-30 23:09:52 -05:00
Drew Davenport
bcc587d30b drm_hwcomposer: Add flag for blocking commits
Add a flag to specify whether a commit should be blocking or not.
Default the flag to false, which matches the current behavior.

Change-Id: Ib8f332d8d4d6b8ae1d12f86a980cec8e3efc9da0
Signed-off-by: Drew Davenport <ddavenport@google.com>
2024-11-14 09:47:25 -07:00
Sasha McIntosh
5294f095f6 drm_hwcomposer: Add getter/setter for Colorspace
Optionally, get the Colorspace drm property and populate an enum mapping
for the property types. Add implementation to HwcDisplay::SetColorMode
to set this property and map between HAL_COLOR_MODE types to Colorspace
formats.

Change-Id: Id532e94207c1b1a2623b7d77db239735df18b30f
Signed-off-by: Sasha McIntosh <sashamcintosh@google.com>
2024-10-14 17:32:43 -04:00
Sasha McIntosh
173247b007 drm_hwcomposer: Add getter/setter for content_type
Optionally, get the content_type drm property. Add implementation to
HwcDisplay::SetContentType to set this property.

Change-Id: I910e064876d13205abc7caaac342daaff8f38599
Signed-off-by: Sasha McIntosh <sashamcintosh@google.com>
2024-10-14 15:12:57 -04:00
Sean Paul
468a7548bf drm_hwcomposer: Replace LOG_TAG with drmhwc
It's a pain to use logcat filters for drm_hwcomposer since each file has a different tag necessitating one to specify each tag for the logcat filter or use a regex.

Use one tag for all of drm_hwcomposer to simplify this.

Signed-off-by: Sean Paul <seanpaul@chromium.org>
2024-07-19 17:42:41 +00:00
Roman Stratiienko
f2c060f8be drm_hwcomposer: Virtual display acceleration support
Some platforms like RaspberryPI-4 can benefit from Display Blender IP Core's
ability to write back the composition into RAM, offloading the GPU in cases
where the display content needs to be used (screen record, remote display,
etc.).

To enable this feature the following system property must be enabled:

    PRODUCT_VENDOR_PROPERTIES += debug.sf.enable_hwc_vds=1

The feature was requested by the Tesla Android project to improve UI
performance.

Closes: https://gitlab.freedesktop.org/drm-hwcomposer/drm-hwcomposer/-/issues/4
Change-Id: I643f94551408bf218a0b889f1a031598646242f1
Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
2023-10-01 15:00:59 +03:00
Roman Stratiienko
0da91bf5bb drm_hwcomposer: Add support for color transform matrix
1. Add and wire-up CRTC CTM property support.
2. Add custom Android property to select behavior for cases
   where DRM can't handle color transform matrix.

The "vendor.hwc.drm.ctm" property can be set to:
 - DRM_OR_GPU (default) - Use GPU if CTM is not supported by DRM.
 - DRM_OR_IGNORE - Ignore CTM if DRM doesn't support it.

The last option is useful for Android 13 and later where default
color transformation matrix is not an identity matrix.

At the moment I do not have any devices with CTM support, therefore
I can test only DRM_OR_IGNORE option.

Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
2023-01-18 17:20:01 +02:00
Roman Stratiienko
76892784ac drm_hwcomposer: Introduce SharedFd, use standard c++ RAII for UniqueFd
We use too much dup() system calls for present fence propagating.
Also when propagating acquire fence we use additional logic for
skipping such propagation for the validate/test cycle.

Both issues can be solved by introducing SharedFd, which will track
reference count of fd object.

After that the UniqueFd is used very rarely and can be simplified by
wrapping it into std::unique_ptr without caring too much of adding
an extra malloc/free operation.

Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
2023-01-16 20:13:58 +02:00
Roman Stratiienko
f818d4c92c drm_hwcomposer: Simplify DrmAtomicStateManager thread usage
1. Remove PresentTracker class.
2. Use separate mutex for thread synchronization. Before, we have always
   experienced rescheduling due to calling condvar::notify inside the
   mutex, which consumes some number of CPU cycles.

Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
2023-01-04 16:21:04 +02:00
Roman Stratiienko
d2cc73874c drm_hwcomposer: Rework VSyncWorker to work without utils/worker
utils/worker just complicates the logic without providing any benefit.

Change-Id: I7b3c91aee9c0507d9ca35792d24ba6c8c3870033
Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
2022-12-28 19:18:29 +02:00
Roman Stratiienko
abd8e534d9 drm_hwcomposer: Rework DrmProperty class
Simplify code and raise-up clang-tidy level of DrmProperty class
to 'normal'.

Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
2022-12-11 21:19:43 +02:00
Roman Stratiienko
a7913de518 drm_hwcomposer: CI: Bump-up clang toolchain to v15
Address new clang-tidy findings, in most cases 'misc-const-correctness'
check was addressed by adding 'const' modifier, or in some cases changed
to 'auto' (where it's better for formatting).

Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
2022-10-20 14:14:33 +03:00
Roman Stratiienko
4b2cc484f9 drm_hwcomposer: Reorganize struct DrmHwcLayer
1. Move BlendMode, ColorSpace, SampleRange fields to the struct BufferInfo,
   allowing extraction of the data from native_handle using Metadata@4 API.
   Use it when data from HWC2 API can't be used (Currently it's a BlendMode
   case for CLIENT layer)

2. Rename DrmHwcLayer to LayerData and move it to compositor/ directory.
   (I was confused in the past because of similarity of names DrmHwcLayer
    vs HwcLayer, so this step should meke it easier for newcomers to
    understand the code)

3. Allow clonning of the LayerData to propagate it through the composition
   pipeline. Thus LayerData can be used by both HwcLayer to track state
   and by the compositor.

Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-17 11:20:44 +03:00
Roman Stratiienko
59bb481f96 drm_hwcomposer: Add non-blocking commit support
This change fixes FPS drop on multidisplay devices.

Also in some cases it gives graphics pipeline more free time to draw
in advance.

Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-10 11:26:33 +03:00
Roman Stratiienko
4e994055a3 drm_hwcomposer: Rename DrmDisplayCompositor->DrmAtomicStateManager
Primary responsibilities of this class are:

1. Send composition/mode/active state over DRM atomic commit IOCTL
   to the kernel
2. Track commit state and keep planes owned by the Pipeline while they
   are either displayed or staged for displaying.
3. Keep framebuffers alive while they are in use or staged.

Not much related to composition itself, therefore rename it to
DrmAtomicStateManager and move it to drm folder.

Bump clang-tidy level of DrmAtomicStateManager.c to normal by fixing
minor clang-tidy findings.

Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-02-09 17:40:35 +02:00
Renamed from compositor/DrmDisplayCompositor.cpp (Browse further)