Re: [Development] Qt quick compiler impact on qmlbench.

2021-03-02 Thread Robin Burchell
On Tue, 2 Mar 2021, at 8:36 PM, Valery Volgutov wrote:
> Could you please let me know why I have no any performance improvements 
> after quickcompiler apply?

The QML compiler affects the performance of parsing and compiling the parsed 
source code. qmlbench is primarily testing the performance of object 
instantiation, binding evaluation, and the performance (or performance impacts) 
of various different properties. The code is only compiled once, but run 
repeatedly, which would also be more true of an application environment - you 
start your application once, not many times.

I think there may be some other benchmarks that specifically cover startup 
time, but it's been a long time since I looked at it, so I don't really know 
where to point you off the top of my head.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development


Re: [Development] Changes to Qt offering

2020-01-29 Thread Robin Burchell
[ disclaimer: I wrote this in the middle of a headache last night, so I hope 
this is understandable ]

On Tue, Jan 28, 2020, at 5:37 PM, Volker Hilsheimer wrote: 
> Would making Qt cheaper make it more likely that the Qt Company becomes 
> a sustainable business? Would giving a few licenses out for free to 
> contributors help with that? I doubt it would make much of a difference.

That strikes me as somewhat myopic thinking. Being a sustainable business 
requires profitability, sure, there's more to it. Understanding an ecosystem 
needs a lot more thinking than looking at a spreadsheet, and it's also that 
hard-to-understand ecosystem that ultimately has a big effect on profitability.

To me, being sustainable is focusing on the long term. Being profitable by next 
year (say) might be a good thing for a business, but it may not be good for the 
ecosystem, which in turn means it is not _sustainable_. So focusing on long 
term growth prospects, new customers, new projects, etc ought to be the focus, 
rather than  the current approach, which to me feels like squeezing 
increasingly hard on the current pool of people who are using Qt already, which 
in turn hurts Qt's future growth prospects as a technology[1].

> Maybe you all have great ideas that we missed though. What kind of 
> change do you think would give companies a really good reason to buy a 
> license, without at the same time hurting the community?

A long-term "nag" at the back of my mind is that there is what feels like a 
very strong focus on management-level sales.

That isn't bad, but the problem is that this audience is very different to a 
lot of the developer (and open source) types that are directly _using_ Qt on a 
day to day basis. For example, management are often interested in minimizing 
costs: so open source or easy binary access etc undermines the argument to 
charge money, but at the end of the day, Qt is also often "sold" by developers, 
to developers (or to their own management).

This "internal" sales happens in a completely different fashion, by people who 
are "driven" in a completely different way (technology, open source, 
problem-solving, "passion", whatever) and generally is a disruptive process, 
from the bottom up, rather than being imposed from above. As such, the people 
involved often don't *have* much of a budget at that early stage, so 
sales/licensing "nagging" will often serve to shut this process down entirely. 
What they need is for the technology they are interested in to be easy to 
test/evaluate/consider.

Anyway, some concrete suggestions to think about:

* Keep Qt binaries easy to access with minimal "sales" or "licensing" talk for 
first-time users just looking at trying out Qt. Anything in front of that - 
even a contact form or Qt Account for example which are already in place today 
- is just a distraction, and will serve to put people off.
* Consider limiting the platforms/versions you offer binaries for. For example, 
offer binaries for the mainstream platforms built against the latest 
compilers/OS versions, and for anything else (older, or more esoteric 
platforms), you need to go commercial, or self-build.
* The same could apply to LTS binary builds after the standard support period. 
If you need binaries after 6 months, then you need to be licensed, or 
self-build.
* Make it easy to migrate from open source to commercial licensing: if people 
are considering giving you money, then why discourage them? Sure, there may be 
some who will take advantage of this, so impose limits, or make it clear that 
it's not an unconditional offer, but at least be up-front that it can happen in 
a nice fashion if both sides play nice.

===

[1]: Some anecdotes that immediately come to my mind from my own personal 
experience:

* I am aware of situations where  they keep their Qt-using code to an absolute 
(licensed) minimum, and refused to let anyone else really touch it or learn 
about Qt, because of licensing costs.
* I have spoken with people starting businesses who were on the fence about - 
or ultimately chose not to - use Qt because they couldn't afford to pay for 
commercial licensing, and weren't able to understand or make use of the open 
source options.
* I have spoken with people who really liked the look of Qt/QML, but 
immediately wrote it off as an option, because they were unsure enough about 
the licensing situation that they simply didn't want to take the time to look 
at it in more than a cursory fashion. They ended up using an alternative 
technology stack instead, which involved significantly more developer effort on 
their part - but budgeting for developer costs was seen as the better option, 
as it was possible to cut back on or outsource as needed.

None of these things reflects positively on Qt&

Re: [Development] QTCS2019 Notes from QtQml session

2019-11-27 Thread Robin Burchell
On Tue, Nov 26, 2019, at 8:56 AM, Ulf Hermann wrote:
> We're also changing the way views and delegate work. If you want to use 
> the "index" in a Repeater's delegate you'll have to declare that in QML 
> 3, using a required property:
> 
> Repeater {
>  model: 10
> 
>  Text {
>  required property int index
>  text: "item " + index
>  }
> }

Can you explain a bit more about what the concrete problem is with model data 
on delegates? Speaking specifically about inline delegates[1] like the one you 
give here.

In many cases, like the one you provide, is the additional required statement 
really required? ;-) - when it's clear that the component is a delegate, it 
seems rather redundant and annoying to have to specify additional 'required' 
statements to be able to use the data that is always provided by the model's 
context.  I don't see why it makes sense to require an inline delegate to say 
"hello, I am a delegate, please give me a delegate's properties" when you 
already specified that it is a delegate when you wrote the component a line or 
two above.

Perhaps I'm missing something, or perhaps this will only apply for external 
delegates in a different file - but my opinion is that for inline delegates, I 
think it would be an acceptable limitation to continue to 'hijack' 
model/modelData/index on a permanent basis without any additional syntax.

Given that such inline delegates are so very, very frequently used, I think 
that the bar for changing how that works in a user-visible way should be quite 
high.

[1]: I suppose this would only really apply for inline components, too, where 
it's clear that the component is used only in conjunction with the view in 
question, but I think that's fine. Inline delegates are way more common than 
external delegates (IME) and are also written as throwaways quite frequently 
during quick prototyping, which should be as easy as possible ideally.

If your delegate gets complicated enough to split out to a separate file for 
reuse or autotesting purposes, then sure, requiring a specification of what 
that component uses of course makes a lot of sense, and I would be in full 
favour of that, having been bitten by a few bugs in those cases.
___
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development


Re: [Development] QTCS2019 Notes from QtQml session

2019-11-25 Thread Robin Burchell
On Mon, Nov 25, 2019, at 4:55 PM, Robin Burchell wrote: 
> The situation for QML3 seems to be much less clear cut

(This got sent a bit too early (hotkey mixup). Pretend this was at the bottom 
of my last mail.)

I can't really comment on all of this stuff individually, because I'd be 
writing an encyclopedia and I've already written a lot (and I've been trying to 
stay away from Qt for a while because I've been too busy and burned out to have 
the time or the patience to do anything here anyway), but this is important 
enough that I thought I'd at least try.

I guess my thinking in general is: New things are good. Change is good. But 
both of these are only actually good if they are genuinely worth the pain that 
the transitioning involves.

Change that involves touching every file (version numbers, removing 
anchors.left/font.bold), or rewriting code in one way to another (context 
properties to singletons) seems like something that is honestly not worth 
fixing unless there is a very clear gain that I'm unable to discern from it 
because it pointlessly adds pain onto your users, who in turn will add pain 
onto you by not performing a quick transition and forcing you to support the 
old stuff far longer than you'd reasonably want to.

I think it would be much better to see more effort put into smoothing the 
transition - whether that's through automation/tooling, or a relaxed approach 
to deprecating these features - or something, at least for some amount of time, 
rather than just saying "tough luck, go run an obsolete version of QML".

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development


Re: [Development] QTCS2019 Notes from QtQml session

2019-11-25 Thread Robin Burchell
On Mon, Nov 25, 2019, at 3:53 PM, Ulf Hermann wrote:
> Yes, but the problems with this construct are the same as with generic 
> context properties: Your QML component requires some context that it 
> doesn't declare. Therefore your code is not reusable and brittle wrt 
> addition of properties in other places.

Which is why I also provided a possible solution - by providing declaration of 
that context.

I'm not sure whether you just stopped reading once I started talking about the 
problem, but I'd be interested to hear about whether or not something like that 
approach was considered.

> Mind that all those dynamic lookups will still live on in QML 2, and we 
> will maintain QML 2 throughout Qt6. They just won't be valid in QML 3.

It's good to hear that QML 2 won't disappear overnight, but let's not pretend 
that this would be a sustainable, good situation to be in. One day, QML 2 will 
disappear. At least, given the lower version number, you would hope it will 
disappear. But every piece of pain that makes porting harder will help to 
ensure that it stays around longer.

And even if there wasn't going to be pain in porting - there is going to be a 
lot of residual friction in transitioning. All of the documentation, all of the 
examples, all of the tribal knowledge will suddenly become irrelevant.

And for what? Why?


Yes, there are problems with some features. That doesn't necessarily mean they 
are unsolvable problems (perhaps they are; without having a proper discussion 
about it - how do we know?)

By the sounds of it, QML2 to QML3 will not be an easy transition. I was already 
a little worried when I saw changes removing versioning, and a WIP change 
deprecating context properties back in April or so, but reading your mail makes 
me very concerned for the future. 

For reference, QML1 to QML2 was a _relatively_ easy port for example, despite a 
different JavaScript engine, a new item set, and a completely rewritten 
graphical presentation. My personal opinion is that this was very good, because 
it gave you a pretty big no-brainer: spend a small moderate amount of effort to 
port and validate/test, and in return, you gain much better performance.

The situation for QML3 seems to be much less clear cut
___
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development


Re: [Development] QTCS2019 Notes from QtQml session

2019-11-25 Thread Robin Burchell
On Mon, Nov 25, 2019, at 10:43 AM, Ulf Hermann wrote:
> Indeed we need to deal with this somehow. Maybe we do need to retain 
> versioning on a module level. For example, the qmldir file could specify 
> what versions of which other modules it expects. Or we define that it's 
> not a problem ...

I think at least module-level versioning is a sensible idea.

> We could detect this in qmllint by just continuing the search for IDs
> even if we've found a property.

We could, but if I may gently suggest, I think I can count most of the people 
who use qmllint on a regular, useful basis on one hand ;-).

(One possible improvement to this could be to not _just_ have it as a separate 
tool: maybe debug builds should _also_ run qmllint - or at least a subset of 
its checks - on the code that the engine is loading? Alternatively, perhaps as 
an engine flag to at least allow it to be turned on once, and happen for 
everyone on a team in a unified zero-effort way)

> Mind that adding a method to a base class in C++ will shadow unrelated 
> other classes and functions even if it's not virtual or overridden. Why 
> did we actually decide that we can live with this effect in C++ but not 
> in QML? - Maybe because in C++ it's more likely to result in a compile 
> error due to mismatched signatures?

I think one of the biggest problems is that ID resolution crosses file 
boundaries. This essentially means that the ids chosen can very easily become 
part of the "API" of a component unless you are very vigilant to not allow that 
to happen.

Essentially this means that identifiers - and a child redefining an identifier 
that the parent happened to use - suffer from the same problem that you point 
out class members can suffer from.

This is a contrived example, but I have seen similar things to this cause bugs 
in production.

Picture a SettingsButton.qml with this sort of contents:
Button { MouseArea { onClicked: console.log("clicked"); } }

Looks nice and innocent, right? But I notice that the MouseArea doesn't work 
because it has no geometry. I want to refer to it elsewhere in this component, 
too, so let's give it a name.

Button { MouseArea { id: someFoo; width: parent.width; onClicked: 
console.log("clicked"); } }

In sensible code, this would work just fine, and have no complications.
Unfortunately, what you didn't know was that Button.qml is:

Rectangle {
width: someFoo.width
height: 10
}

The use of someFoo here was previously referring to a parent id. Now, it finds 
that id in the child instead, with a very different geometry to what was 
expected - just the same as if this was a property on the root item.

This is not an easy problem I think. For sure, you can't just take the "easy 
way" out and warn about duplicate ids during lookup, because while _sometimes_ 
this inheritance is decidedly wrong and not what you want, a lot of the time, 
id scoping is "private" and just fundamentally how code is written. In the C++ 
world, this would seem pretty silly:

class Base { private: int m_myImplementationDetail; }
class Base : Derived { private: int m_myImplementationDetail; } // warning: 
duplicate variable "m_myImplementationDetail" found in class Base

Yes, they do indeed have the same name, but that's also unambiguous and fine.

If we do consider them to be part of the API *sometimes* though, perhaps the 
right thing to do is to allow that to happen explicitly: specify what ids can 
be "exported/imported" and issue a compile error if those expectations are not 
met.

One problem though is that this import/export boundary should be checked at the 
file boundary, _not_ the component boundary, otherwise using things like Loader 
become a lot more annoying.

So perhaps it could look something like this:

import MyModule ...
expects Item myFoo; // we want something of type Item, identified as myFoo to 
be passed in from a containing file somewhere
provides MouseArea bar; // we provide this ID for children to find

Item {
width: myFoo.width

MouseArea {
id: bar // is visible in scoped lookup (via 'provides' at the top)
}
}

I guess you might also be able to use this for context properties - which 
suffer from many of the same unclear scoping issues rather than just outright 
removing them, but that might require some additional considerations that I'm 
not sure of right now.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development


Re: [Development] Views

2019-06-06 Thread Robin Burchell
Hi Marc,

I agree with a lot of your points. Performance is important to me. I won't get 
bogged down in the specifics, because way too much energy has already been 
wasted on this (and related) threads I think, so I'll just say a few things.

On Thu, Jun 6, 2019, at 10:45 AM, Mutz, Marc via Development wrote:
> IMO, that hits the nail on the head: we have an obligation to our users 
> to use the most efficient data structure (and, by extension, looping 
> construct) we possibly can, and can't just pop in the first data 
> structure that comes to mind.

The thing is, loops are easy to use. Containers are easy to use. You might know 
the STL like the back of your hand - I will be the first to admit that I don't. 
I write loops, I don't use find_if. I commit many other sins like this on a 
daily basis. The same is true I'm sure of many other pieces of the STL, or 
indeed, any other software.

However, to make myself feel a little less awful, I will add that I am sure 
that I'm not alone here, and I think that is why some people have been pushing 
back a bit on the point of abstraction.

Using the specific example of QMap: It's one thing to know not to use a QMap 
for a small container; it's another issue altogether to have an easily usable 
alternative that can be used in place of it, especially if the container is 
supposed to be exposed to another component, for example. It's simply less 
reading/writing/cognitive effort to bang out container usage than the 
alternative. That is generally the purpose of abstractions, after all.

> IMNSHO, you can optimize for readability in your own app and see whether 
> you sustain in the market. In a library, used on millions of machines 
> every day, spending 8KiB (or 4KiB, or just 1KiB) just to use a slightly 
> less noisy code version is - sorry - selfish. If you contribute to Qt, 
> you should be putting yourself in the service of it's users.

Again, I'll emphasize that I don't disagree with the point that you are making. 
I just think that you may want to consider that various enablers can make your 
life easier in that you have to write a lot less grumpy size-reducing patches, 
and a lot less mails arguing your point. That is one of the points of Qt, after 
all:  that you make it easier for other people to write better code faster.

> I have the feeling that some participants of these discussions thought 
> they joined an adulation club for Qt API lovers instead.

I don't agree with this kind of attack, though, even if it was not directed at 
any one individual by name. Let's (_everyone_) please keep the mailing list a 
pleasant place to read (and write).

-- 
  Robin Burchell
  ro...@crimson.no

___
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development


Re: [Development] Supporting helper functions in auto tests by providing throwing Qt Test macros

2019-04-03 Thread Robin Burchell
On Wed, Apr 3, 2019, at 1:24 PM, Giuseppe D'Angelo via Development wrote:
> I may like the overall approach. However, this would imply that such 
> tests require exceptions / RTTI turned on inside QtTestLib / user code; 
> is it "OK" in the grand scheme of things?

Note that testcase.prf already enables exceptions, at least for Qt's own tests 
(apparently, according to Mitch, with the exception of testlib's self tests).
___
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development


Re: [Development] Supporting helper functions in auto tests by providing throwing Qt Test macros

2019-04-03 Thread Robin Burchell
On Tue, Apr 2, 2019, at 5:17 PM, Mitch Curtis wrote:
> Quoting the commit message here:
> 
> WIP: Add _THROW variants to testlib macros
> 
> This allows using Qt Test macros in helper functions, avoiding the need
> to write a lot of boilerplate code as seen with alternative approaches.

Allowing other functions to terminate a test would be great, but I wonder if 
it's worth considering changing the "regular" macros to terminate tests through 
an exception it throws internally, thus avoiding the need to introduce a new 
set of macros.

You could of course introduce a new macro specifically to throw (and I think 
that would be a good idea to automatically gather __FILE__ and __LINE__ in a 
non-messy way), but this way one could just use the regular macros we already 
know and love in new ways.

It would mean that tests would need to support exceptions unconditionally, but 
since it's "just" test code, perhaps this isn't that big a problem.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development


Re: [Development] Qt modules, API changes and Qt 6

2019-01-30 Thread Robin Burchell
On Wed, Jan 30, 2019, at 9:17 AM, Alex Blasche wrote:
> I am clearly missing something here. Could you please outline why such a 
> monolithic repo would be good? As you pointed out yourself, the 
> conceptual problem that different libraries won't walk in lockstep 
> remains and segmented builds continue to be desired. Sure, repo checkout 
> is easier but as long as segmentation exists I fail to see the 
> advantage.

Split repositories have a lot of problems, both social, and technical, but I'd 
say that it all boils down to extra friction.

On the technical side, you have the well-known problem of API changes. When you 
make one, you have to make it in a backwards-compatible way, integrate that 
into qt5, then change everything, integrate that into qt5, then remove the 
backwards compatibility.

That's a long process, even if everything goes perfectly (reviews are easy, 
happen quickly, CI isn't flaky, etc, etc).

Then you have the social side of it. Basically, I think I can summarize it as 
being this: a repository boundary generally makes a problem into "someone 
else's problem" rather than "my problem" or "our problem", because the 
perception is it's easier that way, even if the cohesive whole ends up 
suffering as a result.

I will admit that a monorepo has a _different_ set of problems (including but 
not limited to: longer build times, longer test times, flaky tests in unrelated 
areas blocking changes), but those problems are not complex, and can be fixed 
with some dedicated application of smarter scripting at build/test time (for 
instance: if change is doc only, don't run any test that _isn't_ related to 
documentation, to cover one complaint from earlier in this thread).

I don't think that changing the technology behind how we contribute today would 
necessarily fix any of this split repo stuff either, I think a lot of it is 
just inherent to how such a system works. For instance, a project I am 
currently working on uses a completely different toolset, yet suffered from (a 
version of) exactly the problems outlined here -- and once we realised just how 
hard that was making life, and merged a bunch of repositories together, 
suddenly, things became a lot easier.

The repository merge, in our case, helped to inspire actually applying work to 
_fix_ those problems rather than just working around them by splitting things 
into smaller pieces, too.

Another real life anecdote: when I merged together our bunch of repositories, I 
was annoyed by ~20 minute clean build times of one component in our CI 
pipeline. I found out that it was due to heavy (ab)use of templates, which I 
managed to work around in a largely source-compatible way, and dropped the 
build time of that component down to ~3 minutes, which certainly made the 
people working on that component happy. I wouldn't have done it without the 
repository merge, partly because it wasn't "my problem" before, and partly 
because I just didn't notice, as I didn't work on that component: I still 
don't, really, but because I live near it, I see the code in grep results. I 
see the impact it has on build/test times, and so on.

Robin
___
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development


Re: [Development] Build system for Qt 6

2018-10-31 Thread Robin Burchell
On Tue, Oct 30, 2018, at 5:40 PM, Oswald Buddenhagen wrote:
> on top of that there are long-term savings to be made from increased
> productivity (which several posters to this thread have confirmed or
> implied). that alone won't offset the cost vs. using cmake (it would vs.
> developing and using qmake), but it's not negligible.

Speaking specifically about things _other than Qt_ (this does not really apply 
to Qt - though perhaps it does a little):

I can't really judge any of these savings as I never really had the opportunity 
to try qbs (and this is coming from me - someone who deliberately tries to 
experiment with almost every new, strange thing there is out there).

I think that qbs's worst enemy was that the "competition" of everything else in 
the space was good _enough_ (yep, even qmake, warts and all). Build systems, 
from the perspective of the people using them to build other things, are not a 
tangible part of the deliverable product you make money off of. They are a tool 
that _enable_ you to produce such a product.

Any effort that goes into changing that tooling takes effort away from other 
areas that more directly make money - and that effort requires justification. 
From my personal experience, I have never had a compelling answer for "why 
should we port to qbs" to give that justification.

"Why should we port to a tool that very few other people are using that doesn't 
provide clearly night-and-day amazing benefits when what is available today is 
better known and works well enough"? Indeed, I'll let you know if I ever figure 
out an answer to that one.

This isn't meant to say that any one tool is perfect - of course, they're not. 
But they're good enough most of the time.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QUIP 12: Code of Conduct

2018-10-25 Thread Robin Burchell
On Thu, Oct 25, 2018, at 11:50 AM, Rafael Roquetto wrote:
> So I will go back to my question: what is it we are trying to solve? Or
> rather, what is it that happened, that we are trying to prevent from
> happening again? There will always be lunatics, and a CoC won't stop
> them. Perhaps it will improve things... but... perhaps it will do more
> harm than good. Or is it proven technology?

The problem with that question is that by the time you need to _solve_ 
something, or prevent it from happening _again_, it has already happened. The 
point of a code of conduct as I understand it is that it is supposed to help 
prevent situations from arising/escalating out of control in the first place, 
and if that ever does happen, provide a process to resolve it in a well defined 
(and ideally, minimally damaging) way.

[ As an aside, I've seen communities go very bad - with or without a code of 
conduct - so the "code" alone won't save you- at the end of the day, it's all 
down to you, me, and everyone here to do the right thing and make this place a 
good one. ]

> Which brings to my second point, a very personal one: more or less in
> line with what Jason said, programming *to me* has always been about
> bits and bytes, about the code, about computers, about being able to
> make things appear on the screen and to control the machine. Free
> Software has been about free software and that's it. I find it
> extremely off-putting to see that the Qt project is embarking in this
> sort of politics - again, if things were broken and a CoC could fix
> them, I would be more than happy to join the train, but that doesn't
> seem to be the case. At least from my humble perspective.

I will first acknowledge that I am in a privileged position - I've never been 
on the bad end of any sort of discrimination - and for those that have been, or 
worse, are systematically in that position, it is much harder for them to 
effect any real change to that without the clear capability to show that this 
sort of thing is not OK.

With that having been said: my own personal stance is that I would _like_ it to 
be possible for this stuff to not be needed. I would _like_ people to be smart 
enough to understand that they should do, or not do, certain things in order to 
cooperate and "get on". But everyone is different, after all, and a common 
sense of "correct" is not necessarily as common as we might think, or hope.

So while I don't personally find it necessary, I do try put myself in the shoes 
of someone less "fortunate" than myself while considering it.

What do you do if you are certain that your contributions are being ignored not 
because of technical merits, but because of [ your own ] personal 
characteristics? Without a clear guideline of how that sort of a situation is 
approached, the only real answer is, simply, "you stop contributing". Which is 
a losing proposition: the community loses a potentially valuable contributor, 
at the cost of a toxic environment that is not at all based around technical 
merit - the exact opposite of what we want to happen, I'd say.

> Communication/criticism just like this is unambiguously straightforward
> and I *personally* prefer it this way. Unfortunately I could not make it
> to the QtCS, but had I been there, I would have voted against the CoC,
> for sure. I hate to see politics tainting the project.

I tried to spell this out, but I think it needs repeating. In my view, a code 
of conduct is not a political tool, nor a legal document (if it is done well). 
It is a codified form of what is acceptable to the project, which at the purest 
form might be: contributions good from all comers of all types, and if bad 
things happen, here's how they are resolved.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Coin maintenance notification

2018-05-31 Thread Robin Burchell
https://testresults.qt.io/coin/ shows the last successful integration at ~4pm, 
and the integrating list is full again: 
https://codereview.qt-project.org/#/q/status:integrating,n,z

So I guess it's not fixed, or something else broke?

-- 
  Robin Burchell
  ro...@crimson.no

On Thu, May 31, 2018, at 1:43 PM, Simo Fält wrote:
> The update introduced some unexpected “features”, which were reverted/
> fixed. 
> In addition to that, we suffered from infra related problems today. 
> Those also should be fixed by now.
> 
> Due to issues above, CI is a bit busy atm, so please be patient.
> 
> Simo
> 
> On 29/05/2018, 9.14, "Development on behalf of Aapo Keskimölö" 
>  aapo.keskim...@qt.io> wrote:
> 
> Coin production will be updated Tue May 29 09:30-10:00 EEST 2018.
> 
> See attachment for related changes.
> 
> 
> Kind regards/Ystävällisin terveisin,
> Aapo Keskimölö
> 
> 
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QTBUG-43096 - QML instantiation performance decadence

2018-05-25 Thread Robin Burchell
On Fri, May 25, 2018, at 9:14 PM, Uwe Rathmann wrote:
> On the Qt Conn 2016 Andrew ( Knight ) presented our very first results, 
> when comparing 4 different implementations of an average button.
> 
> a) a button from Quick Controls 1
> b) a button from Quick Controls 2
> c) a custom button composed in QML ( this is your approach )
> d) a button from QSkinny
> 
> All implementations have been done in QML with very similar code.
> 
> Unfortunately the presentation has not been recorded, but out of my 
> memory one of our statistics was:
> 
> a) > 30 QObjects
> b + c ) 7 QObjects
> d) 1 QObject

I'm familiar with numbers like that. I've come up with many similar ones myself 
in the past. The first point I would make in reply, though, is that the 
convenience of creating code with a/b/c are going to be significantly better in 
my experience.

And in addition, nothing (except the lack of a need to _actually_ go this far) 
stops me from writing a button using QSGNode instances today, without any use 
of private API and similarly avoiding many of those object allocations.

The one feature that would be a problem would be a missing public text node, 
which would mean I'd have to resort to a QQmlComponent with a Text item in it 
to set my label. Off the top of my head, that makes three QObjects, for the 
record: a QQuickItem for the button, a QObject (really a QQuickTextItem) from 
the component, and QQmlComponent itself, though that last one can be shared 
between buttons.

Adding a public text node would be nice if we wanted to make it a single 
QObject, but doesn't justify creating a whole new framework to me, given it's 
perfectly possible with the API of QtQuick today, and there is plenty of 
precedent (and demand) for it.

(And no, I don't think that just making QQuickTextNode public is the answer. 
That is a very, very heavy set of classes, it really needs some thought and 
cleanup applied first I think, alas, I don't know of anyone working on it 
today...)

> ( But we also noticed stuff like that: QQuickGradient is a QObject and 
> even QQuickGradientStop is one. So for the definition of a gradient with 
> 2 colors you need 3 QObjects: > 400 bytes. These little things could 
> easily being fixed by using Q_GADGET - but obviously nobody cares. )

It's not that nobody cares, it's that you can't actually do that without 
breaking code that probably[1] exists in the real world. Let's take another 
good example from the top of my head: Item::anchors. Behind the scenes, it's 
implemented as a QQuickAnchors, which is a QObject. Let's turn it into a 
Q_GADGET, and we're done, right?

Well, not quite, because now any code that does this:

anchors { onLeftChanged { ... } }

or this:

this.anchors.leftChanged.connect(function() { ... })

or in the C++ world:

connect(myItem->anchors(), &QQuickAnchors::leftChanged, ...

... will break, since Q_GADGET doesn't have signals - so it's simply not 
equivilent.

It's nice to contemplate this sort of stuff, of course, and I'd love to see 
common features like anchors made cheaper (really, gradients aren't anywhere 
near as common, at least for the sake of my eyeballs I sure hope so), but doing 
so requires a careful approach, and probably a good chunk of grunt-work and 
magic that doesn't exist right now to make it actually happen, which is likely 
why it hasn't happened yet. Suggestions of how (or better still, patches), most 
certainly welcome.

[1]: almost certainly. my personal rule is: if there is API for it, someone 
will misuse it in the most awful way possible to make your life hell with it, 
somehow. I think one has to have a love-hate relationship with users, you can't 
live without them, but my god you wish you could sometimes ;-).
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QTBUG-43096 - QML instantiation performance decadence

2018-05-25 Thread Robin Burchell
On Fri, May 25, 2018, at 4:31 PM, Uwe Rathmann wrote:
> But at the time, when Controls 2 has been started everything was on the 
> table and - at least from the outside - it looked like a comfortable 
> situation for making good decisions. And this is what I had expected to 
> happen:

What happens is only what there are enough time and resources to do, plus a 
direction to do it in the first place. It might be that you had attempted to 
drive some of this work yourself (or yourselves), I don't know - but I didn't 
see any discussion about it on this list that I recall, and I don't recall 
anything hitting codereview either, so I have to say that from the perspective 
of the project, I can't see how you could really expect this to happen.

> Unfortunately I never noticed any indication pointing into the direction 
> of a better C++ support. In fact the opposite happened: even the very 
> base class of all QC 2 controls is not part of the public API ! 

Why does it need to be? I have never needed to subclass QQuickControl, 
personally, so I have never brought this topic up.

Assuming you have a valid reason, then I would present my next problem with 
that: it's probably not mature enough. QQC2 is only three years old, and it is 
(still) going through quite a lot of change that is often likely not ABI 
compatible[1]. Sure, it's often _possible_ to work with this stuff in a 
backwards-compatible fashion, but that comes at a strong cost, which then 
requires answering: does the cost of having to work in such a manner justify 
making it public? I would tend to suggest no in that particular case from what 
I know right now.

> The stupid fact is that QML always comes at a cost. Trying to reduce 
> these cost has been successfully done and any further improvements are 
> welcome, but: as long as there is no clear separation between the Qt/
> Quick graphic stack and QML I disagree, that the "right direction" has 
> already been found.

There is a cost, yes. But I would say it's more a cost/benefit tradeoff. Faster 
prototyping and development cycles at a cost of requiring some of your 
resources to munch on. And, well, this problem isn't just limited to QML or 
QtQuick- if you want to run Qt as it exists today on a lightbulb, you're 
probably getting something wrong in your architectural design. ;-)

Anyway, wrt direction, I assume you are hinting at a scenegraph that is less 
tied to QtQuick. If you are volunteering to help engineer such a separation in 
a way that is maintainable in the long term, and doesn't negatively impact 
performance of the graphics stack's consumer (QtQuick), then I have no 
objections personally, though I'm not really the right person to talk to. I 
would suggest coming up with specific proposals for what you want done, talking 
them over on this list, and then working on patches assuming there are no 
objections.

But if you are asking me personally to separate the scenegraph out, then I have 
no interest in doing so. As I said, I am happy with QML and QtQuick in their 
present form (with hopefully indefinite iterations to improve it over time, of 
course).

[1]: This does bring me to something that I do find unfortunate: API stability 
is a lot easier to promise than ABI stability. I can imagine a world in which 
we would have a public _API_ for more things than we do nowadays, but I am 
hesitant to contemplate that too much, because it ties our hands in changing 
the implementation a lot wrt ABI compatibility.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QTBUG-43096 - QML instantiation performance decadence

2018-05-25 Thread Robin Burchell
Hi Uwe,

I had predicted a response, so this mail comes as no surprise to me :)

Personal opinions on various things ahead, the reader may disagree with me, 
that's perfectly normal and OK.

>From my own perspective, I think Controls 1 was a well-intentioned mistake. It 
>set out to fill a perceived hole in what QML/Quick offered, but it took some 
>shortcuts getting there, which were no doubt unavoidable due to various 
>reasons - if nothing else, the times were rather turbulent in the Qt world at 
>the time. The end result of this was not something pretty, when looking at the 
>pile of things like ScrollView regressions, usually a few per release, before 
>even getting to performance concerns.

Unfortunately, of course, since it existed, it got used - despite the 
shortcomings - though I would say that they likely made themselves very obvious 
without looking too hard.

At this point, from my perspective, QQC1/QQC2 is largely water under the 
bridge. I have over the years avoided using QQC1 in several projects as I knew 
that the performance simply wasn't up to the task without ever trying it 
"seriously", instead developing custom controls or - now that it is available - 
using QQC2 where appropriate - so unfortunately, I won't really be able to 
comment much on that "excitement" except to say that I am happy that QQC2 
exists, and I look forward to its continued growth and maturity to fill the 
gaps with QQC1 where possible and necessary.

This leads me onto topic #2, which is QML's performance itself, and to me, this 
is a much more interesting topic, and where my own personal concern in the 5.1 
-> 5.2 transition came into play. I experienced first-hand a lot of pain in 
those times and, realistically speaking, I don't think things really started to 
settle down until some years later.

With the benefit of hindsight, I don't personally think that the engine 
transition from 5.1 to 5.2 went well, but on the other hand, people are human, 
and will make mistakes - the important thing is to learn from those mistakes, 
and not repeat them. As well as that, there were no doubt a number of 
contributing factors then, similar to QQC1's.

That's quite far in the past, though. Nowadays, there has been a lot of work 
around the performance area, and it has continued to improve. There's also 
tracking of performance, to help avoid regressions in the area in future. These 
are the key reasons I closed the bug -- I think that the message has been 
heard, improvements have been made, and hopefully things are now consistently 
heading in the right direction.

You mention qskinny. I think that experimentation is very cool, and it's great 
that it is working out for your project, and I am already familiar with it, but 
I'm not too interested in it personally, simply because the QML of "today" 
(having written a few libraries LOC of QML at this point) generally works well 
enough for me, and I find the convenience of the language very much worthwhile. 
I suppose it is also my role to be a cheerleader of sorts for this thing, so 
there's that. ;-)

Even if our opinions differ though, I'd like to thank you for providing your 
perspective and story - it is not a surprise to me as I hope I have spelled out 
given the history of things, but it is interesting to hear. While I hear a lot 
of reluctance in your mail, I would encourage you to give QML another try in 
the future, and seeing how it goes for you. If there are things that you find 
surprising or unpleasant in the performance area, by all means, keep filing 
issues. Just because that one bug is closed doesn't mean the story is over: 
performance is a crucial feature in product development, and it is something 
that we must remain vigilant about, and work on continuously. :-)

Thanks for the mail,
Robin

-- 
  Robin Burchell
  ro...@crimson.no

On Fri, May 25, 2018, at 1:12 PM, Uwe Rathmann wrote:
> Hi all,
> 
> this morning I got a notification about
> https://bugreports.qt.io/browse/QTBUG-43096
> being closed. I guess many applications had been hit by this issue, but
> as I was related to the project that created this bug I would like to
> give my summary of what has happened since then:
> 
> a)
> 
> On the Qt development side a lot of efforts have been made to improve
> the QML problem. I don't want to be disrespectful, but the fact, that
> Controls 1 has finally become deprecated, because of ( IIRC )
> "insolvable performance problems", it is fair say, that those were no
> game changers.
> 
> So to me the only step that really matters was introducing Qt/Quick 
> Controls 2.
> 
> But what makes Controls 2 being superior compared to its predecessor ?
> AFAIK the answer is mostly about doing less QML, achieved by:
> 
> - dropping features ( usually desktop rel

Re: [Development] Nominating Kari Oikarinen for Approver Status

2018-02-09 Thread Robin Burchell
+1, and I'm surprised it wasn't already the case actually :)

-- 
  Robin Burchell
  ro...@crimson.no

On Fri, Feb 9, 2018, at 2:18 PM, Rainer Keller wrote:
> Hello everybody,
> 
> I'd like to nominate Kari Oikarinen for approver status in the Qt Project.
> 
> Kari has been contributing to Qt for Device Creation, COIN and several
> other parts of the Qt project. He also is the maintainer of the Qt Debug
> Bridge. His track record can be found under:
> 
> https://codereview.qt-project.org/#q,owner:kari.oikarinen,n,z
> https://codereview.qt-project.org/#q,reviewer:kari.oikarinen,n,z
> 
> With regards,
> Rainer
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QML and Qt Quick versioning of our modules

2017-12-07 Thread Robin Burchell
On Thu, Dec 7, 2017, at 02:53 PM, Frederik Gladhorn wrote:
> I've lately been discussing with a few people in The Qt Company about our 
> versioning.

Thanks for taking the initiative Frederik!

> And a general confusion around which version does what.
> Since we so far don't keep copies of old functions around (as far as I'm
> aware at least), I don't think there's a huge value in the versioning system 
> in
> the first place.
> It only gives one important guarantee: if you added a property/type/name
> and 
> import a defined version, you don't suddenly get conflicts because we
> introduced 
> the same name.

There is an additional added benefit: if you are targetting a system
other than the one you are developing on now, you can set your import
version appropriately, and you won't be able to use any properties/etc
that were added later on than your target system. This is pretty good
for working on a "product" while not messing around with your
system-installed Qt, though I'll admit it's probably not a massive one.

I have wanted to be able to somehow get information about what version
was imported in the past, but it's not straightforward to see how to
accomplish that. It would then be useful for introducing changes in
behaviour that can then be explicitly opted into, though, without
needing to necessarily wait for a major version.

> Some modules started to copy the Qt version, e.g. Multimedia, that's
> pretty easy to remember and a good start in my opinion.

Agreed. The only caveat here is that it would prevent a repeat of
QtQuickControls 1->2: if you copy the major version from Qt, you can't
replace the whole implementation without giving it a new import, or
waiting for a new Qt release. I see this as a benefit in some ways: I've
heard of a lot of people who were (or are) confused by this, as the two
do offer some functionality that differs.

> 1) sync minor versions to Qt release version:
> For Qt 5.11, we would provide QtQuick.Controls 2.11
> This way, the challenge for the user is only to find out if it's version
> 1, 2 
> or 5.

Seems like a good idea.

> 2) Make the minor version import optional and we pick the lastest. This
> should 
> be optional to prevent the name clashes described above and shifts the
> risk to 
> the user.
> In practice I'd expect this to be pretty safe.
> import QtQuick.Controls 2 would then give the latest version available.

I'm inclined to prefer we don't do this, but I don't feel too strongly
about it, either - at least not as long as revisioning is as weak as it
is.

> 3) Make even the major version optional and we'd pick up the latest
> version.
> import QtQuick.Controls would give version 2.11 with Qt 5.11.

As well as preventing a QtQuickControls 1 -> QtQuickControls 2
transition again, this would also impact a hypothetical Qt 5 -> Qt 6
transition: QtQuick 6 (let's say) may well have behaviour changes in
some form over QtQuick 2. If we don't require versioning at all, then
suddenly, code that may not be able to work with that will be forced to
use it. Making the minor version optional doesn't seem to have many
caveats, but the major version is a bit more limiting and scary, given
we don't have a linker to help ensure we're using the right
dependencies...

> Luckily we now have qmlRegisterModule(QT_VERSION_MAJOR, QT_VERSION_MINOR)
> to help registering the current versions already.

Yep, this is good :)

Another potentially interesting idea that came to me while thinking
about this just now: what about implicit imports (versioned), added in
the qmldir file? Such that an: "import QtQuick 2.10" in the qmldir
applied to everything in an import that don't specify an implicit
version themselves. That would reduce clutter for anything which
actually has a qmldir (which tend to be most larger more complex
things), maybe that's good enough? Then, an application template could
use that out of the box, too. I don't know offhand how hard this would
be, but I don't think it would be too difficult.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Updating community Qt4 port for OS/2 to Qt5

2017-08-05 Thread Robin Burchell
On Sat, Aug 5, 2017, at 11:41 AM, Paul Smedley wrote:
> Thanks for the reply. Any hints on the minimal files necessary for gui 
> apps to work. At this stage, I'm not fussed about clipboard, drag and 
> drop, etc, just the bare minimal to get gui apps working.

Hi Paul,

So the basic idea you've probably already gathered is that each platform
needs to implement a "QPA" plugin:
https://wiki.qt.io/Getting_Started_With_Lighthouse covers some of the
basics here, but in a little more detail:

A QPA plugin provides the glue for things like windowing and input
between Qt and a native windowing system. To start with, take a look at
the 'minimal' QPA plugin (which just does software rendering, AFAIR
directed to image files on disk), and look at how to fill in things from
there -- the starting points you'll want are a QPlatformIntegration,
QPlatformWindow, and QPlatformBackingStore. You want to look at
QWindowSystemInterface to deliver events (like expose events saying
"please start/stop rendering the window", and input events) from your
QPA plugin to QtGui.

What you want past there is a bit more fuzzy and depends both on how
complete you want your integration to be and what your platform
provides, e.g. QPlatformClipboard and stuff like that, but I'd put most
of that stuff in the "optional extras" basket.

As you've already figured out, the structure and code involved is quite
different, so I doubt it'll be a 1:1 port - but the existing plugins
provide pretty good guidance on how to lay things out, and your existing
code would be adaptable without too much work I think.

Good luck,
Robin

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] [BB++] Now is 3.5x faster than Node.JS

2017-07-23 Thread Robin Burchell
Hi Phil,

On Sun, Jul 23, 2017, at 04:48 PM, Phil Bouchard wrote:
> All you have to do is create a ListView with images in the ListView 
> Items, scroll the ListView and then you will see the ListView's 
> scrolling speed not being uniform in an unpredictable way. Whatever's 
> unpredictable is caused by the GC.

You didn't give any details about how you measured, or what you were
measuring on, so I gave it a shot -- I'm sorry, but I can't replicate
these results, and even with a highly artificial test case[1] that
scrolls a ListView constantly, I only see one GC run every so often, and
it does not delay for any sort of significant amount of time (on a 2013
mbp, running a slightly old Qt 5.9 snapshot, on OS X):

[D] default: QV4::MemoryManager::runGC:987 - Marked object in 0 ms.
[D] default: QV4::MemoryManager::runGC:988 - Sweeped object in 1 ms.
[D] default: QV4::MemoryManager::runGC:989 - Used memory before GC:
1095008
[D] default: QV4::MemoryManager::runGC:990 - Used memory after GC:
106784
[D] default: QV4::MemoryManager::runGC:991 - Freed up bytes: 988224
[D] default: QV4::MemoryManager::runGC:992 - Freed up chunks: 14

Running with QV4_MM_STATS=1 with a newer Qt (dev branch) should also
show you a more precise time (in us, rather than ms), as well as
information about what object types were GC'd.

In my experience, GC is not often the root cause of "janky" interaction
in QML, simply because most of the allocations don't originate from
there, unless you are writing a really high amount of JavaScript, or
very complex bindings. The image content of the Image element for
instance is not allocated through garbage collection.

Much more common sources of performance problems:
* doing too much (overly complex delegates, or bindings) -- creating
objects, and evaluating bindings is expensive
* blocking the main thread elsewhere in the application
* problems with the platform or graphics stack (or their integration
with QtQuick)

Of course, even more often, you get some kind of a combination of the
above...

Anyway: my experience doesn't rule out the possibility of there being a
problem, but so far I am lacking evidence that there is one (a test
case), and I am lacking evidence that garbage collection is the cause of
that problem (investigating that test case with QV4_MM_STATS, and other
tooling).

Please create a bug with a test case (simple enough that it can be run
standalone like mine below) where you see more details on the
performance problem you see, with information about your platform, and
full details about how you measured the results (if you did any such
measurements).

[1]: https://gist.github.com/rburchell/3026d3229d4211f71b947e3f9eee6d9f
-- run with qmlscene, setting QV4_MM_STATS=1 in the environment, to get
information about when the GC runs and what the impact is. Uncomment the
animation & onCompleted hook to scroll automatically (and a lot faster).

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Please add [ChangeLog] entries to your commits!

2017-05-31 Thread Robin Burchell
On Wed, May 31, 2017, at 02:50 PM, Oswald Buddenhagen wrote:
> On Wed, May 31, 2017 at 02:38:53PM +0200, Robin Burchell wrote:
> > To me, it's implicit that each release will ideally have improvements in
> > terms of stability, so I think that there's less point in focusing on
> > them, unless they are a major newsworthy item: something like "sorry we
> > released 1.0.0 yesterday, but it turns out that feature foo was totally
> > broken, have 1.0.1 today to fix that" would be newsworthy, but "we fixed
> > a crash that has existed for the past 3 years" - less so, but that's my
> > own personal view.
> > 
> the trolltech policy was to always add a changelog entry when there was a
> proper bug report. that seems reasonable, because there is (or at least
> was) somebody waiting for that fix.

Yes, however, if they are waiting for the fix, one would assume they are
also subscribed to the bug tracker, and presumably watching the bug.
They'll get a notification when the bug state changes (and a fix version
is added). I should note that I'm not opposed to mentioning more stuff,
I was just talking about my own editorial process when digging around
after stuff missing changelog entries.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Please add [ChangeLog] entries to your commits!

2017-05-31 Thread Robin Burchell
My rule of thumb (when editing qtdeclarative's, for the last releases)
has been to include things depending on the "size" of the release. Small
(patch level) release? Include more bugs. Large (.0) release? Less focus
on bugs, more focus on architectural changes, feature additions, etc.
Any behavioral changes are always something that should be mentioned, of
course.

To me, it's implicit that each release will ideally have improvements in
terms of stability, so I think that there's less point in focusing on
them, unless they are a major newsworthy item: something like "sorry we
released 1.0.0 yesterday, but it turns out that feature foo was totally
broken, have 1.0.1 today to fix that" would be newsworthy, but "we fixed
a crash that has existed for the past 3 years" - less so, but that's my
own personal view.

-- 
  Robin Burchell
  ro...@crimson.no

On Wed, May 31, 2017, at 02:30 PM, Mitch Curtis wrote:
> > -Original Message-
> > From: Kai Koehne
> > Sent: Tuesday, 30 May 2017 9:31 AM
> > To: Mitch Curtis ; development@qt-project.org
> > Subject: RE: Please add [ChangeLog] entries to your commits!
> > 
> > 
> > 
> > > -Original Message-
> > > From: Mitch Curtis
> > > Sent: Monday, May 29, 2017 3:27 PM
> > > To: Kai Koehne ; development@qt-project.org
> > > Subject: RE: Please add [ChangeLog] entries to your commits!
> > >
> > > > [...]
> > > > Please be reminded that all changes that might be of interest to the
> > > > end user should be part of the ChangeLog.  So please, whenever
> > > > reviewing a change, please check whether a [ChangeLog] entry is in
> > order.
> > >
> > > Do we have a set of guidelines for what is considered interesting?
> > 
> > I'd say anything that changes observable behavior of existing features, or
> > new features.
> > 
> > Should get a [ChangeLog]
> > - new features
> > - fixes for bugs in released versions of Qt
> > 
> > Can be ignored:
> > - fixes in tests
> > - doc fixes
> > - pure code cleanup
> > - fixes for regressions introduced in not-yet-released commits
> > 
> > Regards
> > 
> > Kai
> > 
> > (who considers starting a QUIP about this ...)
> 
> There's also this one:
> 
> https://wiki.qt.io/Commit_Policy
> 
> That doesn't mention anything about change log entries for non-critical
> bug fixes.
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Introducing discussion about QStringFormatter

2017-05-16 Thread Robin Burchell
On Tue, May 16, 2017, at 07:14 PM, Thiago Macieira wrote:
> I'd prefer we kept the % syntax which we already have, but from the 
> discussion, it looks like it won't work. We need a syntax that has a
> clear 
> open and close so that more options can be placed inside the placeholder.

A potential additional advantage of using braces (which you include in
your examples) is that they are familiar from use elsewhere:
https://msdn.microsoft.com/en-us/library/txafckwd(v=vs.110).aspx.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Qt 5.9 beta4 available

2017-05-16 Thread Robin Burchell
Thanks for the report. I'll take a look at finishing this tonight.

-- 
  Robin Burchell
  ro...@crimson.no

On Tue, May 16, 2017, at 06:43 PM, Тимур Артиков wrote:
> Hi,
> I believe, QTBUG-60547 should be fixed before the release.
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Introducing discussion about QStringFormatter

2017-05-16 Thread Robin Burchell
On Mon, May 15, 2017, at 02:49 PM, Mårten Nordheim wrote:
> 3. What are its soft requirements?

One very low priority item floating around on my wishlist would be
formatting for QByteArray as well, though this is of course a bit of a
task. But it would be useful for cases when you want to avoid the
conversion penalty.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Release plan moving forward

2017-05-10 Thread Robin Burchell
Hi,

Responding to just the LTS news: I think that this is tentatively good
news. I worry, though, on a releasing front whether it is realistic to
consider supporting now two LTS branches, plus potentially 2-3 normal
branches at the same time, especially since we don't yet have firm proof
that we are able to even maintain a constant release cadence with the
branches we have now.

Can we get into a position where we can make a patch release every
second month, say, so that security issues and high priority fixes don't
have to wait half a year or more? The part of this that worries me is
that I see 89 patches on just qtdeclarative/5.6 that aren't yet
released, some of the highlights of the top of the commit log being:

* Fix heap buffer overflow
* Fixed assertion failure
* Fix for dangling pointers (x 2)
* Fix crash when ...

... and this was without looking for more than a minute or two.

Right now, I honestly find it a bit difficult to recommend any given
version -- right now, 5.6 is too old to offer a number of the things I
would like to have, lags behind in performance, and has a number of
unreleased fixes, but both 5.7 and 5.8 had their own share of problems
in my opinion, and 5.9 isn't yet released.

Just my (personal) $0.02...

-- 
  Robin Burchell
  ro...@crimson.no

On Tue, May 9, 2017, at 03:35 PM, Lars Knoll wrote:
> Hi everybody,
> 
> I believe I have some good news to share with regards to our releases
> moving forward. As you all know, we had quite some trouble getting patch
> level releases out over the last year, going so far that we ended up not
> doing patch level releases for 5.8.
> 
> Fortunately, things are starting to look a lot better now. You might
> already have noticed the rolling beta releases for 5.9, where we have
> pushed updated betas out every 1-2 weeks. This shows that things are now
> going a lot smoother and we are in a much better shape to create releases
> in the future.
> 
> Additionally, things have improved on the CI and releasing side. It's
> nowadays a lot easier to get a qt5.git update through and create new
> packages from a successful qt5.git integration. In summer, the CI system
> will get a major HW upgrade giving it a much larger capacity, avoiding
> capacity conflicts between CI, packaging and release testing.Together
> with improvements to the  Release Test Automation (RTA) which
> automatically tests our packages we're actually getting into a good
> position to do patch level releases with relatively little manual labor
> from 5.9 and onwards. This means that we should now be in a position to
> do much more frequent patch level releases from 5.9 onwards.
> 
> Another thing that has happened is that The Qt Company has been seeing
> lots of requests for a new LTS release, as Qt 5.6 is starting to feel
> relatively old. I have also heard this request from a few places in the
> wider Qt community. Because of the improvements to CI/packaging and
> releasing, I believe we are now in a good position to make that happen.
> 
> So we are now planning to make Qt 5.9 a LTS release. It's been 3 minor
> releases since 5.6 and a lot of good things have happened in Qt, so this
> should be very good news to those of our users that don't always want to
> be on the bleeding edge but are looking for a stable version that's
> supported for a long time.
> 
> So once 5.9 is out, we are planning for rather frequent patch level
> releases for that branch for the first 6-9 months. After that, we'll move
> 5.9 into strict mode where we will also release a little less often, and
> then have it in a very strict mode for the last year. See the draft QUIP
> at https://codereview.qt-project.org/#/c/178906/45//ALL,unified for more
> details on LTS branches.
> 
> Of course, we will also continue to support 5.6 for the promised three
> years. We are planning to release 5.6.3 in Summer, after which 5.6 will
> move into the 'very strict' mode as defined in the branch policy QUIP.
> 
> After 5.9, we'll be aiming at 5.10 in late autumn, 5.11 next spring. I
> believe that we will be doing one more final LTS release on the Qt 5
> series, but most of the work after 5.11 will probably start to be aimed
> on working towards Qt 6.
> 
> Now let's not go into discussions what Qt 6 exactly will be in this
> thread. I believe a lot of work towards defining what we're aiming at
> with Qt 6 will be for the Contributor Summit in October. But the outline
> above should give you good overview over the releases planned for the
> next 18 months.
> 
> Cheers,
> Lars
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] possible API freeze exception: would like to introduce QQuickItem::setAcceptTouchEvents() in 5.9

2017-05-10 Thread Robin Burchell
Hi,

Let me start off by saying that I agree with you that this is a bad
asymmetry, both for the end user, and for our own internal purposes --
which appears to be your primary motivator. I'm happy to see this
addressed.

On the other hand, this is a rather large change in behavior (whereby as
I understand it, touch will stop working for custom items, and I know
that there are a lot of them out there that take touch events) that will
require code changes to adapt to. Not everyone can adapt their code --
some projects don't change after they release, some projects have other
priorities, etc. In my opinion, requiring this kind of a change with
only one minor release's notice is not something we should be doing
given our focus on backwards compatibility. I'd be interested in hearing
other opinions on list, so far I think I'm a tentative -1 to the idea.

You mention that this is required due to optimizing the way that event
delivery works internally in QQuickWindow -- have you considered
restoring the old behavior there (despite it not being ideal, I think
there's no disagreement there) possibly behind QT_MAJOR_VERSION guards,
and switch it over to requiring registration for Qt 6?

The reason that I ask is that I haven't ever seen what I would call a
significant portion of time being taken up in the transversal part of
event delivery -- it is of course non-zero, but the event handlers
themselves (e.g. an onClicked handler in a MouseArea) are way, way more
expensive which dwarf that cost in my experience...

Robin

-- 
  Robin Burchell
  ro...@crimson.no

On Tue, May 9, 2017, at 06:43 PM, Shawn Rutledge wrote:
> This is of concern only to those who subclass QQuickItem in C++ and build
> custom items that handle touch events.
> 
> There is a pretty bad API asymmetry which it’s surprising that we didn’t
> notice enough to try to correct it earlier.  If you want to accept mouse
> events while any mouse button is clicked or held down or released, you
> call setAcceptedMouseButtons().  QQuickWindow won’t bother trying to
> deliver those events if you haven’t done that.  Likewise if you want to
> handle all mouse movement events, pressed or not, you must call 
> setAcceptHoverEvents(true).  Imagine a world in which these didn’t exist:
> QQuickWindow would need to deliver every mouse movement to every Item. 
> It would be unmanageable, performance would be unacceptable.
> 
> The docs say that QGraphicsItem::setAcceptTouchEvents(bool) has existed
> since Qt 4.6.  If you are handling touch events in a graphics view
> application, it’s required to call this.
> 
> Yet for some odd reason, QQuickItem::setAcceptTouchEvents(bool) was never
> added.
> 
> In some parts of the code, we make the assumption that if you have called
> setAcceptedMouseButtons(), you might want the touch events too.  In other
> parts, we don’t check… so in the simplest case, if you create a custom
> item that handles touch events and stick it into your scene, you might
> get the touch events with no further ado, if no other item prevents it.
> 
> It’s now become unmanageable to continue without adding this function. 
> QtQuick Controls 2 has an issue that if you have a Popup with a shadow
> Item, you can drag via touch within the thin shadow area around the
> popup, and the events will go through, and you’ll be able to drag the
> sidebar open for example, even though there’s a translucent Item in
> between which is supposed to both dim the rest of the application, and
> catch all the events, to prevent interacting with other controls while
> the Popup is open.  (Modal behavior.)
> 
> In 5.10 we hope to introduce PointerHandlers, a big improvement on
> MouseArea, PinchArea and MultiPointTouchArea.  This has been in the works
> for a couple of years now.  So on the wip/pointerhandler branch, we
> already have the requirement that setAcceptTouchEvents() must be called
> if a custom Item wants to accept touch events.  I thought maybe I could
> find a way to make it optional: to avoid changing behavior of existing
> custom items out in the wild, we would need it to default to true.  That
> is, assume that every Item might handle touch events, give every item a
> chance… because it was that way before.  Or at least, go on assuming that
> if it wants mouse events, maybe we should try to deliver touch events
> too.  But along with introducing PointerHandlers, we have tried to
> optimize event delivery and make it more deterministic: before we start
> delivery, we build up a vector of all items to which delivery will be
> attempted, in the right order (reverse paint order).  Then we build up a
> vector of pairs of items and their filtering parents (those which have
> called setFiltersChildMouseEvents - Flickable being the main example of
> that).  So when we are doing

Re: [Development] qdoc for C++ and QML

2017-04-25 Thread Robin Burchell
On Mon, Apr 24, 2017, at 05:08 PM, Shawn Rutledge wrote:
> > And if a C++ class has a corresponding QML type, should every member 
> > function be included in the documentation for both? How will qdoc know that 
> > a member function only applies to the C++ class or only to the QML type?
> 
> Q_INVOKABLE for methods should cover it, I think, if qdoc already knows
> that the class is exposed to QML.  Plus properties, of course.  Usually a
> property setter is not invokable, but there can be exceptions.

This will involve some amount of work, though: for instance, qdoc would
need to be taught what to do with QQmlListProperty
("list" in output, e.g. QQmlListProperty ->
list).

There's also registered types are not necessarily intended to be
user-creatable, for instance, Item::layer, QQuickPen (Rectangle's border
type) which need to be handled "specially" in documentation.

And the good old subject of "variant" functions like Item::mapFromItem,
which will need special casing...

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Exposing QMimeDatabase to QML; QtQml.Utils?

2017-04-24 Thread Robin Burchell
On Mon, Apr 24, 2017, at 02:36 PM, J-P Nurmi wrote:
> QML Settings, being currently in the Qt.labs namespace, could graduate
> later there. And QStandardPaths could be a nice addition too.

Since these are all QtCore types thus far, what about a QtCore import?
The source tree would of course have to live in qtdeclarative, but
that's not really much of a problem. That then gives us a good place to
put additional types, too.

I'd generally like to avoid a "Utils" import, since in my opinion they
far too easily end up as a dumping ground (yes, yes, arguments about
QtCore already sort of being one aside: at least then it's consistent).

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Focusing bug fixes to 5.9 branch and patch releases during H1/17

2017-04-11 Thread Robin Burchell
On Tue, Apr 11, 2017, at 06:16 PM, Stottlemyer, Brett (B.S.) wrote:
> On Tuesday, April 11, 2017 11:14 AM, Simon Hausmann wrote:
> > I think that what you are asking for is reasonable. I think the set of 
> > sha1s of qt5.git satisfy that requirement to the best of the project's 
> > ability.
> 
> In this case I think they do not, based on all of the commits to the 5.8
> branches that aren't included in the v5.8.0 tag (last available).  If
> those were to be included in a 5.8.1 release, I would agree with you.

qt5's 5.9 branch will contain a known-good configuration that built and
passed tests for everything in it that the 5.9 branch of each individual
repository won't offer you. I think you misunderstood this - I think
that Simon was saying that the branches (not the tags) of qt5.git should
be considered to be fairly stable for the people working on Qt itself
(although obviously, qt5/dev will be more bleeding-edge than qt5/).

> > For users of the product we can only point to tags. For developers all 
> > active branches should be good enough. I 
> > find it hard to imagine introducing a third "level" that is good enough for 
> > "some" but clearly not all. Unless there
> > is a consensus to define and introduce this new way of identifying a 
> > development branch.
> 
> Right, but doesn't that imply keeping 5.8 active until 5.9 is at least as
> stable?  How is it "a new way"?

We have three targets: dev, the stable branch (more or less 5.9, since
5.8.1 is DOA) and the LTS (5.6). Adding an additional "level" there as
you seem to be proposing with a "more-stable-than-stable" would be
something I would consider new.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QList

2017-03-20 Thread Robin Burchell
Hi Philippe,

On Mon, Mar 20, 2017, at 09:28 AM, Philippe wrote:
> >>Even our API guidelines stipulate that you should make common things easy 
> >>and 
> >>not-so-common things possible. Sharing is _not_ common and it need not be 
> >>as 
> >> easy as common tasks. I
> 
> Maybe for you, but in my works, sharing _is_ common, convenient and safe.
> And overal usage of COW is one of the concept that makes Qt stand apart.
> From my POV, COW largely pay off its minimal performance cost.
> When performance is a high priority, _an uncommon case_, then using
> alternate containers is always possible and we don't need Qt for this.

I don't know your background, but let's assume you are primarily a user
of Qt (thus: an application developer of some kind), you may consider
performance to be unimportant, or important only in isolated areas of
your application.

Consider, however, the point of view from many of the people on this
list: as Qt uses itself in its own implementation, Qt must have
acceptable performance for end user applications to be able to have
acceptable performance at all - whether or not it is a priority to those
developers.

A few concrete examples of where data types matter a lot: signal
connections (involves storing a bunch of data), QObject (particularly
QObject::children, as already mentioned), event handling from the
operating system (or the application itself: the event posting mechanism
in QCoreApplication)...

> And when size matters, have this in mind:
> 
> sizeof(std::vector) == 32
> sizeof(QVector) == 8
> sizeof(QList) == 8

To provide a more helpful response than Marc's: I assume that you are
aware that the Qt types just contain a pointer to a thing which contains
the actual data (unlike std::vector), right?

That is, QVector is actually (snipped from source):
template 
class QVector
{
typedef QTypedArrayData Data;
Data *d;
}

Where QTypedArrayData is a QArrayData, which is:
struct Q_CORE_EXPORT QArrayData
{
QtPrivate::RefCount ref;
int size;
uint alloc : 31;
uint capacityReserved : 1;
qptrdiff offset;
}

If I'm adding it up right, this gives me a total cost of 32 bytes on my
system. Although the real cost is actually higher I'd guess, due to the
two being allocated in separate pieces (given that malloc usually has
some kind of book-keeping overhead).

Robin

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Calendar Systems proposal

2017-01-30 Thread Robin Burchell
On Mon, Jan 30, 2017, at 09:07 PM, Hamed Masafi wrote:
> My prefer option is form (3)
> We can add an enumeration to global space.
> var date = new Date;
> var out = date.toString(Qt.JalaliCalendar, "-MM-dd");

I would prefer to not modify standard APIs if we can avoid it (unless we
have a good reason to do so and such a change is pretty low risk).
Keeping close to the rest of the JS ecosystem means that skills learned
in one place are easily translated to another (meaning less
QJSEngine-specific knowledge and docs are required). In the particular
case of Date.prototype.toString(), it also means that should any future
specification start supporting additional arguments there, we aren't
going to open ourselves up to future unexpected problems.

> > Have you considered whether Date.prototype.toLocaleDateString could be
> > of use for this? See:
> >
> http://ecma-international.org/ecma-402/3.0/index.html#sup-date.prototype.tolocaledatestring
> Date.prototype.toLocaleDateString is used to converting date to a string
> bases on a Locale. we can use this function for accepting an CalendarType
> (CalendarType is a QEnum that contains list of calendar types like;
> gregorian, jalali, hindi or etc)
> date.toLocaleString(format);
> date.toLocaleString(CalendarType, format);
> date.toLocaleString(locale, format);
> date.toLocaleString(CalendarType, locale, format);

Right, if you look at the spec I linked you to, that's what it
specifies- converting a date to a string in a locale-specific way. They
don't use an enum, but a string to describe the calendar system (plus
some additional options to control the formatting result in an
additional optional parameter). I can admit the spec is a bit hard to
read. Here's a slightly less formal description, with some examples:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

If you want to see it in action, in a browser, try something like this
in a web browser JS console:

console.log(new Date().toLocaleDateString("ar-EG"))

I see:

٣٠‏/١‏/٢٠١٧

Which I hope is something useful/meaningful, I'm unfortunately not
familiar enough with that locale to tell. I've confirmed this to work in
recent releases of Safari, Firefox and Chrome on OS X. Outside of
browsers, YMMV. I didn't get Nodejs to respect the locale options, for
instance.

What we implement now is nothing close to this (in fact, we simply
ignore all arguments and return the argument using local formatting) -
my guess is that it is down to most of this being added after ES5.

> But there are some bugs related to this prototype, We have to solve that
> within this process.

As I said, as it stands, our implementation is currently not doing what
you need - it would need to be fleshed out to actually use the provided
arguments. However, I think that extending this seems to be a pretty
good match for the functionality you are wanting to add?

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Calendar Systems proposal

2017-01-30 Thread Robin Burchell
On Mon, Jan 30, 2017, at 08:59 AM, Hamed Masafi wrote:
> I'm working on qml support of calendar system,
> for porting this mechanism to qml we have two option:

Have you considered whether Date.prototype.toLocaleDateString could be
of use for this? See:
http://ecma-international.org/ecma-402/3.0/index.html#sup-date.prototype.tolocaledatestring

Disclaimer: I'm not intimately familiar with this API, but stumbled
across it while looking into other possible alternatives for this
problem.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] New library in qtbase

2017-01-15 Thread Robin Burchell
On Fri, Jan 13, 2017, at 11:58 PM, Samuel Gaist wrote:
> Short summary, we have three possibilities:
> 1) Own module (and current implementation)
> 2) One “core" module and one GUI module to separate concerns for system
> not requiring a GUI connection (Jake’s suggestion)
> 3) Put everything in QtGui and implement the stuff in the QPA parts with
> the implication that a QGuiApplication will be required.
> 
> Can we come to an agreement about which one to implement ?

My own vote would be tending towards 3 once the concept is nailed down.
The existing change looks a little confused from a quick skim, e.g. you
have a QCocoaNotifier which seems to be public API, but this is not the
way I would expect to see this (at least, not in QtGui); I'd expect to
see a "notification" class without any platform specifics, as far as
possible, which then hooked into platform-specific code to "do its
magic".

As the "magic" would tend to be platform-specific, QPA seems to be the
logical place to me; this then also allows a platform implementer to
provide their own custom notification handling, should it be required –
thinking more on the embedded or new platform front here, which is
typically where QPA comes in anyway, where you may not necessarily have
existing services or standards to follow.

I can agree that it's "sad" to have to switch a QCoreApplication to a
QGuiApplication once you need something in it, even if you don't have a
GUI to present (though really, is this a common problem?), but aside
from puritanical concerns, does that actually cause many concrete
issues?

So, considering that, and as it's a problem that already exists for
non-graphical applications to have to interact with images/clipboard,
for syntax highlighting and other text manipulation, etc, I don't think
that adding another case to that problem is a death sentence. I think
it's an extension of a minor inconvenience, but I don't think that
arbitrary splitting of a feature or class is a good way to address that.
It leads to a harder to use & understand API for little gain as I
imagine it, though it is hard to say without a concrete suggestion on
API to review.

In the much longer term, on a separate tangent from your work, it might
be interesting to think about rearranging things to properly address
this problem if the gain is worth it, but even then, that starts to get
tricky & requires a lot of care and research, especially when you
realize that not everything you may want can be done without a windowing
system: clipboard access, for instance, I'd say is almost certainly
impossible to do without a windowing system on all platforms

The same may apply to presenting notifications. Do you know the specific
requirements of the APIs for, say, Windows/macOS/iOS/Android? If any of
those (or future platforms) required the WS, then you'd essentially be
left with a useless API on anything that did not have a QGuiApplication.

I'd say that ultimately, requiring a QGuiApplication instance is a
lesser evil than providing an API that won't work universally.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Branch request: wip/itemviews in qtdeclarative

2017-01-15 Thread Robin Burchell
Hi,

On Sun, Jan 15, 2017, at 12:24 PM, J-P Nurmi wrote:
> There have been some discussions about rewriting the entire item-view
> framework. I personally believe that would be best done in a major
> release. :)

I guess you're talking about the generic positioner-based view stuff
here, but I wasn't thinking quite so ambitious. That is indeed one thing
that is still bouncing around my head, but I suspect it will stay there
for some time more :)

More generally, I don't disagree that such a thing would be a major
version change, or at least, done in a separate import. Anyway, I'll try
write a longer mail about some of my thoughts on this stuff so they have
a place in the public record, split off from this thread, as it is
definitely a bit of a tangent.

> +1 to having a branch for it (do you have a name in mind? wip/itemviews?
> wip/tableview?)
> 
> I was thinking wip/itemviews, but I don’t mind wip/tableview either. :)

If your specific goal here is to provide enablers for tableview, then
I'd go for wip/tableview.

> Having more branches could be an option. All the tasks are somehow
> connected to each other, though, so I was thinking that it might be
> easiest to do it all in the same branch to avoid excessive conflicts and
> merging between multiple WIP-branches. The last two, SortFilterProxyModel
> and TreeModelAdaptor, would be the most logical ones to split to separate
> branches, but on the other hand, they also need to be implemented so that
> they play well with the rest.

Yes, that's pretty much the sort of division I was thinking; and
especially if Pierre-Yves can help with contributing on the SFPM part,
perhaps that's a good candidate for doing "separately". I understand and
agree with the need for unity, of course, but perhaps communication can
help to some degree there. Anyway, it was just a suggestion. I'll leave
the "how" to you people, you know the details of this work better than I
:)

> There’s so much to do that there is no way we could make all this happen
> before the 5.9 feature freeze in two weeks. :)

Text doesn't quite convey the emotion I meant that statement to evoke
;-); but I guess then you're thinking something like 5.11 (potentially
earlier, if the planets align correctly)? Again, I'm not expecting
promises here, just a rough idea would be a help so I can know when I
need to start trying to pay closer attention to anything touching the
area.

Thanks again.

-- 
  Robin Burchell
  ro...@crimson.no
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Branch request: wip/itemviews in qtdeclarative

2017-01-14 Thread Robin Burchell
Hi,

I (of course) wholeheartedly support work in the model/view area. It's
something that could use some TLC, and I'm excited to see what you have
cooking!

I have a longer mental list of things that concern/bother me with
current model/views (some of which we've already discussed), maybe I
should try write that up in some form, if you think it might find it
helpful, but as I don't know how much time I'll be able to dedicate to
making this happen you may prefer me to hold my tongue :-)

+1 to having a branch for it (do you have a name in mind? wip/itemviews?
wip/tableview?)

A thought, that came to mind while thinking about naming, though:
there's a lot of features listed here, and I would expect that they will
mature at different rates as some of them are more standalone, while
others might require more extensive (and careful!) work on the existing,
rather complicated code.

As a result, I start to wonder whether a single branch for all of this
makes sense, or whether it may make sense to do some smaller pieces
either directly on dev, or to use more than one WIP so that it's easier
to land stuff "when it's ready" rather than turning into a huge pile.

I have great confidence in you, of course, just trying to make life
easier along the way, so if you don't want to do this or feel that it
wouldn't be helpful to you, feel free to ignore the idea :)

(PS. I know you won't want to make hard promises, especially this early,
but do you have any idea what kind of timeframe you have in mind for
landing? Fingers crossed for "not 5.9"! ;-))

-- 
  Robin Burchell
  ro...@crimson.no

On Sat, Jan 14, 2017, at 01:37 PM, J-P Nurmi wrote:
> Hi,
> 
> I'd like to request a WIP branch for the Qt Quick item views. There are
> plenty of items on the roadmap/wishlist:
> 
> - refactor QQuickItemView
>   - add support for multiple delegate types (QTBUG-26681)
>   - add support for multi-selection
>   - add support for multiple columns
> - implement TableView (QTBUG-51710)
> - implement HeaderView
> - implement SortFilterProxyModel
> - productize TreeModelAdaptor (QTBUG-54390)
> 
> Early feedback from the CI system would be invaluable.
> 
> --
> J-P Nurmi
> 
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Proposal to adjust release candidate process

2016-12-22 Thread Robin Burchell
My (slightly delayed) $0.02:

On releasing in general: I would agree that releases take too long,
often, but I am of the belief that a good part of this is a mess of our
own making. For instance, due to an end-user or project requiring a
specific version or purely out of fear that the next release may be a
long time away, I think we (collectively) often end up pushing changes
to branches that might be less than ideally suited for the change in
question.

I think we should recognise that these pressures do exist, and consider
ways we can work to mitigate them (things like: nightly or at least
semi-"nightly" builds? working on pushing out patch releases more often?
encouraging more of our consumers to apply patches that we already took
in upstream and do their own builds? anything else?)

It goes without saying that these are hard problems, but I think that
working at the root causes is the only way to ultimately fix this.
Moving away from a time-based schedule is just going to encourage the
schedule to slip further, because now you have to wait [potentially
forever] to get a change released rather than roughly [x months], which
leads to even more pressure to get changes in an earlier version.

Ultimately, I think we need to be better at saying "no" to changes that
aren't explicitly necessary, especially on version branches (5.x.y) and
in general taking care to evaluate how "done" something is before taking
it in too. This is not an exact science, though, which makes it
difficult to balance. Even if we truly are on the side of being too
aggressive now - it may be perfectly possible that we could end up too
conservative (and delaying fixes that our end users would like to see
sooner), e.g. by implementing some kind of "blanket" restriction like
"only P0 bugs get fixed in this branch" (not a suggestion I am making I
will emphasise, just a note that we need to approach this carefully).

To the proposal at hand: I think that we should not be afraid of
releasing more release candidates. Some of them may well be broken, and
while that's unfortunate, it's still certainly better that we release
broken release candidates than a broken final release in the end.

It may be the case that releasing more betas or using a different name
may help get feedback earlier, but IMHO we have to accept to some extent
that our end users are not us: they have limited time to build & test Qt
in addition to their normal product/application work, and thus, overall,
we should not expect too much of them. If we want more feedback, we need
to work on making that testing process easier for them, rather than
playing naming tricks, I think.

On Tue, Dec 20, 2016, at 02:34 PM, Tuukka Turunen wrote:
> 
> Hi,
> 
> I think we have three major problems with our current release process
> regarding the release candidate phase:
> 
> 1.   Process to make a RC that is as flawless as final causes
> inefficiency as we only get full test coverage with the RC itself
> 
> 2.   We get full attention for testing a bit too late, many fixes are
> still coming in close to the planned RC time causing instability
> 
> 3.   Current time between RC and final is planned to be 2 weeks,
> which is very little in order to take in the feedback and fix things
> 
> Therefore, I would like to propose the following:
> 
> a.   Consider "Release Candidate" to be a phase rather than an
> individual delivery
> 
> b.   Create the first "RC1" almost immediately after release branch
> (e.g. 5.9.0) is operational
> 
> c.   Criteria for the "RC1" is that no known P0 bugs exist (i.e.
> there can be other issues that would not be acceptable in a final
> release)
> 
> d.   During the "RC" phase P1 (and possible P0 of course) bugs and
> documentation are fixed
> 
> e.   Public "RC" release is similar development release as Alpha and
> Beta in that it starts a phase of work
> 
> f.Multiple snapshots / new candidates are created during the "RC"
> phase until one of them is considered the final release
> 
> If desired, we could use some other name than "Release Candidate 1" for
> the release that begins the last phase of the release. It could be called
> "Beta 2" or "Technology preview", if so desired. Personally, I would call
> it "Release Candidate 1".
> 
> The difference to our current process is quite small. In essence it would
> be about considering the "RC1" the beginning of the final releasing phase
> (.0 branch), not something we do almost at the end of it. I believe that
> lowering the quality criterial for "RC1" helps us in being more efficient
> as it has been in practice impossible to really fulfill the current
> process goal and have already the first RC as good as the final.
> 
> In case of Qt 5.9 it would mean that we have the first "RC" out around
> end of April, soon after the branching to 5.9.0 has been completed. We
> then have 4 or so weeks to make all the needed amount of candidates /
> snapshots until one of them will be released

Re: [Development] Using semicolons in JS (QML)

2016-09-30 Thread Robin Burchell
On Fri, Sep 30, 2016, at 11:00 PM, Kai Koehne wrote:
> Interesting. Indeed, I wouldn't have thought it makes any measurable
> difference. IIRC we had a qml mimizer once, I guess this is still around?

tools/qmlmin in qtdeclarative

> It's certainly not that important to me that I will spend a day on
> writing a git hook that then nobody will use ;) But a lot of programmers
> (including me) tend to care about code style consistency. So I was making
> a suggestion that costs us nothing, but leads to a sllightly more
> consistent documentation and examples in then end. In the same way as I
> couldn't care less whether to use tabs or spaces, or what the right
> indentation level is, as long as we stick to one.
>
> (And yeah, I also enjoy bikeshedding sometimes, be it at the coffee
> machine or on a mailing list, even if not 'all Qt in bugs are fixed". And
> honestly speaking I do not see an issue with this.)

The problem is that these kinds of discussions do actually have a cost.
They take time and energy to read and digest, and time to reply to (yes,
it's voluntary, but occasionally something useful comes out of it,
although usually not in any way related to the original topic - I'd
count the above mention of qmlmin in this category for instance).

The whole principle of bikeshedding as I'd understand it is that it's
easy (and subjectively - somewhat fun) to do, but on the other hand
doesn't really get all that much useful accomplished. And it may not be
toxic every once in a while, but when you do it often enough, the noise
starts to drown out the signal, and you can end up killing off a medium
for any sort of reasonable conversations. It's a fine line to walk.

As an idea of cost: aside from reading this thread, I spent something
like 20 minutes mulling over this topic (and reading around on the
internet for resources and opinions) while writing this reply for
instance, time that I didn't even really realise I had spent until I was
about to click "send" on this mail. Multiply that by every participant,
and by every "low signal" thread, and you end up with potentially
gargantuan amounts of time being spent on more or less irrelevant
details, even if it is fun to do.

...

To the topic at hand, I personally tend to omit semicolons unless they
are clearly needed either to reduce ambiguity or for reasons of e.g.
multiple statements on a single line (already something I prefer to
outright avoid, however). I choose this for aesthetics, much like the
"omit braces on single line if" rule (which is also, coincidentally,
somewhat controversial and ignored from time to time)

In the wider community (both QML and JS in general), this isn't a
unified topic I'd say. You can find numerous advice going both ways, and
I think it's fairly safe to say that there will always be dissenting
voices everywhere, no matter what you choose.

So for yourself, my advice would be: pick one that you like and stick
with it.

For Qt, while I would like to see one or the other picked and followed
for consistency's sake, I'm not sure it would be a useful investment of
your time to try to enforce a particular semicolon-style without tooling
enforcement, as it seems like yet another Sisyphean task that will - at
best - burn a lot of your time and energy and end up back in exactly the
same situation, all for an effort which in practice has little
real-world gain. I think that is why Shawn replied the way he did.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] [QML] Avoiding graphics flicker in Quick2

2016-07-29 Thread Robin Burchell
On Thu, Jul 28, 2016, at 02:37 PM, Denis Shienkov wrote:
> So, my questions is: is there are any way to setup
> Qt::WA_OpaquePaintEvent
> and/or
> Qt::WA_NoSystemBackground in Quck2? Or, maybe is it possible to use
> another
> tricks?

Ah, the memories. Good times.

Unfortunately for you, QQ2 is a very different beast. Rendering is done
using OpenGL (unless you're using a different scenegraph backend, but
that's probably not very likely right now) and then pushed to the
windowing system of your choice using a QPA plugin via QWindow (how
exactly this is done, of course, depends on your windowing system & the
QPA plugin you are using).

If you're seeing flickering, this means you have four possibilities,
ranked in no real order:

1) OpenGL driver bug (the world is full of them..)
2) Application-side bug (make sure you don't have anything that could be
flickering in your application). Using an overlay to debug item
positions (QSG_VISUALIZE=overdraw) could be handy for trying to rule
this out, as if it is specific to the application, you'd see which part
of the application is flickering - and the overlay wouldn't be affected.
3) A problem or bug with the QPA plugin you're using (you mention
embedded, so I'm going to guess you're using eglfs or something like
that)
4) Relatedly, a problem or bug with the windowing system (particularly
if you're doing something rather custom. If you're using e.g. OS X or
some other mainstream setup though, this is less likely)

-- 
  Robin Burchell
  ro...@viroteck.net
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] [QtMultimedia] Still is supported, active?

2016-07-21 Thread Robin Burchell
On Thu, Jul 21, 2016, at 04:05 PM, Prav wrote:
> Agree with you if this field was unchangeable once it was set (nobody
> knows the future exactly ... ).
> But this field is CHANGEBLE! So Fix Version SHOULD NOT BE KNOWN. It is
> how maintainer see planning of it currently.

Looking at my current world of choice: QtQuick (not QML, & not Controls)
currently has - roughly - 385 open bugs. Three maintainers (Shawn &
myself for QtQuick, Gunnar for scenegraph parts) - one of which works on
Qt full time - plus a number of assorted contributors (in and outside
the Qt Company) who all have their own priorities, wants, needs, and
desires.

The very nature of an open source project is that the resources that it
has are unreliable. Outside of the core of people paid to work on it,
there is no predictability about how much effort people are able to put
in, let alone the completely unpredictable nature of software estimates,
which is a widely known problem: I expect you've heard of it before so I
won't go into it. And of the core of people paid to work on it, they
have their priorities set based on a number of different variables:
things they want to work on, things they are paid to work on, feature
work vs bugs (and then: paid customers vs not, etc).

On top of that, many bugs can't be estimated just by looking at the
report. It requires knowledge of the code to find a fix, to understand
possible implications and side-effects, testing, etc. I'm the first
person to tell you that I don't have a clue how long a number of the
bugs filed on QtQuick will take to fix right now, simply because I don't
have an immediate understanding of what the problem actually is.

I've rambled a bit here, but the point that I'm trying to make is: even
if I *wanted* to, I couldn't try plan all 385 of those into something
sensible, even if I was willing to spend all of the time that I spend
looking at code/bugs/reviews on the meta-work that you're proposing
(planning with all of those people) here. And that's just for one small
part of Qt.

Long story short, I don't see that happening. I don't think it's
actually written down or formalised anywhere, but AFAIK, fix version
tends to only be set on bugs that are actually fixed, to indicate which
version the fix is going to land in, or on high priority blockers.

-- 
  Robin Burchell
  ro...@viroteck.net
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] commas in ctor-init-lists

2016-06-01 Thread Robin Burchell
And another +1 from me.

-- 
  Robin Burchell

On Wed, Jun 1, 2016, at 09:23 PM, Andy Nichols wrote:
> +1 to specify the coding style to be the "butt ugly" one.
> 
> I'm one of those who has (not so secretly) been committing and approving
> the offending style after all ;-)  Though for the record I did not think
> it mattered and was not covered by the style guideline you cited.
> 
> Andy Nichols
> 
> > On 01 Jun 2016, at 14:56, Simon Hausmann  wrote:
> > 
> > I'm in favorof changing our coding style to adopt the model you call "butt 
> > ugly" because I find it more appealing and I find that it makes diffs 
> > easier to read.
> > 
> > Simon 
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Nominating Frank Meerkoetter for Approver status

2016-05-20 Thread Robin Burchell
+1 :)

On Fri, May 20, 2016, at 02:49 PM, Simon Hausmann wrote:
> Hi,
> 
> 
> I would like to nominate Frank for approver status. He has done a fair
> bit of surgery in the QML engine and also seems to be active on
> qtopcua/serialbus.
> 
> 
> I appreciate his input on my patches and I trust him to responsibly
> review.
> 
> 
> 
> Simon
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] qtfeedback and qtdocgallery: status?

2016-03-22 Thread Robin Burchell
On Tue, Mar 22, 2016, at 10:37 AM, Hausmann Simon wrote:
> I'm not sure what you'd like me to answer at this point. I think that it
> is possible to fix the
> build of these modules, the CI system is in place for that. However it
> requires a fair bit of
> work (ask Robin about qtmessagingframework ;-).

Assuming that the problems are *just* limited to license tests, and the
tests in the package itself are in good shape, then it's probably not
*too* hard. It'll still require playing a few rounds of CI ping-pong,
and mass-staging changes (and headdesking when it fails again).

I'll readily admit that it's an annoying process, but it was a
manageable one. I'm not sure it's a productive use of time in the case
of these "smaller"/pseudo-abandonware codebases, but it's certainly
possible.

For the practicalities of how to do it (Simon or someone, please correct
me if I'm wrong here):

* You'll want to edit sync.profile in the module and make sure they
don't have "stale" dependencies (I see for instance that qtfeedback is
pointing to refs/heads/stable, which is probably not a good idea at this
point). I forget what the default is (no specific version listed) -- I
believe it points to the origin branch (e.g. 5.6 branch of module -> 5.6
of dependency), or dev if there's not a direct match.
* You can run the license test locally (from qtqa, see
./tests/prebuild/license/tst_licenses.pl) to check that it will be
satisfied with a given module

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] API/ABI changes report

2016-02-05 Thread Robin Burchell
On Fri, Feb 5, 2016, at 05:58 PM, Thiago Macieira wrote:
>  - QWindowSystemInterface: binary incompatible (class is \ingroup qpa,
>  but not 
>in a _qpa.h header, therefore it's public API)

I don't agree with this. None of the QPA files have a _qpa.h extension
(and haven't since 2012 -- see
qtbase/037238022f3a91a5619709b2c7cf4b38cd4d294b), all of them clearly
carry a warning "header", and all of them are put in include/qpa/ (see
sync.profile), so they are not public.

> * QtWaylandClient:
>  - events: false positive
>  - qt_extended_output: was public and should not have been removed. The
>  same 
>change also changed values of enums in other public classes 
>(like QWaylandCompositor).

QtWaylandClient is not a public module. It's the platform plugin for
Wayland. There isn't yet any API that is public (and not preview-level)
in QtWayland.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Fwd: A simple analysis of apps using qtbase's private headers

2016-01-22 Thread Robin Burchell
On Fri, Jan 22, 2016, at 03:57 PM, PCMan wrote:
> > The following three seems to be using at least qpa/qplatformtheme.h
> >
> > * KDE's frameworkintegration 5.16.0
> > * libqtxdg 1.3.0
> > * lxqt-qtplugin 0.10.0
> >
> > Maybe for being able to create it's own theme?
> >
> 
> 
> Yes, but it's not only for themes.
> Libqtxdg uses Qt private headers to woakround bugs in QIconTheme and
> QIcon.
> Lxqt-plugin uses Qt private qpa headers to support customized themes and
> make some desktop settings work correctly.
> Our LXQt file manager pcmanfm-qt will be using Qt private headers
> qdnd_p.h
> for workaround a regression bug of Qt 5.5 which breaks DND.
> 
> Thanks!

Do you happen to have bug IDs for the problems you're working around?
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] RFD: plugins vs QStringLiterals

2015-11-05 Thread Robin Burchell
On Thu, Nov 5, 2015, at 06:13 PM, Oswald Buddenhagen wrote:
> > Problem: performance impact, complexity of the atom/quark solution.
> > 
> to lessen the performance impact, we could have a #define to control the
> construction behavior of QSL at compile time. i'm not quite sure whether
> to make that opt-in or opt-out (safety vs. performance).

Is the problem only apparent inside of plugins? Do we have a way to
detect whether someone is building plugin code at build time? (CONFIG +=
plugin for qmake, I guess?) If so, couldn't the behaviour of
QStringLiteral differ for code inside of plugins, to that outside of
them?

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Proposing Markus Goetz

2015-10-27 Thread Robin Burchell
He already is
(https://codereview.qt-project.org/#/admin/groups/12,members) - I guess
it just never transferred to his other account.

-- 
  Robin Burchell
  ro...@viroteck.net

On Tue, Oct 27, 2015, at 09:07 PM, Richard Moore wrote:
> Not quite sure how Markus has managed not to be an approver.
> 
> https://codereview.qt-project.org/#/q/owner:%22Markus+Goetz+(Woboq+GmbH)%22,n,z
> 
> Rich.
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QML import versions

2015-09-20 Thread Robin Burchell
On Fri, Sep 18, 2015, at 08:15 PM, Nurmi J-P wrote:
> > I have some opposition to the idea because it entirely prevents us from
> > making changes if they are needed. An example of this came up just the
> > other day on IRC: Window{} has a number of major (or at least quite
> > irritating) flaws. A few of us were discussing whether/how it would be
> > possible to fix them in a QtQuick.Window 3.0, without breaking backwards
> > compatibility with older code, and without waiting for Qt 6.
> 
> I think it’s a reasonable trade-off. Qt has lived with this restriction
> for quite long. :)

I think the reason that the imports system evolved in this direction was
because it was considered to be too limiting, and in the case of QML,
not necessary because of the capability to provide backwards
compatibility. You can't easily use Qt 4 and Qt 5 in the same codebase,
you could use QtQuick.Window 2 and QtQuick.Window 3 in the same
codebase, theoretically.

> If this is about the Item-based Window, would it make sense to give a
> different name? Panel? Popup? There’s also something related in the works
> in Qt Quick Controls 2.

Without wanting to go too far off on a tangent here:

I personally think that a concept that maps to a Window deserves to be
called a Window. Definitely not Panel or Popup at least as both of those
have different meanings in windowing, and neither of them match on
desktop platforms (sure, on platforms *without* windows, it does).

> >> How often do we release new major versions of QML modules? I don't see why 
> >> QML
> >> modules couldn't follow the same practices than the rest of Qt follows.
> > 
> > At present, we don't, but I think that's more down to the low amount of
> > activity happening outside the engine (at present) rather than the lack
> > of a _need_ to in some areas. Adopting this policy would mean there is
> > zero chance of these ever happening outside of major Qt releases, which
> > ties things to a much longer timeframe than "whenever we feel like
> > bumping the major version number".
> > 
> > To me, that feels like a pretty big loss, even if I can see the appeal
> > we get in having consistency.
> 
> Yeah, it’s a big limitation, but I’d vote for consistency for the sake of
> pleasant Qt Quick experience. It would also mean that we wouldn’t be able
> to release Qt Quick Controls 2.0 as is. We could release some parts of it
> under a different import, though.

> The QML version mess has been bothering me for a long time, and as I
> tried to illustrate in the initial email, it keeps getting worse every Qt
> release… :(
> 
> > It also means we're bumping version
> > numbers for the sake of bumping version numbers in cases where there
> > really aren't any (or at least many) changes, in the case of e.g.
> > Particles, which is less of an issue, but still an issue.
> 
> Is it any different to bumping the version of, say, QtXmlPatterns?

No, but one doesn't do something like "#include
" (unless one is using private API, in which
case it's all your fault, you're a horrible person, and you deserve
everything you get).

In other words, those version numbers are a lot more transparent to the
developer & end-user, unless they specifically rely on new
features/bugfixes. This is both a good thing (meaning that we have more
freedom to make changes), but a bad thing (due to potential
inconsistencies in how it's approached, and e.g. the massive smattering
of version numbers that we have now)

In QML, the version numbers are directly exposed to the developer. This
means that it would be a lot easier to, say, import QtQuick.Particles
5.7, and stop that application working on any prior version of Qt purely
because we decided to bump the import version, when there are no changes
in the module at all.

Maybe another solution towards this problem would be removing minor
versioning from our vocabulary altogether, and simply using a major
version number for imports:

import QtQuick 2
import QtQuick.Window 2

... and so on.

Functionality is always available (unversioned) in that import. Code
written for older versions will Just Work on newer versions (as it does
now). Code written for newer versions will Just Work on older versions,
unless it relies on newer features (as it does now, just with a
different error message: admittedly it might be a less descriptive one -
you'd get told that the type/property didn't exist, as opposed to module
version foobar is not available - but this is also the case with C++
usage now!).

Or am I missing some other value offered by minor version numbers?

We'd still have potential inconsistency with major version numbers, but
in my opinion, this is less of a problem, as at least in that case it's
usually a little more developer-evident when and why those change, and a
lot less frequent.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QML import versions

2015-09-18 Thread Robin Burchell
On Fri, Sep 18, 2015, at 05:12 PM, Nurmi J-P wrote:
> - QtQml 2.2
> - QtQml.Models 2.3 (++)
> - QtQuick 2.6 (++)
> - QtQuick.Particles 2.0
> - QtQuick.Controls 1.5 (++)
> - QtQuick.Layouts 1.3 (++)
> - QtQuick.Dialogs 1.2

You missed QtQuick.Window I think :)

... which brings me to this:

> Is this something that would be possible to implement already in Qt 5, or
> is this Qt 6 material? Does someone strongly oppose the idea?

I have some opposition to the idea because it entirely prevents us from
making changes if they are needed. An example of this came up just the
other day on IRC: Window{} has a number of major (or at least quite
irritating) flaws. A few of us were discussing whether/how it would be
possible to fix them in a QtQuick.Window 3.0, without breaking backwards
compatibility with older code, and without waiting for Qt 6.

> How often do we release new major versions of QML modules? I don't see why QML
> modules couldn't follow the same practices than the rest of Qt follows.

At present, we don't, but I think that's more down to the low amount of
activity happening outside the engine (at present) rather than the lack
of a _need_ to in some areas. Adopting this policy would mean there is
zero chance of these ever happening outside of major Qt releases, which
ties things to a much longer timeframe than "whenever we feel like
bumping the major version number".

To me, that feels like a pretty big loss, even if I can see the appeal
we get in having consistency. It also means we're bumping version
numbers for the sake of bumping version numbers in cases where there
really aren't any (or at least many) changes, in the case of e.g.
Particles, which is less of an issue, but still an issue.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] How to speed up QML for KDE5 without QML compiler

2015-09-16 Thread Robin Burchell
On Wed, Sep 16, 2015, at 06:03 AM, Leslie Zhai wrote:
> For a new PC,  there is no sharp difference between QML and QWidget, but 
> in a very very old PC, how old? about 7 years ago, QML is very slow! and 
> it needs to close all effects for KDE5, even that when clicked, for 
> example, calendar applet, it hang about 3+ seconds to showPopup.

This may be an obvious statement, but QML's capabilities (like that of
any other software) are dependent on the hardware you run it on. The
slower the CPU/GPU, the less you can accomplish in the same amount of
wallclock time.

The key to good performance when using QML is to do the minimal amount
possible at any given time. This means:
* Not having useless wrapper items, e.g: Item { OtherThing { } } <- this
is creating an item to do absolutely nothing
* Having bindings be as simple as possible
* Aggressively delay loading of items (using Loader, make sure to keep
them in seperate source files too to minimize the amount of time spent
parsing)

All of these points are multiplied depending on how often you do them,
e.g. in a ListView's delegate, you construct a lot of delegates, so any
inefficiencies there will be multiplied by however many delegates you
create.

Keep in mind that the things you use to write your application matters
quite a bit, too. For example, QtQuickControls' Button is a lot more
complicated & heavy than something like Rectangle + MouseArea (this
example may not hold as relevant with QtQuickControls 2, I haven't
looked into it much).

You can take a look at https://github.com/sletta/qmlbench to get a sense
for how expensive different parts of QML are (and how many of certain
items you can create per frame, and such).

In addition to all that: I agree with what Konstantin said. Before
trying to fix performance, you first need to understand what's wrong
with it, which involves profiling and understanding the problem "under
the hood".

> There is commercial QML compiler, a very small example tried to use it 
> https://github.com/AOSC-Dev/AOSC-VersionHelper2
> But is it suitable for huge projects just like KDE5 if bought a 
> commercial license? because not all KF5 components follow the Qt Quick 
> Compiler`s resource.qrc way, so is it able to compile? for example, 
> kickoff applet (the start menu of KDE5).

Probably not. IIRC the compiler ties you to a particular Qt version: you
must use the same Qt version at runtime as you compiled the sources
with. So unless it was used as part of the distribution's build setup
(for instance) it probably wouldn't work at all.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] Nominating Pier Luigi Fiorini (plfiorini) as an Approver

2015-07-14 Thread Robin Burchell
Hi,

I would like to nominate plfiorini for Approver status.

He's been quite helpful in working on Wayland (client & compositor) side
things in conjunction with the Hawaii desktop (http://hawaiios.org/),
and offering review on related patches. He also has knowledge of QPA
thanks to this work, and best of all, is easy to get in touch with (and
very friendly on) IRC :).

His dashboard:
https://codereview.qt-project.org/#/q/owner:%22Pier+Luigi+Fiorini+%253Cpierluigi.fiorini%2540gmail.com%253E%22,n,z

And his reviews:
https://codereview.qt-project.org/#/q/reviewer:%22Pier+Luigi+Fiorini+%253Cpierluigi.fiorini%2540gmail.com%253E%22,n,z

Would anyone like to second?

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] QtCS: Qt Quick Performance discussion

2015-06-22 Thread Robin Burchell
It seems that nobody took proper notes of the session (oops!) so I'm
sending the notes Gunnar and I wrote up in preparation for the session.
If anyone else has any recollections they'd like to add, please go ahead
and do so :)

=

# Performance!

* Why it's important
* What needs to be checked?

# Benchmarking

* Need support in qmlbench for measuring memory usage.
* For each set of creation benchmarks, we should run them a second
time collecting memory information.
* Once we have that, once graphed across a single test run, memory leaks
become easy to spot
* Graphed over time, regressions between commits become easy to spot
* Likewise for the number of items per frame

# Start up performance

We don't have good benchmarks for this, and creating them isn't trivial
to measure. Need a few generated examples, maybe.

# Memory usage

* Our memory usage is pretty bad in a lot of areas.
* Sharing data across processes (fork-booster)..
* Similar but better sharing achievable through qmlcompiler
* Benefits could be achieved by carefully allocating all write-once
expected-to-be-shared data contiguously
* Dropping CPU-side image data. We recently added QSG_TRANSIENT_IMAGES
to Qt Quick.

# Item creation performance

* We have pretty good benchmarks for this :)
* But we (constantly!) keep regressing
* This week's example: two seperate regressions in QQuickImageBase
(high DPI, and automatic transform)
* Image items per frame dropped from ~550/frame to 492/frame -- ~10%
regression
* Allocations for 5000 images increased by 41mb
* This is just one case - it's nobody's "fault", there's just nobody
taking care of it.
* Ideally need to do some work on automating runs of it (more on this
later)
* What is a good target?
* 1000 items / frame in qmlbench on a modern desktop / laptop (mbp
is one such)
* 100 items / frame on mobile and embedded

# Binding performance

I have no idea whether or not we have good benchmarks for this.

* Probably the creation ones cover the simple cases, but the more
advanced ones probably need seperate coverage.
* Ideally we also need to monitor the impact of things changing in
bindings (& multiple things changing at once, and so on?)
* Help creating benchmarks welcome!

# Graphics Performance:

Are we good here? I think we're close at least.. 
* Clipping has been brought up as an issue, 'simplerenderer' solves that
* Poor batching gives worse result, 'simplerenderer' solves that also,
but be mindful that simplerenderer also has ~2-3x worse performance
overall.

# Recommendations for working on QtQuick

* Avoid structures like QHash unless you are sure they are needed (they
have a heavy cost, and for <1k items or so, QVector, or std::vector, are
often a better choice)
* Avoid signal connections
* Virtuals instead might be a good choice
* If you really have to use them, use qmlobject_connect
* See prior art:
   * qtdeclarative: 0de680c8e8fab36e386dca35e5008ffaa27e8ef6
   * qtdeclarative: 7568922fa240e6e9440e9c6e93bf8ec00c06ec17
* Memory compactness:
* Don't introduce padding holes
* Don't increase the size of frequently allocated things (nodes,
items) "accidentally" without careful consideration
* Use a lazily-allocated ExtraData for things that aren't needed
often
* Consider your data types carefully - don't use a 64 bit int for an
"on/off" toggle
* Consider custom data structures & allocation (page allocation of the
shadow nodes was a big win)

# Specific Items?

* Rectangle implementation could be improved quite a bit (Gunnar?)
* Text node improvements (Eskil?)
* Hash of shadow nodes in the batched render is a large problem
* https://codereview.qt-project.org/#/c/97708/
* Delaying compilation (or whatever it is) on inline components until
they are used. Right now, these can have massive impacts on
performance/memory unless moved to external files. e.g. "Component {
Dialog { ... foo ... } }, only used when a button is pressed. It may
never be pressed.
* "Don't use" classes, like SpriteSequence :)
* In general, small items take up huge amounts.. Repeater { model: 500;
Rectangle { width: 100; height: 100; radius: 10 } } and you have 1Mb or
something :)
* QObject -> QQmlData / QQuickItem / QQuickItemPrivate etc all adds up
on individual items - but what can we do to fix that?
* The recent introduction of 'padding' in the box model might need a
second look to make sure it isn't increasing item sizes in common cases.
4 extra doubles is quite a large addition to item sizes.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] QtCS: Discussion about deprecating things

2015-06-16 Thread Robin Burchell
Notes I took on the deprecation session follow. If I missed anything, or
misrepresented it in the notes, please chime in -- I was pretty tired
when I was writing this :)

(P.S. Did someone take notes on the QtQuick Performance discussion?)

==

Introduction
* Qt 5 is now a few years old, a lot of things have happened
* There’s always a limitation of resources, makes sense to focus on the
important, future-looking things

Compilers
* C++ standard evolving is one additional motivation for change, meaning
old compilers need to go (VS 2008, GCC 4.4)

Platforms
* Additionally, natural evolution of operating systems means that
supporting older operating systems becomes an increasing burden (OS X,
for instance, WEC 7, QNX 6.5)
* Deprecation is hard: lots of use of “old"RHEL 6 still going on. At the
same time, why is there a desire to use the newest Qt on these “old”
platforms?
* Qt 5.6 will deprecate: QNX 6.5 (QNX 6.6 OK)
* Qt 5.6 will deprecate WEC 7, 2013 only.
* Qt 5.6: Vista is on life support - patches welcome, it won’t be tested
* Qt 5.6: OS X 10.8+ (previous 4 releases)
* Qt 5.6: RHEL 6.6 with devpack
* Android 2.3 support for 5.6 / “Qt LTS"
* Developer devices are dying
* Market share is dropping
* Maybe not, discuss it more?

Modules
* Modules that are now undermaintained needs to have something done to
them (QtWebKit, QtScript, QtQuick)
* Printing support lacking from QQ2
* Non-OpenGL hardware needing QQ1
* For modules that are no longer to be developed (“deprecated”):
* Remove them from the binary packages
* Keep individuals source tarballs, but not qt-everywhere tarball
* No guarentees given; patches welcome, bug reports may or may not
be handled.
* QtScript may be kept a bit longer, QtWebkit and QtQuick1 may be
deprecated sooner.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] qqmlengine/qqmlimport access

2015-06-09 Thread Robin Burchell
On Tue, Jun 2, 2015, at 11:44 PM, rpzrpz...@gmail.com wrote:
> Another concern I have is the Render Thread issues VS Gui thread issues.

Can you elaborate on this concern? The current description is impossible
to address, which might explain the lack of response.

-- 
  Robin Burchell
  ro...@viroteck.net
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Future of Qt Quick 1 in Qt 5

2015-05-10 Thread Robin Burchell
On Sat, May 9, 2015, at 11:41 PM, Alan Alpert wrote:
> > Can we declare the module in Deprecated state and keep bug compatibility 
> > with
> > previous versions? If people are using it to transition from Qt 4, it should
> > retain as much of Qt 4's behaviour as possible. That includes buggy 
> > behaviour
> > that applications have most likely already worked around.
> >
> > We should fix only security issues, severe crashes and any issue resulting 
> > with
> > loading both Qt Quick 1 and 2 into memory.
> 
> That's what I thought the status was already, and it seems the right
> level of support for the Qt 5 lifetime.

It was certainly proposed to be that way by Lars in the thread
"Deprecating modules with 5.5"
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Future of Qt Quick 1 in Qt 5

2015-05-08 Thread Robin Burchell
For the specific case of QtQuick1, I'd say that closing any issues that
aren't applicable to QtQuick2 (or won't be done) with a useful message
explaining the situation makes sense. It might also make sense to close
reporting of new issues for that component.

On Fri, May 8, 2015, at 06:10 PM, Hausmann Simon wrote:
> Hi,
> 
> Compilation wise I agree, it's low effort. But the situation is different
> in Jira IMO.
> 
> 
> Simon
> 
>   Original Message
> From: Thiago Macieira
> Sent: Friday, May 8, 2015 17:37
> To: development@qt-project.org
> Subject: Re: [Development] Future of Qt Quick 1 in Qt 5
> 
> 
> On Friday 08 May 2015 14:39:38 Frederik Gladhorn wrote:
> > Since KDE moved over the Plasma desktop to Qt Quick 2 (on which I'm writing
> > this email), I feel confident that the time has come to move everyone over.
> > For the no opengl acceleration use case, we provide the Qt Quick 2D Renderer
> > as backend.
> > (https://blog.qt.io/blog/2015/01/22/introducing-the-qt-quick-2d-renderer/)
> >
> > In short, is there any reason not to remove Qt Quick 1 from Qt 5.6?
> 
> Do we need to do anything at all? How much effort is keeping Qt Quick 1
> compiling these days? We're not doing anything besides that, are we?
> --
> Thiago Macieira - thiago.macieira (AT) intel.com
>   Software Architect - Intel Open Source Technology Center
> 
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Future of Qt Quick 1 in Qt 5

2015-05-08 Thread Robin Burchell
Hi,

On Fri, May 8, 2015, at 02:39 PM, Frederik Gladhorn wrote:
> One question is if there is any reason to maintain Qt Quick 1 in the
> future. 

I know of some projects that are still out there using QtQuick1
(unfortunately). I think that moving to remove it now might be a little
too quick, although I do think it's inevitable, and not a bad thing.

Are there any specific concerns you have about maintenance? Is there
anything that can be done to lessen that burden?

> For the no opengl acceleration use case, we provide the Qt Quick 2D
> Renderer as backend.
> (https://blog.qt.io/blog/2015/01/22/introducing-the-qt-quick-2d-renderer/)

This is true, but porting does require nonzero effort (especially in
testing, as one can't be certain that everything works due to some
subtle behaviour changes like MouseArea with opacity 0 still
intercepting presses in QQ2). I think that giving some amount of time
(5.7, 5.8?) after deprecation before removal might make sense.

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QtCore missing check for memory allocation

2015-02-27 Thread Robin Burchell
On Fri, Feb 27, 2015 at 9:20 AM, Oswald Buddenhagen
 wrote:
>> The argument is that it implies runtime overhead. See Robin's email for
>> numbers. This is asking for making the code slower on the very devices where
>> it needs to run faster.
>>
> i don't trust this number. i don't know how qMalloc was implemented, but
> there is no way a simple forwarding wrapper would add 10% overhead to
> malloc (esp. in an optimized build).
> modern processors even have a specific optimization for call forwarding
> (or whatever it's called properly).

I went and dug out the test I had. I remembered the results correctly
(for OS X, for Linux the situation is somehow worse overall?). The
measurement is actually qMalloc + qFree vs malloc + free, so the
overhead is shared across two calls. See the attachments.

Here's the results for OS X 10.10 and Linux (Ubuntu 12.04). Hopefully
they don't get screwed in mail formatting :)

 OS X 10.10Size  msTotalIterations
 qtMalloc  1 0,55  58   1048576
 qtMalloc  100,56  60   1048576
 qtMalloc  100   0,59  69   1048576
 qtMalloc  1 0,00018   90   524288
 qtMalloc  100   0,029 59   2048
 qtMalloc  1000  0,34  86   256
 regularMalloc 1 0,51  55   1048576
 regularMalloc 100,51  58   1048576
 regularMalloc 100   0,52  55   1048576
 regularMalloc 1 0,00013   73   524288
 regularMalloc 100   0,029 59   2048
 regularMalloc 1000  0,4   97   256

 Percentage change
 -0,49
 -0,49
 -0,48
 -0,99987
 -0,971
 -0,6

 Linux Size  msTotalIterations
 qtMalloc  1 0,32  68   2097152
 qtMalloc  100,32  68   2097152
 qtMalloc  100   0,36  76   2097152
 qtMalloc  1 0,00021   57   262144
 qtMalloc  100   0,037 76   2048
 qtMalloc  1000  0,47  61   128
 regularMalloc 1 0,1   92   8388608
 regularMalloc 100,11  95   8388608
 regularMalloc 100   0,11  99   8388608
 regularMalloc 1 0,11  97   8388608
 regularMalloc 100   0,11  93   8388608
 regularMalloc 1000  0,11  96   8388608

 Percentage change
 -0,9
 -0,89
 -0,89
 -0,89
 -0,89
 -0,89

Looking at the instruction counts (Linux only, via callgrind) is
interesting, though, and I don't know how to explain this:

  Linux Size  Instruction reads
  qtMalloc  1 376
  qtMalloc  10376
  qtMalloc  100   405
  qtMalloc  1 2,320
  qtMalloc  100   95,208
  qtMalloc  1000  938,880
  regularMalloc 1 179
  regularMalloc 10179
  regularMalloc 100   179
  regularMalloc 1 179
  regularMalloc 100   179
  regularMalloc 1000  179
#include 
#include 
#include 
#include 

class MallocBenchmark : public QObject
{
Q_OBJECT
private slots:
void qtMalloc();
void qtMalloc_data();
void regularMalloc();
void regularMalloc_data();
};

void MallocBenchmark::qtMalloc_data()
{
QTest::addColumn("size");
QTest::newRow("1") << 1;
QTest::newRow("10") << 1;
QTest::newRow("100") << 100;
QTest::newRow("1") << 1;
QTest::newRow("100") << 100;
QTest::newRow("1000") << 1000;
}

void MallocBenchmark::qtMalloc()
{
QFETCH(int, size);

QBENCHMARK {
void *p = ::qMalloc(size);
memset(p, rand(), size);
::qFree(p);
}
}

void MallocBenchmark::regularMalloc_data()
{
qtMalloc_data();
}

void MallocBenchmark::regularMalloc()
{
QFETCH(int, size);

QBENCHMARK {
void *p = malloc(size);
memset(p, rand(), size);
free(p);
}
}

QTEST_MAIN(MallocBenchmark)

#include "main.moc"



malloccheck.pro
Description: Binary data
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QtCore missing check for memory allocation

2015-02-25 Thread Robin Burchell
On Wed, Feb 25, 2015 at 10:17 PM, Konstantin Ritt  wrote:
> Maybe a bit off-topic: can we introduce our own (probably customizable)
> memory allocation API, something like Apple's CFAllocator [1], and move Qt
> internals to use it instead of malloc/realloc/free (and maybe instead of
> some new/delete-s, based on some policies)?

Before you go all-out on something like that, please make sure you
benchmark and consider the cost. Memory allocation is already
something that is quite slow, and yet, done a lot - all over the place
(too much, even, but that's a rant for another day).

IIRC when I pushed for deprecating qMalloc/qFree in the past, I
measured (on Linux) a ~10% time penalty for small allocations,
lowering to 0-5% as allocation size increased. That's a way too hefty
penalty to ask people to pay on something so universal - and that was
literally just a function wrapping malloc, no "debugging or
monitoring".

Furthermore, aside from performance, I don't think that reintroducing
a wrapper is a smart way to do it for much the same reason why I
wanted to get rid of them in the first place: they weren't universally
used, leading some people to get the false impression that
intercepting qMalloc would give them the kind of diagnostic
information you're talking about.

If you want to debug or monitor, then I'd suggest doing it a lot more
centrally with something dedicated to that task, see e.g. heaptrack
(http://milianw.de/tag/heaptrack).
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] CI failing due to tst_licenses.pl test

2015-02-24 Thread Robin Burchell
Hi,

Since nobody else has replied to this yet, my understanding of what
happened with license checks is roughly as follows. I was not
involved, so YMMV - this is all just gained from observation of what's
happened - someone else please correct me if I'm wrong.

a) someone, somewhere, made a decision to change license headers (I
don't know where this discussion happened, at least I don't recall
this happening on-list)
b) tst_licenses (or was it all qtqa tests?) were disabled, presumably
to allow a) to happen
c) license headers were changed, without checking that they actually
passed the test
d) license checks were reenabled, making everything fail
e) 5.5 got branched without this having been fixed
f) licenses were changed (again) in dev, fixing the tests
g) finally, dev was merged back down to 5.5 to fix the failures there

By my count, there's a few failures here:
* it would have been nice to have a "heads up" about the headers change.
* disabling license checks to update headers seems to have been a
pretty terrible idea
* branching 5.5 before fixing that seemed to create a lot of
additional confusion, especially without any real communication about
what was going on with all of these issues

The situation is - I think - almost back to normal, bar some modules
that aren't part of releases.

Robin

On Mon, Feb 23, 2015 at 3:17 AM, Aaron McCarthy
 wrote:
> Hi,
>
> Changing are failing to integrated because the license header used by the
> tst_licenses.pl test does not match the existing headers in the source. Errors
> like the following are seen:
>
>> #   Failed test 'Mismatch in license text in
> examples/qml/dynamicscene/content/Button.qml
>> # Actual:   * Neither the name of The Qt Company Ltd and its
> Subsidiary(-ies) nor the
>> #   Expected:   * Neither the name of The Qt Company Ltd nor the names of
> its' #   at
>> /work/build/_qtqa_latest/tests/prebuild/license/tst_licenses.pl line 389.
>
> Cheers,
>
> --
> Aaron McCarthy
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Item creation time in QML

2015-02-18 Thread Robin Burchell
On Fri, Feb 13, 2015 at 12:41 AM, Andrew den Exter
 wrote:
> First of all it's accumulative, any QML application is going to end up
> constructing many items, hundreds, thousands even and costs, even small ones
> add up.  Secondly yes constructing and interacting with QObjects can be
> expensive and there are ways to mitigate some of those costs.   Thirdly
> parsing, compiling, instantiating, and executing bindings is all extra work
> that comes at a cost.

I would also add that memory allocation is usually a problematic
thing. This can be something as "simple" as using the wrong type of
container as was discussed on the list recently. See
ba690fb73864915b4a35bbec5b7dc134ff1dafd0 in qtdeclarative for one
recent example of just how bad this can get.

> Robin's singled out the Text items so lets have a look at those.  A good
> amount of work has already been put into these items though so TextEdit
> aside there's not a lot of low hanging fruit.

Looking into a time profile on Gunnar's Text benchmark a little,
here's some intriguing findings so far:

* I started out with a split of 33% - 66% render thread vs gui thread
split. This is quite high, the render thread is normally a lot less
busy.
* Profiling showed a lot of "hot path" memory allocation on various
small spots, e.g.
  https://codereview.qt-project.org/#/c/106259/
  https://codereview.qt-project.org/#/c/106260/
  https://codereview.qt-project.org/#/c/106261/
  https://codereview.qt-project.org/#/c/106262/
* Profiling also shows that (once again) QHash and QSet are looking
likely to be problematic in a few places. I've already gotten rid of a
few of them in a WIP patch I haven't pushed yet.

On the GUI thread:
* 11% in QQmlObjectCreator::create
* 1% in QQuickText::QQuickText
* 6.5% in QQmlObjectCreator::setupBindings
* 52% in QQmlObjectCreator::finalize
* 47% on QQuickText::componentComplete
* 35% in QTextLine::layout_helper
* 30% in QTextEngine::shapeText
* 28% in QTextEngine::shapeTextWithHarfbuzzNG
* 26% in hb_shape_full
* 5% in QQmlBinding::update

On the render thread:
* 15% in QSGRenderThread::sync
* 14% in QQuickWindowPrivate::updateDirtyNodes
* 8.5% in QQuickWindowPrivate::updateDirtyNode
* 7% in QQuickText::updatePaintNode
* 4% in QQuickTextNodeEngine::addToSceneGraph
* 1% in QSGNode::appendChildNode
* 1% in QSGBatchRenderer::Renderer::nodeChanged
* 5.2% in ~QSGTransformNode
* 3.6% in ~QQuickTextNode
* 1.5% in QSGNode::removeChildNode
* 1.5% in QSGBatchRenderer::Renderer::nodeChanged
* 3.7% in QQuickWindowPrivate::renderSceneGraph

So we have total costs of around 35% for text engine costs, 11.5% for
binding costs, and the actual Text construction isn't much to speak
about.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Item creation time in QML

2015-02-12 Thread Robin Burchell
On Wed, Feb 11, 2015 at 2:49 PM, Rutledge Shawn
 wrote:
>> Being able to do 500+items rectangles in one frame is decent, but not 
>> awesome. Being able todo 130 text items in one frame, is less than ideal, 
>> given that we often use several text items per cell in a list or table. Text 
>> is probably the most important UI element we have. Being able to do 10 
>> buttons is, well, unfortunate :) If we look at Button, we see that it is a 
>> fairly complex QML beast. Hierarchy is
>>
>> Button -> BasicButton -> Control -> FocusScope
>>
>> and there are quite a bit of stuff on every level, including the dynamic 
>> style handling which will in turn create a StyleItem.
>>
>> And keep in mind that even though this isn’t the most high-end mac, it is 
>> sitll a pretty decent computer, Qt is supposed to run on much worse hardware 
>> than this.
>>
>> —
>>
>> There have been a few changes going into 5.5 which make these numbers better 
>> than 5.4, but I still think we got quite a ways to go.
>
> That’s very interesting.
>
> Do you think it was ever better in past versions?

I'm glad you asked: http://rburchell.com/QtQuickPerformance.pdf

> What do you think we should do about it?  Mainly focus on trying to create 
> fewer objects, or is there still a lot of headroom for making the creation 
> more efficient?  Is creation expensive because of constructor code, making 
> too many signal/slot connections, or something else?

I think there's plenty that can be done, because it *used* to be
better. We should aim for matching the performance we used to have at
the very least, ideally, for exceeding that.

I'd say that one very particular case that needs attention is text
performance. It's pretty bad.

As for why, specifically, it's slow, I did some profiling in the past,
but I don't have those results now. I plan to spend some time on that,
maybe on the weekend, and send some more information once that's done.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QtDeclarative CI failures on Windows

2015-02-10 Thread Robin Burchell
Thanks. That's what I assumed, but it's nice to have it confirmed.

On Tue, Feb 10, 2015 at 9:24 PM, Hausmann Simon
 wrote:
> Hi,
>
> Friedemann made a fix: ‎https://codereview.qt-project.org/#/c/105750/
>
> Simon
>
>   Original Message
> From: Robin Burchell
> Sent: Tuesday, February 10, 2015 21:15
> To: development@qt-project.org
> Subject: [Development] QtDeclarative CI failures on Windows
>
>
> Can someone with Windows please take a look at unblocking
> qtdeclarative/dev, or give an update if you know what's going on? It's
> been failing since February 5[1](!).
>
> The failures are consistent. See some examples: [2][3][4].
>
> In light of it being just under a week since the last successful
> integration, I think it might make sense to extend the branching
> period a bit longer for qtdeclarative at least. I have a few changes I
> would like to see in before branching (some of which require updates,
> I've admittedly been a bit slack on that):
>
> https://codereview.qt-project.org/97273 (needs update, I was waiting
> to add QQuickParticleData and QQuickTextPrivate to it, below, but they
> have not yet integrated)
> https://codereview.qt-project.org/103862 (minimal risk)
> https://codereview.qt-project.org/105663 (improves size for the common
> case of Text)
> https://codereview.qt-project.org/105665 (improves size for the common
> case of Text)
>
> Everything else on my dash I'm happy to wait for 5.6.
>
> Robin
>
> [1]: 
> http://lists.qt-project.org/pipermail/ci-reports/2015-February/035268.html
> [2]: 
> http://lists.qt-project.org/pipermail/ci-reports/2015-February/035567.html
> [3]: 
> http://lists.qt-project.org/pipermail/ci-reports/2015-February/035559.html
> [4]: 
> http://lists.qt-project.org/pipermail/ci-reports/2015-February/035579.html
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] QtDeclarative CI failures on Windows

2015-02-10 Thread Robin Burchell
Can someone with Windows please take a look at unblocking
qtdeclarative/dev, or give an update if you know what's going on? It's
been failing since February 5[1](!).

The failures are consistent. See some examples: [2][3][4].

In light of it being just under a week since the last successful
integration, I think it might make sense to extend the branching
period a bit longer for qtdeclarative at least. I have a few changes I
would like to see in before branching (some of which require updates,
I've admittedly been a bit slack on that):

https://codereview.qt-project.org/97273 (needs update, I was waiting
to add QQuickParticleData and QQuickTextPrivate to it, below, but they
have not yet integrated)
https://codereview.qt-project.org/103862 (minimal risk)
https://codereview.qt-project.org/105663 (improves size for the common
case of Text)
https://codereview.qt-project.org/105665 (improves size for the common
case of Text)

Everything else on my dash I'm happy to wait for 5.6.

Robin

[1]: http://lists.qt-project.org/pipermail/ci-reports/2015-February/035268.html
[2]: http://lists.qt-project.org/pipermail/ci-reports/2015-February/035567.html
[3]: http://lists.qt-project.org/pipermail/ci-reports/2015-February/035559.html
[4]: http://lists.qt-project.org/pipermail/ci-reports/2015-February/035579.html
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] Requesting a break in behavior in QML Text element

2015-01-29 Thread Robin Burchell
Hi,

Rationale: Text.AutoFormat is a terrible misfeature in almost every
case out there.

Design implications: In many cases in applications, a format is not
specified, with the assumption that only plain text will ever be
displayed because that is all it is ever tested with. In actuality,
this is not the case: providing rich text will allow rich text to be
displayed. This can break the appearance of the application (for
instance, bolding a list item becomes possible when this may not be
wanted as a design constraint)

Security implications: There are two security implications here.
Firstly, there is an issue when used in conjunction with another
feature of QML: automatic loading of resources[1]. This can allow for
resource usage in unexpected conditions (say, when on a mobile
device), allow some degree of tracking of user behavior ("did this
user get my message yet? better embed a 1x1 transparent gif in the
image and find out"), etc. In the case of a bug in Qt's image format
plugins or rich text handling, it could also escalate from being
"annoying" to actually allowing attacks to take place.

Performance implication: In addition to the security and design
implications, it's also undesirable from another perspective: that of
performance. Automatic detection and fallback implies a certain amount
of resources.

API design-wise, this is also not great. It's unexpected: you create a
text element, you don't have any idea what you're going to get. If you
turn on automatic detection or rich text, you explicitly have to make
the choice to get either of those behaviors.

It is worth noting that this behavior is present in the widget world
(QLabel and friends), but slightly less problematic there (in that
external loading is not possible). I have seen this be a problem quite
a large number of times there, too, as I am sure many developers
have[2], but changing the behavior of something that has existed for
so much longer is something that I consider to not be well received,
especially given the wide amount of codebase out there.

tl;dr: I'd like to request a behavior break in QML's Text element. I
would like to change the default value of Text::textFormat from
Text.AutoText to Text.PlainText.

Ideally, we could also provide tooling changes to help cover the
migration, by warning in QQuickTextItem::setText if HTML was
discovered and an explicit format had not been set, or perhaps in
other custom tooling aids.

Seperately, we may want to look at a restriction on the loading of
remote resources in Text. I can understand allowing remote URIs in
Image, but Text seems like an unexpected behavior to me.

BR,
Robin

(thanks go to Rich Moore for helping to proofread this proposal)

[1]: QML example showing loading of an image from a remote source
inside a text string.
import QtQuick 2.0

Item {
width: 500
height: width

Text {
text: ""
}
}

[2]: 
http://blog.qt.digia.com/blog/2011/10/04/security-considerations-regarding-qlabel-and-friends/
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QtWayland windows decoration on the Raspberry Pi

2014-12-15 Thread Robin Burchell
On Mon, Dec 15, 2014 at 12:37 PM, Massimo Callegari
 wrote:
> So, my application runs on Maynard using "-platform wayland" but all the
> windows are not decorated. So basically I have the same result as if I run
> it on eglfs.

See: https://codereview.qt-project.org/#/c/93128/

> So, my questions to the QtWayland guys are:
>
> - have you people already done some tests on Weston/Maynard on the Raspberry
> Pi ?

I haven't personally touched the Pi since I fried mine a year or more
ago. I don't know of many other people working on there, either, but
perhaps there's someone lurking that I don't know of.

> - how could I check which backend the QtWayland QPA is loading ?

The easiest way is probably to just make sure that you have the right
client buffer integration plugin available. But I'm not sure if the
regular one even works on the pi - at least I presume there's a reason
there's a custom integration made available of it.

> - is there any chance to have windows decorations (bradient ?) on the RPi or
> is it something still being evaluated/developed ?

If someone does the work for it, possibly.

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Platform maintainers

2014-09-26 Thread Robin Burchell
On Fri, Sep 26, 2014 at 5:17 PM, Nichols Andy  wrote:
> My suggestions for replacement would be either Giulio Camuffo who as been 
> main driver for the QtWayland project this year, or Jorgen Lind who was the 
> previous QtWayland maintainer and who still has a deep interest in the 
> project.

+1 to either, but I have to say I'd lean towards a +2 for Giulio
simply because he is more focused on Wayland, whereas Jørgen has many
other things on his plate already (from what I've seen going around in
Gerrit).

Giulio has an extensive knowledge base in the area, and has proven a
real asset in the time he's been working actively on QtWayland &
QtCompositor.

(No offence intended to Jørgen if my understanding of the situation is
incorrect!)
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Requesting removal of qtjsondb

2014-09-19 Thread Robin Burchell
On Fri, Sep 19, 2014 at 10:48 PM, Jeremy  wrote:
> It’s the repo hosted on qt-project.org and clones such as qt.gitorious.org 
> that I’m wondering about. Leaving qtjsondb at its current URL is not what I 
> would expect for something that is not part of the Qt 5 bundle. Do we start a 
> qt-abandoned tree? qtplayground is too optimistic.

We have plenty of other code in similar circumstances (qtwayland
pre-5.4, qtpim, ...) that aren't released but may be Some Day (or
might not, if nobody cares about them).

I don't think the URL really says all that much about something
necessarily, and moving things around is a hassle (technically and
socially)

I'd just leave it
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Linux release binaries too old

2014-08-26 Thread Robin Burchell
Thanks for starting the thread, Alex. I still hadn't had time to
really do my homework on my side of this problem, apart from talking
to you :-)

On Mon, Aug 25, 2014 at 5:25 PM, Blasche Alexander
 wrote:
> It is my understanding that the current Linux release binary packages are 
> built on Ubuntu 11.10 machines. This is very ancient. In fact for Bluetooth 
> Low Energy (new feature in 5.4) this is too ancient.

This also looks to be a problem for QtWayland binary packages, though
I'm not sure I'd say that those are urgent enough to hold releasing up
with.

I'm not an expert with Ubuntu anymore (haven't used it for a number of
years) but it looks like the libwayland available in 11.10 is ancient.
QtWayland needs at least 1.2.0 (which is already a pretty conservative
requirement).

If it were up to me, I'd just leave it as-is, and say that the
QtWayland release is source-only, for 5.4 at least.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Looking for a way to batch-upload independent changes to Gerrit

2014-08-18 Thread Robin Burchell
On Mon, Aug 18, 2014 at 7:57 PM, Allan Sandfeld Jensen  
wrote:
> Is it a problem that they have fake dependencies listed in gerrit? I often
> upload lists of patches like that, and land them out of order as they get
> reviewed. It appears to pose no particular problem, except that it can look a
> bit odd.

Me too, if I'm lazy. It can confuse some reviewers (small problem),
but the annoyance I've faced is that rebasing will bump all changes
after the commit you actually change. Having multiple source branches
avoids that.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Looking for a way to batch-upload independent changes to Gerrit

2014-08-18 Thread Robin Burchell
Hi Marc,

It doesn't specifically do what you want, I think, but you might want
to take a look at Android's repo tool:

https://source.android.com/source/developing.html
https://source.android.com/source/using-repo.html

I've been using it to interact with Qt's Gerrit for quite a while now
and am pretty happy with it (not everything is perfect, I'd like an
"amalgamated" branch which was automatically updated from all my topic
branches) but it works OK. Creation of topic branches is easy enough
that I don't tend to mind doing them.

I have a manifest at https://github.com/rburchell/qt-manifest (some
wrangling will likely be required, I'm pretty much the only person
using it at the moment I think).

Hope this helps,
Robin

On Mon, Aug 18, 2014 at 3:23 PM, Marc Mutz  wrote:
> Hi all,
>
> I have several times come across the problem that I hack away and end up with
> a chain of 20 or so commits, most of which are completely independent of each
> other. If I push gerrit HEAD:refs/for/X, I can upload all of them in one go,
> but they will be shown in the Gerrit UI as depending on each other.
>
> If I had the right to upload merges, even for just deleting them afterwards, I
> would take all of these changes, rebase them onto gerrit/X, and do one octopus
> merge over the lot of them, then push gerrit that_merge:refs/for/X and abandon
> the change that corresponds to that_merge as an artifact.
>
> Other than writing a script to iterate over the parents of that_merge and push
> gerrit parent:refs/for/X each one separately, which takes a long time because
> of the SSH key negotiation, is there a way to do this in one git push command?
>
> Thanks,
> Marc
>
> --
> Qt Developer Days 2014 - October 6 - 8 at BCC, Berlin
>
> Marc Mutz  | Senior Software Engineer
> KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company
> www.kdab.com || Germany +49-30-521325470 || Sweden (HQ) +46-563-540090
> KDAB - Qt Experts - Platform-Independent Software Solutions
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Wayland app_id

2014-08-14 Thread Robin Burchell
On Thu, Aug 14, 2014 at 9:52 PM, Pier Luigi  wrote:
>>> Now the question is: how can Qt applications set this app_id?
>>>
>>> Since app_id should be the same for all xdg surfaces I would propose
>>> adding an applicationIdentifier property to QGuiApplication.
>>
>> Why do they have to? Just like WM_CLASS is an internal detail to the
>> xcb plugin, I'd imagine that this would be an internal detail in
>> QtWayland.
>
> At a first and quick glance qxcb sets it to
> QCoreApplication::applicationName() which is way too verbose and not
> the desktop entry name, or argv[0] base name which is basically what I
> did with qtwayland but this doesn't feel right.
> This doesn't feel right because the desktop entry name might be
> different than the executable name hence my desire for something that
> would allow the application to specify it.

It kind of has to be enough, though, because you won't always get
launched from a desktop file (there's D-Bus activation, or plain old
exec, shell launching, etc). And what if the property just isn't set?

I don't think a new property is a good idea, both because it seems
incredibly limited in the scope of its usefulness (I don't see how
it's applicable in a cross platform way, and I don't even know how
you'd begin to document something this limited in usefulness) and
because they simply won't set it (partly due to it being a new
property, and partly because of the previous problem).

But yeah, you're running into the age old chestnut of a problem that
has haunted the fine folks at Jolla for a while: how to associate a
desktop file with a process. We never really came up with a good
answer there (at least not a generic one.)

Maybe someone else has a smart idea, let's see.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Wayland app_id

2014-08-14 Thread Robin Burchell
On Thu, Aug 14, 2014 at 8:15 PM, Pier Luigi  wrote:
> This used to be the class in wl_shell_surface and I know the concept
> exists on X11 as well (WMCLASS if I recall).

WM_CLASS I think, but don't quote me, it's been a long, long time
since I've looked into anything X11 related.

... a quick grep+read on qtbase seems to support this theory.

> Now the question is: how can Qt applications set this app_id?
>
> Since app_id should be the same for all xdg surfaces I would propose
> adding an applicationIdentifier property to QGuiApplication.

Why do they have to? Just like WM_CLASS is an internal detail to the
xcb plugin, I'd imagine that this would be an internal detail in
QtWayland.

BR,
Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Cake and eating it too for qDebug printing to system log - https://codereview.qt-project.org/89357

2014-07-11 Thread Robin Burchell
On Fri, Jul 11, 2014 at 11:13 AM, Hunger Tobias  wrote:
> I see why you would want journal data in your output, but I do see a
> problems making that work for remote debugging/running. Even sailfish is
> apparently forcing output to stderr when starting applications on-device
> via Qt Creator.

Don't let our existing solution limit you. There may be better
solutions, we were time-constrained, and now resource-constrained
(i.e. we have to pick and choose what we put effort into..) so we
haven't looked into changing this any more, as far as I know.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Cake and eating it too for qDebug printing to system log - https://codereview.qt-project.org/89357

2014-07-10 Thread Robin Burchell
On Wed, Jul 9, 2014 at 11:43 PM, Thiago Macieira
 wrote:
> == Problematic ==
> Qt 5.3 and dev are currently able to send the output of qDebug, qWarning and
> the rest of the logging framework to somewhere other than stderr. That's done
> on Windows, BlackBerry, Android, and on Linux systems with journald.
> Additionally, there's a pending patch for OS X to use the Apple System Log [5]
> and I had a patch for MeeGo that made it go to the standard Unix syslog.
>
> We have a problem of wanting a cake and eating it too:
>
> 1) we want applications to send their logging to the system log where
> possible, which usually logs more information like the log level, time,
> application name and PID. Such a system is searchable and may allow us to add
> additional information, like the category (for category logging), file name,
> line number, function context, etc.
>
> 2) we also want to see the output when we run applications from the terminal
> or capture the output with QProcess.
>
> The absence of output causes bug reports like [2] and [4].

Let me explain why I implemented the journald-logging support the way I did.

Some background: on Sailfish, we launch all major system services (and
UI) through systemd services (& user session for the UI parts). Those
processes may then choose to execute processes of their own (the most
prominent example being the UI environment which will launch
applications in response to user input). With a default setup, systemd
will log everything sent to stderr of systems-launched processes, and
child-launched processes will have their stderr output attributed to
the systemd service which launched them.

I implemented support for this because the situation as described
above is frankly unusable for us. Output was wrongly attributed to
parent processes, which made tracking down the real source of a
problem interesting at times. The other stuff we got (like categorized
warnings, a globally usable log - to view whole system effects of
things - etc, are just icing on the cake)

I wanted to send all non-interactive logging output to systemd.
Interactive output (such as running things by hand) should go to the
console, on the assumption that there is someone actively monitoring
the other end (hence the console check).

I added the environment variable workaround after this very problem
(QtCreator output) came in in Sailfish. We then adapted our Creator
setup to set the environment variable:

https://github.com/sailfish-sdk/sailfish-qtcreator/commit/cc880444b433bc3a86305601c1471ffd292c737e
https://github.com/sailfish-sdk/sailfish-qtcreator/commit/34c8fcf9d8f749796a7f43fb52997c43f286c480


> == Solutions ==
> === Heuristically determine at runtime where to send the log ===
> Which is what I'm trying to do above.
>
> On Windows, we check whether we have a console and whether stderr is not NUL.
>
> On Unix, I have implemented the same checks.
>
> We can also use the fact of whether the main application is in debug mode or
> not.

I think this is the nicest option, as said above. I may be biased, in
that I wrote the initial implementation for journal logging :-)

That having been said, as with all heuristics, I think we should
strive to make them as simple as possible, otherwise they're going to
become non-obvious.

My vote would be to just have the correct environment variable
injected. It's our knob to customize this behavior already. It's our
knob, and we're also responsible for the behavior of it, so why not
make use of it? I understand the knee-jerk reaction to modify
application \environment, but we're talking about Qt changing Qt's
behavior through a public environment variable here, not rocket
science, KILL_ALL_HUMANS, LD_PRELOAD, or anything scary
.
BR,
Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Enginio build artifacts and naming conventions

2014-05-28 Thread Robin Burchell
On Wed, May 28, 2014 at 11:19 PM, Mathias Hasselmann
 wrote:
> As a side note: A similar problem exists for the messaging framework
> libraries (QMF). Its library names are:

There's renames for that planned, but not yet executed. See the
archives for my original mail on the subject.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Question about Qt's future

2014-04-23 Thread Robin Burchell
Hi,

On 23 Apr 2014, at 14:14, cincirin  wrote:

Sorry for re-open this topic, but as someone else already pointed out,
what do you think about the Unreal engine guys to abandon the unreal
script which was used until now for many years ?


I don’t think this topic is really suited for this list, but I’ll answer it
anyway because why not.

To give some background about myself: I’ve been around Qt for a while,
actively developing with it since - I think - around 4.4, but I have also
had exposure to code a lot older than that. I’ve been involved with
developing two phones (one with C++ as the primary language of choice for
the system applications - the Nokia N9) and more recently I’ve been working
on Jolla’s Sailfish OS - which is a QML-centric (but not exclusive)
platform, with most middleware and logic (that is - the real guts) written
in C++.

My feeling is that QML has exactly the flaws everyone talks about: it can
easily create a mess of an application, it’s annoying to tool, it’s
annoying to debug (because, well, you’ve two languages / runtimes / etc
instead of one).

On the other hand, it’s also one of the fastest things I’ve ever found to
prototype UIs in (for context, the initial home screen code prototyping I
mention on https://twitter.com/w00teh/status/447041014520643584 happened
literally in one day). We had similar stories with most of our other
applications, being fleshed out in UI within a very short span of time,
with a lot more time then subsequently being spent in getting the
middleware in good shape and bolted together correctly.

Having a language runtime that isn’t C++ also frees you up from a few of
the usual messes (access-after-free, etc, etc, etc) and generally means
that the problems you get to debug are on a more superficial level. Unless
you run into engine or Quick item implementation issues, which sadly aren’t
yet as infrequent as I’d like - but it’s young. Give it time.

The central point I guess I’m trying to make here is that, like any other
tool, QML has its downsides, and as a developer, it is your job to be aware
of those downsides, and to try to stick to best practices when writing your
application. It’s perfectly possible to write a horribly unmaintainable
mess in any tool/language, given a bad developer. I think the tradeoffs are
worth the risks, even though I’ve seen a few of those horribly
unmaintainable messes already in QML’s short lifespan.

BR,
Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Proposing Valerio Valerio (VDVsx) for Approver rights to messagingframework

2014-03-24 Thread Robin Burchell
On Thu, Jan 23, 2014 at 8:48 AM, Thiago Macieira
 wrote:
> On quinta-feira, 23 de janeiro de 2014 07:37:14, Knoll Lars wrote:
>> On 23/01/14 00:32, "Thiago Macieira"  wrote:
>> >However, knowing Valerio from the past, I would be ok with giving him
>> >approver
>> >rights throughout.
>>
>> +1 (including the last sentence).
>
> Ok, so Valerio is now on the regular 3-week period for approvership.

Which has long since expired, so congrats to Valerio :)
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Proposal: "rebranding" QMF as QtMail

2014-02-17 Thread Robin Burchell
On Mon, Feb 17, 2014 at 1:41 AM, Sze Howe Koh  wrote:
>>> The repository is currently comprised of two main libraries:
>>> QmfMessageServer and QmfClient. I would propose:
>>>
>>> QmfClient => QtMail
>>> QmfMessageServer => QtMessageServer
>>>
>>> Classes in QMF are already using the QMail* prefix.
>>>
>>> Any objections?
>>
>> +1
>
> +1 for renaming, to avoid confusion (people might mistake them for
> "QML Client" or "QML Message Server")
>
> To make the relationship between the 2 libraries more obvious, I'd
> give them similar names (e.g. "QtEmailClient" and "QtEmailServer").

I was kind of deliberately avoiding the "Email" name due to awkward
capitalisation, I also think that "Mail" is sufficiently clear in an
IT context. I wouldn't expect to find a Qt API for postal mail, after
all. :-)

You're right that it should probably be QtMailMessageServer, though.

> How big are the libraries? If they're small, what do you think of
> merging them into one library?

I think there is value in keeping them split. The message server
library is something that I personally think of as more of an
implementation detail. It's used to implement plugins for the
messageserver binary, not mail client tools. That's rather a limited
goal/audience compared to the main library.

BR,
Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Proposal: "rebranding" QMF as QtMail

2014-02-17 Thread Robin Burchell
Hi,

Sorry for the delay in replying.

On Mon, Feb 10, 2014 at 6:34 PM, Konstantin Ritt  wrote:
>> QmfClient => QtMail
>> QmfMessageServer => QtMessageServer
> Two modules in one repo (aka QT += mail messageserver), right?

Yes. Same situation as it is now.

> BTW, are you planning an API review/refactoring for it?

I personally feel that some changes are in order (e.g. dropping the
custom logging solution in favour of category logging, but I'd like to
wait with that until Sailfish has moved to 5.2 in the
hopefully-not-too-distant-future); another thing I don't really like
is that protocol plugins define a UI for creating & editing accounts
(thus tying them to QtWidgets, and also being rather unnecessary given
that platform tie-in probably means not using the built-in UI anyway.
I'd like to separate those to an account configuration tool, I think,
somehow).

I should probably start creating JIRA items.



If you have proposals for other changes, I'm open to hearing about
them. In general, I don't think most of the usability of the API is a
problem apart from a few occasional trouble points, but different
perspectives are always interesting.

BR,
Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] Proposal: "rebranding" QMF as QtMail

2014-02-10 Thread Robin Burchell
Hello folks,

After some build system reworking recently and a little discussion
amongst the interested parties (Matt Vogt, Valerio), I'd like to
propose renaming QMF (Qt Messaging Framework) to QtMail with the
longer term goal of making it a module of Qt properly - no longer a
labs project.

QMF's naming is historical: QMF originally handled other types of
messages than purely mail (SMS/MMS also, for instance). This has not
been the case for quite some time - QMF now handles *only* email, so
this renaming makes the whole thing sound a bit less meta and less
awkward.

The repository is currently comprised of two main libraries:
QmfMessageServer and QmfClient. I would propose:

QmfClient => QtMail
QmfMessageServer => QtMessageServer

Classes in QMF are already using the QMail* prefix.

Any objections?

BR,
Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] Proposing Valerio Valerio (VDVsx) for Approver rights to messagingframework

2014-01-22 Thread Robin Burchell
Hello,

I'd like to propose Approver rights for Valerio on messaging framework.

Justification: Valerio has worked on (& with) QMF for a long time, on
both the Nokia N9 and now with us at Jolla on QMF-on-Sailfish. QMF
also doesn't exactly have an abundance of approvers, so especially now
that I'm doing some work at the moment, having an 'extra pair of
hands' able to review would be handy.

Dashboard link: https://codereview.qt-project.org/#dashboard,1001065
(+ the git history for his time before the Gerrit import)

Fulll disclosure: I work with Valerio at Jolla.

BR,
Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] frozen tickets on bugreports.qt-project.org in qt-mobility and qt-components

2014-01-20 Thread Robin Burchell
Hi Alan,

On Mon, Jan 20, 2014 at 11:33 PM, Alan Ezust  wrote:
> Meego is still a "supported" platform, with Jolla and all, right?

While we use a number of components that were part of or have their
roots in MeeGo, Sailfish is a rather different beast, particularly on
the UI level. Think of it as a distant cousin, rather than a direct
offspring. Sailfish uses Qt 5 & QtQuick 2 whereas on the Nokia N9, you
had a Qt 4 / QtQuick 1 stack. Sailfish does not use the components
referred to under QTCOMPONENTS. So I think it's fairly safe to
consider that retired.

BR,
Robin
(one of the Jolla folks, sometimes)
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] [Q] Good way to handle QEvent::DeferredDelete

2013-12-26 Thread Robin Burchell
Hi Elvis,

On 27 Dec 2013, at 03:23, Elvis Lee(KwangWoong Lee) 
wrote:

I’m looking for good way to handle objects which have called deleteLater.
According to what I understood until now, there are 2 ways to handle them.
One is making control return to the event loop. Another is calling
QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete) explicitly.

Actually, for the first way, I couldn’t know what to do exactly in code
level. How to return control to event loop?


Let’s first think about how event based programming works.

A simple event loop might look something like this:

while (application_running) {
  // here we call out to user code
  do_timers_and_stuff();
  do_sockets_and_stuff();
  // here control is back “in the event loop"
  wait_for_something_to_happen();
}

So, your application code will be invoked when there is something to
respond to (an event) - like a timer, socket activity, user input, etc.
When that is done, the control has returned to Qt, and Qt goes back to
sleeping, waiting for new events.

At some point (I’m not sure if it’s defined when - before or after invoking
the user code), Qt processes deferred deletion.

  I feel the control is always on event loop in our module. Does that mean
to exit from event loop in QCoreApplication::exec()?


No. You shouldn’t have to.


So I tried the second way, calling sendPostedEvents explicitly. But I
encountered an obstacle to send the event.
It seems that the function should be called with lower or same ‘loopLevel’
of posted event.
I couldn’t find proper position to call sendPostedEvents except adding glib
function to main event loop. (We are using qeventdispatcher_glib)
Usually where is the good position to call sendPostedEvents with low
loopLevel?

In sum, there are 2 question.
1. What is the natural way to handle deleteLater?
2. Where is a place which is not from QCoreApplication::notifyInternal
so that it has loopLevel ‘1’ to call sendPostedEvents?


If this is related to QtWayland: you may be running into a bug within Qt
which we also hit. See the WIP patch at
https://codereview.qt-project.org/#change,71892. Unfortunately, we haven’t
gotten things fixed for all dispatchers yet, so it isn’t yet merged.

 Thanks.
Elvis.


BR,
Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Nominating Fabian Bumberger for Approver Status

2013-11-19 Thread Robin Burchell
On Tue, Nov 19, 2013 at 6:22 PM, Frederik Gladhorn
 wrote:
> (did you know that improving unit tests is one of the most fun things ever and
> leads to instant fame and glory? you should try it too some day)

http://qtmemes.tumblr.com/post/67517056364/nice-try-fregl
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] QML and JavaScript extensions

2013-11-14 Thread Robin Burchell
On Thu, Nov 14, 2013 at 3:08 PM, Topi Mäenpää  wrote:
> Or rather could, if the interface wasn't a moving target.

If an interface is a moving target, that means that trying to promise
compatibility for it is generally a bad idea.

Once something is made public, you're stuck with it. For a very long
time, and maybe even forever if people get too attached to it. You
can't go back on that, so you need to be very, very sure you'll be
happy with it. As evidenced by the v8 to v4vm change, we aren't there
yet. And once we do expose it, we tie our hands from making future
changes that might be in our benefit.

I understand your pain. The company I work for has also had software
impacted by these changes (we did the QtScript to v8 port over the
summer, we're currently on 5.1, but soon we'll have to look at what
changes we need to make to move to 5.2).

But erring on the side of caution means we can more reliably end up
with something that we're free to keep improving in a backwards
compatible way to the majority of folks, while making the life of the
few inconvenient.

BR,

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] ABI change on arm*, call to distros' maintainers

2013-11-08 Thread Robin Burchell
On Wed, Nov 6, 2013 at 6:01 PM, Lisandro Damián Nicanor Pérez
 wrote:
> In Debian we are considering if the problem of breaking ABI without a soname
> bump is worth the effort for armhf, but it would be also good to try and
> coordinate between distros so as to try to keep binary compatibility between
> us.
>
> What are you thinking about this?

At least from a Sailfish perspective, the change came too late. We
already released our ARM SDK, and as a result, we'll be sticking with
qreal == float (until such time as we can safely make a proper
transition, whenever that will be).

I should probably add that I find it a bit surprising that this change
happened without any real heads-up or warning, given how Qt normally
strives to *not* change ABI.

BR,

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Nominating Gatis Paeglis as approver

2013-10-24 Thread Robin Burchell
+1

On Thu, Oct 24, 2013 at 8:50 PM, Frederik Gladhorn
 wrote:
> Hi,
>
> I'd like to nominate Gatis as approver. He has been with us in the Digia Oslo
> office for quite some time now. Gatis fixed many input/key handling and XCB
> issues and started looking at sensors lately.
>
> Patches by Gatis:
> https://codereview.qt-project.org/#q,owner:gatis.paeglis%2540digia.com,n,z
> Gatis as reviewer:
> https://codereview.qt-project.org/#q,reviewer:gatis.paeglis%2540digia.com,n,z
>
> Cheers,
> Frederik
>
>
> --
> Best regards,
> Frederik Gladhorn
> Senior Software Engineer - Digia, Qt
> Visit us on: http://qt.digia.com
>
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Nominating Andrew Knight (aknight) for Approver

2013-09-19 Thread Robin Burchell
And today marks weekday 15 since the proposal, with no negative
comments. I guess that means it's time to congratulate Andrew.

Can someone please grant the necessary JIRA/Gerrit rights?

Thanks,

Robin


On Fri, Aug 30, 2013 at 1:37 PM, Robin Burchell  wrote:
> Hello,
>
> I'd like to nominate aknight for approver status. Andrew has been
> doing some solid work that I've noted in QtWayland (and with wayland
> in general), and also appears to have some solid knowledge of Windows
> from his dashboard:
> https://codereview.qt-project.org/#dashboard,1001190. Also useful:
> https://codereview.qt-project.org/#q,status:closed+owner:%2522andrew+knight%2522,n,z
>
> Andrew is responsive on IRC and helpful during code review/discussion,
> so I think he'd be an asset.
>
> Anyone willing to second?
>
> BR,
>
> Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] More on QDateTime / QTimeZone

2013-09-12 Thread Robin Burchell
On Thu, Sep 12, 2013 at 9:24 PM, Knoll Lars  wrote:
> We might be able to simply cache the time zone offset once and cache it.
> Then it should be at the same speed.

This would also probably provide hidden wins in various places, making
changes like b9ef4a9c3047228ec007ac81ff0a304f8cc274b7 in qtbase
unnecessary. I'd like to see this for that reason :)
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] CI false positive.

2013-09-09 Thread Robin Burchell
On Mon, Sep 9, 2013 at 3:21 PM, BogDan  wrote:
> I'm trying to stage this https://codereview.qt-project.org/#change,64292 
> patch, but CI complains that 2 files don't contain "a license header". But 
> I'm pretty sure they do.

At a guess, they are there, but aren't valid. Date ranges aren't
allowed by the license check script. There's a bug about this
somewhere in bugreports, but I don't have the time to go looking at
the moment.

BR,

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Nominating Thorbjørn Martsum (ThorbjornTux) as approver

2013-08-30 Thread Robin Burchell
+2 :)

(and sorry, Steve, this time to the ML)

On Fri, Aug 30, 2013 at 3:05 PM, Stephen Kelly  wrote:
>
> Hello,
>
> I'd like to nominate Thorbjørn for approver status. Thorbjørn has been
> contributing to Qt for almost two years, and has been quite active in the last
> year in submitting patches and reviewing other patches.
>
>  https://codereview.qt-project.org/#dashboard,1000708
>  https://codereview.qt-project.org/#q,reviewer:tmartsum,n,z
>
> His reviews are thorough, and often catch issues, he's often on IRC and
> responsive and friendly. He has made a lot of great quality patches in
> itemviews, particularly in QHeaderView and other widgets, as well as more
> recent work on the container classes in Qt.
>
> Any seconds?
>
> Thanks,
>
> --
> Join us in October at Qt Developer Days 2013 - https://devdays.kdab.com
>
> Stephen Kelly  | Software Engineer
> KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company
> www.kdab.com || Germany +49-30-521325470 || Sweden (HQ) +46-563-540090
> KDAB - Qt Experts - Platform-Independent Software Solutions
> ___
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
>
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] Nominating Andrew Knight (aknight) for Approver

2013-08-30 Thread Robin Burchell
Hello,

I'd like to nominate aknight for approver status. Andrew has been
doing some solid work that I've noted in QtWayland (and with wayland
in general), and also appears to have some solid knowledge of Windows
from his dashboard:
https://codereview.qt-project.org/#dashboard,1001190. Also useful:
https://codereview.qt-project.org/#q,status:closed+owner:%2522andrew+knight%2522,n,z

Andrew is responsive on IRC and helpful during code review/discussion,
so I think he'd be an asset.

Anyone willing to second?

BR,

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] Tracing Qt

2013-08-23 Thread Robin Burchell
Hi,

(apologies in advance for the wall of text)

It's inevitable when working with Qt that sooner or later, you
probably have a desire to work on tracing Qt - or at least part of it.
Qt Creator's QML profiler is one such very prominent example of an
area where this may be useful, but there are many others: usually
sprinkled around Qt hidden behind various defines, environment
variables, and other hard-to-find places. This makes digging into a
problem somewhat hard, unless you are (or can be handheld by) a Qt
expert when you start digging.

It's also a bit of a problem in that each of these methods uses
different ways to communicate information, meaning it is difficult to
write tooling to inspect this data and visualise it. We also miss out
on tracing in a number of areas that *could* potentially be valuable,
such as touch event processing, the event loop, the sky's the limit.

Thanks to Carsten and Andre for their input in hashing the details of
this proposal out.

Proposal


Let's look at unifying tracing inside Qt. Let's add code to Qt itself
to enable easy introspection of what exactly is going on.

When looking at tracing, it can be boiled down into two levels - an
area (which may be a feature being inspected, or a subsystem - for
instance, QML performance, vsync timestamps, ...) containing events,
so from this, we can gather that we need a way to categorise logging
by area, and the capability to switch logging on by area.

An area should be associated with a simple numeric identifier to avoid
expensive code when manipulating events, but there will be some form
of name => id mapping (for the environment variable below, for
instance).

Suggested area-based API:
enum TraceArea {
TraceAreaDrawing (drawing event, frame event)
... other areas as required
TraceAreaUser = 1000 // held for possible future expansion into
allowing dynamic area registration
}

QT_ENABLE_TRACE=inputevents,frameevents,magicalmonkeyevents
rationale: providing system-wide defaults enables tracing of
system-wide behaviour is very useful. Being able to inspect exactly
what an entire set of Qt-based applications are doing while a user is
interacting with it would be a useful thing.

enable_trace(TraceArea area)
disable_trace(TraceArea area)
rationale: a developer may want to turn tracing of an individual area
on/off at runtime, as they start something they are particularly
interested in tracing. This has some inspiration in
CALLGRIND_START_INSTRUMENTATION/CALLGRIND_STOP_INSTRUMENTATION also.

Along with this user-facing API, we also need some mechanism to enable
different applications of the tracing data (for instance, the QML
profiler from Creator, Android's systrace
https://developer.android.com/tools/help/systrace.html, plain console
logging, etc). Multiple tracers should be able to handle a single
area. Tracers would live in seperate plugins.

Example tracer API:
class QTracer { virtual void logStart() = 0; virtual void logEnd() = 0; }

QTracer subclasses would register their interest in a particular event
type on construction:

struct MyCoolConsoleTracer : public QTracer {
MyCoolConsoleTracer() : QTracer() {
q_register_tracer_for_area(this, TraceAreaDrawing); // we are
interested in this particular event type
}

virtual void logStart() {
qDebug() << "Trace event for drawing, start: " <<
QDateTime::currentMSecsSinceEpoch()
}
virtual void logEnd() {
qDebug() << "Trace event for drawing, end: " <<
QDateTime::currentMSecsSinceEpoch()
}
};

The invocation of tracer subclasses is controlled by a simple RAII class:

struct QTraceEvent {
QTraceEvent(TraceArea area); // invokes logStart on all interested tracers
~QTraceEvent(); // invokes logEnd on all interested tracers
}

Example use being something like:

void draw() {
QTraceEvent e(TraceAreaDrawing);
// do painting
paintOnScreen();
}

Thoughts, flames, cookies?

BR,
Robin
(with jolla hat on)
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Enabling -Werror developer builds

2013-08-20 Thread Robin Burchell
On Tue, Aug 20, 2013 at 12:14 AM, Thiago Macieira
 wrote:
> Right now, I've got most modules compiling with -Werror with GCC 4.7. I'd like
> to start adding the CONFIG to enable the flag.
>
> Objections?

One potential problem I see (I haven't looked at your changes, sorry,
holiday and lack of time) - is in the behavior of dependencies. Say
that something in qtbase is deprecated, but not yet removed from all
submodules (due to a lack of urgency, proliferation of use, whatever)
--- that will then block the build of the submodules, but not qtbase.

Maybe -Wno-error=deprecated would be a good idea?
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] PSA: Qt Project IRC logs & statistics

2013-05-03 Thread Robin Burchell
On Thu, May 2, 2013 at 9:40 PM, Alan Alpert <4163654...@gmail.com> wrote:
> Given those guidelines, our possible answers are either "No (i.e.
> there is no permission given for public logging)" or "list it in the
> channel topic for logged channels (and possibly leave some channels
> deliberately unlogged)".
>
> I'm personally in favor of the latter, because the free flow of
> information is generally useful to open projects (and this is *not*
> sensitive personal data).

This pretty much sums up the reasoning for why I've been doing this
all along. Some knowledge is passed down through IRC (and
unfortunately not recorded elsewhere). Having the ability to find that
again when required is often an invaluable resource. As a very simple
example, #qt-labs a long time ago is where I learned about memory
barriers and reordering. The same can be said about #qt -- the primary
purpose of most people going there is to learn, and to ask
questions/help each other, and what better way to do that than helping
to retain a collective memory?

I do think that having an archive of discussion of useful topics like
that in general is invaluable, just like a mailing list archive, a VCS
commit log, etc.

BTW: I had the same concerns pointed out to me privately, which is why
the logs are offline again at the moment until I can take the time to
remove information that isn't of interest to the project such as IP
addresses. I haven't had the time to do this, or to send mails about
this, until now, but I do agree with removing it. It isn't technically
or socially useful.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] PSA: Qt Project IRC logs & statistics

2013-04-24 Thread Robin Burchell
Hi,

In addition to hosting qt_gerrit, I have for a very long time
generated IRC statistics for #qt and #qt-labs. These were perhaps not
all that well publicized, but they did exist.

After my recent server outage, obviously, this all got lost. I got
around to restoring it this evening (see http://qt.viroteck.net/irc/),
and I've also published logs for #qt and #qt-labs which I did not do
previously due to laziness. I can do other channels on request (as
usual).

There isn't much there yet, but the statistics are set to
auto-generate at the server's idea of midnight, so checking back in a
few days should give more interesting results, provided I've
remembered how to use crontab correctly.

I've documented both this (and qt_gerrit) at https://qt-project.org/wiki/IRC

Thanks,

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] PSA: qt_gerrit downtime and forgetfulness

2013-04-18 Thread Robin Burchell
On Thu, Apr 18, 2013 at 2:05 PM, Robin Burchell  wrote:
> - he announces gerrit changes in qt_gerrit

Ahem. #qt-gerrit. I shouldn't be trusted with an email client as well
as server management, apparently. :)
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


[Development] PSA: qt_gerrit downtime and forgetfulness

2013-04-18 Thread Robin Burchell
Hi,

A short PSA: qt_gerrit had some downtime this morning (and is now
back, at least in a few channels).

The post mortem: some fat-fingered user of that server hosting
qt_gerrit (i.e. me) made a rather serious mistake that meant the
server needed reinstallation. The code for qt_gerrit was safe (as it's
stored in git), but the configuration file was lost.

This means that if you had qt_gerrit in your channel, he doesn't
remember anymore. If you would like him in there, please ask me.

For those of you who don't know about qt_gerrit:
- he's a bot
- he announces gerrit changes in qt_gerrit (and soon, other channels
on demand, if I ever get around to rewriting that feature - e.g.
jsondb used to send their messages to their development channel)
- he looks up information on JIRA changes if you mention a bug id
- he may do some other fun things as I get ideas and time to implement them

Thanks (& sorry for the inconvenience),

Robin
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Access lazy Models from within QML

2013-03-05 Thread Robin Burchell
On Tue, Mar 5, 2013 at 8:28 AM, Dominik Holland
 wrote:
> Yes this makes sense and it's similar to my solution... But why do you
> need to multiply it with 0.9 ?

To start fetching (hopefully) before the data is really needed. Models
may involve asynchronous access (network etc) which might take a
while.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


  1   2   3   >