I came up with a solution that remains within the bounds of Roassal: cache the font in ROAbstractLabel.

See more details here:
http://code.google.com/p/moose-technology/issues/detail?id=971

Cheers,
Doru




On Sat, Aug 24, 2013 at 8:40 PM, Ben Coman <btc@openinworld.com> wrote:
After loading Athens, then
[|view|

view := ROMondrianViewBuilder new.
view shape label fontSize: [:x | x ].
view nodes: (10 to: 100).
view open]

timeToRun ---> 4767 msec

By cheating...
LogicalFont>>height
    ^200
LogicalFont>>width
    ^200

then timeToRun ---> 45msec.

With...
LogicalFont>>height
    self realFont "height".
    ^200.

then timeToRun ---> 1929msec.

If I revert the changes above and then do...
LogicalFont>>realFont    
    "Smalltalk at: #btcHack put: Bag new"
    ^realFont ifNil: [
        (Smalltalk at: #btcHack) add: #count.
        realFont := self findRealFont]   ^

then timeToRun --> 4076
and (Smalltalk at: #btcHack) occurrencesOf: #count ---> 587 times it runs #findRealFont.

This might not be the proper place to do caching, but if change this to...
LogicalFont>>realFont
    | cache  |       
    cache := Smalltalk at: #btcHack2 ifAbsentPut: Dictionary new.
    ^realFont ifNil: [ cache at: self printString ifAbsentPut: [ self findRealFont ] ]

then timeToRun --> 1482msec.


cheers, Ben


Tudor Girba wrote:
Here is more information about the problem: as said, the issue comes from
widthOfString:. So, I tested the basic infrastructure:

[10 to: 100 do: [ :x |
(LogicalFont familyName: 'Arial' pointSize: x)
widthOfString: 'test' ]] timeToRun

This one gets ==> 5s

So, where are the rest of the 20s being spent in Roassal? Essentially,
given that Roassal will get a new logical font instance every time it tries
to display, it essentially slows down everything in the image when multiple
fonts are displayed.

I think we should find a way to cache the logical fonts in
ROFontOrganizerAthens, or at least to provide the ability to set the font
from outside in ROAbstractLabel (rather than just provide the font size).

Cheers,
Doru





On Sat, Aug 24, 2013 at 9:34 AM, Tudor Girba <tudor@tudorgirba.com> wrote:

  
Indeed, the issue we have is related to real font caching. It would be
great to get a working solution for this. I guess this will not be
available in Pharo 2.0 (it would make sense to focus on Pharo 3.0), but
maybe we can get some hints as to how to build a little workaround.

I would like to release the Moose 4.8 image with Athens enabled, but I am
not sure it's a good idea with this little issue inside.

Doru


On Fri, Aug 23, 2013 at 10:58 PM, Stéphane Ducasse <
stephane.ducasse@inria.fr> wrote:

    
Igor is working out on textEditor with fernando and they are making
progress.
I know that igor want to build a cache for fonts and that now he changed
the API of Cairo because the previous one was making approximations that
led to
problems when zooming (and then to identify character under the mouse).
Now I do not know how and if it will have an impact (probably on this
one).
One objectives is also to see how to reuse some of the morphs made on top
of Rubric (but not rubric because it is based on the old and bad paragraph
editor).

Stef

Hi,

Try this:
[view := ROMondrianViewBuilder new.
view shape label fontSize: [:x | x ].
view nodes: (10 to: 100).
view open] timeToRun

On my MacBookPro i7 2.6 GHz this takes 23s.

The actual reason is that LogicalFont>>widthOfString: looks up the real
font when the font is not yet cached. And this ends up looking for files on
the disk.

I do not know an easy way out, but as it is, we cannot use font scaling
essentially. And because of that, visualizations like Annotation
Constellation are not practicable anymore:

http://www.themoosebook.org/book/externals/visualizations/annotation-constellation

 Cheers,
Doru

--
www.tudorgirba.com

"Every thing has its own flow"
 _______________________________________________
Moose-dev mailing list
Moose-dev@iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev



_______________________________________________
Moose-dev mailing list
Moose-dev@iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev


      
--
www.tudorgirba.com

"Every thing has its own flow"

    

  

_______________________________________________ Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev


_______________________________________________
Moose-dev mailing list
Moose-dev@iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev




--
www.tudorgirba.com

"Every thing has its own flow"