1 /*******************************************************************************
2 * Copyright (c) 2014 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.tracecompass
.tmf
.ui
.widgets
.timegraph
.widgets
;
15 import org
.eclipse
.jdt
.annotation
.NonNull
;
16 import org
.eclipse
.tracecompass
.tmf
.ui
.widgets
.timegraph
.widgets
.Utils
.TimeFormat
;
19 * Time Data Provider wrapper that converts nanoseconds to cycles.
21 * The user of the wrapper uses cycles, the wrapped provider uses nanoseconds.
23 public class TimeDataProviderCyclesConverter
implements ITimeDataProviderConverter
{
25 private static final long GIGAHERTZ
= 1000000000L;
27 private final @NonNull ITimeDataProvider fProvider
;
28 private final long fFreq
;
34 * the original time data provider
35 * @param clockFrequency
36 * the clock frequency in Hz
38 public TimeDataProviderCyclesConverter(@NonNull ITimeDataProvider provider
, long clockFrequency
) {
40 fFreq
= clockFrequency
;
44 * Convert nanoseconds to cycles
48 * @return time in cycles
50 public long toCycles(long nanos
) {
51 return Math
.round(nanos
* ((double) fFreq
/ GIGAHERTZ
));
55 * Convert cycles to nanoseconds
59 * @return time in nanoseconds
61 public long toNanos(long cycles
) {
62 return Math
.round(cycles
* ((double) GIGAHERTZ
/ fFreq
));
66 public long convertTime(long time
) {
67 return toCycles(time
);
71 public void setSelectionRangeNotify(long beginTime
, long endTime
) {
72 fProvider
.setSelectionRangeNotify(toNanos(beginTime
), toNanos(endTime
));
76 public void setSelectionRange(long beginTime
, long endTime
) {
77 fProvider
.setSelectionRange(toNanos(beginTime
), toNanos(endTime
));
81 public long getSelectionBegin() {
82 return toCycles(fProvider
.getSelectionBegin());
86 public long getSelectionEnd() {
87 return toCycles(fProvider
.getSelectionEnd());
91 public long getBeginTime() {
92 return toCycles(fProvider
.getBeginTime());
96 public long getEndTime() {
97 return toCycles(fProvider
.getEndTime());
101 public long getMinTime() {
102 return toCycles(fProvider
.getMinTime());
106 public long getMaxTime() {
107 return toCycles(fProvider
.getMaxTime());
111 public long getTime0() {
112 return toCycles(fProvider
.getTime0());
116 public long getTime1() {
117 return toCycles(fProvider
.getTime1());
121 public long getMinTimeInterval() {
122 // do not convert: this is in integer units
123 return fProvider
.getMinTimeInterval();
127 public void setStartFinishTimeNotify(long time0
, long time1
) {
128 fProvider
.setStartFinishTimeNotify(toNanos(time0
), toNanos(time1
));
132 public void setStartFinishTime(long time0
, long time1
) {
133 fProvider
.setStartFinishTime(toNanos(time0
), toNanos(time1
));
137 public void notifyStartFinishTime() {
138 fProvider
.notifyStartFinishTime();
142 public void setSelectedTimeNotify(long time
, boolean ensureVisible
) {
143 fProvider
.setSelectedTimeNotify(toNanos(time
), ensureVisible
);
147 public void setSelectedTime(long time
, boolean ensureVisible
) {
148 fProvider
.setSelectedTime(toNanos(time
), ensureVisible
);
152 public void resetStartFinishTime() {
153 fProvider
.resetStartFinishTime();
157 public int getNameSpace() {
158 return fProvider
.getNameSpace();
162 public void setNameSpace(int width
) {
163 fProvider
.setNameSpace(width
);
167 public int getTimeSpace() {
168 return fProvider
.getTimeSpace();
172 public TimeFormat
getTimeFormat() {
173 return fProvider
.getTimeFormat();