> On June 12, 2015, 2:02 a.m., Torsten Rahn wrote:
> > src/lib/marble/layers/GeometryLayer.cpp, line 279
> > <https://git.reviewboard.kde.org/r/124074/diff/1/?file=379731#file379731line279>
> >
> >     This happens on every single redraw. I'm quite sure this does have a 
> > performance impact. Any numbers for the expected performance impact e.g. on 
> > somewhat older hardware (think android ...)? What about caching these?

I tried another solution for this: generating these outlines in the constructor 
of a `GeoLineStringGraphicsItem` and then create a `getOutline()` method. In 
the end the performance impact was almost the same, because:
*iterating through the `items` list,
*typecasting(`dynamic_cast`),
*adding the new outline to the `items` list,
*adding it to the `lineStringOutlines` list
has a bigger impact on the performance than this simple "shallow copy" of a 
`GeoLineStringGraphicsItem`. Storing the outline for every 
`GeoLineStringGraphicsItem` would make sense, but I think this solution is 
nicer, because I don't like the idea of doing "unneccesarry" things in a 
constructor, and this seems more "virtual" and transparent for me.

As for the numbers, I got 1 ms for a small and 2 ms for a large map, so I think 
it's acceptable. The sorting has a greater impact on the performance, but I 
think it is acceptable too if we look at the results :)
The major impact on the performance comes from rendering: 20-25 ms for a small 
and 80-110 for a large map.


> On June 12, 2015, 2:02 a.m., Torsten Rahn wrote:
> > src/lib/marble/layers/GeometryLayer.cpp, line 289
> > <https://git.reviewboard.kde.org/r/124074/diff/1/?file=379731#file379731line289>
> >
> >     This gets sorted on every single repaint. How long does this take for a 
> > bigger OSM file on slow hardware? Would it make sense to cache this 
> > somewhere?

I think something like this should have been already present because every 
`GeoGraphicsItem` has a z-value and this should be taken into account when 
drawing them.
As for the performance: for a small map, it takes only 1-2 ms to sort the 
list*, for a big map it takes 5-7 ms, while the painting takes 20-25 ms for a 
small and 80-110 ms for a big map. The performance impact is about 5-10% and I 
think this is a must in order to properly draw everything depending on their 
z-value.
Caching it doesn't make sense for me, because at every repaint the `items` list 
is changed, so it needs to be sorted again.

*I think that my laptop has a pretty slow hardware, but even though, the 
relative performance impact should remain the same for slower and faster 
machines too (about 5-10%).


> On June 12, 2015, 2:02 a.m., Torsten Rahn wrote:
> > src/lib/marble/layers/GeometryLayer.cpp, line 253
> > <https://git.reviewboard.kde.org/r/124074/diff/1/?file=379731#file379731line253>
> >
> >     I don't get the intention behind this. In the Texture case 
> > setNeedsUpdate basically means that the previously rendered texture part of 
> > the viewport (which is cached as a pixmap) can not be used anymore and 
> > hence the whole viewport texture needs to be recalculated (instead of just 
> > painting the cached pixmap of the texture).
> >     This doesn't seem to be the case here. Introducing such a method might 
> > make sense if we cache "artificial items" or cache "(p)resorted" data. But 
> > this is not the case here - here it just seems to call repaintNeeded(). 
> > repaintNeeded() on the other side is just about a "weaker" repaint that 
> > still keeps cached data intact. So introducing this method like this 
> > doesn't look right to me.

I just wanted to be consistent to the `TextureLayer`, but you are right, there 
is no sense in this method. I'll remove it in the new revision.


> On June 12, 2015, 2:02 a.m., Torsten Rahn wrote:
> > src/lib/marble/geodata/graphicsitem/GeoLineStringGraphicsItem.cpp, line 39
> > <https://git.reviewboard.kde.org/r/124074/diff/1/?file=379729#file379729line39>
> >
> >     why 0.01 and not 0.001? What are possible problems with regard to 
> > messing with the zValue directly (which is also accessible to the API user) 
> > as opposed to possibly introducing an "internalZValue" property that still 
> > maintains the same actual zValue for both the outline as well as the actual 
> > line from the outside?
> >     
> >     If we keep it like this then we should at least make 0.01 a variable.

I think I've deleted a `0`, I originally wanted `0.001`. Creating a variable 
would make sense, so I'll upload a revision including it.

As I saw, these already serve as an "internal z-value", because they are not 
altered by the node's z-value: they are initialized in 
`GeometryLayerPrivate::initializeDefaultValues()` and then aren't modified. In 
the end it would make sense to take into account this internal z-value, then to 
have a proper "real life" z-value and the draw order of the items would be 
estabilished by these two values(the "real life" value would have the higher 
priority). But I don't want to include it in this patch :)


> On June 12, 2015, 2:02 a.m., Torsten Rahn wrote:
> > src/lib/marble/layers/GeometryLayer.cpp, line 307
> > <https://git.reviewboard.kde.org/r/124074/diff/1/?file=379731#file379731line307>
> >
> >     Please use qDeleteAll() ...

Ok.


- Dávid


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/124074/#review81400
-----------------------------------------------------------


On June 12, 2015, 1:17 a.m., Dávid Kolozsvári wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/124074/
> -----------------------------------------------------------
> 
> (Updated June 12, 2015, 1:17 a.m.)
> 
> 
> Review request for Marble.
> 
> 
> Repository: marble
> 
> 
> Description
> -------
> 
> This patch adds support for outlines on `GeoLineStringGraphicsItems`, which 
> represent the roads, streets, paths and ways on the OSM vector tiles. The 
> main idea is to draw behind every `GeoLineStringGraphicsItem` the same 
> line(implemented a `GeoLineStringGraphicsItem::copyAsOutline()` function for 
> this purpose) with the pen color(outline color) and the original line on top 
> of that with the brush color(fill color) and a little thinner.
> Painting these outlines have a small impact on the performance: cca. 10 ms(on 
> my laptop) on a large map, which has 2000+ lines. Because of that, this 
> feature can be disabled if map quality is set to `Low` or `Outline`.
> 
> On the other hand, I've added some new features to `GeoDataVisualCategory`, 
> like `HighwayCycleway` and `HighwayFootway`, which are now rendered correctly 
> on OSM vector tiles.
> 
> 
> Diffs
> -----
> 
>   src/lib/marble/MarbleMap.cpp bd4049f 
>   src/lib/marble/geodata/data/GeoDataFeature.h ea23cd8 
>   src/lib/marble/geodata/data/GeoDataFeature.cpp 6f330fb 
>   src/lib/marble/geodata/data/GeoDataFeature_p.h 496c356 
>   src/lib/marble/geodata/graphicsitem/GeoLineStringGraphicsItem.h 4842809 
>   src/lib/marble/geodata/graphicsitem/GeoLineStringGraphicsItem.cpp 4320c07 
>   src/lib/marble/layers/GeometryLayer.h 35b7490 
>   src/lib/marble/layers/GeometryLayer.cpp 9eb3f50 
> 
> Diff: https://git.reviewboard.kde.org/r/124074/diff/
> 
> 
> Testing
> -------
> 
> The performance impact is acceptable, the result is ok and works for me.
> 
> 
> Thanks,
> 
> Dávid Kolozsvári
> 
>

_______________________________________________
Marble-devel mailing list
Marble-devel@kde.org
https://mail.kde.org/mailman/listinfo/marble-devel

Reply via email to