[jsword-devel] New versification mapping - preload mappings to prevent pauses

Martin Denham mjdenham at gmail.com
Sat Jan 18 12:17:54 MST 2014


I think I have found a workaround for this problem (using a background
thread makes it run very quickly) but it seems to point toward a possible
point of improvement in the new JSword mapping data structure.

In the old AB v11n mapping code I stored maps of Verses.  However the new
JSword code seems to store maps of RocketPassage/BitwisePassage.  Can you
verify this is the best data structure for what will normally be a single
verse.  I don't know an awful lot about this so I am just asking, but maybe
a Passage will always consume more memory than a Verse.

Thanks
Martin




On 18 January 2014 13:30, Martin Denham <mjdenham at gmail.com> wrote:

> I tried your patch and it did noticeably improve things, so it is a
> worthwhile patch, but did not solve the actual problem.  Still viewing the
> RusSynodal straight after download takes well over a minute, whereas to
> boot straight into it takes about 2 secs.
>
> One or 2 things I have noticed:
>
>    - a huge amount of memory allocation and GC occurs when trying to view
>    RusSynodal straight after download
>    - I am not great with the profiler but here are my tentative
>    observations
>       - Seems to be spending about half the time in
>       java.util.BitSet.cardinality()
>          - called by
>          BitwisePassage.countVerses()<-RocketPassage.countVerses()<-AbstractPassage.getCardinality()<-VersificationToKJVMapper.add...
>       - I tried caching AbstractPassage.getCardinality but that had no
>       affect which would be the case if there were lots of different keys
>    - Could it be that a module is in an unusual state after download?  I
>    have noticed that a module cannot be deleted directly after download, until
>    the app is restarted due to:
>       - sbmd.getConfigFile()==null when called by
>       SwordBookDriver.isDeletable directly after module download
>
> Any suggestions are welcome.
>
> Cheers
> Martin
>
>
> On 16 January 2014 23:13, Martin Denham <mjdenham at gmail.com> wrote:
>
>> I think I will use the old AB v11n mapping for the next release of AB and
>> come back to this after the release which has quite a lot of changes in it
>> already anyway.
>>
>> The problem could be AB, Android, or JSword related and it is not trivial
>> to reproduce involving repeated re-installs of RusSynodal.  I had a similar
>> problem a year or two ago, it took a long time to investigate and ended up
>> being a flaw in the Android VM which required a change to JSword.
>>
>> I keep trying to think what could cause these symptoms and drawing a
>> blank.
>>
>> Cheers
>> Martin
>>
>>
>> On 16 January 2014 21:35, Chris Burrell <chris at burrell.me.uk> wrote:
>>
>>> I'll try profiling it! Nothing comes to mind though.
>>>  On 16 Jan 2014 20:04, "Martin Denham" <mjdenham at gmail.com> wrote:
>>>
>>>> There is something unusual happening with the v11n mapping creation
>>>> straight after downloading a file requiring mapping e.g. It takes over 2
>>>> mins to load the mapping (a single call to mapVerse) for RusSynodal
>>>> straight after download but a few seconds to load the file normally.
>>>>
>>>> 1. View ESV and anything else in split screen
>>>> 2. Download RusSynodal
>>>> 3. Exit download screen after download
>>>> 4. select RusSynodal for display (with ESV) in 1 half of split screen
>>>> 5. Mapping code now takes over 2 minutes to load mapping
>>>> 6. But there are no errors and then everything seems fine
>>>>
>>>> 7. Exit and kill And Bible
>>>> 8. Restart with ESV/RST in split screens
>>>> 9. This time everything is initialised in a few seconds
>>>>
>>>> Any ideas?
>>>>
>>>> Martin
>>>>
>>>>
>>>> On 16 January 2014 19:06, Chris Burrell <chris at burrell.me.uk> wrote:
>>>>
>>>>> Hi Martin
>>>>>
>>>>> Fine by me. Think it should be opt in if possible.
>>>>>
>>>>> A couple of thoughts on that note. Do you know of it s the io or the
>>>>> cpu time that's the issue?
>>>>>
>>>>> We probably want to opt in with a list as well as all as there's no
>>>>> point in loading the v11n if not required.
>>>>>
>>>>> I guess especially if we end up with mappings per module eventually.
>>>>>
>>>>> On a separate note, I also found the books.installed call is very
>>>>> expensive. Thinking it may be worth partially loading these. With around
>>>>> 200 modules we spend almost 15 seconds loading them.
>>>>>
>>>>> Finally you can apply for a open source license of jprofiler which
>>>>> helps massively to work out what's going on. Have got a couple of
>>>>> uncommitted fixes for books. Installed find with that.
>>>>>
>>>>> Chris
>>>>> On 16 Jan 2014 18:10, "Martin Denham" <mjdenham at gmail.com> wrote:
>>>>>
>>>>>>  Hi,
>>>>>>
>>>>>> I have integrated the new v11n mapping code and find I am getting a
>>>>>> pause when doing the initial mapping between any 2 v11ns.
>>>>>>
>>>>>> I originally had the same problem with the AB mapping code so
>>>>>> pre-loaded all mapping required for the installed set of documents at the
>>>>>> start in a background thread to prevent delays.  The code I used is in
>>>>>> VersificationMappingFactory.initialiseRequiredMappings()<https://github.com/mjdenham/and-bible/blob/master/AndBible/src/net/bible/android/control/versification/mapping/VersificationMappingFactory.java>
>>>>>> .
>>>>>>
>>>>>> I am trying to think of the best way to do this in the new code.
>>>>>>  Either i) you could add a method to do it which could be called or ii) you
>>>>>> could proeload all required mappings automatically or iii) add a new method
>>>>>> to allow AB (or other frontend) to trigger preload of all required mappings
>>>>>> by adding a public method a bit like the new
>>>>>> VersificationsMapper.ensure(v11ntopreload).
>>>>>>
>>>>>> This is quite an issue for mobile users.  I have a fast mobile and
>>>>>> loading a mapping causes a noticeable delay the first time a verse changes,
>>>>>> but the preload fix is fairly simple and worked well.
>>>>>>
>>>>>> Cheers
>>>>>> Martin
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> jsword-devel mailing list
>>>>>> jsword-devel at crosswire.org
>>>>>> http://www.crosswire.org/mailman/listinfo/jsword-devel
>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> jsword-devel mailing list
>>>>> jsword-devel at crosswire.org
>>>>> http://www.crosswire.org/mailman/listinfo/jsword-devel
>>>>>
>>>>>
>>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.crosswire.org/pipermail/jsword-devel/attachments/20140118/6a5a7cd0/attachment.html>


More information about the jsword-devel mailing list