On Tue, Feb 18, 2014 at 3:29 PM, Martin Grigorov <mgrigo...@apache.org>wrote:

>
>
>
> On Mon, Feb 17, 2014 at 5:48 AM, Igor Vaynberg <igor.vaynb...@gmail.com>wrote:
>
>> i think the implementation is good enough to be merged into master
>> now. it supports:
>>
>
> I am still not able to fix the tests
> I will need more time to get acquaint with the new code to be able to
> maintain it
>
>
>>
>> * dequeuing algorithm that delegates to components so subclasses can
>> override (this is how repeaters and borders support it)
>> * support for all major constructs: panels, borders, repeaters
>> * support for auto component hierarchy - they are dequeued and queued
>> up children are placed as the children of auto components - this makes
>> things like enclosures trivial to implement where as before they were
>> fairy complex
>> * performance comparable to adding, still some room for improvement
>> with clever/efficient data structures maybe, but i dont think its
>> needed...
>>
>
> I see regression here
> last time I ran the performance test it needed 9s to run and used 88Mb
> memory
> now the time is 11s and the memory is 201Mb
>

the memory can be ignored. I've rerun the test several times and IDEA shows
very different things - from 65Mb to 365Mb

but the needed time is 11-12s, was 9s last Friday
the sysout is: add duration: 3285 queue duration: 3203 , was ~2400 last
Friday


>
>
>>
>> todo:
>>
>> * fragments - should be trivial, possibly as trivial as letting it
>> implement IQueueRegion
>> * check markup inheritance works on pages, panels, fragments.
>> * examples
>> * update to the guide
>>
>> -igor
>>
>>
>>
>>
>>
>> On Fri, Feb 14, 2014 at 8:36 AM, Igor Vaynberg <igor.vaynb...@gmail.com>
>> wrote:
>> > i am reworking the implementation a bit to properly support borders
>> > and repeaters by delegating to components...will check it in when i
>> > have it working...
>> >
>> > -igor
>> >
>> >
>> > On Fri, Feb 14, 2014 at 7:26 AM, Martin Grigorov <mgrigo...@apache.org>
>> wrote:
>> >> On Mon, Feb 10, 2014 at 6:01 PM, Igor Vaynberg <
>> igor.vaynb...@gmail.com>wrote:
>> >>
>> >>> On Mon, Feb 10, 2014 at 6:26 AM, Martin Grigorov <
>> mgrigo...@apache.org>
>> >>> wrote:
>> >>> >
>> >>> > On Mon, Feb 10, 2014 at 9:43 AM, Igor Vaynberg <
>> igor.vaynb...@gmail.com
>> >>> >wrote:
>> >>> >
>> >>> > > i just pushed my new idea into sandbox/component-queueing-2
>> >>> > >
>> >>> > > the way this works now is instead of doing it in onInitialize()
>> and in
>> >>> > > onConfigure() and all the other places dequeuing now works
>> >>> progressively.
>> >>> > > upon a change (container.queue() or component.add()) a dequeue
>> will be
>> >>> > > tried.
>> >>> > >
>> >>> > > it even works well with resolved components like enclosures. for
>> such
>> >>> > > components the markup of page/panel is traversed in
>> onInitialize() and
>> >>> all
>> >>> > > auto components are placed into the queue. later as components are
>> >>> > > added/queued these components will be placed into the correct
>> place in
>> >>> the
>> >>> > > hierarchy. if queue() is used children of these components will be
>> >>> placed
>> >>> > > under them in correct hierarchy place. this is a big win for using
>> >>> queueing
>> >>> > > over adding.
>> >>> > >
>> >>> > > repeaters also work. the repeater items themselves have to be
>> added to
>> >>> the
>> >>> > > repeater, but item's children can be queued. this is not a problem
>> >>> since
>> >>> > > items are mostly added by framework classes.
>> >>> > >
>> >>> > > Borders do not yet work mainly because i havent tried to make them
>> >>> work.
>> >>> > > the tricky part there is to keep the border and BorderBody queues
>> >>> separate.
>> >>> > >
>> >>> >
>> >>> > I've added some code to support it but it needs more work.
>> >>> > See my response to the commit notification email of my changes.
>> >>>
>> >>
>> >> Basic usage of Border is now supported.
>> >> I have added a test with nested Borders and it fails.
>> >> Please check
>> >>
>> org.apache.wicket.queueing.ComponentQueueingTest#dequeueWithNestedBorders
>> >>
>> >>
>> >>>  >
>> >>> > Also we have BorderBehavior and BorderPanel.
>> >>> > I think (almost) no one uses those but they exist.
>> >>>
>> >>> imho we can nuke these two things from 7. they dont look very useful.
>> >>> probably added just because we could.
>> >>>
>> >>> > > InlineEnclosures do not yet work because the code for figuring
>> out the
>> >>> > > value of the child attribute is really convoluted for the simple
>> thing
>> >>> its
>> >>> > > supposed to do and i didnt bother parsing it. Should be very
>> similar
>> >>> to how
>> >>> > > EnclosureHandler works.
>> >>> > >
>> >>> >
>> >>> > Done.
>> >>>
>> >>> thanks.
>> >>>
>> >>> > > the performance is good. there is ComponentQueueingPerformanceTest
>> >>> with a
>> >>> > > disabled test. give it a go and let me know the results. on my box
>> >>> queuing
>> >>> > > had under 10% overhead, which is acceptable. I also have some
>> ideas on
>> >>> how
>> >>> > > to optimize that further by trading cpu for a bit more memory,
>> but not
>> >>> sure
>> >>> > >
>> >>> >
>> >>> > In my branch on this topic I used HashMap instead of array. The
>> lookup is
>> >>> > faster. Not sure how much memory overhead there is.
>> >>>
>> >>> yeah. havent had time to profile it yet. there are some memory
>> >>> efficient hashmaps floating around, maybe we can adapt one of them.
>> >>>
>> >>
>> >> I've added ComponentQueue2 based on HashMap with the same initial
>> capacity
>> >> (8) and
>> >> loadFactor 1.
>> >>
>> >> wicket-util has MicroMap for 1entry and MiniMap for fixed size entries
>> but
>> >> it doesn't use hash function so it iterates over the entries as we do
>> over
>> >> the array in ComponentQueue(1).
>> >>
>> >> With ComponentQueue2 the map will start with capacity 8 and will double
>> >> when the ninth is to be added, as in ComponentQueue. But it won't
>> shrink
>> >> until it becomes with size 0.
>> >> org.apache.wicket.queueing.ComponentQueueingPerformanceTest gives
>> almost
>> >> the same results for both impls here:
>> >> add duration: ~2500
>> >> queue duration: ~2400
>> >>
>> >> memory wise Intellij IDEA reports:
>> >> - with ComponentQueue: max memory 88Mb
>> >> - with ComponentQueue2: max memory 154Mb
>> >>
>> >> so ComponentQueue is a winner here. I've added ComponentQueue2 just in
>> case
>> >> someone wants to try to optimize it
>> >>
>> >>
>> >>>
>> >>> -igor
>> >>>
>> >>> > > if its needed since the overhead is low and because its only
>> present
>> >>> when
>> >>> > > queuing is used. also the measurements are not too accurate
>> because
>> >>> most of
>> >>> > > the time is spent initializing and tearing down a WicketTester
>> >>> instance.
>> >>> > >
>> >>> > > memory overhead is also low, two slots (one of which can/should be
>> >>> > > converted to a flag) are added to MarkupContainer.
>> >>> > >
>> >>> > > see ComponentQueuing test for some examples. i would appreciate
>> some
>> >>> help
>> >>> > > getting Border and InlineEnclosure working if someone has time.
>> >>> > >
>> >>> > > look over this and lets discuss if/when we should merge it into
>> master.
>> >>> > >
>> >>> > > -igor
>> >>>
>>
>
>

Reply via email to