1 | var v8 = {
|
2 | statusTexts: [
|
3 | "Unknown",
|
4 | "Function is optimized",
|
5 | "Function is not optimized",
|
6 | "Function is always optimized",
|
7 | "Function is never optimized",
|
8 | "Function is maybe deoptimized",
|
9 | "Function is optimized by TurboFan"
|
10 | ]
|
11 | }
|
12 |
|
13 | try {
|
14 |
|
15 |
|
16 | [ "GetOptimizationStatus", "HasFastProperties", "OptimizeFunctionOnNextCall"].map(function(name) {
|
17 | v8[name] = Function("fn", "return %" + name+ "(fn)")
|
18 | })
|
19 | v8.isNative = true
|
20 | } catch(e) {}
|
21 |
|
22 | require("./index")
|
23 | .defineAssert("isFast", function isFast(obj, a, b, _stackStart) {
|
24 | this.ok(
|
25 | v8.HasFastProperties(obj),
|
26 | "Should have fast properties",
|
27 | 0,
|
28 | 0,
|
29 | _stackStart || isFast
|
30 | )
|
31 | }, !v8.HasFastProperties)
|
32 | .defineAssert("isNotFast", function isNotFast(obj, a, b, _stackStart) {
|
33 | this.ok(
|
34 | !v8.HasFastProperties(obj),
|
35 | "Should not have fast properties",
|
36 | 0,
|
37 | 0,
|
38 | _stackStart || isNotFast
|
39 | )
|
40 | }, !v8.HasFastProperties)
|
41 | .defineAssert("isOptimized", function isOptimized(fn, args, scope, _stackStart) {
|
42 | fn.apply(scope, args)
|
43 | fn.apply(scope, args)
|
44 | v8.OptimizeFunctionOnNextCall(fn)
|
45 | fn.apply(scope, args)
|
46 | var status = v8.GetOptimizationStatus(fn)
|
47 | |
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 | this.ok(
|
64 | status == 1 || (status & 16 || status & 32),
|
65 | v8.statusTexts[status],
|
66 | null,
|
67 | _stackStart || isOptimized
|
68 | )
|
69 | }, !v8.GetOptimizationStatus)
|
70 |
|
71 |
|