Re: [PATCH hwc v1] [RFC] drm_hwcomposer: Flatten composition using writeback connector

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Mar 20, 2018 at 11:16 AM, Alexandru-Cosmin Gheorghe
<Alexandru-Cosmin.Gheorghe@xxxxxxx> wrote:
> On Tue, Mar 20, 2018 at 10:00:17AM -0400, Sean Paul wrote:
>> On Tue, Mar 13, 2018 at 04:21:20PM +0000, Alexandru Gheorghe wrote:
>> > This patchset tries to add support for using writeback connector to
>> > flatten a scene when it doesn't change for a while. This idea had
>> > been floated around on IRC here [1] and here [2].
>> >
>> > Developed on top of the latest writeback series, sent by Liviu here
>> > [3].
>> >
>> > Probably the patch should/could be broken in more patches, but since I
>> > want to put this out there to get feedback, I kept them as a single
>> > patch for now.
>> >
>> > This change could be summarize as follow:
>> > - Attach a writeback connector to the CRTC that's controlling a
>> > display.
>> > - Detect the scene did not change for a while(60 vblanks).
>> > - Re-commit scene and get the composited scene through the writeback
>> > connector.
>> > - Commit the whole scene as a single plane.
>> >
>> > Some areas that I consider important and I could use some
>> > feedback/ideas:
>> >
>> > 1. Building the pipeline.
>> > Currently, drm_hwcomposer allows to connect just a single connector
>> > to a crtc. For now, I decided to treat the writeback connector as a
>> > separate field inside DrmCrtc. I'm not sure if it's a good idea to try
>> > to handle this in a unified way, since the writeback connector is such
>> > a special connector. Regarding the allocation of writeback connectors,
>> > my idea was to allocate writeback connector to the primary display
>> > first and then continue allocating while respecting the display number. 0
>> > gets a writeback before 1 and so on.
>> >
>> > 2. Heuristic for triggering the flattening.
>> > I just created a VSyncWorker which will trigger the flattening of the
>> > scene if it doesn't change for 60 consecutive vsyncs. The countdown
>> > gets reset every time ValidateDisplay is called. This is a relatively
>> > basic heuristic, so I'm open to suggestions.
>> >
>> > 3. Locking scheme corner cases.
>> > The Vsynworker is a separate thread which will contend with
>> > SurfaceFlinger for showing things on the screen. I tried to limit the
>> > race window by resetting the countdown on ValidateDisplay and
>> > explicitely checking that we still need to use the flatten scene before
>> > commiting to get the writeback result or before applying the flattened
>> > scene.
>>
>> What are the consequences of the race? It seems like it might be possible that
>> stale content will be shown over fresh?
>> I think it'd be fine to serialize
>> vsyncworker and "normal" commits such that the race window is closed instead of
>> reduced. I think you could do the writeback operation asynchronously and then
>> commit the result once it's ready, that shouldn't block things up too much.
>>
>
> Just, to make sure we are on the same page, for Mali DP650 the pipeline
> looks like this, I didn't see how it looks for the other hardware.
>
> CRTC ---- encoder ------------ display connector
>  |------- writeback enc ------ writeback connector.
>
> There is no asynchronously writeback operation, the scene that you
> do writeback for will be shown on the display as well.
>

fwiw, the msm/mdp5 writeback support I implemented was using a
different CRTC (ie. output going either to display or to wb).. (which
unfortunately implies using different planes).. not sure how much this
case is worth supporting in drm-hwc.

(I think I can do the single CRTC and multiple encoder cases, but it
wasn't really obvious how to get that working with a video mode
display and the hw I was working on didn't have a DSI cmd mode panel)

BR,
-R

> Flattening thread:
> 1) Commit original scene + writeback buffer
> 2) Wait for writeback fence.
> 3) Commit flattened scene.
>
> Before 1) and 3) I'm doing a locked check where I verify if flattened
> scene is still needed and then I release the lock and commit.
>
> Now, I can see a crazy race where immediately after I decided that we
> need the flattened scene the flattening thread doesn't get any CPU and
> the SurfaceFlinger comes ahead and commits it's new scene followed by
> a commit of the old scene.
> That's the limitted race window I'm talking about.
>
> The alternative would be to serialize the commits 1) & 3) with
> SurfaceFlinger commits, but while 1) or 3) happens surfaceflinger
> cannot commit, therefore could potentially miss a VBlank. I suppose
> this option is more desireable than the side effect of previously
> explained race.
>
>
>> >
>> > 4. Building the DrmDisplayComposition for the flattened scene.
>> > I kind of lost myself  in all types of layers/planes and compositions,
>> > so I'm not sure if I'm correctly building the DrmDisplayComposition
>> > object for the FlattenScene, it works and shows what I expect on the
>> > screen. So, any feedback here is appreciated.
>>
>> Yeah, this code needs some love. I had envisioned some Planner-esque interface
>> where platforms could plug their 2D blocks in and they'd be used by core to
>> flatten things. This scheme would at least separate the squashing complexity
>> from compositing. Any interest in taking this on?
>>
>
> I could imagine how that would work with a totally independent 2D
> block, not sure if it's doable in my current setup with the writeback
> linked to same CRTC as the display, don't you think?
>
>>
>> >
>> > 5. I see there is a drmcompositorworker.cpp which implemented the same
>> > idea using the GPU, however that seems to not be used anymore, does
>> > anyone know the rationale behind it?
>>
>> Let's delete it if it's not used.
>>
>> Sean
>>
>> <snip />
>> --
>> Sean Paul, Software Engineer, Google / Chromium OS
>
> --
> Cheers,
> Alex G
> _______________________________________________
> dri-devel mailing list
> dri-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux