1 /*******************************************************************************
2 * Copyright (c) 2014, 2015 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
);
74 public void setSelectionRangeNotify(long beginTime
, long endTime
, boolean ensureVisible
) {
75 fProvider
.setSelectionRangeNotify(toNanos(beginTime
), toNanos(endTime
), ensureVisible
);
82 public void setSelectionRange(long beginTime
, long endTime
, boolean ensureVisible
) {
83 fProvider
.setSelectionRange(toNanos(beginTime
), toNanos(endTime
), ensureVisible
);
87 public long getSelectionBegin() {
88 return toCycles(fProvider
.getSelectionBegin());
92 public long getSelectionEnd() {
93 return toCycles(fProvider
.getSelectionEnd());
97 public long getBeginTime() {
98 return toCycles(fProvider
.getBeginTime());
102 public long getEndTime() {
103 return toCycles(fProvider
.getEndTime());
107 public long getMinTime() {
108 return toCycles(fProvider
.getMinTime());
112 public long getMaxTime() {
113 return toCycles(fProvider
.getMaxTime());
117 public long getTime0() {
118 return toCycles(fProvider
.getTime0());
122 public long getTime1() {
123 return toCycles(fProvider
.getTime1());
127 public long getMinTimeInterval() {
128 // do not convert: this is in integer units
129 return fProvider
.getMinTimeInterval();
133 public void setStartFinishTimeNotify(long time0
, long time1
) {
134 fProvider
.setStartFinishTimeNotify(toNanos(time0
), toNanos(time1
));
138 public void setStartFinishTime(long time0
, long time1
) {
139 fProvider
.setStartFinishTime(toNanos(time0
), toNanos(time1
));
143 public void notifyStartFinishTime() {
144 fProvider
.notifyStartFinishTime();
148 public void setSelectedTimeNotify(long time
, boolean ensureVisible
) {
149 fProvider
.setSelectedTimeNotify(toNanos(time
), ensureVisible
);
153 public void setSelectedTime(long time
, boolean ensureVisible
) {
154 fProvider
.setSelectedTime(toNanos(time
), ensureVisible
);
158 public void resetStartFinishTime() {
159 fProvider
.resetStartFinishTime();
163 public int getNameSpace() {
164 return fProvider
.getNameSpace();
168 public void setNameSpace(int width
) {
169 fProvider
.setNameSpace(width
);
173 public int getTimeSpace() {
174 return fProvider
.getTimeSpace();
178 public TimeFormat
getTimeFormat() {
179 return fProvider
.getTimeFormat();