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