MCPcopy Create free account
hub / github.com/facebook/time / TimeAndOffsetFromDevice

Function TimeAndOffsetFromDevice

phc/offset.go:105–144  ·  view source on GitHub ↗

TimeAndOffsetFromDevice returns time we got from phc device + offset

(device string, method TimeMethod)

Source from the content-addressed store, hash-verified

103
104// TimeAndOffsetFromDevice returns time we got from phc device + offset
105func TimeAndOffsetFromDevice(device string, method TimeMethod) (SysoffResult, error) {
106 f, err := os.Open(device)
107 if err != nil {
108 return SysoffResult{}, err
109 }
110 defer f.Close()
111 dev := FromFile(f)
112
113 switch method {
114 case MethodSyscallClockGettime:
115 var ts unix.Timespec
116 ts1 := time.Now()
117 err = unix.ClockGettime(dev.ClockID(), &ts)
118 ts2 := time.Now()
119 if err != nil {
120 return SysoffResult{}, fmt.Errorf("failed clock_gettime: %w", err)
121 }
122
123 return SysoffEstimateBasic(ts1, time.Unix(ts.Unix()), ts2), nil
124 case MethodIoctlSysOffsetExtended:
125 extended, err := dev.ReadSysoffExtended()
126 if err != nil {
127 return SysoffResult{}, err
128 }
129 return extended.BestSample(), nil
130 case MethodIoctlSysOffsetExtendedRealTimeClock:
131 extended, err := dev.ReadSysoffExtendedRealTimeClock1()
132 if err != nil {
133 return SysoffResult{}, err
134 }
135 return extended.BestSample(), nil
136 case MethodIoctlSysOffsetPrecise:
137 precise, err := dev.ReadSysoffPrecise()
138 if err != nil {
139 return SysoffResult{}, err
140 }
141 return SysoffFromPrecise(precise), nil
142 }
143 return SysoffResult{}, fmt.Errorf("unknown method to get PHC time %q", method)
144}
145
146// generics in standard library can't come soon enough...
147func abs(value time.Duration) time.Duration {

Callers 2

printPHCFunction · 0.92
phcOffsetFunction · 0.92

Calls 12

ClockGettimeFunction · 0.92
FromFileFunction · 0.85
SysoffEstimateBasicFunction · 0.85
SysoffFromPreciseFunction · 0.85
ClockIDMethod · 0.80
UnixMethod · 0.80
ReadSysoffExtendedMethod · 0.80
BestSampleMethod · 0.80
ReadSysoffPreciseMethod · 0.80
OpenMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…