JBoss development,
A new message was posted in the thread "Profiling the dependency project":
http://community.jboss.org/message/525413#525413
Author : Kabir Khan
Profile :
http://community.jboss.org/people/kabir.khan@jboss.com
Message:
--------------------------------------------------------------
One thing that is taking a lot of time in the wrong order benchmark is in
AbstractDependencyItem.resolve(). Since the dependentState is null we end up doing this:
public boolean resolve(Controller controller)
{
boolean previous = resolved;
ControllerContext context;
if (dependentState == null)
context = controller.getInstalledContext(iDependOn);
else
{
context = controller.getContext(iDependOn, dependentState); //<<<<
Here
if (context == null)
{
if (ControllerState.INSTALLED.equals(dependentState))
context = controller.getInstalledContext(iDependOn); //<<<<
Here
}
}
if (context == null)
{
resolved = false;
ControllerContext unresolvedContext = controller.getContext(iDependOn, null);
//<<<< Here
if (unresolvedContext != null &&
ControllerMode.ON_DEMAND.equals(unresolvedContext.getMode()))
{
try
{
controller.enableOnDemand(unresolvedContext);
}
catch (Throwable ignored)
{
if (log.isTraceEnabled())
log.trace("Unexpected error", ignored);
}
}
}
else
{
addDependsOnMe(controller, context);
resolved = true;
}
These calls account for about 50% of the time spent.
Changing to:
context = controller.getContext(iDependOn, dependentState); //<<<<
Here
//if (context == null)
//{
// if (ControllerState.INSTALLED.equals(dependentState))
// context = controller.getInstalledContext(iDependOn);
//<<<< Here
//}
Gives a perfomance boost to the wrong order test of about 15%. I have committed this.
What I would really like is to be able to is somehow roll the getting of the context and
the on demand context into one, something along the lines of
public boolean resolve(Controller controller)
{
boolean previous = resolved;
ControllerState state = dependentState == null ? ControllerState.INSTALLED :
dependentState;
ControllerContext context = controller.getContextAtStateOrEnableOnDemand(iDependOn,
state);
if (context == null)
{
resolved = false;
}
else
{
addDependsOnMe(controller, context);
resolved = true;
}
}
That way we only query for the context once instead of twice (three times before my last
change)
--------------------------------------------------------------
To reply to this message visit the message page:
http://community.jboss.org/message/525413#525413