tmf: Bug 494952: Remove deadlock in Time Chart view
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / widgets / timegraph / widgets / TimeDataProviderCyclesConverter.java
CommitLineData
0fab12b0 1/*******************************************************************************
7255573c 2 * Copyright (c) 2014, 2016 Ericsson
0fab12b0
PT
3 *
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
8 *
9 * Contributors:
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
12
2bdf0193 13package org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets;
0fab12b0
PT
14
15import org.eclipse.jdt.annotation.NonNull;
2bdf0193 16import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets.Utils.TimeFormat;
0fab12b0
PT
17
18/**
19 * Time Data Provider wrapper that converts nanoseconds to cycles.
20 *
21 * The user of the wrapper uses cycles, the wrapped provider uses nanoseconds.
0fab12b0
PT
22 */
23public class TimeDataProviderCyclesConverter implements ITimeDataProviderConverter {
24
25 private static final long GIGAHERTZ = 1000000000L;
26
27 private final @NonNull ITimeDataProvider fProvider;
28 private final long fFreq;
29
30 /**
31 * Constructor
32 *
33 * @param provider
34 * the original time data provider
35 * @param clockFrequency
36 * the clock frequency in Hz
37 */
38 public TimeDataProviderCyclesConverter(@NonNull ITimeDataProvider provider, long clockFrequency) {
39 fProvider = provider;
40 fFreq = clockFrequency;
41 }
42
43 /**
44 * Convert nanoseconds to cycles
45 *
46 * @param nanos
47 * time in nanoseconds
48 * @return time in cycles
49 */
50 public long toCycles(long nanos) {
51 return Math.round(nanos * ((double) fFreq / GIGAHERTZ));
52 }
53
54 /**
55 * Convert cycles to nanoseconds
56 *
57 * @param cycles
58 * time in cycles
59 * @return time in nanoseconds
60 */
61 public long toNanos(long cycles) {
62 return Math.round(cycles * ((double) GIGAHERTZ / fFreq));
63 }
64
65 @Override
66 public long convertTime(long time) {
67 return toCycles(time);
68 }
69
84c8aef7 70 /**
066b02aa 71 * @since 1.2
84c8aef7 72 */
0fab12b0 73 @Override
84c8aef7
PT
74 public void setSelectionRangeNotify(long beginTime, long endTime, boolean ensureVisible) {
75 fProvider.setSelectionRangeNotify(toNanos(beginTime), toNanos(endTime), ensureVisible);
0fab12b0
PT
76 }
77
84c8aef7 78 /**
066b02aa 79 * @since 1.2
84c8aef7 80 */
0fab12b0 81 @Override
84c8aef7
PT
82 public void setSelectionRange(long beginTime, long endTime, boolean ensureVisible) {
83 fProvider.setSelectionRange(toNanos(beginTime), toNanos(endTime), ensureVisible);
0fab12b0
PT
84 }
85
86 @Override
87 public long getSelectionBegin() {
88 return toCycles(fProvider.getSelectionBegin());
89 }
90
91 @Override
92 public long getSelectionEnd() {
93 return toCycles(fProvider.getSelectionEnd());
94 }
95
96 @Override
97 public long getBeginTime() {
98 return toCycles(fProvider.getBeginTime());
99 }
100
101 @Override
102 public long getEndTime() {
103 return toCycles(fProvider.getEndTime());
104 }
105
106 @Override
107 public long getMinTime() {
108 return toCycles(fProvider.getMinTime());
109 }
110
111 @Override
112 public long getMaxTime() {
113 return toCycles(fProvider.getMaxTime());
114 }
115
116 @Override
117 public long getTime0() {
118 return toCycles(fProvider.getTime0());
119 }
120
121 @Override
122 public long getTime1() {
123 return toCycles(fProvider.getTime1());
124 }
125
126 @Override
127 public long getMinTimeInterval() {
128 // do not convert: this is in integer units
129 return fProvider.getMinTimeInterval();
130 }
131
132 @Override
133 public void setStartFinishTimeNotify(long time0, long time1) {
134 fProvider.setStartFinishTimeNotify(toNanos(time0), toNanos(time1));
135 }
136
137 @Override
138 public void setStartFinishTime(long time0, long time1) {
139 fProvider.setStartFinishTime(toNanos(time0), toNanos(time1));
140 }
141
142 @Override
143 public void notifyStartFinishTime() {
144 fProvider.notifyStartFinishTime();
145 }
146
147 @Override
148 public void setSelectedTimeNotify(long time, boolean ensureVisible) {
149 fProvider.setSelectedTimeNotify(toNanos(time), ensureVisible);
150 }
151
152 @Override
153 public void setSelectedTime(long time, boolean ensureVisible) {
154 fProvider.setSelectedTime(toNanos(time), ensureVisible);
155 }
156
157 @Override
158 public void resetStartFinishTime() {
159 fProvider.resetStartFinishTime();
160 }
161
7255573c
PT
162 /**
163 * @since 2.0
164 */
165 @Override
166 public void resetStartFinishTime(boolean notify) {
167 fProvider.resetStartFinishTime(notify);
168 }
169
0fab12b0
PT
170 @Override
171 public int getNameSpace() {
172 return fProvider.getNameSpace();
173 }
174
175 @Override
176 public void setNameSpace(int width) {
177 fProvider.setNameSpace(width);
178 }
179
180 @Override
181 public int getTimeSpace() {
182 return fProvider.getTimeSpace();
183 }
184
185 @Override
186 public TimeFormat getTimeFormat() {
187 return fProvider.getTimeFormat();
188 }
189
190}
This page took 0.078379 seconds and 5 git commands to generate.