[Development] Cut 7+ms of Qt5 startup time on Linux

Robert Knight robertknight at gmail.com
Thu Oct 31 17:12:07 CET 2013


> I noticed the post is 5+ years old, has it been tested
> on (modern) Fedora and does it still work with modern versions of Kubuntu?

I haven't tested it myself recently and I have no idea whether it
works with current versions of Ubuntu or whether
it ever worked on Fedora.

Regards,
Rob.

On 31 October 2013 15:52, Jiergir Ogoerg <f35f22fan at gmail.com> wrote:
> Great, of course you're a much better/smarter programmer than me,
> but how much time of the whole parsing and loading
> (which is done line by line which is slow) does fromUtf8()
> take? If it's only like 10-20% then even if it's optimized to work 10 times
> faster in the end it's a much smaller improvement compared to
> binary loading which almost doesn't do any parsing at all, just copying
> from disk onto ready memory.
> If the total parsing time after your optimizations
> is still like 2x+ times slower than loading the binary cache then imo
> your optimizations should be incorporated anyway for the
> (rare) cases when there's no (binary) cache yet or when it must be updated.
>
> The type of code (in a loop) I mentioned which features lots of other
> decoding/operations
> besides fromUtf8():
>
> char l[1024];
>         // formating of compose.dir has some inconsistencies
>         while (!mappings.atEnd()) {
>             int read = mappings.readLine(l, sizeof(l));
>             if (read <= 0)
>                 break;
>
>             char *line = l;
>             if (*line >= 'a' && *line <= 'z') {
>                 // file name
>                 while (*line && *line != ':' && *line != ' ' && *line !=
> '\t')
>                     ++line;
>                 if (!*line)
>                     continue;
>                 const char * const composeFileNameEnd = line;
>                 *line = '\0';
>                 ++line;
>
>                 // locale name
>                 while (*line && (*line == ' ' || *line == '\t'))
>                     ++line;
>                 const char * const lc = line;
>                 while (*line && *line != ' ' && *line != '\t' && *line !=
> '\n')
>                     ++line;
>                 *line = '\0';
>
>                 if (localeNameLength == (line - lc) && !strncasecmp(lc,
> localeData, line - lc)) {
>                     file = QString::fromUtf8(l, composeFileNameEnd - l);
>                     break;
>                 }
>             }
>         }
>         mappings.close();
>
>
> I wonder if we could test your optimizations soon?
> Is there a list of other startup optimizations you're working on
> so that we don't dilute the efforts by working on the same thing?
>
>
>
>
> On Thu, Oct 31, 2013 at 5:22 PM, Thiago Macieira <thiago.macieira at intel.com>
> wrote:
>>
>> On quinta-feira, 31 de outubro de 2013 07:38:00, Knoll Lars wrote:
>> > Before going to a binary format, I’d first like to check whether we can
>> > further speed up the parsing. I’ve done some work in that area in
>> > spring,
>> > but I know there was still quite some room to improve it.
>>
>> I'm also improving the fromUtf8 code. My current benchmarks are showing an
>> improvement of 2x in the new plain code and 12x with SIMD improvements,
>> for
>> mostly ASCII input.
>>
>> One further step is to detect an UTF-8 locale and use our optimised code,
>> instead of letting ICU do the encoding.
>> --
>> Thiago Macieira - thiago.macieira (AT) intel.com
>>   Software Architect - Intel Open Source Technology Center
>>
>> _______________________________________________
>> Development mailing list
>> Development at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/development
>>
>
>
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
>



More information about the Development mailing list