call_end

    • chevron_right

      Georges Basile Stavracas Neto: A Sysprof enhancement

      news.movim.eu / PlanetGnome • 26 March

    I’ve blogged in the past about how WebKit on Linux integrates with Sysprof, and provides a number of marks on various metrics. At the time that was a pretty big leap in WebKit development since it gave use a number of new insights, and enabled various performance optimizations to land.

    But over time we started to notice some limitations in Sysprof. We now have tons of data being collected (yay!) but some types of data analysis were pretty difficult yet. In particular, it was difficult to answer questions like “why does render times increased after 3 seconds?” or “what is the CPU doing during layout?”

    In order to answer these questions, I’ve introduced a new feature in Sysprof: filtering by marks.

    • Screenshot of Sysprof's Marks view with the cursor hovering a mark, and the context menu with "Set as Filter" visible over the mark Select a mark to filter by in the Marks view
    • Screenshot of Sysprof's Time Profiler view showing filtered CPU samples Samples will be filtered by that mark

    Hopefully people can use this new feature to provide developers with more insightful profiling data! For example if you spot a slowdown in GNOME Shell, you open Sysprof, profile your whole system, and filter by the relevant Mutter marks to demonstrate what’s happening there.

    Here’s a fancier video (with music) demonstrating the new feature:

    Enjoy!

    • wifi_tethering open_in_new

      This post is public

      feaneron.com /2025/03/26/a-sysprof-enhancement/

    • chevron_right

      Georges Basile Stavracas Neto: A Sysprof enhancement

      news.movim.eu / PlanetGnome • 26 March

    I’ve blogged in the past about how WebKit on Linux integrates with Sysprof, and provides a number of marks on various metrics. At the time that was a pretty big leap in WebKit development since it gave use a number of new insights, and enabled various performance optimizations to land.

    But over time we started to notice some limitations in Sysprof. We now have tons of data being collected (yay!) but some types of data analysis were pretty difficult yet. In particular, it was difficult to answer questions like “why does render times increased after 3 seconds?” or “what is the CPU doing during layout?”

    In order to answer these questions, I’ve introduced a new feature in Sysprof: filtering by marks.

    • Screenshot of Sysprof's Marks view with the cursor hovering a mark, and the context menu with "Set as Filter" visible over the mark Select a mark to filter by in the Marks view
    • Screenshot of Sysprof's Time Profiler view showing filtered CPU samples Samples will be filtered by that mark

    Hopefully people can use this new feature to provide developers with more insightful profiling data! For example if you spot a slowdown in GNOME Shell, you open Sysprof, profile your whole system, and filter by the relevant Mutter marks to demonstrate what’s happening there.

    Here’s a fancier video (with music) demonstrating the new feature:

    Enjoy!

    • wifi_tethering open_in_new

      This post is public

      feaneron.com /2025/03/26/a-sysprof-enhancement/

    • chevron_right

      Michael Meeks: 2025-03-26 Wednesday

      news.movim.eu / PlanetGnome • 26 March

    • Crit-sit stand-up call, catch-up with Dave, last-stage interview.
    • Published the next strip: building for maintainability
    • Monthly all-hands call, sales call.
    • wifi_tethering open_in_new

      This post is public

      meeksfamily.uk /~michael/blog/2025-03-26.html

    • chevron_right

      Michael Meeks: 2025-03-25 Tuesday

      news.movim.eu / PlanetGnome • 25 March

    • Planning call, sync with Karen, last-round interview. Monthly mgmt meeting, larger partner meeting.
    • Some recreational hacking in the evening.
    • wifi_tethering open_in_new

      This post is public

      meeksfamily.uk /~michael/blog/2025-03-25.html

    • chevron_right

      Jussi Pakkanen: Writing your own C++ standard library from scratch

      news.movim.eu / PlanetGnome • 24 March • 5 minutes

    The C++ standard library (also know as the STL) is, without a doubt, an astounding piece of work. Its scope, performance and incredible backwards compatibility have taken decades of work by many of the world's best programmers. My hat's off to all those people who have contributed to it.

    All of that is not to say that it is not without its problems. The biggest one being the absolutely abysmal compile times but unreadability, and certain unoptimalities caused by strict backwards compatibility are also at the top of the list. In fact, it could be argued that most of the things people really dislike about C++ are features of the STL rather than the language itself. Fortunately, using the STL is not mandatory. If you are crazy enough, you can disable it completely and build your own standard library in the best Bender style.

    One of the main advantages of being an unemployed-by-choice open source developer is that you can do all of that if you wish. There are no incompetent middle damagers hovering over your shoulder to ensure you are "producing immediate customer value" rather than "wasting time on useless polishing that does not produce immediate customer value".

    It's my time, and I'll waste it if I want to!

    What's in it?

    The biggest design questions of a standard library are scope and the "feel" of the API. Rather than spending time on design, we steal it. Thus, when in doubt, read the Python stdlib documentation and replicate it. Thus the name of the library is pystd .

    The test app

    To keep the scope meaningful, we start by writing only enough of stdlib to build an app that reads a text file, validates it as UTF-8, splits the contents into words, counts how many time each word appears in the file and prints all words and how many times it appears sorted by decreasing count.

    This requires, at least:

    • File handling
    • Strings
    • UTF8 validation
    • A hash map
    • A vector
    • Sorting

    The training wheels come off

    The code is available in this Github repo for those who want to follow along at home.

    Disabling the STL is fairly easy (with Linux+GCC at least) and requires only these two Meson statements:

    add_global_arguments('-nostdinc++', language: 'cpp')
    add_global_link_arguments('-nostdlib++', '-lsupc++', language: 'cpp')

    The supc++ library is (according to stackoverflow) a support library GCC needs to implement core language features. Now the stdlib is off and it is time to implement everything with sticks, stones and duct tape.

    The outcome

    Once you have implemented everything discussed above and auxiliary stuff like a hashing framework the main application looks like this.

    The end result is both Valgrind and Asan clean. There is one chunk of unreleased memory, but that comes from supc++ . There is probably UB in the implementation. But it should be the good kind of UB that, if it would actually not work, would break the entire Linux userspace because everything depends on it working "as expected".

    All of this took fewer than 1000 lines of code in the library itself (including a regex implementation that is not actually used). For comparison merely including vector from the STL brings in 27 thousand lines of code.

    Comparison to an STL version

    Converting this code to use the STL is fairly simple and only requires changing some types and fine tuning the API.  The main difference is that the STL version does not validate that the input is UTF-8 as there is no builtin function for that. Now we can compare the two.

    Runtime for both is 0.001 to 0.002 seconds on the small test file I used. Pystd is not noticeably slower than the STL version, which is enough for our purposes. It almost certainly scales worse because there has been zero performance work on it.

    Compiling the pystd version with -O2 takes 0.3 seconds whereas the STL version takes 1.2 seconds. The measurements were done on a Ryzen 7 3700X processor.

    The executable's unstripped size is 349k for STL and 309k for pystd. The stripped sizes are 23k and 135k. Approximately 100 k of the pystd executable comes from supc++ . In the STL version that probably comes dynamically from libstdc++ (which, on this machine, takes 2.5 MB).

    Perfect ABI stability

    Designing a standard library is exceedingly difficult because you can't ever really change it. Someone, somewhere, is depending on every misfeature in it so they can never be changed.

    Pystd has been designed to both support perfect ABI stability and make it possible to change it in arbitrary ways in the future. If you start from scratch this turned out to be fairly simple.

    The sample code above used the pystd namespace. It does not actually exist. Instead it is defined like this in the cpp file:

    #include <pystd2025.hpp>

    namespace pystd = pystd2025;

    In pystd all code is in a namespace with a year and is stored in a header file with the same year. The idea is, then, that every year you create a new release. This involves copying all stdlib header files to a file with the new year and regexping the namespace declarations to match. The old code is now frozen forever (except for bug fixes) whereas the new code can be changed at will because there are zero existing lines of code that depend on it .

    End users now have the choice of when to update their code to use newer pystd versions. Even better, if there is an old library that can not be updated, any of the old versions can be used in parallel. For example:

    pystd2030::SomeType foo;
    pystd2025::SomeType bar(foo.something(), foo.something_else());

    Thus if no code is ever updated, everything keeps working. If all code is updated at once, everything works. If only parts of the code are updated, things can still be made to work with some glue code. This puts the maintenance burden on the people whose projects can not be updated as opposed to every other developer in the world. This is as it should be, and also would motivate people with broken deps to spend some more effort to get them fixed.


    • wifi_tethering open_in_new

      This post is public

      nibblestew.blogspot.com /2025/03/writing-your-own-c-standard-library.html

    • chevron_right

      Michael Catanzaro: GNOME 48 Core Apps Update

      news.movim.eu / PlanetGnome • 21 March • 1 minute

    It has been a year and a half since my previous GNOME core apps update . Last time, for GNOME 45, GNOME Photos was removed from GNOME core without replacement, and Loupe and Snapshot (user-facing names: Image Viewer and Camera) entered, replacing Eye of GNOME and Cheese, respectively. There were no core app changes in GNOME 46 or 47.

    Now for GNOME 48, Decibels (Audio Player) enters GNOME core. Decibels is intended to close a longstanding flaw in GNOME’s core app set: ever since Totem hid its support for opening audio files , there has been no easy way to open an audio file using GNOME core apps. Totem could technically still do so, but you would have to know to attempt it manually. Decibels fixes this problem. Decibels is a simple app that will play your audio file and do nothing else, so it will complement GNOME Music, the music library application. Decibels is maintained by Shema Angelo Verlain and David Keller (thank you!) and is notably the only GNOME core app that is written in TypeScript.

    Looking to the future, the GNOME Incubator project tracks future core apps to ensure there is sufficient consensus among GNOME distributors before an app enters core. Currently Papers (future Document Viewer, replacing Evince) and Showtime (future Videos or possibly Video Player, replacing Totem) are still incubating. Applications in Incubator are not yet approved to enter core, so it’s not a done deal yet, but I would expect to see these apps enter core sooner rather than later, hopefully for GNOME 49. Now is the right time for GNOME distributors to provide feedback on these applications: please don’t delay!

    On a personal note, I have recently left the GNOME release team to reduce my workload, so I no longer have any direct role in managing the GNOME core apps or Incubation process. But I think it makes sense to continue my tradition of reporting on core app changes anyway!

    • wifi_tethering open_in_new

      This post is public

      blogs.gnome.org /mcatanzaro/2025/03/21/gnome-48-core-apps-update/

    • chevron_right

      Michael Meeks: 2025-03-20 Thursday

      news.movim.eu / PlanetGnome • 20 March

    • Up early, to the venue. Enjoyed some talks, catch-up with people. Gave my first-ever pico talk of only two minutes - encouraging people to apply as interns.
    • Published the next strip: the state of the roads:
    • wifi_tethering open_in_new

      This post is public

      meeksfamily.uk /~michael/blog/2025-03-20.html

    • chevron_right

      Michael Meeks: 2025-03-19 Wednesday

      news.movim.eu / PlanetGnome • 19 March

    • Slept poorly, up early, breakfast with Eloy. To the (beautiful) venue to setup - good stuff.
    • Talked to, and gave stickers to the cream of European research universities and got positive and useful feedback from them on their COOL usage. Group photo, Karate display.
    • Caught up with people; out to talk with Frank & Niels.
    • wifi_tethering open_in_new

      This post is public

      meeksfamily.uk /~michael/blog/2025-03-19.html

    • chevron_right

      GNOME Foundation News: Introducing GNOME 48

      news.movim.eu / PlanetGnome • 19 March • 1 minute

    The GNOME Project is proud to announce the release of GNOME 48, ‘Bengaluru’.

    GNOME 48 brings several exciting updates, including improved notification stacking for a cleaner experience, better performance with dynamic triple buffering, and the introduction of new fonts like Adwaita Sans & Mono. The release also includes Decibels , a minimalist audio player, new digital well-being features, battery health preservation with an 80% charge limit, and HDR support for compatible displays.

    For a detailed breakdown, visit the GNOME 48 Release Notes .

    GNOME 48 will be available shortly in many distributions, such as Fedora 42 and Ubuntu 25.04. If you want to try it today, you can look for their beta releases, which will be available very soon

    Getting GNOME

    We are also providing our own installer images for debugging and testing features. These images are meant for installation in a vm and require GNOME Boxes with UEFI support. We suggest getting Boxes from Flathub .

    GNOME OS Nightly

    If you’re looking to build applications for GNOME 48, check out the GNOME 48 Flatpak SDK on Flathub.
    You can also support the GNOME project by donating —your contributions help us improve infrastructure, host community events, and keep Flathub running. Every donation makes a difference!

    This six-month effort wouldn’t have been possible without the whole GNOME community, made of contributors and friends from all around the world: developers, designers, documentation writers, usability and accessibility specialists, translators, maintainers, students, system administrators, companies, artists, testers, the local GNOME.Asia team in Bengaluru, and last, but not least, our users.

    We hope to see some of you at GUADEC 2025 in Brescia, Italy!

    Our next release, GNOME 49, is planned for September. Until then, enjoy GNOME 48.

    :heart: The GNOME release team

    • wifi_tethering open_in_new

      This post is public

      foundation.gnome.org /2025/03/19/introducing-gnome-48/