Review Request 126381: kwayland backend for libkscreen

Martin Gräßlin mgraesslin at kde.org
Fri Dec 18 09:20:26 UTC 2015


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/126381/#review89688
-----------------------------------------------------------



backends/kwayland/waylandbackend.cpp (line 40)
<https://git.reviewboard.kde.org/r/126381/#comment61426>

    m_internalConfig(new WaylandConfig(this))



backends/kwayland/waylandbackend.cpp (lines 44 - 47)
<https://git.reviewboard.kde.org/r/126381/#comment61427>

    not needed, just init in initializer list. The code right now would always go into the if



backends/kwayland/waylandconfig.h (line 75)
<https://git.reviewboard.kde.org/r/126381/#comment61428>

    if it's not needed I'd suggets to remove it



backends/kwayland/waylandconfig.cpp (lines 95 - 96)
<https://git.reviewboard.kde.org/r/126381/#comment61429>

    not one 100 % sure, but I think you first need to start the thread and then move the object.



backends/kwayland/waylandconfig.cpp (line 120)
<https://git.reviewboard.kde.org/r/126381/#comment61430>

    that's good! I need to apply that in KWin



backends/kwayland/waylandconfig.cpp (line 154)
<https://git.reviewboard.kde.org/r/126381/#comment61431>

    maybe a counter for block signals? Whenever it gets blocked increment by 1, and decrement on unblok. With a bool there's always the danger of two things happening at the same time srew over your internal blocking.
    
    Also from KWin code experience I suggest to use dedicated methods blockSignals(), unblockSignals() instead of manually changing the values. And add assert to ensure that e.g. unblock is only called if it's blocked.



backends/kwayland/waylandconfig.cpp (line 184)
<https://git.reviewboard.kde.org/r/126381/#comment61432>

    just checking: you want the semantic that an existing value is edited and if it's not existing a new pair is added?



backends/kwayland/waylandconfig.cpp (line 222)
<https://git.reviewboard.kde.org/r/126381/#comment61433>

    what's the not existing comment about?
    
    and kscreen_id could be const



backends/kwayland/waylandconfig.cpp (line 276)
<https://git.reviewboard.kde.org/r/126381/#comment61434>

    nitpick: mixing of foreach and Q_FOREACH. I suggest to stick to one.



backends/kwayland/waylandoutput.cpp (line 37)
<https://git.reviewboard.kde.org/r/126381/#comment61435>

    you could move it into the Ctor's init list



backends/kwayland/waylandoutput.cpp (lines 51 - 52)
<https://git.reviewboard.kde.org/r/126381/#comment61436>

    no check for not found. That is potentially crashy



backends/kwayland/waylandoutput.cpp (line 135)
<https://git.reviewboard.kde.org/r/126381/#comment61437>

    QStringLiteral



backends/kwayland/waylandoutput.cpp (line 160)
<https://git.reviewboard.kde.org/r/126381/#comment61438>

    QLatin1String



backends/kwayland/waylandscreen.cpp (line 61)
<https://git.reviewboard.kde.org/r/126381/#comment61439>

    that's what Bill Gates said :-P


- Martin Gräßlin


On Dec. 17, 2015, 7:53 p.m., Sebastian Kügler wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/126381/
> -----------------------------------------------------------
> 
> (Updated Dec. 17, 2015, 7:53 p.m.)
> 
> 
> Review request for Plasma, Solid, Daniel Vrátil, and Martin Gräßlin.
> 
> 
> Repository: libkscreen
> 
> 
> Description
> -------
> 
> This adds a kwayland backend to libkscreen.
> 
> This backend uses KWayland's OutputManagement protocol for enlisting and
> configuring devices.
> 
> Enlisting outputs
> 
> KScreen's outputs are created from KWayland::Client::OutputDevice objects,
> they copy the data into kscreen's Outputs, and update these objects. A list
> of outputs is requested from the client Registry object.
> 
> Configuring outputs
> 
> The backend asks the global OutputManagement interface for an OutputConfiguration
> object, then sets the changes per outputdevice on this object, and asks the
> compositor to apply() this configuration.
> 
> For this to work, the compositor should support the Wayland org_kde_kwin_outputdevice
> and org_kde_kwin_outputmanagement protocols, for example through
> KWayland::Server classes OutputDevice, OutputManagmenent and OuputConfiguration.
> 
> General working
> 
> WaylandBackend creates a global static internal config, available through
> WaylandBackend::internalConfig(). WaylandConfig binds to the wl_registry
> callbacks and catches org_kde_kwin_outputdevice creation and destruction.
> It passes org_kde_kwin_outputdevice creation and removal on to
> WB::internalConfig() to handle its internal data representation as WaylandOutput.
> WaylandOutput binds to org_kde_kwin_outputdevice's callback, and gets notified
> of geometry and modes, including changes. WaylandOutput administrates the
> internal representation of these objects, and invokes the global notifier,
> which then runs the pointers it holds through the updateK* methods in
> Wayland{Screen,Output,...}.
> 
> KScreen:{Screen,Output,Edid,Mode} objects are created from the internal
> representation as requested (usually triggered by the creation of a
> KScreen::Config object through KScreen::Config::current()). As with other
> backends, the objects which are handed out to the lib's user are expected
> to be deleted by the user, the backend only takes ownership of its internal
> data representation objects.
> 
> 
> Diffs
> -----
> 
>   CMakeLists.txt efac5ce 
>   autotests/CMakeLists.txt 07b7bbc 
>   autotests/configs/default.json 3ac3e19 
>   autotests/testconfigserializer.cpp 1af3069 
>   autotests/testkwaylandbackend.cpp PRE-CREATION 
>   autotests/testkwaylandconfig.cpp PRE-CREATION 
>   backends/CMakeLists.txt ff5d751 
>   backends/kwayland/CMakeLists.txt PRE-CREATION 
>   backends/kwayland/README.md PRE-CREATION 
>   backends/kwayland/waylandbackend.h PRE-CREATION 
>   backends/kwayland/waylandbackend.cpp PRE-CREATION 
>   backends/kwayland/waylandconfig.h PRE-CREATION 
>   backends/kwayland/waylandconfig.cpp PRE-CREATION 
>   backends/kwayland/waylandoutput.h PRE-CREATION 
>   backends/kwayland/waylandoutput.cpp PRE-CREATION 
>   backends/kwayland/waylandscreen.h PRE-CREATION 
>   backends/kwayland/waylandscreen.cpp PRE-CREATION 
>   src/backendmanager.cpp 89ae31e 
>   src/config.cpp e8b8a8f 
>   src/screen.h 4cd1e82 
>   tests/CMakeLists.txt d5e41d5 
>   tests/kwayland/CMakeLists.txt PRE-CREATION 
>   tests/kwayland/main.cpp PRE-CREATION 
>   tests/kwayland/waylandconfigreader.h PRE-CREATION 
>   tests/kwayland/waylandconfigreader.cpp PRE-CREATION 
>   tests/kwayland/waylandtestserver.h PRE-CREATION 
>   tests/kwayland/waylandtestserver.cpp PRE-CREATION 
> 
> Diff: https://git.reviewboard.kde.org/r/126381/diff/
> 
> 
> Testing
> -------
> 
> The patch contains a test server, which is used for the autotests.
> 
> The test server uses KWayland's server classes and is set up from the json config data we use for the other tests. That means that the backends runs against a real server to test everything.
> 
> I also tested the kscreen UI, which also works as expected.
> 
> 
> Thanks,
> 
> Sebastian Kügler
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20151218/00de77d7/attachment-0001.html>


More information about the Plasma-devel mailing list