podman

Форк
0
85 строк · 2.8 Кб
1
/*
2
 * Copyright 2021 ByteDance Inc.
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *     http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16

17
package option
18

19
var (
20
    // DefaultDecoderBufferSize is the initial buffer size of StreamDecoder
21
    DefaultDecoderBufferSize  uint = 128 * 1024
22

23
    // DefaultEncoderBufferSize is the initial buffer size of Encoder
24
    DefaultEncoderBufferSize  uint = 128 * 1024
25
)
26

27
// CompileOptions includes all options for encoder or decoder compiler.
28
type CompileOptions struct {
29
    // the maximum depth for compilation inline
30
    MaxInlineDepth int
31

32
    // the loop times for recursively pretouch
33
    RecursiveDepth int
34
}
35

36
var (
37
    // Default value(3) means the compiler only inline 3 layers of nested struct. 
38
    // when the depth exceeds, the compiler will recurse 
39
    // and compile subsequent structs when they are decoded 
40
    DefaultMaxInlineDepth = 3
41

42
    // Default value(1) means `Pretouch()` will be recursively executed once,
43
    // if any nested struct is left (depth exceeds MaxInlineDepth)
44
    DefaultRecursiveDepth = 1
45
)
46

47
// DefaultCompileOptions set default compile options.
48
func DefaultCompileOptions() CompileOptions {
49
    return CompileOptions{
50
        RecursiveDepth: DefaultRecursiveDepth,
51
        MaxInlineDepth: DefaultMaxInlineDepth,
52
    }
53
}
54

55
// CompileOption is a function used to change DefaultCompileOptions.
56
type CompileOption func(o *CompileOptions)
57

58
// WithCompileRecursiveDepth sets the loop times of recursive pretouch 
59
// in both decoder and encoder,
60
// for both concrete type and its pointer type.
61
//
62
// For deep nested struct (depth exceeds MaxInlineDepth), 
63
// try to set more loops to completely compile, 
64
// thus reduce JIT unstability in the first hit.
65
func WithCompileRecursiveDepth(loop int) CompileOption {
66
    return func(o *CompileOptions) {
67
            if loop < 0 {
68
                panic("loop must be >= 0")
69
            }
70
            o.RecursiveDepth = loop
71
        }
72
}
73

74
// WithCompileMaxInlineDepth sets the max depth of inline compile 
75
// in decoder and encoder.
76
//
77
// For large nested struct, try to set smaller depth to reduce compiling time.
78
func WithCompileMaxInlineDepth(depth int) CompileOption {
79
    return func(o *CompileOptions) {
80
            if depth <= 0 {
81
                panic("depth must be > 0")
82
            }
83
            o.MaxInlineDepth = depth
84
        }
85
}
86
 

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.