1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2025-03-17 20:17:48 +02:00

Cache commonly used C strings

This commit is contained in:
DarthSim 2019-01-28 22:20:54 +06:00
parent 4a89f0c355
commit 0b5c85f644

View File

@ -36,6 +36,8 @@ type cConfig struct {
var cConf cConfig
var cstrings map[string]*C.char
func initVips() {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
@ -117,6 +119,17 @@ func shutdownVips() {
C.vips_shutdown()
}
func cachedCString(str string) *C.char {
if cstr, ok := cstrings[str]; ok {
return cstr
}
cstr := C.CString(str)
cstrings[str] = cstr
return cstr
}
func extractMeta(img *C.VipsImage) (int, int, int, bool) {
width := int(img.Xsize)
height := int(img.Ysize)
@ -704,20 +717,14 @@ func vipsImageHasAlpha(img *C.struct__VipsImage) bool {
func vipsGetInt(img *C.struct__VipsImage, name string) (int, error) {
var i C.int
cname := C.CString(name)
defer C.free(unsafe.Pointer(cname))
if C.vips_image_get_int(img, cname, &i) != 0 {
if C.vips_image_get_int(img, cachedCString(name), &i) != 0 {
return 0, vipsError()
}
return int(i), nil
}
func vipsSetInt(img *C.struct__VipsImage, name string, value int) {
cname := C.CString(name)
defer C.free(unsafe.Pointer(cname))
C.vips_image_set_int(img, cname, C.int(value))
C.vips_image_set_int(img, cachedCString(name), C.int(value))
}
func vipsPremultiply(img **C.struct__VipsImage) (C.VipsBandFormat, error) {
@ -866,10 +873,7 @@ func vipsImportColourProfile(img **C.struct__VipsImage) error {
return err
}
cprofile := C.CString(profile)
defer C.free(unsafe.Pointer(cprofile))
if C.vips_icc_import_go(*img, &tmp, cprofile) != 0 {
if C.vips_icc_import_go(*img, &tmp, cachedCString(profile)) != 0 {
return vipsError()
}
C.swap_and_clear(img, tmp)