+ private final LoadingCache<CallStackEvent, Optional<String>> fTimeEventNames = CacheBuilder.newBuilder()
+ .maximumSize(1000)
+ .build(new CacheLoader<CallStackEvent, Optional<String>>() {
+ @Override
+ public Optional<String> load(CallStackEvent event) {
+ CallStackEntry entry = event.getEntry();
+ ITmfStateSystem ss = entry.getStateSystem();
+ try {
+ ITmfStateValue value = ss.querySingleState(event.getTime(), entry.getQuark()).getStateValue();
+ if (!value.isNull()) {
+ String name = fView.getFunctionName(entry.getTrace(), entry.getProcessId(), event.getTime(), value);
+ return Optional.ofNullable(name);
+ }
+ } catch (TimeRangeException e) {
+ Activator.getDefault().logError("Error querying state system", e); //$NON-NLS-1$
+ } catch (StateSystemDisposedException e) {
+ /* Ignored */
+ }
+ return Optional.empty();
+ }
+ });
+