OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "Interval.h" | 6 #include "Interval.h" |
7 #include "wtf/CurrentTime.h" | 7 #include "wtf/CurrentTime.h" |
8 | 8 |
9 namespace WebCore { | 9 namespace WebCore { |
10 | 10 |
11 const char* kIntervalExtensionName = "v8/Interval"; | 11 const char* kIntervalExtensionName = "v8/Interval"; |
12 | 12 |
13 class IntervalExtensionWrapper : public v8::Extension { | 13 class IntervalExtensionWrapper : public v8::Extension { |
14 public: | 14 public: |
15 IntervalExtensionWrapper() : | 15 IntervalExtensionWrapper() : |
16 v8::Extension(kIntervalExtensionName, | 16 v8::Extension(kIntervalExtensionName, |
17 "native function HiResTime();" | 17 "var chromium;" |
18 "function Interval() {" | 18 "if (!chromium)" |
| 19 " chromium = {};" |
| 20 "chromium.Interval = function() {" |
19 " var start_ = 0;" | 21 " var start_ = 0;" |
20 " var stop_ = 0;" | 22 " var stop_ = 0;" |
| 23 " native function HiResTime();" |
21 " this.start = function() {" | 24 " this.start = function() {" |
| 25 " stop_ = 0;" |
22 " start_ = HiResTime();" | 26 " start_ = HiResTime();" |
23 " };" | 27 " };" |
24 " this.stop = function() {" | 28 " this.stop = function() {" |
25 " stop_ = HiResTime();" | 29 " stop_ = HiResTime();" |
26 " if (start_ == 0)" | 30 " if (start_ == 0)" |
27 " stop_ = 0;" | 31 " stop_ = 0;" |
28 " };" | 32 " };" |
29 " this.microseconds = function() {" | 33 " this.microseconds = function() {" |
30 " if (stop_ == 0)" | 34 " var stop = stop_;" |
31 " stop();" | 35 " if (stop == 0 && start_ != 0)" |
32 " return Math.ceil((stop_ - start_) * 1000000);" | 36 " stop = HiResTime();" |
| 37 " return Math.ceil((stop - start_) * 1000000);" |
33 " };" | 38 " };" |
34 "}") {}; | 39 "}") {}; |
35 | 40 |
36 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(v8::Handle<v8::St
ring> name) { | 41 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(v8::Handle<v8::St
ring> name) { |
37 if (name->Equals(v8::String::New("HiResTime"))) | 42 if (name->Equals(v8::String::New("HiResTime"))) |
38 return v8::FunctionTemplate::New(HiResTime); | 43 return v8::FunctionTemplate::New(HiResTime); |
39 return v8::Handle<v8::FunctionTemplate>(); | 44 return v8::Handle<v8::FunctionTemplate>(); |
40 } | 45 } |
41 | 46 |
42 static v8::Handle<v8::Value> HiResTime(const v8::Arguments& args) { | 47 static v8::Handle<v8::Value> HiResTime(const v8::Arguments& args) { |
43 return v8::Number::New(WTF::currentTime()); | 48 return v8::Number::New(WTF::currentTime()); |
44 } | 49 } |
45 }; | 50 }; |
46 | 51 |
47 v8::Extension* IntervalExtension::Get() { | 52 v8::Extension* IntervalExtension::Get() { |
48 return new IntervalExtensionWrapper(); | 53 return new IntervalExtensionWrapper(); |
49 } | 54 } |
50 | 55 |
51 } | 56 } |
52 | 57 |
OLD | NEW |