| OLD | NEW |
| 1 // Copyright (c) 2014, the Fletch project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Fletch project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
| 4 | 4 |
| 5 import 'dart:ffi'; | 5 import 'dart:ffi'; |
| 6 import 'dart:io' as io; | 6 import 'dart:io' as io; |
| 7 import "package:expect/expect.dart"; | 7 import "package:expect/expect.dart"; |
| 8 | 8 |
| 9 abstract class Timeval implements Foreign { | 9 abstract class Timeval implements ForeignMemory { |
| 10 factory Timeval() { | 10 factory Timeval() { |
| 11 switch (Foreign.bitsPerMachineWord) { | 11 switch (Foreign.bitsPerMachineWord) { |
| 12 case 32: return new Timeval32(); | 12 case 32: return new Timeval32(); |
| 13 case 64: return new Timeval64(); | 13 case 64: return new Timeval64(); |
| 14 default: throw "Unsupported machine word size."; | 14 default: throw "Unsupported machine word size."; |
| 15 } | 15 } |
| 16 } | 16 } |
| 17 int get tv_sec; | 17 int get tv_sec; |
| 18 int get tv_usec; | 18 int get tv_usec; |
| 19 } | 19 } |
| 20 | 20 |
| 21 class Timeval32 extends Foreign implements Timeval { | 21 class Timeval32 extends ForeignMemory implements Timeval { |
| 22 Timeval32() : super.allocated(8); | 22 Timeval32() : super.allocated(8); |
| 23 int get tv_sec => getInt32(0); | 23 int get tv_sec => getInt32(0); |
| 24 int get tv_usec => getInt32(4); | 24 int get tv_usec => getInt32(4); |
| 25 } | 25 } |
| 26 | 26 |
| 27 class Timeval64 extends Foreign implements Timeval { | 27 class Timeval64 extends ForeignMemory implements Timeval { |
| 28 Timeval64() : super.allocated(16); | 28 Timeval64() : super.allocated(16); |
| 29 int get tv_sec => getInt64(0); | 29 int get tv_sec => getInt64(0); |
| 30 int get tv_usec => getInt64(8); | 30 int get tv_usec => getInt64(8); |
| 31 } | 31 } |
| 32 | 32 |
| 33 final Foreign gettimeofday = Foreign.lookup('gettimeofday'); | 33 final ForeignFunction gettimeofday = ForeignLibrary.main.lookup('gettimeofday'); |
| 34 | 34 |
| 35 main() { | 35 main() { |
| 36 Timeval timeval = new Timeval(); | 36 Timeval timeval = new Timeval(); |
| 37 Expect.equals(0, gettimeofday.icall$2(timeval, 0)); | 37 Expect.equals(0, gettimeofday.icall$2(timeval, 0)); |
| 38 int start = timeval.tv_sec * 1000 + timeval.tv_usec ~/ 1000; | 38 int start = timeval.tv_sec * 1000 + timeval.tv_usec ~/ 1000; |
| 39 | 39 |
| 40 int sleepTime = 300; | 40 int sleepTime = 300; |
| 41 io.sleep(sleepTime); | 41 io.sleep(sleepTime); |
| 42 | 42 |
| 43 Expect.equals(0, gettimeofday.icall$2(timeval, 0)); | 43 Expect.equals(0, gettimeofday.icall$2(timeval, 0)); |
| 44 int end = timeval.tv_sec * 1000 + timeval.tv_usec ~/ 1000; | 44 int end = timeval.tv_sec * 1000 + timeval.tv_usec ~/ 1000; |
| 45 Expect.isTrue((end - start) >= sleepTime); | 45 Expect.isTrue((end - start) >= sleepTime); |
| 46 timeval.free(); | 46 timeval.free(); |
| 47 } | 47 } |
| OLD | NEW |