diff --git a/compat.go b/compat.go index 4e9f79c..48a1717 100644 --- a/compat.go +++ b/compat.go @@ -1,3 +1,4 @@ +//go:build !amd64 // +build !amd64 /* @@ -22,6 +23,9 @@ import ( `bytes` `encoding/json` `io` + `reflect` + + `github.com/bytedance/sonic/option` ) type frozenConfig struct { @@ -114,4 +118,16 @@ func (cfg *frozenConfig) NewDecoder(reader io.Reader) Decoder { // Valid is implemented by sonic func (cfg *frozenConfig) Valid(data []byte) bool { return json.Valid(data) -} \ No newline at end of file +} + + +// Pretouch compiles vt ahead-of-time to avoid JIT compilation on-the-fly, in +// order to reduce the first-hit latency at **amd64** Arch. +// Opts are the compile options, for example, "option.WithCompileRecursiveDepth" is +// a compile option to set the depth of recursive compile for the nested struct type. +// * This is the none implement for !amd64. +// It will be useful for someone who develop with !amd64 arch,like Mac M1. +func Pretouch(vt reflect.Type, opts ...option.CompileOption) error { + return nil +} + diff --git a/compat_test.go b/compat_test.go new file mode 100644 index 0000000..697bcbe --- /dev/null +++ b/compat_test.go @@ -0,0 +1,42 @@ +//go:build !amd64 +// +build !amd64 + +/* + * Copyright 2022 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sonic + +import ( + `reflect` + `testing` + + `github.com/bytedance/sonic/option` +) + +func TestPretouch(t *testing.T) { + var v map[string]interface{} + if err := Pretouch(reflect.TypeOf(v)); err != nil { + t.Errorf("err:%v", err) + } + + if err := Pretouch(reflect.TypeOf(v), + option.WithCompileRecursiveDepth(1), + option.WithCompileMaxInlineDepth(2), + ); err != nil { + t.Errorf("err:%v", err) + } +} +