Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread Mark Gaiser
On Fri, Jul 17, 2015 at 12:07 PM, André Somers an...@familiesomers.nl
wrote:

 Marc Mutz schreef op 17-7-2015 om 12:21:
 
  What might also be a consideration when making a container like this, is
  that I find the key is often (not always of course) already part of the
  value data structure. For instance, if I store employee records and key
  them by id, that id is also in the record itself. It would be nice to
  have a fast and friendly key-based container that could handle that
  without duplicating the data...
  You can have that with C++11 std::*set, and a custom transparent
 comparator,
  but of course, they are not cache-friendly. But it's testament to the
 value of
  having the ability to _have_ a custom comparator. QFashHash consequently
 has
  that ability, but its a map, not a set, so it won't fit your use-case.
 
 I guess this [1] would work, but that is C++14, not 11. Otherwise, I
 don't quite see how to retreive my Employee record again if I just have
 the id...

 André

 [1] http://en.cppreference.com/w/cpp/container/set/find variants 3 and 4


You can use std::find_if for that on any container.
Works for C++11 and even before that. C++11 gives the benefit of using a
lambda in the std::find_if UnaryPredicate.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread André Somers
Mark Gaiser schreef op 17-7-2015 om 13:44:

 You can use std::find_if for that on any container.
 Works for C++11 and even before that. C++11 gives the benefit of using 
 a lambda in the std::find_if UnaryPredicate.
Sure, but wouldn't that revert you back to a linear search? That sounds 
like getting the worst of both worlds: using a complicated red/black 
tree data structure and then iterating over it lineary to find an item 
that I could have found using the structure itself in logarithmic 
time... Or am I overlooking some very clever specialization in the 
find_if algorithm then?

André

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


Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread Mark Gaiser
On Fri, Jul 17, 2015 at 2:13 PM, André Somers an...@familiesomers.nl
wrote:

 Mark Gaiser schreef op 17-7-2015 om 13:44:
 
  You can use std::find_if for that on any container.
  Works for C++11 and even before that. C++11 gives the benefit of using
  a lambda in the std::find_if UnaryPredicate.
 Sure, but wouldn't that revert you back to a linear search? That sounds
 like getting the worst of both worlds: using a complicated red/black
 tree data structure and then iterating over it lineary to find an item
 that I could have found using the structure itself in logarithmic
 time... Or am I overlooking some very clever specialization in the
 find_if algorithm then?

 André


Yes, that would give you linear search indeed.
Guess you have to use that C++14 function then :)
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread Marc Mutz
On Thursday 16 July 2015 23:09:55 Gunnar Roth wrote:
 So I deduce from this test that for a container with up to 100 elements ,
 std::vector is the best choice , if you want fastest lookup, but Vector
 should be avoided. For larger container QHash should be used for best
 lookup performance.

It is not surprising that big-O _eventually_ wins. The point is that that 
eventually != always. Few collections in Qt will have more than 100 
elements, and then, not all the time.

Binary search is not very cache-friendly, because it exhibits a semi-random 
memory access pattern that the hardware has trouble predicting.

If you want to see what I and others mean when we say that the node-based 
containers are slow, iterate over the containers. Search in large collections 
is what hash tables and rb-trees are optimized for, and of course they 
eventually win, with ever larger collections. But most collections are also 
iterated over, and then you better not have a node-based container in front of 
you if you do.

Related: there's a similar benchmark to yours, container_benchmark.cpp by 
Stroustrup and Stepanov, which performs duplicates removal using different 
containers. It hasn't been updated since 2003, but it's easy to add new tests. 
I already posted a link in this thread, but google will find it, too.

I've attached my local version, which includes some Qt containers.

Thanks,
Marc

-- 
Marc Mutz marc.m...@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH  Co.KG, a KDAB Group Company
Tel: +49-30-521325470
KDAB - The Qt Experts
/* Standard Container Benchmark 


   Version 0.9, May 23, 2003 


The primary purpose of this benchmark is to show how different standard 
containers are in terms of performance. We have observed that programmers 
often use sets, multisets, deques in the situations where sorted vectors 
are the optimal solutions. Similarly, programmers often choose lists simply 
because they do a few insertions and deletions without knowing that vectors 
are more efficient at that for small containers. 


Frequently, of course, performance does not matter, 
but it is important that programmers are aware of the consequences of their 
choices. We are not saying that only vectors should be used, there are 
cases when one really needs a more complicated data structure, but one needs to 
understand the price for additional functionality. 


The secondary purpose of the benchmark is to encourage compiler and library vendors to 
keep improving performance. For example, it is not acceptable that some compilers give 
you a sizable penalty for using vector iterators instead of pointer. It is also quite 
clear that  performance of other standard containers could be improved. 


The benchmark is doing the same task 7 times using different data structures: 
array, vector (using a pointer as iterator), vector (using the defailt cector iterator), 
list, deque, set and multiset. The task is to remove duplicates from a sequence of doubles. 
This is a simple test, but it illustrates the performance of containers. 


It is clear that the benchmark needs to be eventually extended 
to slists and even to hash-sets and hash-maps, but we decided that at present it 
should work only with the standard containers. As the standard grows, so can 
the benchmark. The additional benefit of not including hash based containers is 
that now all the test have identical asymptotic complexity and, even more 
importantly, do almost the same number of comparisons. The difference is only 
in data structure overhead and cache behavior. 


The number of times that a given test is run inversly proportional to NlogN where N is the 
size of the sequence.  This allows one to see how containers of different size behave. 
The instructive values used for the benchmark are: 10, 100, 1000, 1, 10, 100. 


The time taken for a run of the benchmark depends on the machine used, the compiler used, 
the compiler and optimizer settings used, as well as the standard library. Please note that 
the time taken could be several minutes - and much more if you use a slow debug mode. 


The output is a table where columns are separated by tabs and rows by newlines. This is 
barely ok for a human reader, but ideal for feeding into a program, such as a spreadsheet 
for display or analysis. 


If you want to add your own test of a container, add the name of your container to 
the header string, write a test function like the existing ones, e.g. vector_test, 
and add a call of run for your test in run_tests. 


Alex Stepanov 
stepa...@adobe.com 


Bjarne Stroustrup 
b...@cs.tamu.edu 


*/ 


#include stddef.h   // some older implementations lack cstddef 
#include time.h 
#include math.h 
#include stdlib.h 


#include vector 
#include QVector
#include algorithm 
#include list 
#include QList
#include QLinkedList
#include deque 
#include set 


#include iostream 
#include iomanip 


typedef double element_t; 


using namespace std; 


vectordouble 

Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread Marc Mutz
On Thursday 16 July 2015 23:09:55 Gunnar Roth wrote:
  About QFastHash: that is WIP. It's the very rudimentary beginnings of an
  open- addressing hash container (a hash container using consecutive
  memory, not nodes).
 
  
 
 What was the idea behind it? Is so much slower than any other that I can
 just see why anyone should want to have this? What is the advantage?

The idea is to implement https://en.wikipedia.org/wiki/Open_addressing with 
linear probing, which theoretically should be more cache friendly than a node-
based container (less memory overhead, cache-friendly probing).

But I separated key and values into different containers, so even at optimum, 
you get two cache hits instead of one with QHash. As Ossi pointed out in the 
review, that's probably a pessimisation unless you have a very loaded 
container. Likewise, OptionalT, required to mark entries as empty or 
occupied, isn't optimized at all. all but doubling the space required for most 
keys because of the pairing with a bool.

As I said, it's WIP.

-- 
Marc Mutz marc.m...@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH  Co.KG, a KDAB Group Company
Tel: +49-30-521325470
KDAB - The Qt Experts
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread André Somers
Marc Mutz schreef op 17-7-2015 om 11:09:
 On Thursday 16 July 2015 23:09:55 Gunnar Roth wrote:
 About QFastHash: that is WIP. It's the very rudimentary beginnings of an
 open- addressing hash container (a hash container using consecutive
 memory, not nodes).


 What was the idea behind it? Is so much slower than any other that I can
 just see why anyone should want to have this? What is the advantage?
 The idea is to implement https://en.wikipedia.org/wiki/Open_addressing with
 linear probing, which theoretically should be more cache friendly than a node-
 based container (less memory overhead, cache-friendly probing).

 But I separated key and values into different containers, so even at optimum,
 you get two cache hits instead of one with QHash. As Ossi pointed out in the
 review, that's probably a pessimisation unless you have a very loaded
 container. Likewise, OptionalT, required to mark entries as empty or
 occupied, isn't optimized at all. all but doubling the space required for most
 keys because of the pairing with a bool.

 As I said, it's WIP.

What might also be a consideration when making a container like this, is 
that I find the key is often (not always of course) already part of the 
value data structure. For instance, if I store employee records and key 
them by id, that id is also in the record itself. It would be nice to 
have a fast and friendly key-based container that could handle that 
without duplicating the data...

André

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


Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread Marc Mutz
On Friday 17 July 2015 11:02:08 André Somers wrote:
 Marc Mutz schreef op 17-7-2015 om 11:09:
  On Thursday 16 July 2015 23:09:55 Gunnar Roth wrote:
  About QFastHash: that is WIP. It's the very rudimentary beginnings of
  an open- addressing hash container (a hash container using consecutive
  memory, not nodes).
  
  What was the idea behind it? Is so much slower than any other that I can
  just see why anyone should want to have this? What is the advantage?
  
  The idea is to implement https://en.wikipedia.org/wiki/Open_addressing
  with linear probing, which theoretically should be more cache friendly
  than a node- based container (less memory overhead, cache-friendly
  probing).
  
  But I separated key and values into different containers, so even at
  optimum, you get two cache hits instead of one with QHash. As Ossi
  pointed out in the review, that's probably a pessimisation unless you
  have a very loaded container. Likewise, OptionalT, required to mark
  entries as empty or occupied, isn't optimized at all. all but doubling
  the space required for most keys because of the pairing with a bool.
  
  As I said, it's WIP.
 
 What might also be a consideration when making a container like this, is
 that I find the key is often (not always of course) already part of the
 value data structure. For instance, if I store employee records and key
 them by id, that id is also in the record itself. It would be nice to
 have a fast and friendly key-based container that could handle that
 without duplicating the data...

You can have that with C++11 std::*set, and a custom transparent comparator, 
but of course, they are not cache-friendly. But it's testament to the value of 
having the ability to _have_ a custom comparator. QFashHash consequently has 
that ability, but its a map, not a set, so it won't fit your use-case.

-- 
Marc Mutz marc.m...@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH  Co.KG, a KDAB Group Company
Tel: +49-30-521325470
KDAB - The Qt Experts
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread Tomasz Siekierda
On 17 July 2015 at 11:02, André Somers an...@familiesomers.nl wrote:
 But I separated key and values into different containers, so even at optimum,
 you get two cache hits instead of one with QHash. As Ossi pointed out in the
 review, that's probably a pessimisation unless you have a very loaded
 container. Likewise, OptionalT, required to mark entries as empty or
 occupied, isn't optimized at all. all but doubling the space required for 
 most
 keys because of the pairing with a bool.

 As I said, it's WIP.

 What might also be a consideration when making a container like this, is
 that I find the key is often (not always of course) already part of the
 value data structure. For instance, if I store employee records and key
 them by id, that id is also in the record itself. It would be nice to
 have a fast and friendly key-based container that could handle that
 without duplicating the data...

Woah, a big +1 to that!
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Request to delete libibusplatforminputcontextplugin.so from qtbase

2015-07-17 Thread Sune Vuorela
On 2015-07-17, Takao Fujiwara tfuji...@redhat.com wrote:
 Right. ibus-qt already has the ibus module for qt4 so this request is for qt5.
 I'd think it's easy to move libibusplatforminputcontextplugin.so from qtbase 
 to ibus-qt.

Part of me would like to have as many things that uses QPA headers to
stay inside Qt because unstable api's.

And then I'm not sure if there might be licensing issues for various
users with moving it from lgpl Qt to GPL ibus-qt, or if enough of ibus
is GPL that you can't take advantage of the l in lgpl anyways.

/Sune

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


Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread Marc Mutz
On Friday 17 July 2015 11:18:06 Marc Mutz wrote:
 On Friday 17 July 2015 11:00:49 Marc Mutz wrote:
 [...]
 
  I've attached my local version, which includes some Qt containers.
 
 [...]
 
 That version was some bitrot. Here's the one that works. It also varies the
 number of duplicates to be removed.

The exact operation performed is

  sort | uniq

 This kind of benchmark, together with a nice visualisation, and more use-
 cases, is what I'd wish we had for our users.

Here are the results of running it on a Core-i7 Sandy Bridge pinned at 2.4GHz, 
formatted as HTML. Excesss dups of 1 means no duplicates, 100 means 99% 
dups.

It is instructive to look at the memory consumption, because the size printed 
is the size of the *reduced* container, so the largest container size is 100 
million elements, 1% of which are unique, 99% dups. That's 800M in vector, 
qlist, qvector, deque, but _a lot_ more in std::list (2400M + allocator 
overhead, on my machine 3.8G of resident memory), set, and multiset (3200M + 
allocator overhead, on my machine 5.2G). Conseqently, don't run this without 
at least 6G of RAM or reduce the max. working set size.

As you can see, the only algorithm that can hold up with 
std::vector+std::sort+std::uniue is QSet+QList+std::osrt, but only at very 
high number of duplicates (starts here for some medium sizes and 90% dups), 
and even at its best, it's only 3x faster than std::vector, while it can be 
an order of magnitude slower. I find it particularly interesting that at 
100'000 elements and 99% dups, it's almost as slow as std::vector, and at 
1'000'000 elements, slower again.

-- 
Marc Mutz marc.m...@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH  Co.KG, a KDAB Group Company
Tel: +49-30-521325470
KDAB - The Qt Experts
Title: Container Benchmark

excess elements:1sizearrayvector with pointersvector with iteratorsqvector with pointersqvector with iteratorsdequelistqlistsetqset->qlistmultiset
100.070.070.070.110.120.180.510.140.380.710.42
1000.030.040.030.050.050.080.260.070.240.390.24
1.050.040.060.060.060.110.260.070.290.340.31
10.100.100.110.100.110.140.300.120.350.370.38
100.100.100.110.110.110.130.420.120.490.370.52
1000.100.100.100.110.110.130.590.270.840.820.93
excess elements:2sizearrayvector with pointersvector with iteratorsqvector with pointersqvector with iteratorsdequelistqlistsetqset->qlistmultiset
100.320.140.160.200.210.311.040.310.510.900.92
1000.060.070.070.100.100.160.560.140.310.490.58
1.180.180.180.200.200.290.590.240.490.450.71
10.230.220.240.240.240.300.680.260.630.430.85
100.220.220.220.230.230.291.080.260.860.431.37
1000.220.210.230.220.220.281.260.591.570.932.03
excess elements:5sizearrayvector with pointersvector with iteratorsqvector with pointersqvector with iteratorsdequelistqlistsetqset->qlistmultiset
100.700.310.320.470.460.692.510.700.791.402.65
1000.190.200.210.270.260.441.720.390.720.732.10
1.590.590.610.650.640.841.670.741.070.622.15
10.620.610.630.640.640.791.910.721.410.572.58
100.570.580.610.600.600.754.360.722.130.704.98
1000.570.590.590.600.590.733.841.643.871.136.27
excess elements:10sizearrayvector with pointersvector with iteratorsqvector with pointersqvector with iteratorsdequelistqlistsetqset->qlistmultiset
100.570.560.620.850.861.355.251.351.263.525.85
1000.480.480.670.630.631.293.930.921.661.115.03
10001.251.261.281.341.411.713.801.542.010.915.28
11.221.221.271.281.271.574.911.432.740.806.68
101.151.301.201.191.231.4810.331.484.101.1912.14
1001.161.161.201.201.191.469.123.488.251.7714.79
excess elements:20sizearrayvector with pointersvector with iteratorsqvector with pointersqvector with iteratorsdequelistqlistsetqset->qlistmultiset
101.271.241.321.821.822.9511.372.902.414.0013.50
1002.012.022.082.332.293.498.762.953.451.8911.49
10002.572.572.662.742.753.438.823.193.861.4512.25
12.402.552.672.512.503.1013.953.045.401.3118.18
102.492.322.442.572.422.9924.503.088.492.2230.31
1002.332.352.442.412.562.9319.677.2815.493.0034.36
excess elements:50sizearrayvector with pointersvector with iteratorsqvector with pointersqvector with iteratorsdequelistqlistsetqset->qlistmultiset
103.563.503.514.854.857.3132.097.836.608.5441.65
1006.616.626.697.387.319.7324.608.838.824.4333.47
10006.596.606.786.936.948.6425.688.049.392.9637.02
16.076.076.316.486.518.2055.037.2713.432.8263.57
106.236.086.316.426.438.0073.258.1820.725.9494.72
1005.855.996.246.006.157.4156.9520.3538.707.04106.47
excess elements:100sizearrayvector with pointersvector with iteratorsqvector with pointersqvector with iteratorsdequelistqlistsetqset->qlistmultiset
108.418.367.7110.6010.5817.4870.8216.3717.7816.2092.57
10014.0614.0414.3515.3615.3420.0656.3218.5217.848.4380.50
100012.7812.8013.2113.4513.4416.9062.4715.6618.655.5391.59
112.2012.1912.6212.7412.7315.81137.6014.7026.425.55162.82
1012.1012.0912.5512.4512.4615.29166.1616.0939.9611.18225.32

Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread Marc Mutz
On Friday 17 July 2015 12:07:22 André Somers wrote:
 Marc Mutz schreef op 17-7-2015 om 12:21:
  What might also be a consideration when making a container like this, is
  that I find the key is often (not always of course) already part of the
  value data structure. For instance, if I store employee records and key
  them by id, that id is also in the record itself. It would be nice to
  have a fast and friendly key-based container that could handle that
  without duplicating the data...
  You can have that with C++11 std::*set, and a custom transparent
  comparator, but of course, they are not cache-friendly. But it's
  testament to the value of having the ability to _have_ a custom
  comparator. QFashHash consequently has that ability, but its a map, not
  a set, so it won't fit your use-case.
 
 I guess this [1] would work, but that is C++14, not 11. Otherwise, I
 don't quite see how to retreive my Employee record again if I just have
 the id...
 
 André
 
 [1] http://en.cppreference.com/w/cpp/container/set/find variants 3 and 4

Yes, I meant those. Sorry, I thought they were C++11.

-- 
Marc Mutz marc.m...@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH  Co.KG, a KDAB Group Company
Tel: +49-30-521325470
KDAB - The Qt Experts
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Container benchmark was HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

2015-07-17 Thread André Somers
Marc Mutz schreef op 17-7-2015 om 12:21:

 What might also be a consideration when making a container like this, is
 that I find the key is often (not always of course) already part of the
 value data structure. For instance, if I store employee records and key
 them by id, that id is also in the record itself. It would be nice to
 have a fast and friendly key-based container that could handle that
 without duplicating the data...
 You can have that with C++11 std::*set, and a custom transparent comparator,
 but of course, they are not cache-friendly. But it's testament to the value of
 having the ability to _have_ a custom comparator. QFashHash consequently has
 that ability, but its a map, not a set, so it won't fit your use-case.

I guess this [1] would work, but that is C++14, not 11. Otherwise, I 
don't quite see how to retreive my Employee record again if I just have 
the id...

André

[1] http://en.cppreference.com/w/cpp/container/set/find variants 3 and 4

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


Re: [Development] Request to delete libibusplatforminputcontextplugin.so from qtbase

2015-07-17 Thread Knoll Lars
Can you explain what the advantage of moving it out would be?

The ibus input context was originally developed by me when we ported from Qt 4 
to Qt 5. I tried to implement it with a minimum set of dependencies. It's IMO 
still important to have in the qtbase tree for several reasons:

* We need at least one input context to use and test against (on Linux) when 
developing Qt further. Not having the plugin in qtbase will lead to us not 
testing IMEs on Linux anymore, something I really want to avoid.
* The license is more flexible (LGPL/commercial dual licensed) on 
qt-project.org, and thus more suitable for some of our commercial customers as 
well
* As Sune said, the platform plugin headers are not stable, so having it in 
tree will give you a better chance of keeping things in sync with Qt releases
* The IMEs for pretty much all non Linux platforms reside in qtbase. Why should 
we handle Linux differently (except for the fact that there's still a multitude 
of IMEs on Linux :/ )

Ideally, I would prefer if things went the other way round and we would also 
get plugins for other popular IMEs on Linux moved into qtbase.

Thanks,
Lars




On 17/07/15 18:26, 
development-bounces+lars.knoll=theqtcompany@qt-project.org on behalf of 
Sune Vuorela development-bounces+lars.knoll=theqtcompany@qt-project.org 
on behalf of nos...@vuorela.dk wrote:

On 2015-07-17, Takao Fujiwara tfuji...@redhat.com wrote:
 Right. ibus-qt already has the ibus module for qt4 so this request is for 
 qt5.
 I'd think it's easy to move libibusplatforminputcontextplugin.so from qtbase 
 to ibus-qt.

Part of me would like to have as many things that uses QPA headers to
stay inside Qt because unstable api's.

And then I'm not sure if there might be licensing issues for various
users with moving it from lgpl Qt to GPL ibus-qt, or if enough of ibus
is GPL that you can't take advantage of the l in lgpl anyways.

/Sune

___
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] Qt for Native Client.

2015-07-17 Thread Steve Schilz
Hi Morten/Qt List

I am trying to see if I can get Qt for native client running, using the read me 
in qt5/qtbase wip/nacl branch.

Tools:
  OSX 10.9.5
  Nacl SDK, pepper_43 version
  Python 2.7.10
  

I have done the following
   1. clone qt from git, check out 5.5 branch (not 5.5.0)
   2. checkout qtbase wip/nacl branch
   3. check out qtdeclarative branch 5.5
   4. cherr-pick qtdeclarative commit 
https://codereview.qt-project.org/qt/qtdeclarative refs/changes/70/114670/1,
   5. configure and build Qt,  nacl-configure mac_x86_newlib release 64, used 
nacl_sdk/pepper_43.
   6. make module-qtbase, -qtdeclarative and -qtquickcontrols, 
  these succeed, i.e. the relevant .a library files appear in the 
builddir/libs folder.
   7. extracted the example nacl app from 
https://github.com/msorvig/qt5-qtdeclarative-nacl.git, 5.4.0 branch,
  copied it to builddir/qtbase/example-nacl  (provides the proper relative 
paths so libs link correctly).
  I uncommented the #include path for nacl in the .pro file.
   8. it builds !!  :)
   9 Make sure to exit chrome completely, then run nacl-deployqt as follows: 
   cd to example build dir, then run \full-path\qtbase\bin\nacldeployqt 
nacl.nexe --run

I think the relevant error is related to accessing the time zone:
[94230,2038145808:16:32:56.805674] Native Client module will be loaded at base 
address 0x4e8f
Not implemented: getLocalTZA()


Full console output appears below:

$ /Users/steve/Qt/qt5-git-naclBuild/qtbase/bin/nacldeployqt nacl.nexe --run
Note: qml_plugin_import.cpp file found. Auto-enabling --quick option.
 
Deploying nacl.nexe
Using SDK /projects/chrome/nacl_sdk/pepper_43
Qt libs in /Users/steve/Qt/qt5-git-naclBuild/qtbase/lib
Output directory: /Users/steve/Qt/qt5-git-naclBuild/qtbase/example-nacl
 

Serving HTTP on 0.0.0.0 port 8000 ...
[94217:1287:0717/163253:ERROR:url_pattern_set.cc(240)] Invalid url pattern: 
chrome://print/*
[94217:1287:0717/163254:ERROR:bluetooth_adapter_mac.mm(110)] Not implemented 
reached in virtual bool device::BluetoothAdapterMac::IsDiscoverable() const
127.0.0.1 - - [17/Jul/2015 16:32:54] GET / HTTP/1.1 200 -
127.0.0.1 - - [17/Jul/2015 16:32:54] GET /qtloader.js HTTP/1.1 200 -
127.0.0.1 - - [17/Jul/2015 16:32:54] GET /nacl.nmf HTTP/1.1 200 -
127.0.0.1 - - [17/Jul/2015 16:32:54] GET /nacl.nexe HTTP/1.1 200 -
[94225:1287:0717/163255:ERROR:resource_request_policy.cc(57)] Denying load of 
chrome-extension://apdfllckaahabafndbhieahigkjlhalf/page_embed_script.js from 
hosted app.
[94225:1287:0717/163256:ERROR:resource_request_policy.cc(57)] Denying load of 
chrome-extension://apdfllckaahabafndbhieahigkjlhalf/page_embed_script.js from 
hosted app.
127.0.0.1 - - [17/Jul/2015 16:32:56] code 404, message File not found
127.0.0.1 - - [17/Jul/2015 16:32:56] GET /favicon.ico HTTP/1.1 404 -
[94230,2038145808:16:32:56.805674] Native Client module will be loaded at base 
address 0x4e8f
Not implemented: getLocalTZA()
127.0.0.1 - - [17/Jul/2015 16:32:57] code 404, message File not found
127.0.0.1 - - [17/Jul/2015 16:32:57] GET /qml/QtQuick.2.1/qmldir HTTP/1.1 404 
-
127.0.0.1 - - [17/Jul/2015 16:32:57] GET /qml/QtQuick.2/qmldir HTTP/1.1 200 -
127.0.0.1 - - [17/Jul/2015 16:32:57] code 404, message File not found
127.0.0.1 - - [17/Jul/2015 16:32:57] GET /qml/QtQuick/qmldir HTTP/1.1 404 -
[94225:1287:0717/163303:ERROR:resource_request_policy.cc(57)] Denying load of 
chrome-extension://apdfllckaahabafndbhieahigkjlhalf/page_embed_script.js from 
hosted app.
[94217:78855:0717/163305:ERROR:get_updates_processor.cc(243)] 
PostClientToServerMessage() failed during GetUpdates





--

Message: 1
Date: Fri, 19 Jun 2015 13:44:38 +
From: Sorvig Morten morten.sor...@theqtcompany.com
Subject: [Development] Qt for Native Client
To: development development@qt-project.org
Message-ID: f303408c-187b-44b5-9864-44f24fd46...@digia.com
Content-Type: text/plain; charset=utf-8

Hi,

I?m happy to announce that a work-in-progress port of Qt to the Chrome / Native 
Client platform has now been pushed to the wip/nacl branch in QtBase. So far 
development has been closed, but we are now ready to develop in the open and 
also take contributions. My intention is to at some point merge the work, after 
the whip/nacl and dev branches have converged sufficiently,

The main difference from other platforms is that Qt for NaCl is running in the 
web sandbox, which has lots of interesting implications for areas like file or 
network access. The port is tested with Qt Widgets and Qt Quick and supports 
raster and OpenGL graphics.

Getting started? instructions can be found at qtbase/nacl-readme.

One further patch is needed for QtDeclarative, available here:

https://codereview.qt-project.org/#/c/114670/

- Morten

--
___
Development mailing list
Development@qt-project.org