UNPKG

2.49 kBJavaScriptView Raw
1var 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
13try {
14 // chrome --js-flags="--allow-natives-syntax" test.html
15 // node --allow-natives-syntax test.js
16 [ "GetOptimizationStatus", "HasFastProperties", "OptimizeFunctionOnNextCall"].map(function(name) {
17 v8[name] = Function("fn", "return %" + name+ "(fn)")
18 })
19 v8.isNative = true
20} catch(e) {}
21
22require("./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 0 0 0 0 0 1 0 0 0 0 0 1
49 ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬
50 │ │ │ │ │ │ │ │ │ │ │ └─╸ is function
51 │ │ │ │ │ │ │ │ │ │ └───╸ is never optimized
52 │ │ │ │ │ │ │ │ │ └─────╸ is always optimized
53 │ │ │ │ │ │ │ │ └───────╸ is maybe deoptimized
54 │ │ │ │ │ │ │ └─────────╸ is optimized
55 │ │ │ │ │ │ └───────────╸ is optimized by TurboFan
56 │ │ │ │ │ └─────────────╸ is interpreted
57 │ │ │ │ └───────────────╸ is marked for optimization
58 │ │ │ └─────────────────╸ is marked for concurrent optimization
59 │ │ └───────────────────╸ is optimizing concurrently
60 │ └─────────────────────╸ is executing
61 └───────────────────────╸ topmost frame is turbo fanned */
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