Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [linuxtools-dev] TMF : createExecutableExtension in instantiateTrace() of TmfTraceElement.java

Hi Ran-How,

The spirit of TMF framework is that you would define a new trace type with the org.eclipse.linuxtools.tmf.core.tracetype extension point. I'm guessing you have already done so and that your trace type id is Activator.TRACETYPE_ID, although that means your plugin only has 1 trace type.

Then you would add a trace to a Tracing project in the Project Explorer, select the correct trace type and then open the trace from there.

I'm not sure why you need to use injection, but I think that you could probably find the corresponding configuration element from the platform extension registry (look at TmfTraceElement.init()) and maybe your plugin could look it up only once and store the IConfigurationElement for later use.

Later when you need a trace instance you can invoke createExecutableExtension on the configuration element, then call initTrace on the returned instance. But then the rest of the framework will not be aware of your trace instance because it wasn't opened the 'spirit' way... Also don't forget to dispose the trace instance when it's no longer needed.

Patrick


On Sat, Apr 5, 2014 at 1:25 AM, Chen RanHow <ranhow.chen@xxxxxxxxx> wrote:
Hi Patrick

Got it, actually, I saw the dummy helper for validation purpose also ^^

The cause I ask it is that I am trying to to some injection under the TMF way implementation for a new TraceType

I try to implementation a E4 based service that can do some additional PIPE like trace processing

For example a power consume index could take frequency & load as input, output could be other pipes as input also

To bridge / trigger the service to work, I bind it to the class extends TmfTrace

To workaround it, I did a ModelAddon to force createExecutableExtension() in TmfTraceType like bellow

        @PostConstruct
public void init(IEclipseContext context, IExtensionRegistry reg) {
assert context != null;
_context = context;

                 /*
* A hack to TMF, since inject must be before TMFTrace implementation
* The getInstance() call would trigger load extension points
* It is the point to force inject here
*/
TraceTypeHelper tth = TmfTraceType.getInstance().getTraceType(Activator.TRACETYPE_ID);
tmfTrace = tth.getTrace();
assert tmfTrace != null;
ContextInjectionFactory.inject(tmfTrace, _context);

                .........


As you mentioned, it is for validation only. so I got null point on other callbacks like parseEvent() XDDDDDDDDDDDD

Is there any way that can make the INJECT got chance to work in the class extends TmfTrace for a new trace type ?

Or maybe I got misunderstand for the spirit of TMF framework = =!!

Thank you again for the quick response.

The TMF is very amazing !

Ran-How




On Sat, Apr 5, 2014 at 2:08 AM, Patrick Tasse <patrick.tasse@xxxxxxxxx> wrote:
Hi Ran-How,

The reason we can't use the ITmfTrace instance owned by the trace type helper is that we need a different instance for each opened trace (they have different resources, paths, indexers, etc.).

The instance in the trace type helper is a dummy trace instance that is only used for trace type validation. It's not sure that these instances will remain in the future, if for example we implement a validator class that is separate from the trace class.

Patrick


On Fri, Apr 4, 2014 at 1:17 PM, Chen RanHow <ranhow.chen@xxxxxxxxx> wrote:

Hi TMF advances

Thank you team for the powerful framework, I have a question bellow

In  TmfTraceElement.java

I saw createExecutableExtension() in instantiateTrace() to get an instance from the extension points like bellow

                IConfigurationElement ce = sfTraceTypeAttributes.get(fTraceTypeId);
               
                .......

                ITmfTrace trace = (ITmfTrace) ce.createExecutableExtension(TmfTraceType.TRACE_TYPE_ATTR);

               ......

               return trace;
 
I wonder why not just use TmfTraceType.getInstance() to do it ?

Since the init() in TmfTraceType constructor call populateCategoriesAndTraceTypes()

The instance of createExecutableExtension is created

Could it be replaced with

            TraceTypeHelper tth = TmfTraceType.getInstance().getTraceType(fTraceTypeId);

            ITmfTrace trace = tth.getTrace();

            return trace;

Or I misunderstand it ?

Please kindly to reply

Ran-How


_______________________________________________
linuxtools-dev mailing list
linuxtools-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/linuxtools-dev



_______________________________________________
linuxtools-dev mailing list
linuxtools-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/linuxtools-dev



_______________________________________________
linuxtools-dev mailing list
linuxtools-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/linuxtools-dev



Back to the top