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
.linuxtools
.tmf
.ui
.widgets
.timegraph
.widgets
;
15 import org
.eclipse
.jdt
.annotation
.NonNull
;
16 import org
.eclipse
.linuxtools
.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.
25 public class TimeDataProviderCyclesConverter
implements ITimeDataProviderConverter
{
27 private static final long GIGAHERTZ
= 1000000000L;
29 private final @NonNull ITimeDataProvider fProvider
;
30 private final long fFreq
;
36 * the original time data provider
37 * @param clockFrequency
38 * the clock frequency in Hz
40 public TimeDataProviderCyclesConverter(@NonNull ITimeDataProvider provider
, long clockFrequency
) {
42 fFreq
= clockFrequency
;
46 * Convert nanoseconds to cycles
50 * @return time in cycles
52 public long toCycles(long nanos
) {
53 return Math
.round(nanos
* ((double) fFreq
/ GIGAHERTZ
));
57 * Convert cycles to nanoseconds
61 * @return time in nanoseconds
63 public long toNanos(long cycles
) {
64 return Math
.round(cycles
* ((double) GIGAHERTZ
/ fFreq
));
68 public long convertTime(long time
) {
69 return toCycles(time
);
73 public void setSelectionRangeNotify(long beginTime
, long endTime
) {
74 fProvider
.setSelectionRangeNotify(toNanos(beginTime
), toNanos(endTime
));
78 public void setSelectionRange(long beginTime
, long endTime
) {
79 fProvider
.setSelectionRange(toNanos(beginTime
), toNanos(endTime
));
83 public long getSelectionBegin() {
84 return toCycles(fProvider
.getSelectionBegin());
88 public long getSelectionEnd() {
89 return toCycles(fProvider
.getSelectionEnd());
93 public long getBeginTime() {
94 return toCycles(fProvider
.getBeginTime());
98 public long getEndTime() {
99 return toCycles(fProvider
.getEndTime());
103 public long getMinTime() {
104 return toCycles(fProvider
.getMinTime());
108 public long getMaxTime() {
109 return toCycles(fProvider
.getMaxTime());
113 public long getTime0() {
114 return toCycles(fProvider
.getTime0());
118 public long getTime1() {
119 return toCycles(fProvider
.getTime1());
123 public long getMinTimeInterval() {
124 // do not convert: this is in integer units
125 return fProvider
.getMinTimeInterval();
129 public void setStartFinishTimeNotify(long time0
, long time1
) {
130 fProvider
.setStartFinishTimeNotify(toNanos(time0
), toNanos(time1
));
134 public void setStartFinishTime(long time0
, long time1
) {
135 fProvider
.setStartFinishTime(toNanos(time0
), toNanos(time1
));
139 public void notifyStartFinishTime() {
140 fProvider
.notifyStartFinishTime();
144 public void setSelectedTimeNotify(long time
, boolean ensureVisible
) {
145 fProvider
.setSelectedTimeNotify(toNanos(time
), ensureVisible
);
149 public void setSelectedTime(long time
, boolean ensureVisible
) {
150 fProvider
.setSelectedTime(toNanos(time
), ensureVisible
);
154 public void resetStartFinishTime() {
155 fProvider
.resetStartFinishTime();
159 public int getNameSpace() {
160 return fProvider
.getNameSpace();
164 public void setNameSpace(int width
) {
165 fProvider
.setNameSpace(width
);
169 public int getTimeSpace() {
170 return fProvider
.getTimeSpace();
174 public TimeFormat
getTimeFormat() {
175 return fProvider
.getTimeFormat();