Use more macrology in JSC::Options
[WebKit-https.git] / Source / JavaScriptCore / runtime / Options.h
1 /*
2  * Copyright (C) 2011 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef Options_h
27 #define Options_h
28
29 #include <stdint.h>
30
31 namespace JSC { namespace Options {
32
33 // maximumInliningDepth is the maximum depth of inline stack, so 1 = no
34 // inlining, 2 = one level, etc
35
36 // couldTakeSlowCaseThreshold shouldn't be zero because some ops will spuriously
37 // take slow case, for example for linking or caching.
38
39 #define FOR_EACH_HEURISTIC(m) \
40     m(unsigned, maximumOptimizationCandidateInstructionCount, 1000) \
41     \
42     m(unsigned, maximumFunctionForCallInlineCandidateInstructionCount, 150) \
43     m(unsigned, maximumFunctionForConstructInlineCandidateInstructionCount, 80) \
44     \
45     m(unsigned, maximumInliningDepth, 5)                              \
46     \
47     m(int32_t, executionCounterValueForOptimizeAfterWarmUp,      -1000) \
48     m(int32_t, executionCounterValueForOptimizeAfterLongWarmUp,  -5000) \
49     m(int32_t, executionCounterValueForDontOptimizeAnytimeSoon,  std::numeric_limits<int32_t>::min()) \
50     m(int32_t, executionCounterValueForOptimizeSoon,             -1000) \
51     m(int32_t, executionCounterValueForOptimizeNextInvocation,   0) \
52     \
53     m(int32_t, executionCounterIncrementForLoop,       1) \
54     m(int32_t, executionCounterIncrementForReturn,     15) \
55     \
56     m(unsigned, desiredSpeculativeSuccessFailRatio,    6) \
57     \
58     m(double,   likelyToTakeSlowCaseThreshold,         0.15) \
59     m(double,   couldTakeSlowCaseThreshold,            0.05) \
60     m(unsigned, likelyToTakeSlowCaseMinimumCount,      100) \
61     m(unsigned, couldTakeSlowCaseMinimumCount,         10) \
62     \
63     m(double,   osrExitProminenceForFrequentExitSite,  0.3) \
64     \
65     m(unsigned, largeFailCountThresholdBase,           20) \
66     m(unsigned, largeFailCountThresholdBaseForLoop,    1) \
67     \
68     m(unsigned, reoptimizationRetryCounterMax,         0) \
69     m(unsigned, reoptimizationRetryCounterStep,        1) \
70     \
71     m(unsigned, minimumOptimizationDelay,              1) \
72     m(unsigned, maximumOptimizationDelay,              5) \
73     m(double, desiredProfileLivenessRate,              0.75) \
74     m(double, desiredProfileFullnessRate,              0.35) \
75     \
76     m(double,   doubleVoteRatioForDoubleFormat,        2) \
77     \
78     m(unsigned, minimumNumberOfScansBetweenRebalance,  10000) \
79     m(unsigned, gcMarkStackSegmentSize,                0) \
80     m(unsigned, minimumNumberOfCellsToKeep,            10) \
81     m(unsigned, maximumNumberOfSharedSegments,         3) \
82     m(unsigned, sharedStackWakeupThreshold,            1) \
83     m(unsigned, numberOfGCMarkers,                     0) \
84     m(unsigned, opaqueRootMergeThreshold,              1000)
85
86 #define FOR_EACH_OPTION(m) \
87     FOR_EACH_HEURISTIC(m)
88
89 #define DECLARE(type, cname, default_val) extern type cname;
90 FOR_EACH_OPTION(DECLARE)
91 #undef DECLARE
92
93 void initializeOptions();
94
95 } } // namespace JSC::Options
96
97 #endif // Options_h
98