Last week I have been in Barcelona at the KDevelop / Kate sprint with all the other nice people working on those projects. As always, it was very cool to meet everyone again and spend a week together improving software. A big thanks to the organizers and sponsors, too! Since most of the time I work on a fairly encapuslated subsystem (Python support for KDevelop) and only a smaller part […]
Hey all! Greetings from the joint Kate/KDevelop sprint at the Blue Systems office in Barcelona!
I only arrived yesterday but already I have great news for you: After months of work I finally merged the sharedurls branches into master for KDevelop/KDevplatform etc. pp. There I worked on a optimization in our handling of file paths.
The status quo up until know was the following: When importing a folder as a project in KDevelop, we filled a model with every file and folder in the project (recursively). For every item we also stored its path as a KUrl to the potentially remote location. KUrl and QUrl are awesome when you have to work with paths and urls, but as soon as you store potentially thousands of them at the same time it becomes quite inefficient. Assume e.g. you open /foo/bar/blub/ which contains /foo/bar/blub/bla.h. When you use KUrl/QUrl to store these paths, you cannot share any memory between the two, as internally basically a QString is used. Thus, when you import deep folder trees or folders with many files, you’ll waste a lot of memory for common sub-paths. Furthermore, due to the amount of allocations required, reading the tree is pretty slow.
So in the sharedurls branch I worked on a internal replacement for KUrl in KDevelop: It’s called KDevelop::Path and is a glorified QVector<QString> with convenience API to simulate a KUrl and simplify porting. Every entry in the vector contains a path segment. It leverages QStrings implicit sharing to minimize the memory overhead. Furthermore, when you parse a tree structure recursively, all you do is copying vectors and appending strings to them - which is rather cheap as a QString is a small handle structure.
So all in all this should greatly improve the performance of opening projects in KDevelop. Especially for large sessions containing thousands of files (eg.: Qt 4, multiple Qt 5 modules, LibreOffice, Kernel, WebKit, …) the new code is much faster and consumes less memory. I’ve seen time savings in the order of multiple seconds in total as well as memory consumption going down in the order of 100MB.
While this sounds like a fairy-tale, I have to admit that it was/is a lot of work: By using a custom class, you have to convert to KUrl/QUrl or QString quite often when interacting with existing API. This of course is costly and potentially marginalizes or even pessimises the potential performance gains. Hence one needs to pay special attention and port code such that it minimizes these conversions. As such I can only recommend anyone doing something like that when you have similar extreme usecase. For a normal file browser or web browser I doubt the you’ll gain much if anything.
So please compile the current master branches and take a look for yourself. My tests and benchmarks look all good, yet I might have overlooked something. If you spot any regressions, please shout!
Now that this is mostly done and polished, I’ll continue working on Clang integration in KDevelop. Stay tuned for the next blog entry about that topic :) And already a huge thank you to Aleix Pol for organizing this sprint, to Blue Systems for having us, and to the KDE e.V. for sponsoring the trip and accommodation!
Holy moly yet another KDevelop release - but this time a big one! Go and get 4.6.0 while it’s fresh and read the full announcement on the KDevelop website:
since some people asked me: The slides to my extended Apps on Speed talk from this year’s Qt DevDays Berlin are available for download. If you are interested, get them here: http://devdays.kdab.com/wp-content/uploads/2013/11/qt-dd-2013-apps-on-sp…
I hope you liked that talk. I certainly had fun presenting it and discussing the contents with various attendees later on. I have now quite some ideas on how to extend the talk even further.
The slides of the other presentations are also available. Stay tuned for the video recordings of DevDays Berlin, I’m sure they will be accessible soonish :)
Edit: The video is now available! Enjoy http://www.youtube.com/watch?v=C5EPt50Kgmc
Usually I don’t blog because there’s not much going on. Lately it’s been because there’s been too much things going on. As always in communities, it’s not something somebody is doing in his corner, but some synergy coming together in a beautiful and convoluted way. Let me try to sort what I’m talking about. The […]
Hi! I’m happy to announce the the availability of version 1.5 of kdev-python, the Python language support plugin for the KDevelop development environment. For the official (short) announcement containing links to the tarballs, see the announcement on the KDevelop website. Here’s a short video which demonstrates some of kdev-python’s (and KDevelop’s) nice features: (if your network connection allows it, you can also watch the full-resolution version — or here’s a […]
I had a bit of spare time, so I decided I’d try to implement collaborative editing in KTextEditor, and see how far I can get in a week. That week is over now — and this is how far I got: Your browser does not support the video tag. (If your browser doesn’t support HTML5 video, here’s a direct link) Technical implementation In the background, all this is based on […]
As we announced recently, we’ve kept working on the stable version of KDevelop to bring you the polished software you’re looking for. Many bugs have been fixed during the last weeks, I think we can safely say that it has improved since the last beta and of course, KDevelop 4.3. If you want to try […]
I’ve just released the KDevelop Custom Buildsystem version 1.2.2 suitable for usage with KDevelop 4.4/KDevPlatform 1.4. There have not been many changes, mostly just adaptions to KDevPlatform API changes. The only real new feature is the ability to filter our version control directories like .git or .svn. Downloads can be found on the KDE download […]
Sometimes it’s hard to get started using a tool, some people call it white page syndrome, in KDevelop we had the gray page syndrome: I guess you see what I mean. To solve this problem we discussed many times about creating some way to Kickstart a KDevelop session properly, this is what I came up […]
Hi! It’s been probably too much time since we announced a KDevelop version for the last time, but hey! Here we are, as alive as ever! 🙂 Actually it hasn’t been a quiet year, there’s been quite a lot of development going on, specially with regard to stabilization, improved integration facilities and, of course, Milian’s […]
Hi fellow KDE! Today I would like to talk a little about some work I’ve been doing recently in KDevelop in order to assure we have a good path for the new KDevelop user and KDE or free software Developer. I think that KDevelop has been quite good at being adopted by people who know […]
Every project has these things nobody looks into, like these corners nobody clean. For some reason today we realized that we ¿still? have, in our repository, some files like this. Here there’s a good quote: – KDE 2 is not supported, neither Qt 2.0. KDE 2 is in development and KDevelop will be ported after […]
As some of you will know, these days the KDevelop team is staying in Switzerland with a bunch of KDE developers where we’re having some sprints, for me it’s KDevelop sprint mostly although I’ve had very different and interesting conversations for the days here. We’ve just got asked to tell what we’re working on. I […]
I’ve probably been talking lately too much about where I was going to spread my KDE love and talking too little about what I’ve been doing and what’s happening: Akademy-es: Yes! we’re having the Akademy-es in Barcelona this year and I know you won’t miss it. Yay! Awesome. Well it takes some preparation, so it … Continue reading So… what’s cooking? →
Copyright 2016· All rights reserved