[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [tracecompass-dev] Using StateItem and interval colors to present multiple views of same trace

Bernd
I have a single data provider I am already using to get tooltip text for intervals and to issue queries to the state system to get the value of an additional attribute for an interval. I thought I would be able to pass a mode flag to this data provider so that it could do special processing for my subset views, but it looks like that won't work.

It looks like the method where I need to do the work is the getRowModel method and possibly the getFollowEvent method.

I tried overriding the getRowModel method to preprocess the SelectionTimeQueryFilter parameter then call the superclass getRowModel method and also tried calling the superclass getRowModel then postprocess the resulting model to delete the intervals I didn't want, but in both cases, the information I had was not sufficient.

In the case of my secondary views, I was trying to keep or reject an interval based on the value of an additional attribute for the interval. The event name attribute, whose value is what ends up in the ITmfStateInterval doesn't work, since in my traces, that is used as the function name of the function that generated the trace record. I'm trying to include or exclude intervals based on the type of the function call, for instance whether it's an OpenMP barrier or something else, where that information is stored in the additional attribute.

It looks like the only way I could make this work is to copy the superclass getRowModel method code into my data provider and add code to query my additional attribute before calling createTimeGraphState (which I probably also have to clone and rename since the superclass implementation is private). I might also have to clone and modify getFollowEvent.

That's enough code to copy that I'm pretty reluctant to do, since things will break when the superclass method changes.

I think this means I need to bring back my old code with multiple state systems.

Patrick, I didn't try anything with base time event colors due to Bernd's comment about getting different results from state system queries at different zoom levels. Also, if I apply a color to the base time event, doesn't that mean it's going to show up along with the specific events I want to be visible? Granted, maybe it should be visible because it contains one or more events I want to be displayed, but it may also contain none of the events I want visible, and should therefore be not visible. I have no way of knowing without looking at the lower level events.

Dave
Inactive hide details for Bernd Hufmann ---01/07/2019 04:20:02 PM---Hi David Looking closer at the source code, using IFilterPrBernd Hufmann ---01/07/2019 04:20:02 PM---Hi David Looking closer at the source code, using IFilterProperty.EXCLUDE (and IFilterProperty.DIMME

From: Bernd Hufmann <bernd.hufmann@xxxxxxxxxxxx>
To: tracecompass developer discussions <tracecompass-dev@xxxxxxxxxxx>
Date: 01/07/2019 04:20 PM
Subject: Re: [tracecompass-dev] Using StateItem and interval colors to present multiple views of same trace
Sent by: tracecompass-dev-bounces@xxxxxxxxxxx





Hi David

Looking closer at the source code, using IFilterProperty.EXCLUDE (and IFilterProperty.DIMMED for some extend) will only work together with the filter feature. The filter dialog needs to be active. Sorry, for leading you in this direction.

After re-reading your original post, I think the reason why certain items are disappear when zooming out due to the fact that the state system is queried at given times. The times to be queried depends on the number of pixels and the start and end time of the current zoom window range. So, while zooming in and out it could happen that for a given pixel, different state is âhitâ in the state system. That could explain why things randomly disappear.

Not sure what to suggest next. Maybe looking into having different data providers for the different views of your data. Each data provider would only return the relevant data. You could override getProviderId() of the FlameChartView and provide the ID of the data provider corresponding to the current view of the data. This would be similar what you had initially with different state systems.

Please let me know how it goes.

Thanks
Bernd

From: tracecompass-dev-bounces@xxxxxxxxxxx <tracecompass-dev-bounces@xxxxxxxxxxx> On Behalf Of David Wootton
Sent:
January-07-19 9:36 AM
To:
tracecompass developer discussions <tracecompass-dev@xxxxxxxxxxx>
Subject:
Re: [tracecompass-dev] Using StateItem and interval colors to present multiple views of same trace

Bernd
This sort of works.


I started by trying to call timeEvent.setProperty in GetStateTableIndex in my class extending CallStackPresentationProvider and returning the index for my default color since I had to return something. That didn't work.


Looking at Trace Compass code it looked like I could do this by overriding BaseDataProviderTimeGraphView.createTimeEvents. I implemented a method that first calls the superclass createTimeEvents method then iterates over the list that method returns, setting the IFilterProperty.EXCLUDE property as needed.


That didn't work either. Then I tried setting the IFilterProperty.DIMMED property instead and that works, where the events changed to a dimmed state.


I'm not sure why the IFilterProperty.EXCLUDE property isn't working.


Any ideas?


Dave


Inactive hide details for Bernd Hufmann ---01/04/2019 02:11:56 PM---Hi David When implementing the dynamic filtering of time grBernd Hufmann ---01/04/2019 02:11:56 PM---Hi David When implementing the dynamic filtering of time graph views (activated by keystroke /), we

From:
Bernd Hufmann <bernd.hufmann@xxxxxxxxxxxx>
To:
tracecompass developer discussions <tracecompass-dev@xxxxxxxxxxx>
Date:
01/04/2019 02:11 PM
Subject:
Re: [tracecompass-dev] Using StateItem and interval colors to present multiple views of same trace
Sent by:
tracecompass-dev-bounces@xxxxxxxxxxx






Hi David

When implementing the dynamic filtering of time graph views (activated by keystroke /), we added properties where we can hide or dim time events (intervals as you call it). Iâm wondering if you could try to use the property IFilterProperty.EXCLUDE to achieve your goal. So, to hide time events, just do âtimeEvent.setProperty(IFilterProperty.EXCLUDE, true)â. This will hide the time event and if the whole row becomes empty it will remove the whole row. Do this instead of the StateItem way that you implemented.

Please let me know how it goes.

Best Regards
Bernd

From:
tracecompass-dev-bounces@xxxxxxxxxxx <tracecompass-dev-bounces@xxxxxxxxxxx> On Behalf Of David Wootton
Sent:
January-03-19 4:35 PM
To:
tracecompass developer discussions <tracecompass-dev@xxxxxxxxxxx>
Subject:
[tracecompass-dev] Using StateItem and interval colors to present multiple views of same trace

When I updated my plugin to work with Trace Compass 4.1 it occurred to me that I could reduce storage utilization and improve performance for one type of my traces.

For one type of trace, the primary trace view displays all of the intervals in the trace. I have two secondary traces that display subsets of the intervals in that trace.

Originally, I implemented this by implementing individual analysis modules and state systems for each of the trace views, then switching between those state systems.

In my Trace Compass 4.1 changes, I thought I could manage this by using StateItem objects, including the StateItem table index INVISIBLE, which I used to hide an interval in my subset views. I accomplished this by keeping a separate map of event names and an event class that interval represented. My subset trace views then returned INVISIBLE for intervals which did not match the event class for my subset trace view.

I originally thought this worked, but after working with it more, I think I have made bad assumptions and that this will not work

The problem I have is that the display behaves erratically, where I have not been able to identify a pattern. If I switch from my main view to a subset view, that seems to work correctly If I switch between subset views or zoom in and out, then intervals randomly disappear, maybe because my code is incorrectly setting StateItem index to INVISIBLE.

If I select an interval from the trace table view, then that interval appears in the trace view.

I think part of this may be du to intervals which contain multtiple intervals within them, because I'm zoomed out far enough that a single pixel represents a duration spanning multiple intervals. I'm seeing the tooltip text for these intervals displaying 'MULTIPLE' instead of an event name.

The other thing I'm seeing is that if I hover the mouse over the space where an interval marked as INVISIBLE exists, then I get tooltip text for that interval, meaning it's in the view, but I just can't see it.

Have I made some bad assumptions and done something I shouldn't have?
Dave
_______________________________________________
tracecompass-dev mailing list

tracecompass-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit

https://www.eclipse.org/mailman/listinfo/tracecompass-dev

_______________________________________________
tracecompass-dev mailing list
tracecompass-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://www.eclipse.org/mailman/listinfo/tracecompass-dev