Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [linuxtools-dev] TMF: drawing bookmarks on Timegraphs

>From what I understood from Xavier's demo, he added it to the base
TimeGraph view, so that all views deriving from it (like the Control
Flow view for example) would display the bookmarks as a vertical black
line, making them a bit more visible overall. It looked nice, as did his
custom Bookmarks View. I'll give the team in Montreal a debriefing next
week :)

Cheers,
Alex


On 13-10-25 12:02 PM, Patrick Tasse wrote:
> Hi Xavier,
>
> I'm a bit confused, is this for the TimeChartView from the framework, or a
> modified one you use? Because the Time Chart view already does show
> bookmarks as a little banner above the corresponding events (see the code
> in TimeChartView$DecorateThread).
>
> It also doesn't have a getExperiment() method? We usually work on generic
> ITmfTrace which may or may not be an experiment.
>
> A view or widget should know which trace(s) it's currently handling.
> Getting the bookmarks file is a bit tricky because of CTF traces whose
> resource is a folder (and you can't open a bookmark from a folder
> resource). There's a bug 409542 which if ever resolved, might make finding
> the bookmarks file easier...
>
> As for the code above, if you have access to the TimeGraphViewer, there's a
> public helper method now which could help: getXForTime().
>
> Patrick
>
>
> On Fri, Oct 25, 2013 at 11:30 AM, Xavier Raynaud
> <xavier.raynaud@xxxxxxxxx>wrote:
>
>>  Hi Alexandre,
>>
>> Following our discussions at #linuxcon, please find hereafter the code I
>> wrote to draw bookmarks on TMF timegraphs.
>> I just override TimeGraphPresentationProvider.postDrawControl() method.
>>
>> However, this I also need to know the current experiment when this method
>> is called, I've added a field in the TimeGraphPresentation provider.
>>
>> Perhaps there is a better way to do that ? Perhaps using
>> TmfTraceManager.getCurrentTrace() ?
>> Where is the best place to contribute this code ? Directly in
>> TimeGraphPresentationProvider ?
>>
>> Xavier Raynaud
>>
>> ------------------------------
>>
>> public abstract class KTimeGraphProvider extends
>> TimeGraphPresentationProvider {
>>
>>     private TimeChartView fTimeChartView;
>>
>>     public KTimeGraphProvider(TimeChartView tgv) {
>>         super();
>>         this.fTimeChartView = tgv;
>>     }
>>
>>     abstract protected void postDrawEventImpl(IModelTimeEvent
>> currentEvent, Rectangle rect, GC gc);
>>
>>     private void drawBookmarks(Rectangle bounds, GC gc) {
>>         if (fTimeChartView != null) {
>>             TmfExperiment experiment = fTimeChartView.getExperiment();
>>             TimeGraphViewer timeGraphViewer =
>> fTimeChartView.getTimeGraphViewer();
>>             if (experiment != null && timeGraphViewer != null) {
>>                 int nameSpace = timeGraphViewer.getNameSpace();
>>                 long time0 = timeGraphViewer.getTime0();
>>                 long time1 = timeGraphViewer.getTime1();
>>                 try {
>>                     for (IMarker bookmark :
>> experiment.getBookmarksFile().findMarkers(IMarker.BOOKMARK, false,
>>                             IResource.DEPTH_ZERO)) {
>>                         int location =
>> bookmark.getAttribute(IMarker.LOCATION, -1);
>>                         if (location != -1) {
>>                             long rank = location;
>>                             ITmfContext context =
>> experiment.seekEvent(rank);
>>                             ITmfEvent ev = experiment.getNext(context);
>>                             context.dispose();
>>                             if (ev != null) {
>>                                 ITmfTimestamp ts = ev.getTimestamp();
>>                                 long selectedTime = ts.normalize(0,
>> -9).getValue();
>>                                 double pixelsPerNanoSec = (bounds.width -
>> nameSpace <= TimeGraphBaseControl.RIGHT_MARGIN) ? 0
>>                                         : (double) (bounds.width -
>> nameSpace - TimeGraphBaseControl.RIGHT_MARGIN)
>>                                                 / (time1 - time0);
>>                                 int x = bounds.x + nameSpace + (int)
>> ((selectedTime - time0) * pixelsPerNanoSec);
>>                                 if (x >= nameSpace && x < bounds.x +
>> bounds.width) {
>>
>> gc.setForeground(PlatformUI.getWorkbench().getDisplay()
>>
>> .getSystemColor(SWT.COLOR_BLACK));
>>                                     gc.drawLine(x, bounds.y, x, bounds.y +
>> bounds.height);
>>                                 }
>>                             }
>>                         }
>>                     }
>>                 } catch (CoreException e) {
>>                     Activator.getDefault().getLog().log(e.getStatus());
>>                 }
>>             }
>>         }
>>     }
>>
>>     /*
>>      * (non-Javadoc)
>>      * @see
>>      *
>> org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider#postDrawControl(org.eclipse.swt
>>      * .graphics.Rectangle, org.eclipse.swt.graphics.GC)
>>      */
>>     @Override
>>     public void postDrawControl(Rectangle bounds, GC gc) {
>>         super.postDrawControl(bounds, gc);
>>         drawBookmarks(bounds, gc);
>>     }
>> }
>>
>> _______________________________________________
>> 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