Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't inline certain functions for smaller binary size #101964

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

YYF233333
Copy link
Contributor

@YYF233333 YYF233333 commented Jan 23, 2025

AFAIK godot has a long standing issue that its binary size is too big for web platform which leads to slow starup time. See #68647 for more details. I profile the binary size a bit with SizeBench and apply several suggestions.

What I have done:

  • no inline String::~String()(~-5MB), StringName:~StringName(~-1MB), _err_print_error(~-200KB)
  • Make _FORCE_INLINE_ a no-op.
  • remove unused virtual qualifier for Object::call_const (~-10KB) (I wonder if this can be automated, some of these functions are configuration-dependent, e.g. Object::setvar() overriden on web but not on Windows. Manually doing this is time-consuming and prone to errors.)(These unused virtuals waste approximately 2.8MB of space in total.)

These changes are guarded by a SIZE_EXTRA macro and can be enabled by passing optimize=size_extra from cmd.

Result(Web Release):
compile with scons p=web target=template_release optimize=size_extra production=yes

  • godot.wasm
    • master 41,664,454 bytes
    • this PR 30,784,747 bytes
  • the whole zip package
    • master 9,421,090 bytes
    • this PR 8,706,984 bytes

Performance impact: 5%~10%, measured by godot-benchmark exported to web. #101964 (comment)

@dustdfg
Copy link
Contributor

dustdfg commented Jan 23, 2025

(I have no enough mem for full LTO)

If you are a linux user did you try to use zram? It will be a bit slower when real ram is fully occupied but it will be very fast in comparison to swap

@YYF233333
Copy link
Contributor Author

YYF233333 commented Jan 24, 2025

If you are a linux user did you try to use zram? It will be a bit slower when real ram is fully occupied but it will be very fast in comparison to swap

Thanks but I'm on Windows 😭

Run some quick benchmarks in godot benchmark. Skipping gpu bound tests (I think nobody cares about the results with poor UHD 730). Datas already averaged between 3 identical runs.

Results
{
	"category": "Asset Import Export > Runtime",
	"name": "Export Gltf",
	"results": {
		"time": {
			"master": 85.28,
			"pr": 83.12,
			"master_div_pr": 1.0259865255052936
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Fbx",
	"results": {
		"time": {
			"master": 465.2,
			"pr": 456.8,
			"master_div_pr": 1.0183887915936953
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Gltf",
	"results": {
		"time": {
			"master": 41.88,
			"pr": 42.82,
			"master_div_pr": 0.9780476412891173
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Ogg Audio",
	"results": {
		"time": {
			"master": 6.522,
			"pr": 6.061,
			"master_div_pr": 1.0760600560963538
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Webp Images",
	"results": {
		"time": {
			"master": 880.4,
			"pr": 876.0,
			"master_div_pr": 1.0050228310502283
		}
	}
}
{
	"category": "Core > Array",
	"name": "Append Array",
	"results": {
		"time": {
			"master": 266.2,
			"pr": 266.6,
			"master_div_pr": 0.9984996249062265
		}
	}
}
{
	"category": "Core > Array",
	"name": "Bsearch",
	"results": {
		"time": {
			"master": 104.5,
			"pr": 104.4,
			"master_div_pr": 1.0009578544061302
		}
	}
}
{
	"category": "Core > Array",
	"name": "Fill",
	"results": {
		"time": {
			"master": 59.64,
			"pr": 55.17,
			"master_div_pr": 1.0810222947253942
		}
	}
}
{
	"category": "Core > Array",
	"name": "Reverse",
	"results": {
		"time": {
			"master": 33.67,
			"pr": 34.83,
			"master_div_pr": 0.9666953775480909
		}
	}
}
{
	"category": "Core > Callable",
	"name": "Function Callable",
	"results": {
		"time": {
			"master": 322.2,
			"pr": 332.6,
			"master_div_pr": 0.9687312086590498
		}
	}
}
{
	"category": "Core > Callable",
	"name": "Lambda Inline Callable",
	"results": {
		"time": {
			"master": 428.5,
			"pr": 431.1,
			"master_div_pr": 0.9939689167246578
		}
	}
}
{
	"category": "Core > Callable",
	"name": "Lambda Variable Callable",
	"results": {
		"time": {
			"master": 108.3,
			"pr": 112.9,
			"master_div_pr": 0.9592559787422497
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Load",
	"results": {
		"time": {
			"master": 48.45,
			"pr": 48.86,
			"master_div_pr": 0.9916086778550962
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Load With Password",
	"results": {
		"time": {
			"master": 50.3,
			"pr": 49.93,
			"master_div_pr": 1.007410374524334
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Save",
	"results": {
		"time": {
			"master": 51.0,
			"pr": 49.54,
			"master_div_pr": 1.0294711344368188
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Save With Password",
	"results": {
		"time": {
			"master": 53.6,
			"pr": 53.36,
			"master_div_pr": 1.0044977511244377
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate 1g Random Bytes 1k At A Time",
	"results": {
		"time": {
			"master": 1242.0,
			"pr": 1235.0,
			"master_div_pr": 1.0056680161943319
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate 1m Random Bytes 10 At A Time",
	"results": {
		"time": {
			"master": 2193.0,
			"pr": 2174.0,
			"master_div_pr": 1.0087396504139834
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate Rsa 2048",
	"results": {
		"time": {
			"master": 91.36,
			"pr": 196.8,
			"master_div_pr": 0.4642276422764227
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate Rsa 4096",
	"results": {
		"time": {
			"master": 2758.0,
			"pr": 1260.0,
			"master_div_pr": 2.188888888888889
		}
	}
}
{
	"category": "Core > Node Path",
	"name": "Create",
	"results": {
		"time": {
			"master": 17.02,
			"pr": 17.33,
			"master_div_pr": 0.9821119446047317
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Full Contention",
	"results": {
		"time": {
			"master": 593.8,
			"pr": 590.1,
			"master_div_pr": 1.006270123707846
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Half Contention",
	"results": {
		"time": {
			"master": 312.3,
			"pr": 314.4,
			"master_div_pr": 0.993320610687023
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Little Contention",
	"results": {
		"time": {
			"master": 80.13,
			"pr": 79.13,
			"master_div_pr": 1.0126374320738025
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Slope Contention",
	"results": {
		"time": {
			"master": 362.6,
			"pr": 356.7,
			"master_div_pr": 1.0165405102326885
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "2 Threads Full Contention",
	"results": {
		"time": {
			"master": 64.25,
			"pr": 62.5,
			"master_div_pr": 1.028
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "2 Threads Half Contention",
	"results": {
		"time": {
			"master": 42.49,
			"pr": 41.6,
			"master_div_pr": 1.0213942307692307
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "2 Threads Little Contention",
	"results": {
		"time": {
			"master": 25.83,
			"pr": 25.41,
			"master_div_pr": 1.0165289256198347
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Full Contention",
	"results": {
		"time": {
			"master": 174.5,
			"pr": 167.0,
			"master_div_pr": 1.0449101796407185
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Half Contention",
	"results": {
		"time": {
			"master": 95.3,
			"pr": 96.81,
			"master_div_pr": 0.9844024377646937
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Little Contention",
	"results": {
		"time": {
			"master": 37.76,
			"pr": 36.74,
			"master_div_pr": 1.0277626565051714
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Slope Contention",
	"results": {
		"time": {
			"master": 134.6,
			"pr": 134.0,
			"master_div_pr": 1.0044776119402985
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Full Contention",
	"results": {
		"time": {
			"master": 379.3,
			"pr": 373.5,
			"master_div_pr": 1.015528781793842
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Half Contention",
	"results": {
		"time": {
			"master": 201.6,
			"pr": 202.9,
			"master_div_pr": 0.9935929029078363
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Little Contention",
	"results": {
		"time": {
			"master": 58.26,
			"pr": 55.87,
			"master_div_pr": 1.0427778772149634
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Slope Contention",
	"results": {
		"time": {
			"master": 243.9,
			"pr": 239.3,
			"master_div_pr": 1.0192227329711658
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "Single",
	"results": {
		"time": {
			"master": 21.6,
			"pr": 21.3,
			"master_div_pr": 1.0140845070422535
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randf",
	"results": {
		"time": {
			"master": 107.5,
			"pr": 106.8,
			"master_div_pr": 1.006554307116105
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randf Range",
	"results": {
		"time": {
			"master": 352.3,
			"pr": 345.5,
			"master_div_pr": 1.0196816208393633
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randfn",
	"results": {
		"time": {
			"master": 831.6,
			"pr": 821.5,
			"master_div_pr": 1.0122945830797323
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randi",
	"results": {
		"time": {
			"master": 96.15,
			"pr": 96.75,
			"master_div_pr": 0.9937984496124032
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randi Range",
	"results": {
		"time": {
			"master": 136.8,
			"pr": 137.6,
			"master_div_pr": 0.994186046511628
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randomize",
	"results": {
		"time": {
			"master": 842.5,
			"pr": 820.9,
			"master_div_pr": 1.0263125837495433
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randf",
	"results": {
		"time": {
			"master": 264.7,
			"pr": 263.7,
			"master_div_pr": 1.0037921880925293
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randf Range",
	"results": {
		"time": {
			"master": 291.2,
			"pr": 293.2,
			"master_div_pr": 0.9931787175989086
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randfn",
	"results": {
		"time": {
			"master": 809.6,
			"pr": 807.7,
			"master_div_pr": 1.0023523585489662
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randi",
	"results": {
		"time": {
			"master": 72.7,
			"pr": 70.6,
			"master_div_pr": 1.029745042492918
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randi Range",
	"results": {
		"time": {
			"master": 109.6,
			"pr": 110.3,
			"master_div_pr": 0.9936536718041704
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randomize",
	"results": {
		"time": {
			"master": 852.8,
			"pr": 841.4,
			"master_div_pr": 1.013548847159496
		}
	}
}
{
	"category": "Core > Signal",
	"name": "Emission Params 0",
	"results": {
		"time": {
			"master": 206.8,
			"pr": 228.0,
			"master_div_pr": 0.9070175438596492
		}
	}
}
{
	"category": "Core > Signal",
	"name": "Emission Params 1",
	"results": {
		"time": {
			"master": 207.6,
			"pr": 225.9,
			"master_div_pr": 0.9189907038512616
		}
	}
}
{
	"category": "Core > Signal",
	"name": "Emission Params 10",
	"results": {
		"time": {
			"master": 245.9,
			"pr": 247.1,
			"master_div_pr": 0.9951436665317686
		}
	}
}
{
	"category": "Core > String Name",
	"name": "Create",
	"results": {
		"time": {
			"master": 18.12,
			"pr": 18.35,
			"master_div_pr": 0.9874659400544958
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Deep Tree",
	"results": {
		"time": {
			"master": 201.0,
			"pr": 207.6,
			"master_div_pr": 0.9682080924855492
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Duplicate",
	"results": {
		"time": {
			"master": 1475.0,
			"pr": 1384.0,
			"master_div_pr": 1.0657514450867052
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Fragmentation",
	"results": {
		"time": {
			"master": 2188.0,
			"pr": 2208.0,
			"master_div_pr": 0.9909420289855072
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Wide Tree",
	"results": {
		"time": {
			"master": 156.8,
			"pr": 156.2,
			"master_div_pr": 1.003841229193342
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Fill Loop",
	"results": {
		"time": {
			"master": 219.2,
			"pr": 216.2,
			"master_div_pr": 1.0138760407030527
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Fill Method",
	"results": {
		"time": {
			"master": 83.24,
			"pr": 82.86,
			"master_div_pr": 1.0045860487569394
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Color Array",
	"results": {
		"time": {
			"master": 140.2,
			"pr": 140.4,
			"master_div_pr": 0.9985754985754984
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Float 32 Array",
	"results": {
		"time": {
			"master": 108.4,
			"pr": 103.9,
			"master_div_pr": 1.0433108758421559
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Float 64 Array",
	"results": {
		"time": {
			"master": 107.1,
			"pr": 109.7,
			"master_div_pr": 0.9762989972652688
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Int 32 Array",
	"results": {
		"time": {
			"master": 81.81,
			"pr": 82.37,
			"master_div_pr": 0.9932014082797135
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Int 64 Array",
	"results": {
		"time": {
			"master": 85.87,
			"pr": 85.76,
			"master_div_pr": 1.0012826492537312
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed String Array",
	"results": {
		"time": {
			"master": 684.2,
			"pr": 694.0,
			"master_div_pr": 0.9858789625360231
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Vector 2 Array",
	"results": {
		"time": {
			"master": 115.4,
			"pr": 112.7,
			"master_div_pr": 1.0239574090505768
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Vector 3 Array",
	"results": {
		"time": {
			"master": 130.2,
			"pr": 130.1,
			"master_div_pr": 1.0007686395080706
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Color Array",
	"results": {
		"time": {
			"master": 210.2,
			"pr": 211.3,
			"master_div_pr": 0.994794131566493
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Float Array",
	"results": {
		"time": {
			"master": 174.8,
			"pr": 172.6,
			"master_div_pr": 1.0127462340672075
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Int Array",
	"results": {
		"time": {
			"master": 159.9,
			"pr": 159.1,
			"master_div_pr": 1.0050282840980516
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed String Array",
	"results": {
		"time": {
			"master": 813.3,
			"pr": 801.4,
			"master_div_pr": 1.014849014225106
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Vector 2 Array",
	"results": {
		"time": {
			"master": 189.7,
			"pr": 189.2,
			"master_div_pr": 1.0026427061310783
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Vector 3 Array",
	"results": {
		"time": {
			"master": 202.0,
			"pr": 201.4,
			"master_div_pr": 1.002979145978153
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Color Array",
	"results": {
		"time": {
			"master": 292.6,
			"pr": 297.5,
			"master_div_pr": 0.983529411764706
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Float Array",
	"results": {
		"time": {
			"master": 244.0,
			"pr": 245.7,
			"master_div_pr": 0.9930809930809932
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Int Array",
	"results": {
		"time": {
			"master": 242.7,
			"pr": 241.1,
			"master_div_pr": 1.006636250518457
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped String Array",
	"results": {
		"time": {
			"master": 893.6,
			"pr": 896.7,
			"master_div_pr": 0.9965428794468607
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Vector 2 Array",
	"results": {
		"time": {
			"master": 271.3,
			"pr": 271.1,
			"master_div_pr": 1.00073773515308
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Vector 3 Array",
	"results": {
		"time": {
			"master": 280.7,
			"pr": 281.7,
			"master_div_pr": 0.9964501242456514
		}
	}
}
{
	"category": "Gdscript > Binary Trees",
	"name": "Binary Trees 13",
	"results": {
		"time": {
			"master": 522.3,
			"pr": 505.8,
			"master_div_pr": 1.0326215895610913
		}
	}
}
{
	"category": "Gdscript > Binary Trees",
	"name": "Binary Trees 15",
	"results": {
		"time": {
			"master": 2462.0,
			"pr": 2434.0,
			"master_div_pr": 1.0115036976170912
		}
	}
}
{
	"category": "Gdscript > Control",
	"name": "Control",
	"results": {
		"time": {
			"master": 0.006667,
			"pr": 0.005667,
			"master_div_pr": 1.1764602082230458
		}
	}
}
{
	"category": "Gdscript > For Loop",
	"name": "For Loop Add",
	"results": {
		"time": {
			"master": 8.016,
			"pr": 8.341,
			"master_div_pr": 0.961035847020741
		}
	}
}
{
	"category": "Gdscript > For Loop",
	"name": "For Loop Call",
	"results": {
		"time": {
			"master": 61.03,
			"pr": 60.35,
			"master_div_pr": 1.0112676056338028
		}
	}
}
{
	"category": "Gdscript > Hello World",
	"name": "Hello World",
	"results": {
		"time": {
			"master": 0.083,
			"pr": 0.07733,
			"master_div_pr": 1.073322125953705
		}
	}
}
{
	"category": "Gdscript > Lambda Performance",
	"name": "Lambda Call",
	"results": {
		"time": {
			"master": 55.92,
			"pr": 57.85,
			"master_div_pr": 0.9666378565254969
		}
	}
}
{
	"category": "Gdscript > Mandelbrot Set",
	"name": "Mandelbrot Set",
	"results": {
		"time": {
			"master": 2338.0,
			"pr": 2259.0,
			"master_div_pr": 1.034971226206286
		}
	}
}
{
	"category": "Gdscript > Merkle Trees",
	"name": "Merkle Trees 13",
	"results": {
		"time": {
			"master": 1642.0,
			"pr": 1602.0,
			"master_div_pr": 1.024968789013733
		}
	}
}
{
	"category": "Gdscript > Merkle Trees",
	"name": "Merkle Trees 15",
	"results": {
		"time": {
			"master": 8083.0,
			"pr": 7972.0,
			"master_div_pr": 1.01392373306573
		}
	}
}
{
	"category": "Gdscript > Nbody",
	"name": "Nbody 1 000 000",
	"results": {
		"time": {
			"master": 6099.0,
			"pr": 6014.0,
			"master_div_pr": 1.0141336880611906
		}
	}
}
{
	"category": "Gdscript > Nbody",
	"name": "Nbody 500 000",
	"results": {
		"time": {
			"master": 3073.0,
			"pr": 3011.0,
			"master_div_pr": 1.0205911657256725
		}
	}
}
{
	"category": "Gdscript > Spectral Norm",
	"name": "Spectral Norm 100",
	"results": {
		"time": {
			"master": 49.85,
			"pr": 49.36,
			"master_div_pr": 1.0099270664505673
		}
	}
}
{
	"category": "Gdscript > Spectral Norm",
	"name": "Spectral Norm 1000",
	"results": {
		"time": {
			"master": 4663.0,
			"pr": 4574.0,
			"master_div_pr": 1.019457804984696
		}
	}
}
{
	"category": "Gdscript > Spectral Norm",
	"name": "Spectral Norm 500",
	"results": {
		"time": {
			"master": 1180.0,
			"pr": 1142.0,
			"master_div_pr": 1.0332749562171628
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Buffer Empty",
	"results": {
		"time": {
			"master": 217.0,
			"pr": 213.6,
			"master_div_pr": 1.0159176029962547
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Buffer Non Empty",
	"results": {
		"time": {
			"master": 664.7,
			"pr": 662.9,
			"master_div_pr": 1.0027153416804948
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Text Empty",
	"results": {
		"time": {
			"master": 177.8,
			"pr": 175.0,
			"master_div_pr": 1.016
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Text Non Empty",
	"results": {
		"time": {
			"master": 621.6,
			"pr": 628.9,
			"master_div_pr": 0.9883924312291303
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Buffer Empty",
	"results": {
		"time": {
			"master": 192.8,
			"pr": 191.9,
			"master_div_pr": 1.0046899426784783
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Buffer Non Empty",
	"results": {
		"time": {
			"master": 585.2,
			"pr": 579.1,
			"master_div_pr": 1.0105335865998963
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Text Empty",
	"results": {
		"time": {
			"master": 161.1,
			"pr": 156.6,
			"master_div_pr": 1.028735632183908
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Text Non Empty",
	"results": {
		"time": {
			"master": 564.1,
			"pr": 536.3,
			"master_div_pr": 1.0518366585866121
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Buffer Empty",
	"results": {
		"time": {
			"master": 274.9,
			"pr": 273.5,
			"master_div_pr": 1.0051188299817184
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Buffer Non Empty",
	"results": {
		"time": {
			"master": 918.1,
			"pr": 924.0,
			"master_div_pr": 0.9936147186147186
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Text Empty",
	"results": {
		"time": {
			"master": 265.1,
			"pr": 241.3,
			"master_div_pr": 1.0986324077911314
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Text Non Empty",
	"results": {
		"time": {
			"master": 951.4,
			"pr": 889.3,
			"master_div_pr": 1.069830203530867
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Complex Variable Concatenate",
	"results": {
		"time": {
			"master": 2125.0,
			"pr": 2137.0,
			"master_div_pr": 0.9943846513804399
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Complex Variable Method",
	"results": {
		"time": {
			"master": 3986.0,
			"pr": 3971.0,
			"master_div_pr": 1.0037773860488541
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Complex Variable Percent",
	"results": {
		"time": {
			"master": 2975.0,
			"pr": 2992.0,
			"master_div_pr": 0.9943181818181818
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "No Op Constant Method",
	"results": {
		"time": {
			"master": 193.0,
			"pr": 188.6,
			"master_div_pr": 1.0233297985153764
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Concatenate",
	"results": {
		"time": {
			"master": 2.892,
			"pr": 2.975,
			"master_div_pr": 0.9721008403361344
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Method",
	"results": {
		"time": {
			"master": 814.8,
			"pr": 839.1,
			"master_div_pr": 0.9710404004290311
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Method Constant Dict",
	"results": {
		"time": {
			"master": 541.0,
			"pr": 568.6,
			"master_div_pr": 0.9514597256419275
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Percent",
	"results": {
		"time": {
			"master": 2.889,
			"pr": 2.98,
			"master_div_pr": 0.9694630872483221
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Variable Concatenate",
	"results": {
		"time": {
			"master": 213.4,
			"pr": 214.3,
			"master_div_pr": 0.9958002799813346
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Variable Method",
	"results": {
		"time": {
			"master": 808.1,
			"pr": 843.9,
			"master_div_pr": 0.9575779120748904
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Variable Percent",
	"results": {
		"time": {
			"master": 464.6,
			"pr": 476.4,
			"master_div_pr": 0.975230898404702
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Begins With",
	"results": {
		"time": {
			"master": 11.19,
			"pr": 11.3,
			"master_div_pr": 0.9902654867256636
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Bigrams",
	"results": {
		"time": {
			"master": 688.5,
			"pr": 677.7,
			"master_div_pr": 1.0159362549800797
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Capitalize",
	"results": {
		"time": {
			"master": 1221.0,
			"pr": 1292.0,
			"master_div_pr": 0.945046439628483
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Casecmp To",
	"results": {
		"time": {
			"master": 9.795,
			"pr": 9.771,
			"master_div_pr": 1.0024562480810562
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Contains",
	"results": {
		"time": {
			"master": 9.645,
			"pr": 9.573,
			"master_div_pr": 1.0075211532434973
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Contains Gdscript In",
	"results": {
		"time": {
			"master": 2.889,
			"pr": 2.881,
			"master_div_pr": 1.0027768136063866
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Count",
	"results": {
		"time": {
			"master": 59.84,
			"pr": 61.28,
			"master_div_pr": 0.9765013054830287
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Countn",
	"results": {
		"time": {
			"master": 268.2,
			"pr": 248.3,
			"master_div_pr": 1.080144985904148
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Ends With",
	"results": {
		"time": {
			"master": 10.78,
			"pr": 10.74,
			"master_div_pr": 1.0037243947858472
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Find",
	"results": {
		"time": {
			"master": 44.46,
			"pr": 46.83,
			"master_div_pr": 0.9493914157591288
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Findn",
	"results": {
		"time": {
			"master": 64.13,
			"pr": 64.39,
			"master_div_pr": 0.9959621059170678
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Get Slice",
	"results": {
		"time": {
			"master": 82.66,
			"pr": 81.87,
			"master_div_pr": 1.0096494442408697
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Get Slice Count",
	"results": {
		"time": {
			"master": 22.87,
			"pr": 23.16,
			"master_div_pr": 0.9874784110535406
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Humanize Size",
	"results": {
		"time": {
			"master": 937.5,
			"pr": 959.3,
			"master_div_pr": 0.9772750964244762
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Insert",
	"results": {
		"time": {
			"master": 71.69,
			"pr": 69.83,
			"master_div_pr": 1.0266361162824
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Is Valid Filename",
	"results": {
		"time": {
			"master": 26.01,
			"pr": 26.47,
			"master_div_pr": 0.982621836040801
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Lpad",
	"results": {
		"time": {
			"master": 232.0,
			"pr": 230.6,
			"master_div_pr": 1.0060711188204683
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Naturalnocasecmp To",
	"results": {
		"time": {
			"master": 12.59,
			"pr": 12.64,
			"master_div_pr": 0.9960443037974683
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Nocasecmp To",
	"results": {
		"time": {
			"master": 37.03,
			"pr": 35.54,
			"master_div_pr": 1.041924592009004
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Decimals",
	"results": {
		"time": {
			"master": 495.7,
			"pr": 493.6,
			"master_div_pr": 1.004254457050243
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Decimals Pre Constructed",
	"results": {
		"time": {
			"master": 83.92,
			"pr": 82.69,
			"master_div_pr": 1.0148748337162898
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Zeros",
	"results": {
		"time": {
			"master": 358.4,
			"pr": 356.5,
			"master_div_pr": 1.005329593267882
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Zeros Pre Constructed",
	"results": {
		"time": {
			"master": 232.6,
			"pr": 227.5,
			"master_div_pr": 1.0224175824175823
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rfind",
	"results": {
		"time": {
			"master": 47.6,
			"pr": 48.87,
			"master_div_pr": 0.9740126867198691
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rfindn",
	"results": {
		"time": {
			"master": 169.7,
			"pr": 168.0,
			"master_div_pr": 1.0101190476190476
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rpad",
	"results": {
		"time": {
			"master": 182.7,
			"pr": 182.1,
			"master_div_pr": 1.0032948929159802
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rsplit",
	"results": {
		"time": {
			"master": 484.0,
			"pr": 491.9,
			"master_div_pr": 0.983939825167717
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Similarity",
	"results": {
		"time": {
			"master": 34.1,
			"pr": 26.49,
			"master_div_pr": 1.2872782181955456
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Simplify Path",
	"results": {
		"time": {
			"master": 1400.0,
			"pr": 1398.0,
			"master_div_pr": 1.0014306151645207
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Split",
	"results": {
		"time": {
			"master": 439.4,
			"pr": 464.7,
			"master_div_pr": 0.9455562728642134
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Split Floats",
	"results": {
		"time": {
			"master": 357.1,
			"pr": 356.8,
			"master_div_pr": 1.000840807174888
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Substr",
	"results": {
		"time": {
			"master": 70.23,
			"pr": 70.18,
			"master_div_pr": 1.00071245369051
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Camel Case",
	"results": {
		"time": {
			"master": 581.0,
			"pr": 617.9,
			"master_div_pr": 0.9402815989642337
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Lower",
	"results": {
		"time": {
			"master": 189.5,
			"pr": 200.7,
			"master_div_pr": 0.9441953163926259
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Pascal Case",
	"results": {
		"time": {
			"master": 1404.0,
			"pr": 1482.0,
			"master_div_pr": 0.9473684210526315
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Snake Case",
	"results": {
		"time": {
			"master": 1026.0,
			"pr": 1085.0,
			"master_div_pr": 0.9456221198156682
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Utf 16 Buffer",
	"results": {
		"time": {
			"master": 165.9,
			"pr": 166.6,
			"master_div_pr": 0.9957983193277311
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Utf 32 Buffer",
	"results": {
		"time": {
			"master": 113.6,
			"pr": 112.2,
			"master_div_pr": 1.0124777183600713
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Utf 8 Buffer",
	"results": {
		"time": {
			"master": 163.1,
			"pr": 168.5,
			"master_div_pr": 0.9679525222551928
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Wchar Buffer",
	"results": {
		"time": {
			"master": 164.5,
			"pr": 166.2,
			"master_div_pr": 0.989771359807461
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Uri Decode",
	"results": {
		"time": {
			"master": 565.1,
			"pr": 567.6,
			"master_div_pr": 0.9955954897815363
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Uri Encode",
	"results": {
		"time": {
			"master": 440.8,
			"pr": 443.6,
			"master_div_pr": 0.993688007213706
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Validate Filename",
	"results": {
		"time": {
			"master": 335.5,
			"pr": 345.1,
			"master_div_pr": 0.9721819762387713
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Validate Node Name",
	"results": {
		"time": {
			"master": 101.3,
			"pr": 92.4,
			"master_div_pr": 1.0963203463203461
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Xml Escape",
	"results": {
		"time": {
			"master": 478.4,
			"pr": 479.5,
			"master_div_pr": 0.9977059436913451
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Xml Unescape",
	"results": {
		"time": {
			"master": 85.74,
			"pr": 86.41,
			"master_div_pr": 0.9922462677930795
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Both Clean And Simplify",
	"results": {
		"time": {
			"master": 4971.0,
			"pr": 5119.0,
			"master_div_pr": 0.9710881031451455
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Only Clean",
	"results": {
		"time": {
			"master": 5000.0,
			"pr": 5112.0,
			"master_div_pr": 0.9780907668231612
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Only Simplify",
	"results": {
		"time": {
			"master": 19.25,
			"pr": 18.89,
			"master_div_pr": 1.019057702488089
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Quickest",
	"results": {
		"time": {
			"master": 19.42,
			"pr": 17.25,
			"master_div_pr": 1.1257971014492754
		}
	}
}
{
	"category": "Math > Delaunay 2d",
	"name": "Delaunay 2d",
	"results": {
		"time": {
			"master": 106.7,
			"pr": 108.5,
			"master_div_pr": 0.9834101382488479
		}
	}
}
{
	"category": "Math > Delaunay 3d",
	"name": "Delaunay 3d",
	"results": {
		"time": {
			"master": 594.5,
			"pr": 598.9,
			"master_div_pr": 0.9926531975288029
		}
	}
}
{
	"category": "Math > Expression",
	"name": "Parse 20 Complex Expressions Cold",
	"results": {
		"time": {
			"master": 318.4,
			"pr": 329.8,
			"master_div_pr": 0.9654335961188598
		}
	}
}
{
	"category": "Math > Expression",
	"name": "Parse 20 Complex Expressions With Cached Parse",
	"results": {
		"time": {
			"master": 320.3,
			"pr": 320.2,
			"master_div_pr": 1.0003123048094942
		}
	}
}
{
	"category": "Math > Expression",
	"name": "Parse 20 Complex Expressions With Cached Parse Then Execute",
	"results": {
		"time": {
			"master": 323.7,
			"pr": 325.7,
			"master_div_pr": 0.9938593797973595
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Cellular",
	"results": {
		"time": {
			"master": 1103.0,
			"pr": 1116.0,
			"master_div_pr": 0.9883512544802867
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Perlin",
	"results": {
		"time": {
			"master": 382.2,
			"pr": 382.0,
			"master_div_pr": 1.000523560209424
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Simplex",
	"results": {
		"time": {
			"master": 421.9,
			"pr": 419.4,
			"master_div_pr": 1.0059608965188365
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Simplex Smooth",
	"results": {
		"time": {
			"master": 528.2,
			"pr": 525.8,
			"master_div_pr": 1.0045644731837202
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Value",
	"results": {
		"time": {
			"master": 339.9,
			"pr": 339.6,
			"master_div_pr": 1.0008833922261482
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Value Cubic",
	"results": {
		"time": {
			"master": 697.8,
			"pr": 706.0,
			"master_div_pr": 0.988385269121813
		}
	}
}
{
	"category": "Math > Triangulate",
	"name": "Triangulate",
	"results": {
		"time": {
			"master": 81.12,
			"pr": 79.63,
			"master_div_pr": 1.0187115408765541
		}
	}
}
{
	"category": "Navigation > Astar 2d",
	"name": "Astar 5000 Times 5000 Points",
	"results": {
		"time": {
			"master": 507.1,
			"pr": 516.9,
			"master_div_pr": 0.9810408202747147
		}
	}
}
{
	"category": "Navigation > Astar 3d",
	"name": "Astar 1000 Times 1000 Points",
	"results": {
		"time": {
			"master": 559.2,
			"pr": 570.4,
			"master_div_pr": 0.9803646563814868
		}
	}
}
{
	"category": "Navigation > Moving Agents 2d",
	"name": "1000 Moving Agents",
	"results": {
		"render_cpu": {
			"master": 0.06236,
			"pr": 0.07396,
			"master_div_pr": 0.8431584640346134
		},
		"time": {
			"master": 0.02567,
			"pr": 0.021,
			"master_div_pr": 1.2223809523809521
		}
	}
}
{
	"category": "Navigation > Moving Agents 3d",
	"name": "1000 Moving Agents",
	"results": {
		"render_cpu": {
			"master": 0.02152,
			"pr": 0.02648,
			"master_div_pr": 0.8126888217522659
		},
		"time": {
			"master": 0.01933,
			"pr": 0.01733,
			"master_div_pr": 1.115406809001731
		}
	}
}
{
	"category": "Navigation > Navigation 2d",
	"name": "Navigation 10 000 Random Paths",
	"results": {
		"time": {
			"master": 7.881,
			"pr": 10.13,
			"master_div_pr": 0.7779861796643632
		}
	}
}
{
	"category": "Navigation > Navigation 3d",
	"name": "Navigation 10 000 Random Paths",
	"results": {
		"time": {
			"master": 8.584,
			"pr": 9.001,
			"master_div_pr": 0.953671814242862
		}
	}
}
{
	"category": "Scene Nodes > Add Children",
	"name": "Add Children With Same Name",
	"results": {
		"time": {
			"master": 76.18,
			"pr": 77.8,
			"master_div_pr": 0.979177377892031
		}
	}
}
{
	"category": "Scene Nodes > Add Children",
	"name": "Add Children Without Name",
	"results": {
		"time": {
			"master": 88.16,
			"pr": 90.65,
			"master_div_pr": 0.9725317153888582
		}
	}
}
{
	"category": "Scene Nodes > Delete Children",
	"name": "Delete Children In Order",
	"results": {
		"time": {
			"master": 8.668,
			"pr": 8.434,
			"master_div_pr": 1.0277448423049562
		}
	}
}
{
	"category": "Scene Nodes > Delete Children",
	"name": "Delete Children Random Order",
	"results": {
		"time": {
			"master": 19.07,
			"pr": 19.16,
			"master_div_pr": 0.9953027139874739
		}
	}
}
{
	"category": "Scene Nodes > Delete Children",
	"name": "Delete Children Reverse Order",
	"results": {
		"time": {
			"master": 8.34,
			"pr": 8.297,
			"master_div_pr": 1.005182596119079
		}
	}
}
{
	"category": "Scene Nodes > Get Node",
	"name": "Get Node",
	"results": {
		"time": {
			"master": 34.22,
			"pr": 34.42,
			"master_div_pr": 0.9941894247530505
		}
	}
}
{
	"category": "Scene Nodes > Move Children",
	"name": "Move Children",
	"results": {
		"time": {
			"master": 812.4,
			"pr": 808.2,
			"master_div_pr": 1.0051967334818113
		}
	}
}
{
	"category": "Viewport > Activation",
	"name": "Activate 1024 Viewports",
	"results": {
		"time": {
			"master": 270.7,
			"pr": 265.7,
			"master_div_pr": 1.01881821603312
		}
	}
}
{
	"category": "Viewport > Activation",
	"name": "Activate 256 Viewports",
	"results": {
		"time": {
			"master": 65.48,
			"pr": 64.9,
			"master_div_pr": 1.0089368258859783
		}
	}
}
{
	"category": "Viewport > Activation",
	"name": "Activate 64 Viewports",
	"results": {
		"time": {
			"master": 22.81,
			"pr": 24.0,
			"master_div_pr": 0.9504166666666666
		}
	}
}
{
	"category": "Viewport > Allocation",
	"name": "Create 1024 Viewports",
	"results": {
		"time": {
			"master": 133.6,
			"pr": 134.6,
			"master_div_pr": 0.9925705794947994
		}
	}
}
{
	"category": "Viewport > Allocation",
	"name": "Create 256 Viewports",
	"results": {
		"time": {
			"master": 22.4,
			"pr": 23.39,
			"master_div_pr": 0.9576742197520307
		}
	}
}
{
	"category": "Viewport > Allocation",
	"name": "Create 64 Viewports",
	"results": {
		"time": {
			"master": 7.923,
			"pr": 8.596,
			"master_div_pr": 0.9217077710563053
		}
	}
}

Most of the tests showed a performance drop of less than 5%, and some even showed improvements for reasons unknown. So, these changes are at least safe for optimize=size I think.

Result with `production=yes` binary

compile command: scons production=yes use_llvm=yes lto=thin deprecated=no target=template_release

{
	"category": "Asset Import Export > Runtime",
	"name": "Export Gltf",
	"results": {
		"time": {
			"master": 83.56,
			"pr": 82.67,
			"master_div_pr": 1.010765694931656
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Fbx",
	"results": {
		"time": {
			"master": 457.8,
			"pr": 448.8,
			"master_div_pr": 1.0200534759358288
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Gltf",
	"results": {
		"time": {
			"master": 39.82,
			"pr": 40.88,
			"master_div_pr": 0.9740704500978473
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Ogg Audio",
	"results": {
		"time": {
			"master": 6.285,
			"pr": 6.609,
			"master_div_pr": 0.9509759418974126
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Webp Images",
	"results": {
		"time": {
			"master": 756.8,
			"pr": 763.8,
			"master_div_pr": 0.9908352971982194
		}
	}
}
{
	"category": "Core > Array",
	"name": "Append Array",
	"results": {
		"time": {
			"master": 272.3,
			"pr": 278.5,
			"master_div_pr": 0.977737881508079
		}
	}
}
{
	"category": "Core > Array",
	"name": "Bsearch",
	"results": {
		"time": {
			"master": 101.6,
			"pr": 101.0,
			"master_div_pr": 1.005940594059406
		}
	}
}
{
	"category": "Core > Array",
	"name": "Fill",
	"results": {
		"time": {
			"master": 60.84,
			"pr": 56.89,
			"master_div_pr": 1.0694322376516083
		}
	}
}
{
	"category": "Core > Array",
	"name": "Reverse",
	"results": {
		"time": {
			"master": 27.08,
			"pr": 27.46,
			"master_div_pr": 0.986161689730517
		}
	}
}
{
	"category": "Core > Callable",
	"name": "Function Callable",
	"results": {
		"time": {
			"master": 304.7,
			"pr": 320.9,
			"master_div_pr": 0.9495169834839514
		}
	}
}
{
	"category": "Core > Callable",
	"name": "Lambda Inline Callable",
	"results": {
		"time": {
			"master": 406.8,
			"pr": 425.7,
			"master_div_pr": 0.9556025369978859
		}
	}
}
{
	"category": "Core > Callable",
	"name": "Lambda Variable Callable",
	"results": {
		"time": {
			"master": 103.2,
			"pr": 115.6,
			"master_div_pr": 0.8927335640138409
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Load",
	"results": {
		"time": {
			"master": 44.96,
			"pr": 45.03,
			"master_div_pr": 0.998445480790584
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Load With Password",
	"results": {
		"time": {
			"master": 46.49,
			"pr": 47.78,
			"master_div_pr": 0.9730012557555463
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Save",
	"results": {
		"time": {
			"master": 47.33,
			"pr": 49.87,
			"master_div_pr": 0.9490675756968118
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Save With Password",
	"results": {
		"time": {
			"master": 51.78,
			"pr": 52.22,
			"master_div_pr": 0.9915741095365761
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate 1g Random Bytes 1k At A Time",
	"results": {
		"time": {
			"master": 1269.0,
			"pr": 1261.0,
			"master_div_pr": 1.0063441712926249
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate 1m Random Bytes 10 At A Time",
	"results": {
		"time": {
			"master": 2343.0,
			"pr": 2323.0,
			"master_div_pr": 1.0086095566078348
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate Rsa 2048",
	"results": {
		"time": {
			"master": 109.5,
			"pr": 190.6,
			"master_div_pr": 0.574501573976915
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate Rsa 4096",
	"results": {
		"time": {
			"master": 1788.0,
			"pr": 2015.0,
			"master_div_pr": 0.8873449131513648
		}
	}
}
{
	"category": "Core > Node Path",
	"name": "Create",
	"results": {
		"time": {
			"master": 17.12,
			"pr": 16.94,
			"master_div_pr": 1.010625737898465
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Full Contention",
	"results": {
		"time": {
			"master": 600.6,
			"pr": 643.8,
			"master_div_pr": 0.9328984156570365
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Half Contention",
	"results": {
		"time": {
			"master": 319.7,
			"pr": 332.9,
			"master_div_pr": 0.9603484529888856
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Little Contention",
	"results": {
		"time": {
			"master": 79.94,
			"pr": 84.32,
			"master_div_pr": 0.9480550284629982
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Slope Contention",
	"results": {
		"time": {
			"master": 353.3,
			"pr": 366.0,
			"master_div_pr": 0.9653005464480875
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "2 Threads Full Contention",
	"results": {
		"time": {
			"master": 63.67,
			"pr": 62.03,
			"master_div_pr": 1.0264388199258423
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "2 Threads Half Contention",
	"results": {
		"time": {
			"master": 41.39,
			"pr": 42.39,
			"master_div_pr": 0.976409530549658
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "2 Threads Little Contention",
	"results": {
		"time": {
			"master": 24.41,
			"pr": 25.59,
			"master_div_pr": 0.9538882375928097
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Full Contention",
	"results": {
		"time": {
			"master": 170.3,
			"pr": 169.0,
			"master_div_pr": 1.0076923076923077
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Half Contention",
	"results": {
		"time": {
			"master": 92.79,
			"pr": 93.87,
			"master_div_pr": 0.9884947267497604
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Little Contention",
	"results": {
		"time": {
			"master": 34.38,
			"pr": 35.53,
			"master_div_pr": 0.9676329862088376
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Slope Contention",
	"results": {
		"time": {
			"master": 128.8,
			"pr": 127.3,
			"master_div_pr": 1.0117831893165752
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Full Contention",
	"results": {
		"time": {
			"master": 377.1,
			"pr": 379.0,
			"master_div_pr": 0.9949868073878628
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Half Contention",
	"results": {
		"time": {
			"master": 201.2,
			"pr": 204.3,
			"master_div_pr": 0.9848262359275574
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Little Contention",
	"results": {
		"time": {
			"master": 55.7,
			"pr": 56.27,
			"master_div_pr": 0.9898702683490315
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Slope Contention",
	"results": {
		"time": {
			"master": 245.1,
			"pr": 245.5,
			"master_div_pr": 0.9983706720977596
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "Single",
	"results": {
		"time": {
			"master": 19.76,
			"pr": 20.88,
			"master_div_pr": 0.9463601532567051
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randf",
	"results": {
		"time": {
			"master": 105.3,
			"pr": 107.3,
			"master_div_pr": 0.9813606710158435
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randf Range",
	"results": {
		"time": {
			"master": 333.6,
			"pr": 336.6,
			"master_div_pr": 0.9910873440285205
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randfn",
	"results": {
		"time": {
			"master": 820.4,
			"pr": 826.0,
			"master_div_pr": 0.9932203389830508
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randi",
	"results": {
		"time": {
			"master": 95.96,
			"pr": 98.25,
			"master_div_pr": 0.9766921119592875
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randi Range",
	"results": {
		"time": {
			"master": 134.2,
			"pr": 136.7,
			"master_div_pr": 0.9817117776152158
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randomize",
	"results": {
		"time": {
			"master": 836.3,
			"pr": 834.3,
			"master_div_pr": 1.0023972192256982
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randf",
	"results": {
		"time": {
			"master": 267.1,
			"pr": 263.9,
			"master_div_pr": 1.0121258052292537
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randf Range",
	"results": {
		"time": {
			"master": 294.1,
			"pr": 293.2,
			"master_div_pr": 1.0030695770804912
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randfn",
	"results": {
		"time": {
			"master": 805.5,
			"pr": 811.8,
			"master_div_pr": 0.992239467849224
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randi",
	"results": {
		"time": {
			"master": 71.94,
			"pr": 73.37,
			"master_div_pr": 0.9805097451274362
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randi Range",
	"results": {
		"time": {
			"master": 106.3,
			"pr": 108.1,
			"master_div_pr": 0.9833487511563368
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randomize",
	"results": {
		"time": {
			"master": 832.1,
			"pr": 838.0,
			"master_div_pr": 0.9929594272076373
		}
	}
}
{
	"category": "Core > Signal",
	"name": "Emission Params 0",
	"results": {
		"time": {
			"master": 198.6,
			"pr": 202.5,
			"master_div_pr": 0.9807407407407407
		}
	}
}
{
	"category": "Core > Signal",
	"name": "Emission Params 1",
	"results": {
		"time": {
			"master": 204.2,
			"pr": 207.4,
			"master_div_pr": 0.9845708775313403
		}
	}
}
{
	"category": "Core > Signal",
	"name": "Emission Params 10",
	"results": {
		"time": {
			"master": 235.6,
			"pr": 243.1,
			"master_div_pr": 0.9691484985602633
		}
	}
}
{
	"category": "Core > String Name",
	"name": "Create",
	"results": {
		"time": {
			"master": 17.83,
			"pr": 17.86,
			"master_div_pr": 0.9983202687569989
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Deep Tree",
	"results": {
		"time": {
			"master": 218.1,
			"pr": 207.4,
			"master_div_pr": 1.0515911282545805
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Duplicate",
	"results": {
		"time": {
			"master": 1296.0,
			"pr": 1279.0,
			"master_div_pr": 1.013291634089132
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Fragmentation",
	"results": {
		"time": {
			"master": 2152.0,
			"pr": 2149.0,
			"master_div_pr": 1.001395998138669
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Wide Tree",
	"results": {
		"time": {
			"master": 154.3,
			"pr": 152.8,
			"master_div_pr": 1.0098167539267016
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Fill Loop",
	"results": {
		"time": {
			"master": 228.2,
			"pr": 236.9,
			"master_div_pr": 0.9632756437315322
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Fill Method",
	"results": {
		"time": {
			"master": 82.25,
			"pr": 95.3,
			"master_div_pr": 0.8630640083945436
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Color Array",
	"results": {
		"time": {
			"master": 133.4,
			"pr": 135.6,
			"master_div_pr": 0.9837758112094396
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Float 32 Array",
	"results": {
		"time": {
			"master": 103.4,
			"pr": 105.3,
			"master_div_pr": 0.9819563152896487
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Float 64 Array",
	"results": {
		"time": {
			"master": 106.2,
			"pr": 108.4,
			"master_div_pr": 0.9797047970479704
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Int 32 Array",
	"results": {
		"time": {
			"master": 81.63,
			"pr": 84.26,
			"master_div_pr": 0.968787087586043
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Int 64 Array",
	"results": {
		"time": {
			"master": 83.94,
			"pr": 85.46,
			"master_div_pr": 0.9822139012403464
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed String Array",
	"results": {
		"time": {
			"master": 654.4,
			"pr": 665.9,
			"master_div_pr": 0.9827301396606097
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Vector 2 Array",
	"results": {
		"time": {
			"master": 113.7,
			"pr": 112.7,
			"master_div_pr": 1.0088731144631766
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Vector 3 Array",
	"results": {
		"time": {
			"master": 130.3,
			"pr": 126.4,
			"master_div_pr": 1.0308544303797469
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Color Array",
	"results": {
		"time": {
			"master": 202.6,
			"pr": 202.3,
			"master_div_pr": 1.0014829461196242
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Float Array",
	"results": {
		"time": {
			"master": 170.6,
			"pr": 171.5,
			"master_div_pr": 0.9947521865889213
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Int Array",
	"results": {
		"time": {
			"master": 160.8,
			"pr": 160.4,
			"master_div_pr": 1.0024937655860349
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed String Array",
	"results": {
		"time": {
			"master": 767.7,
			"pr": 792.6,
			"master_div_pr": 0.9685844057532172
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Vector 2 Array",
	"results": {
		"time": {
			"master": 187.1,
			"pr": 188.1,
			"master_div_pr": 0.9946836788942052
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Vector 3 Array",
	"results": {
		"time": {
			"master": 198.4,
			"pr": 196.1,
			"master_div_pr": 1.0117287098419174
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Color Array",
	"results": {
		"time": {
			"master": 281.8,
			"pr": 293.5,
			"master_div_pr": 0.9601362862010222
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Float Array",
	"results": {
		"time": {
			"master": 249.0,
			"pr": 252.6,
			"master_div_pr": 0.985748218527316
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Int Array",
	"results": {
		"time": {
			"master": 241.6,
			"pr": 248.6,
			"master_div_pr": 0.9718423169750603
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped String Array",
	"results": {
		"time": {
			"master": 881.3,
			"pr": 875.4,
			"master_div_pr": 1.006739776102353
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Vector 2 Array",
	"results": {
		"time": {
			"master": 270.1,
			"pr": 279.5,
			"master_div_pr": 0.9663685152057246
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Vector 3 Array",
	"results": {
		"time": {
			"master": 280.6,
			"pr": 285.9,
			"master_div_pr": 0.9814620496677161
		}
	}
}
{
	"category": "Gdscript > Binary Trees",
	"name": "Binary Trees 13",
	"results": {
		"time": {
			"master": 502.1,
			"pr": 506.0,
			"master_div_pr": 0.9922924901185771
		}
	}
}
{
	"category": "Gdscript > Binary Trees",
	"name": "Binary Trees 15",
	"results": {
		"time": {
			"master": 2367.0,
			"pr": 2396.0,
			"master_div_pr": 0.9878964941569283
		}
	}
}
{
	"category": "Gdscript > Control",
	"name": "Control",
	"results": {
		"time": {
			"master": 0.009667,
			"pr": 0.005667,
			"master_div_pr": 1.7058408328921828
		}
	}
}
{
	"category": "Gdscript > For Loop",
	"name": "For Loop Add",
	"results": {
		"time": {
			"master": 8.094,
			"pr": 8.074,
			"master_div_pr": 1.0024770869457518
		}
	}
}
{
	"category": "Gdscript > For Loop",
	"name": "For Loop Call",
	"results": {
		"time": {
			"master": 58.58,
			"pr": 59.45,
			"master_div_pr": 0.9853658536585365
		}
	}
}
{
	"category": "Gdscript > Hello World",
	"name": "Hello World",
	"results": {
		"time": {
			"master": 0.09233,
			"pr": 0.06433,
			"master_div_pr": 1.4352557127312295
		}
	}
}
{
	"category": "Gdscript > Lambda Performance",
	"name": "Lambda Call",
	"results": {
		"time": {
			"master": 52.13,
			"pr": 58.24,
			"master_div_pr": 0.8950892857142857
		}
	}
}
{
	"category": "Gdscript > Mandelbrot Set",
	"name": "Mandelbrot Set",
	"results": {
		"time": {
			"master": 2348.0,
			"pr": 2288.0,
			"master_div_pr": 1.0262237762237763
		}
	}
}
{
	"category": "Gdscript > Merkle Trees",
	"name": "Merkle Trees 13",
	"results": {
		"time": {
			"master": 1576.0,
			"pr": 1691.0,
			"master_div_pr": 0.9319929036073329
		}
	}
}
{
	"category": "Gdscript > Merkle Trees",
	"name": "Merkle Trees 15",
	"results": {
		"time": {
			"master": 7791.0,
			"pr": 8203.0,
			"master_div_pr": 0.9497744727538705
		}
	}
}
{
	"category": "Gdscript > Nbody",
	"name": "Nbody 1 000 000",
	"results": {
		"time": {
			"master": 5789.0,
			"pr": 5770.0,
			"master_div_pr": 1.0032928942807626
		}
	}
}
{
	"category": "Gdscript > Nbody",
	"name": "Nbody 500 000",
	"results": {
		"time": {
			"master": 2898.0,
			"pr": 2885.0,
			"master_div_pr": 1.0045060658578857
		}
	}
}
{
	"category": "Gdscript > Spectral Norm",
	"name": "Spectral Norm 100",
	"results": {
		"time": {
			"master": 48.34,
			"pr": 47.69,
			"master_div_pr": 1.0136296917592789
		}
	}
}
{
	"category": "Gdscript > Spectral Norm",
	"name": "Spectral Norm 1000",
	"results": {
		"time": {
			"master": 4602.0,
			"pr": 4454.0,
			"master_div_pr": 1.0332285585990122
		}
	}
}
{
	"category": "Gdscript > Spectral Norm",
	"name": "Spectral Norm 500",
	"results": {
		"time": {
			"master": 1156.0,
			"pr": 1121.0,
			"master_div_pr": 1.031222123104371
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Buffer Empty",
	"results": {
		"time": {
			"master": 214.3,
			"pr": 217.1,
			"master_div_pr": 0.9871027176416399
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Buffer Non Empty",
	"results": {
		"time": {
			"master": 659.4,
			"pr": 661.0,
			"master_div_pr": 0.9975794251134644
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Text Empty",
	"results": {
		"time": {
			"master": 170.8,
			"pr": 173.8,
			"master_div_pr": 0.9827387802071347
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Text Non Empty",
	"results": {
		"time": {
			"master": 617.0,
			"pr": 618.1,
			"master_div_pr": 0.9982203526937389
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Buffer Empty",
	"results": {
		"time": {
			"master": 191.0,
			"pr": 195.8,
			"master_div_pr": 0.975485188968335
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Buffer Non Empty",
	"results": {
		"time": {
			"master": 566.3,
			"pr": 571.1,
			"master_div_pr": 0.991595167221152
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Text Empty",
	"results": {
		"time": {
			"master": 151.9,
			"pr": 151.9,
			"master_div_pr": 1
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Text Non Empty",
	"results": {
		"time": {
			"master": 521.1,
			"pr": 525.7,
			"master_div_pr": 0.9912497622217995
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Buffer Empty",
	"results": {
		"time": {
			"master": 278.6,
			"pr": 279.1,
			"master_div_pr": 0.9982085274095306
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Buffer Non Empty",
	"results": {
		"time": {
			"master": 910.5,
			"pr": 893.9,
			"master_div_pr": 1.0185703098780625
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Text Empty",
	"results": {
		"time": {
			"master": 237.1,
			"pr": 238.3,
			"master_div_pr": 0.9949643306756188
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Text Non Empty",
	"results": {
		"time": {
			"master": 869.7,
			"pr": 861.8,
			"master_div_pr": 1.009166860060339
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Complex Variable Concatenate",
	"results": {
		"time": {
			"master": 2042.0,
			"pr": 2038.0,
			"master_div_pr": 1.0019627085377822
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Complex Variable Method",
	"results": {
		"time": {
			"master": 3792.0,
			"pr": 5933.0,
			"master_div_pr": 0.6391370301702343
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Complex Variable Percent",
	"results": {
		"time": {
			"master": 2881.0,
			"pr": 4668.0,
			"master_div_pr": 0.6171808054841473
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "No Op Constant Method",
	"results": {
		"time": {
			"master": 182.8,
			"pr": 187.2,
			"master_div_pr": 0.9764957264957266
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Concatenate",
	"results": {
		"time": {
			"master": 2.989,
			"pr": 2.961,
			"master_div_pr": 1.0094562647754137
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Method",
	"results": {
		"time": {
			"master": 793.5,
			"pr": 803.9,
			"master_div_pr": 0.9870630675457147
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Method Constant Dict",
	"results": {
		"time": {
			"master": 517.3,
			"pr": 532.6,
			"master_div_pr": 0.9712730003755162
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Percent",
	"results": {
		"time": {
			"master": 2.86,
			"pr": 2.97,
			"master_div_pr": 0.9629629629629629
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Variable Concatenate",
	"results": {
		"time": {
			"master": 202.1,
			"pr": 206.5,
			"master_div_pr": 0.9786924939467312
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Variable Method",
	"results": {
		"time": {
			"master": 784.8,
			"pr": 814.5,
			"master_div_pr": 0.9635359116022099
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Variable Percent",
	"results": {
		"time": {
			"master": 442.0,
			"pr": 459.7,
			"master_div_pr": 0.961496628235806
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Begins With",
	"results": {
		"time": {
			"master": 10.85,
			"pr": 11.4,
			"master_div_pr": 0.9517543859649122
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Bigrams",
	"results": {
		"time": {
			"master": 639.4,
			"pr": 677.5,
			"master_div_pr": 0.9437638376383763
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Capitalize",
	"results": {
		"time": {
			"master": 1101.0,
			"pr": 1087.0,
			"master_div_pr": 1.012879484820607
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Casecmp To",
	"results": {
		"time": {
			"master": 8.588,
			"pr": 8.766,
			"master_div_pr": 0.9796942733287701
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Contains",
	"results": {
		"time": {
			"master": 9.356,
			"pr": 9.408,
			"master_div_pr": 0.9944727891156463
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Contains Gdscript In",
	"results": {
		"time": {
			"master": 2.986,
			"pr": 3.038,
			"master_div_pr": 0.9828834759710338
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Count",
	"results": {
		"time": {
			"master": 54.6,
			"pr": 55.43,
			"master_div_pr": 0.9850261591196103
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Countn",
	"results": {
		"time": {
			"master": 220.2,
			"pr": 216.1,
			"master_div_pr": 1.018972697825081
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Ends With",
	"results": {
		"time": {
			"master": 10.79,
			"pr": 10.56,
			"master_div_pr": 1.021780303030303
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Find",
	"results": {
		"time": {
			"master": 42.22,
			"pr": 42.48,
			"master_div_pr": 0.993879472693032
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Findn",
	"results": {
		"time": {
			"master": 57.48,
			"pr": 60.61,
			"master_div_pr": 0.948358356706814
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Get Slice",
	"results": {
		"time": {
			"master": 78.34,
			"pr": 78.05,
			"master_div_pr": 1.0037155669442666
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Get Slice Count",
	"results": {
		"time": {
			"master": 22.65,
			"pr": 23.7,
			"master_div_pr": 0.9556962025316456
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Humanize Size",
	"results": {
		"time": {
			"master": 937.8,
			"pr": 923.8,
			"master_div_pr": 1.015154795410262
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Insert",
	"results": {
		"time": {
			"master": 68.33,
			"pr": 67.79,
			"master_div_pr": 1.0079657766632246
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Is Valid Filename",
	"results": {
		"time": {
			"master": 24.78,
			"pr": 24.49,
			"master_div_pr": 1.0118415679869335
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Lpad",
	"results": {
		"time": {
			"master": 221.8,
			"pr": 226.2,
			"master_div_pr": 0.9805481874447393
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Naturalnocasecmp To",
	"results": {
		"time": {
			"master": 11.99,
			"pr": 12.01,
			"master_div_pr": 0.9983347210657786
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Nocasecmp To",
	"results": {
		"time": {
			"master": 33.6,
			"pr": 33.63,
			"master_div_pr": 0.9991079393398751
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Decimals",
	"results": {
		"time": {
			"master": 485.3,
			"pr": 494.4,
			"master_div_pr": 0.9815938511326862
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Decimals Pre Constructed",
	"results": {
		"time": {
			"master": 81.44,
			"pr": 112.2,
			"master_div_pr": 0.7258467023172905
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Zeros",
	"results": {
		"time": {
			"master": 336.0,
			"pr": 371.1,
			"master_div_pr": 0.9054163298302343
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Zeros Pre Constructed",
	"results": {
		"time": {
			"master": 223.9,
			"pr": 242.2,
			"master_div_pr": 0.9244426094137077
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rfind",
	"results": {
		"time": {
			"master": 43.36,
			"pr": 43.45,
			"master_div_pr": 0.997928653624856
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rfindn",
	"results": {
		"time": {
			"master": 151.8,
			"pr": 152.7,
			"master_div_pr": 0.9941060903732811
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rpad",
	"results": {
		"time": {
			"master": 177.1,
			"pr": 177.3,
			"master_div_pr": 0.9988719684151155
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rsplit",
	"results": {
		"time": {
			"master": 442.5,
			"pr": 444.7,
			"master_div_pr": 0.9950528446143467
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Similarity",
	"results": {
		"time": {
			"master": 31.68,
			"pr": 25.55,
			"master_div_pr": 1.2399217221135028
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Simplify Path",
	"results": {
		"time": {
			"master": 1277.0,
			"pr": 1318.0,
			"master_div_pr": 0.9688922610015175
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Split",
	"results": {
		"time": {
			"master": 424.1,
			"pr": 427.4,
			"master_div_pr": 0.9922788956481049
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Split Floats",
	"results": {
		"time": {
			"master": 323.2,
			"pr": 340.1,
			"master_div_pr": 0.9503087327256688
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Substr",
	"results": {
		"time": {
			"master": 70.75,
			"pr": 68.82,
			"master_div_pr": 1.0280441732054637
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Camel Case",
	"results": {
		"time": {
			"master": 517.9,
			"pr": 508.4,
			"master_div_pr": 1.0186860739575139
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Lower",
	"results": {
		"time": {
			"master": 165.6,
			"pr": 177.1,
			"master_div_pr": 0.935064935064935
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Pascal Case",
	"results": {
		"time": {
			"master": 1280.0,
			"pr": 1264.0,
			"master_div_pr": 1.0126582278481013
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Snake Case",
	"results": {
		"time": {
			"master": 930.7,
			"pr": 909.0,
			"master_div_pr": 1.0238723872387239
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Utf 16 Buffer",
	"results": {
		"time": {
			"master": 161.9,
			"pr": 163.8,
			"master_div_pr": 0.9884004884004883
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Utf 32 Buffer",
	"results": {
		"time": {
			"master": 112.3,
			"pr": 113.0,
			"master_div_pr": 0.9938053097345132
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Utf 8 Buffer",
	"results": {
		"time": {
			"master": 160.1,
			"pr": 167.5,
			"master_div_pr": 0.955820895522388
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Wchar Buffer",
	"results": {
		"time": {
			"master": 162.6,
			"pr": 163.0,
			"master_div_pr": 0.9975460122699387
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Uri Decode",
	"results": {
		"time": {
			"master": 548.6,
			"pr": 553.2,
			"master_div_pr": 0.9916847433116414
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Uri Encode",
	"results": {
		"time": {
			"master": 427.3,
			"pr": 437.4,
			"master_div_pr": 0.9769090077732053
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Validate Filename",
	"results": {
		"time": {
			"master": 336.1,
			"pr": 329.4,
			"master_div_pr": 1.020340012143291
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Validate Node Name",
	"results": {
		"time": {
			"master": 79.31,
			"pr": 79.74,
			"master_div_pr": 0.9946074742914472
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Xml Escape",
	"results": {
		"time": {
			"master": 473.1,
			"pr": 469.3,
			"master_div_pr": 1.008097165991903
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Xml Unescape",
	"results": {
		"time": {
			"master": 80.28,
			"pr": 80.73,
			"master_div_pr": 0.9944258639910813
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Both Clean And Simplify",
	"results": {
		"time": {
			"master": 4982.0,
			"pr": 4960.0,
			"master_div_pr": 1.0044354838709677
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Only Clean",
	"results": {
		"time": {
			"master": 4996.0,
			"pr": 4948.0,
			"master_div_pr": 1.0097008892481811
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Only Simplify",
	"results": {
		"time": {
			"master": 19.7,
			"pr": 20.29,
			"master_div_pr": 0.9709216362740266
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Quickest",
	"results": {
		"time": {
			"master": 21.31,
			"pr": 21.42,
			"master_div_pr": 0.9948646125116712
		}
	}
}
{
	"category": "Math > Delaunay 2d",
	"name": "Delaunay 2d",
	"results": {
		"time": {
			"master": 105.5,
			"pr": 105.6,
			"master_div_pr": 0.9990530303030304
		}
	}
}
{
	"category": "Math > Delaunay 3d",
	"name": "Delaunay 3d",
	"results": {
		"time": {
			"master": 588.4,
			"pr": 591.4,
			"master_div_pr": 0.9949272911734867
		}
	}
}
{
	"category": "Math > Expression",
	"name": "Parse 20 Complex Expressions Cold",
	"results": {
		"time": {
			"master": 290.5,
			"pr": 290.2,
			"master_div_pr": 1.0010337698139216
		}
	}
}
{
	"category": "Math > Expression",
	"name": "Parse 20 Complex Expressions With Cached Parse",
	"results": {
		"time": {
			"master": 289.9,
			"pr": 289.2,
			"master_div_pr": 1.002420470262794
		}
	}
}
{
	"category": "Math > Expression",
	"name": "Parse 20 Complex Expressions With Cached Parse Then Execute",
	"results": {
		"time": {
			"master": 293.9,
			"pr": 291.3,
			"master_div_pr": 1.0089255063508409
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Cellular",
	"results": {
		"time": {
			"master": 1115.0,
			"pr": 1142.0,
			"master_div_pr": 0.9763572679509632
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Perlin",
	"results": {
		"time": {
			"master": 372.1,
			"pr": 376.6,
			"master_div_pr": 0.9880509824747743
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Simplex",
	"results": {
		"time": {
			"master": 410.5,
			"pr": 407.0,
			"master_div_pr": 1.0085995085995085
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Simplex Smooth",
	"results": {
		"time": {
			"master": 484.4,
			"pr": 474.2,
			"master_div_pr": 1.0215099114297765
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Value",
	"results": {
		"time": {
			"master": 337.3,
			"pr": 335.1,
			"master_div_pr": 1.006565204416592
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Value Cubic",
	"results": {
		"time": {
			"master": 710.6,
			"pr": 691.6,
			"master_div_pr": 1.0274725274725274
		}
	}
}
{
	"category": "Math > Triangulate",
	"name": "Triangulate",
	"results": {
		"time": {
			"master": 84.14,
			"pr": 85.38,
			"master_div_pr": 0.9854766924338253
		}
	}
}
{
	"category": "Navigation > Astar 2d",
	"name": "Astar 5000 Times 5000 Points",
	"results": {
		"time": {
			"master": 480.6,
			"pr": 480.1,
			"master_div_pr": 1.0010414496979796
		}
	}
}
{
	"category": "Navigation > Astar 3d",
	"name": "Astar 1000 Times 1000 Points",
	"results": {
		"time": {
			"master": 559.1,
			"pr": 544.3,
			"master_div_pr": 1.0271908873782842
		}
	}
}
{
	"category": "Navigation > Moving Agents 2d",
	"name": "1000 Moving Agents",
	"results": {
		"render_cpu": {
			"master": 0.07043,
			"pr": 0.07659,
			"master_div_pr": 0.9195717456587023
		},
		"time": {
			"master": 0.028,
			"pr": 0.02533,
			"master_div_pr": 1.1054086063955784
		}
	}
}
{
	"category": "Navigation > Moving Agents 3d",
	"name": "1000 Moving Agents",
	"results": {
		"render_cpu": {
			"master": 0.02577,
			"pr": 0.02762,
			"master_div_pr": 0.9330195510499639
		},
		"time": {
			"master": 0.023,
			"pr": 0.01467,
			"master_div_pr": 1.5678254942058623
		}
	}
}
{
	"category": "Navigation > Navigation 2d",
	"name": "Navigation 10 000 Random Paths",
	"results": {
		"time": {
			"master": 10.44,
			"pr": 7.909,
			"master_div_pr": 1.3200151725881906
		}
	}
}
{
	"category": "Navigation > Navigation 3d",
	"name": "Navigation 10 000 Random Paths",
	"results": {
		"time": {
			"master": 7.932,
			"pr": 8.869,
			"master_div_pr": 0.89435111060999
		}
	}
}
{
	"category": "Scene Nodes > Add Children",
	"name": "Add Children With Same Name",
	"results": {
		"time": {
			"master": 74.39,
			"pr": 75.6,
			"master_div_pr": 0.9839947089947091
		}
	}
}
{
	"category": "Scene Nodes > Add Children",
	"name": "Add Children Without Name",
	"results": {
		"time": {
			"master": 88.85,
			"pr": 88.03,
			"master_div_pr": 1.00931500624787
		}
	}
}
{
	"category": "Scene Nodes > Delete Children",
	"name": "Delete Children In Order",
	"results": {
		"time": {
			"master": 8.667,
			"pr": 8.732,
			"master_div_pr": 0.9925561154374715
		}
	}
}
{
	"category": "Scene Nodes > Delete Children",
	"name": "Delete Children Random Order",
	"results": {
		"time": {
			"master": 20.1,
			"pr": 19.15,
			"master_div_pr": 1.049608355091384
		}
	}
}
{
	"category": "Scene Nodes > Delete Children",
	"name": "Delete Children Reverse Order",
	"results": {
		"time": {
			"master": 8.325,
			"pr": 8.624,
			"master_div_pr": 0.9653293135435991
		}
	}
}
{
	"category": "Scene Nodes > Get Node",
	"name": "Get Node",
	"results": {
		"time": {
			"master": 34.09,
			"pr": 33.84,
			"master_div_pr": 1.007387706855792
		}
	}
}
{
	"category": "Scene Nodes > Move Children",
	"name": "Move Children",
	"results": {
		"time": {
			"master": 842.8,
			"pr": 889.9,
			"master_div_pr": 0.9470727047982919
		}
	}
}
{
	"category": "Viewport > Activation",
	"name": "Activate 1024 Viewports",
	"results": {
		"time": {
			"master": 269.9,
			"pr": 324.4,
			"master_div_pr": 0.8319975339087546
		}
	}
}
{
	"category": "Viewport > Activation",
	"name": "Activate 256 Viewports",
	"results": {
		"time": {
			"master": 69.34,
			"pr": 64.95,
			"master_div_pr": 1.067590454195535
		}
	}
}
{
	"category": "Viewport > Activation",
	"name": "Activate 64 Viewports",
	"results": {
		"time": {
			"master": 22.35,
			"pr": 23.71,
			"master_div_pr": 0.9426402361872628
		}
	}
}
{
	"category": "Viewport > Allocation",
	"name": "Create 1024 Viewports",
	"results": {
		"time": {
			"master": 151.6,
			"pr": 146.5,
			"master_div_pr": 1.0348122866894198
		}
	}
}
{
	"category": "Viewport > Allocation",
	"name": "Create 256 Viewports",
	"results": {
		"time": {
			"master": 22.55,
			"pr": 23.38,
			"master_div_pr": 0.9644995722840035
		}
	}
}
{
	"category": "Viewport > Allocation",
	"name": "Create 64 Viewports",
	"results": {
		"time": {
			"master": 8.276,
			"pr": 10.59,
			"master_div_pr": 0.7814919735599622
		}
	}
}

String format test is significantly impacted.

@YYF233333
Copy link
Contributor Author

Diving a little deeper, I tried removing all _FORCE_INLINE_, which resulted in an additional 4MB reduction in binary size. The performance loss was kept within 10%, which seems like a good tradeoff.

Result

Base is previous commit.

{
	"category": "Asset Import Export > Runtime",
	"name": "Export Gltf",
	"results": {
		"time": {
			"base": 93.68,
			"nohint": 89.8,
			"base_div_nohint": 1.0432071269487753
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Fbx",
	"results": {
		"time": {
			"base": 491.2,
			"nohint": 483.0,
			"base_div_nohint": 1.0169772256728777
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Gltf",
	"results": {
		"time": {
			"base": 46.4,
			"nohint": 46.82,
			"base_div_nohint": 0.9910294745835113
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Ogg Audio",
	"results": {
		"time": {
			"base": 13.03,
			"nohint": 6.305,
			"base_div_nohint": 2.0666137985725617
		}
	}
}
{
	"category": "Asset Import Export > Runtime",
	"name": "Import Webp Images",
	"results": {
		"time": {
			"base": 1046.0,
			"nohint": 1021.0,
			"base_div_nohint": 1.0244857982370226
		}
	}
}
{
	"category": "Core > Array",
	"name": "Append Array",
	"results": {
		"time": {
			"base": 349.1,
			"nohint": 302.2,
			"base_div_nohint": 1.155195234943746
		}
	}
}
{
	"category": "Core > Array",
	"name": "Bsearch",
	"results": {
		"time": {
			"base": 104.7,
			"nohint": 143.0,
			"base_div_nohint": 0.7321678321678322
		}
	}
}
{
	"category": "Core > Array",
	"name": "Fill",
	"results": {
		"time": {
			"base": 53.77,
			"nohint": 55.14,
			"base_div_nohint": 0.9751541530649257
		}
	}
}
{
	"category": "Core > Array",
	"name": "Reverse",
	"results": {
		"time": {
			"base": 34.34,
			"nohint": 37.07,
			"base_div_nohint": 0.9263555435662262
		}
	}
}
{
	"category": "Core > Callable",
	"name": "Function Callable",
	"results": {
		"time": {
			"base": 341.7,
			"nohint": 348.6,
			"base_div_nohint": 0.9802065404475042
		}
	}
}
{
	"category": "Core > Callable",
	"name": "Lambda Inline Callable",
	"results": {
		"time": {
			"base": 443.9,
			"nohint": 436.7,
			"base_div_nohint": 1.016487291046485
		}
	}
}
{
	"category": "Core > Callable",
	"name": "Lambda Variable Callable",
	"results": {
		"time": {
			"base": 116.5,
			"nohint": 114.8,
			"base_div_nohint": 1.014808362369338
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Load",
	"results": {
		"time": {
			"base": 47.05,
			"nohint": 47.85,
			"base_div_nohint": 0.9832810867293625
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Load With Password",
	"results": {
		"time": {
			"base": 49.28,
			"nohint": 49.01,
			"base_div_nohint": 1.0055090797796369
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Save",
	"results": {
		"time": {
			"base": 50.76,
			"nohint": 50.66,
			"base_div_nohint": 1.0019739439399922
		}
	}
}
{
	"category": "Core > Config File",
	"name": "Save With Password",
	"results": {
		"time": {
			"base": 54.96,
			"nohint": 53.21,
			"base_div_nohint": 1.0328885547829356
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate 1g Random Bytes 1k At A Time",
	"results": {
		"time": {
			"base": 1251.0,
			"nohint": 1239.0,
			"base_div_nohint": 1.0096852300242132
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate 1m Random Bytes 10 At A Time",
	"results": {
		"time": {
			"base": 2208.0,
			"nohint": 2208.0,
			"base_div_nohint": 1
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate Rsa 2048",
	"results": {
		"time": {
			"base": 99.02,
			"nohint": 283.0,
			"base_div_nohint": 0.34989399293286216
		}
	}
}
{
	"category": "Core > Crypto",
	"name": "Generate Rsa 4096",
	"results": {
		"time": {
			"base": 2328.0,
			"nohint": 1182.0,
			"base_div_nohint": 1.9695431472081217
		}
	}
}
{
	"category": "Core > Node Path",
	"name": "Create",
	"results": {
		"time": {
			"base": 17.34,
			"nohint": 16.71,
			"base_div_nohint": 1.03770197486535
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Full Contention",
	"results": {
		"time": {
			"base": 582.3,
			"nohint": 651.9,
			"base_div_nohint": 0.8932351587666819
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Half Contention",
	"results": {
		"time": {
			"base": 309.6,
			"nohint": 339.6,
			"base_div_nohint": 0.911660777385159
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Little Contention",
	"results": {
		"time": {
			"base": 78.94,
			"nohint": 86.15,
			"base_div_nohint": 0.9163087637840974
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "12 Threads Slope Contention",
	"results": {
		"time": {
			"base": 352.9,
			"nohint": 375.2,
			"base_div_nohint": 0.9405650319829424
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "2 Threads Full Contention",
	"results": {
		"time": {
			"base": 62.17,
			"nohint": 65.11,
			"base_div_nohint": 0.9548456458301336
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "2 Threads Half Contention",
	"results": {
		"time": {
			"base": 42.67,
			"nohint": 45.39,
			"base_div_nohint": 0.9400749063670413
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "2 Threads Little Contention",
	"results": {
		"time": {
			"base": 26.07,
			"nohint": 27.48,
			"base_div_nohint": 0.9486899563318777
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Full Contention",
	"results": {
		"time": {
			"base": 175.1,
			"nohint": 175.3,
			"base_div_nohint": 0.9988590986879634
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Half Contention",
	"results": {
		"time": {
			"base": 100.1,
			"nohint": 100.3,
			"base_div_nohint": 0.9980059820538385
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Little Contention",
	"results": {
		"time": {
			"base": 37.12,
			"nohint": 37.91,
			"base_div_nohint": 0.9791611711949354
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "4 Threads Slope Contention",
	"results": {
		"time": {
			"base": 134.5,
			"nohint": 133.7,
			"base_div_nohint": 1.005983545250561
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Full Contention",
	"results": {
		"time": {
			"base": 373.6,
			"nohint": 398.1,
			"base_div_nohint": 0.9384576739512686
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Half Contention",
	"results": {
		"time": {
			"base": 198.2,
			"nohint": 208.9,
			"base_div_nohint": 0.9487793202489229
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Little Contention",
	"results": {
		"time": {
			"base": 59.2,
			"nohint": 60.97,
			"base_div_nohint": 0.9709693291782845
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "8 Threads Slope Contention",
	"results": {
		"time": {
			"base": 240.8,
			"nohint": 251.4,
			"base_div_nohint": 0.9578361177406524
		}
	}
}
{
	"category": "Core > Object Db",
	"name": "Single",
	"results": {
		"time": {
			"base": 21.66,
			"nohint": 22.67,
			"base_div_nohint": 0.9554477282752536
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randf",
	"results": {
		"time": {
			"base": 106.4,
			"nohint": 107.0,
			"base_div_nohint": 0.994392523364486
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randf Range",
	"results": {
		"time": {
			"base": 349.1,
			"nohint": 355.9,
			"base_div_nohint": 0.9808935094127565
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randfn",
	"results": {
		"time": {
			"base": 826.2,
			"nohint": 835.7,
			"base_div_nohint": 0.9886322843125523
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randi",
	"results": {
		"time": {
			"base": 96.8,
			"nohint": 97.64,
			"base_div_nohint": 0.9913969684555509
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randi Range",
	"results": {
		"time": {
			"base": 137.5,
			"nohint": 138.4,
			"base_div_nohint": 0.9934971098265896
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Global Scope Randomize",
	"results": {
		"time": {
			"base": 836.2,
			"nohint": 827.9,
			"base_div_nohint": 1.0100253653822926
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randf",
	"results": {
		"time": {
			"base": 263.4,
			"nohint": 264.7,
			"base_div_nohint": 0.9950887797506611
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randf Range",
	"results": {
		"time": {
			"base": 293.9,
			"nohint": 293.4,
			"base_div_nohint": 1.0017041581458759
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randfn",
	"results": {
		"time": {
			"base": 812.3,
			"nohint": 805.8,
			"base_div_nohint": 1.008066517746339
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randi",
	"results": {
		"time": {
			"base": 71.82,
			"nohint": 72.16,
			"base_div_nohint": 0.9952882483370288
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randi Range",
	"results": {
		"time": {
			"base": 110.5,
			"nohint": 108.8,
			"base_div_nohint": 1.015625
		}
	}
}
{
	"category": "Core > Random Number Generator",
	"name": "Randomize",
	"results": {
		"time": {
			"base": 854.4,
			"nohint": 861.0,
			"base_div_nohint": 0.9923344947735191
		}
	}
}
{
	"category": "Core > Signal",
	"name": "Emission Params 0",
	"results": {
		"time": {
			"base": 215.5,
			"nohint": 211.0,
			"base_div_nohint": 1.0213270142180095
		}
	}
}
{
	"category": "Core > Signal",
	"name": "Emission Params 1",
	"results": {
		"time": {
			"base": 216.9,
			"nohint": 210.9,
			"base_div_nohint": 1.0284495021337126
		}
	}
}
{
	"category": "Core > Signal",
	"name": "Emission Params 10",
	"results": {
		"time": {
			"base": 249.0,
			"nohint": 257.3,
			"base_div_nohint": 0.9677419354838709
		}
	}
}
{
	"category": "Core > String Name",
	"name": "Create",
	"results": {
		"time": {
			"base": 18.38,
			"nohint": 18.17,
			"base_div_nohint": 1.011557512383049
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Deep Tree",
	"results": {
		"time": {
			"base": 206.9,
			"nohint": 211.1,
			"base_div_nohint": 0.9801042160113691
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Duplicate",
	"results": {
		"time": {
			"base": 1476.0,
			"nohint": 1433.0,
			"base_div_nohint": 1.030006978367062
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Fragmentation",
	"results": {
		"time": {
			"base": 2273.0,
			"nohint": 2249.0,
			"base_div_nohint": 1.0106714095153402
		}
	}
}
{
	"category": "Gdscript > Alloc",
	"name": "Wide Tree",
	"results": {
		"time": {
			"base": 158.2,
			"nohint": 161.8,
			"base_div_nohint": 0.9777503090234857
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Fill Loop",
	"results": {
		"time": {
			"base": 253.7,
			"nohint": 269.8,
			"base_div_nohint": 0.9403261675315048
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Fill Method",
	"results": {
		"time": {
			"base": 112.6,
			"nohint": 98.93,
			"base_div_nohint": 1.1381785100576163
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Color Array",
	"results": {
		"time": {
			"base": 151.3,
			"nohint": 158.2,
			"base_div_nohint": 0.9563843236409609
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Float 32 Array",
	"results": {
		"time": {
			"base": 108.2,
			"nohint": 109.9,
			"base_div_nohint": 0.9845313921747042
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Float 64 Array",
	"results": {
		"time": {
			"base": 112.5,
			"nohint": 109.5,
			"base_div_nohint": 1.0273972602739727
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Int 32 Array",
	"results": {
		"time": {
			"base": 83.69,
			"nohint": 82.42,
			"base_div_nohint": 1.0154088813394806
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Int 64 Array",
	"results": {
		"time": {
			"base": 88.75,
			"nohint": 86.79,
			"base_div_nohint": 1.0225832469178475
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed String Array",
	"results": {
		"time": {
			"base": 725.8,
			"nohint": 683.3,
			"base_div_nohint": 1.0621981560076101
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Vector 2 Array",
	"results": {
		"time": {
			"base": 121.5,
			"nohint": 122.2,
			"base_div_nohint": 0.9942716857610474
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Packed Vector 3 Array",
	"results": {
		"time": {
			"base": 139.6,
			"nohint": 138.1,
			"base_div_nohint": 1.0108616944243303
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Color Array",
	"results": {
		"time": {
			"base": 224.8,
			"nohint": 233.3,
			"base_div_nohint": 0.9635662237462495
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Float Array",
	"results": {
		"time": {
			"base": 178.1,
			"nohint": 185.2,
			"base_div_nohint": 0.9616630669546437
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Int Array",
	"results": {
		"time": {
			"base": 167.3,
			"nohint": 170.7,
			"base_div_nohint": 0.9800820152314003
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed String Array",
	"results": {
		"time": {
			"base": 831.1,
			"nohint": 809.5,
			"base_div_nohint": 1.0266831377393453
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Vector 2 Array",
	"results": {
		"time": {
			"base": 204.5,
			"nohint": 205.2,
			"base_div_nohint": 0.996588693957115
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Typed Vector 3 Array",
	"results": {
		"time": {
			"base": 210.3,
			"nohint": 215.2,
			"base_div_nohint": 0.9772304832713755
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Color Array",
	"results": {
		"time": {
			"base": 308.5,
			"nohint": 320.7,
			"base_div_nohint": 0.9619582164016215
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Float Array",
	"results": {
		"time": {
			"base": 253.3,
			"nohint": 259.2,
			"base_div_nohint": 0.9772376543209877
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Int Array",
	"results": {
		"time": {
			"base": 252.7,
			"nohint": 257.1,
			"base_div_nohint": 0.9828860365616491
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped String Array",
	"results": {
		"time": {
			"base": 904.0,
			"nohint": 899.8,
			"base_div_nohint": 1.0046677039342076
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Vector 2 Array",
	"results": {
		"time": {
			"base": 284.9,
			"nohint": 287.8,
			"base_div_nohint": 0.9899235580264071
		}
	}
}
{
	"category": "Gdscript > Array",
	"name": "Untyped Vector 3 Array",
	"results": {
		"time": {
			"base": 302.0,
			"nohint": 298.0,
			"base_div_nohint": 1.0134228187919463
		}
	}
}
{
	"category": "Gdscript > Binary Trees",
	"name": "Binary Trees 13",
	"results": {
		"time": {
			"base": 533.0,
			"nohint": 542.4,
			"base_div_nohint": 0.9826696165191741
		}
	}
}
{
	"category": "Gdscript > Binary Trees",
	"name": "Binary Trees 15",
	"results": {
		"time": {
			"base": 2486.0,
			"nohint": 2579.0,
			"base_div_nohint": 0.9639395114385421
		}
	}
}
{
	"category": "Gdscript > Control",
	"name": "Control",
	"results": {
		"time": {
			"base": 0.006,
			"nohint": 0.006,
			"base_div_nohint": 1
		}
	}
}
{
	"category": "Gdscript > For Loop",
	"name": "For Loop Add",
	"results": {
		"time": {
			"base": 8.027,
			"nohint": 8.302,
			"base_div_nohint": 0.9668754516983858
		}
	}
}
{
	"category": "Gdscript > For Loop",
	"name": "For Loop Call",
	"results": {
		"time": {
			"base": 60.7,
			"nohint": 60.94,
			"base_div_nohint": 0.9960617000328192
		}
	}
}
{
	"category": "Gdscript > Hello World",
	"name": "Hello World",
	"results": {
		"time": {
			"base": 0.072,
			"nohint": 0.067,
			"base_div_nohint": 1.0746268656716416
		}
	}
}
{
	"category": "Gdscript > Lambda Performance",
	"name": "Lambda Call",
	"results": {
		"time": {
			"base": 59.16,
			"nohint": 60.33,
			"base_div_nohint": 0.9806066633515663
		}
	}
}
{
	"category": "Gdscript > Mandelbrot Set",
	"name": "Mandelbrot Set",
	"results": {
		"time": {
			"base": 2464.0,
			"nohint": 2374.0,
			"base_div_nohint": 1.037910699241786
		}
	}
}
{
	"category": "Gdscript > Merkle Trees",
	"name": "Merkle Trees 13",
	"results": {
		"time": {
			"base": 1687.0,
			"nohint": 1688.0,
			"base_div_nohint": 0.9994075829383886
		}
	}
}
{
	"category": "Gdscript > Merkle Trees",
	"name": "Merkle Trees 15",
	"results": {
		"time": {
			"base": 10200.0,
			"nohint": 8270.0,
			"base_div_nohint": 1.2333736396614268
		}
	}
}
{
	"category": "Gdscript > Nbody",
	"name": "Nbody 1 000 000",
	"results": {
		"time": {
			"base": 6048.0,
			"nohint": 6483.0,
			"base_div_nohint": 0.9329014345210551
		}
	}
}
{
	"category": "Gdscript > Nbody",
	"name": "Nbody 500 000",
	"results": {
		"time": {
			"base": 3045.0,
			"nohint": 3240.0,
			"base_div_nohint": 0.9398148148148148
		}
	}
}
{
	"category": "Gdscript > Spectral Norm",
	"name": "Spectral Norm 100",
	"results": {
		"time": {
			"base": 50.46,
			"nohint": 49.0,
			"base_div_nohint": 1.0297959183673469
		}
	}
}
{
	"category": "Gdscript > Spectral Norm",
	"name": "Spectral Norm 1000",
	"results": {
		"time": {
			"base": 4744.0,
			"nohint": 4655.0,
			"base_div_nohint": 1.0191192266380236
		}
	}
}
{
	"category": "Gdscript > Spectral Norm",
	"name": "Spectral Norm 500",
	"results": {
		"time": {
			"base": 1190.0,
			"nohint": 1168.0,
			"base_div_nohint": 1.018835616438356
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Buffer Empty",
	"results": {
		"time": {
			"base": 212.6,
			"nohint": 217.7,
			"base_div_nohint": 0.9765732659623335
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Buffer Non Empty",
	"results": {
		"time": {
			"base": 667.9,
			"nohint": 678.7,
			"base_div_nohint": 0.9840872255783114
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Text Empty",
	"results": {
		"time": {
			"base": 173.7,
			"nohint": 176.1,
			"base_div_nohint": 0.9863713798977853
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Md 5 Text Non Empty",
	"results": {
		"time": {
			"base": 639.3,
			"nohint": 635.8,
			"base_div_nohint": 1.0055048757470904
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Buffer Empty",
	"results": {
		"time": {
			"base": 192.7,
			"nohint": 197.5,
			"base_div_nohint": 0.9756962025316455
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Buffer Non Empty",
	"results": {
		"time": {
			"base": 582.0,
			"nohint": 596.1,
			"base_div_nohint": 0.9763462506290891
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Text Empty",
	"results": {
		"time": {
			"base": 153.0,
			"nohint": 153.0,
			"base_div_nohint": 1
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 1 Text Non Empty",
	"results": {
		"time": {
			"base": 575.7,
			"nohint": 551.8,
			"base_div_nohint": 1.0433127944907576
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Buffer Empty",
	"results": {
		"time": {
			"base": 279.2,
			"nohint": 284.1,
			"base_div_nohint": 0.9827525519183385
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Buffer Non Empty",
	"results": {
		"time": {
			"base": 926.0,
			"nohint": 953.5,
			"base_div_nohint": 0.9711588883062402
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Text Empty",
	"results": {
		"time": {
			"base": 237.1,
			"nohint": 245.7,
			"base_div_nohint": 0.964997964997965
		}
	}
}
{
	"category": "Gdscript > String Checksum",
	"name": "Sha 256 Text Non Empty",
	"results": {
		"time": {
			"base": 908.5,
			"nohint": 918.3,
			"base_div_nohint": 0.9893281062833497
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Complex Variable Concatenate",
	"results": {
		"time": {
			"base": 2467.0,
			"nohint": 2165.0,
			"base_div_nohint": 1.1394919168591224
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Complex Variable Method",
	"results": {
		"time": {
			"base": 3849.0,
			"nohint": 3875.0,
			"base_div_nohint": 0.9932903225806452
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Complex Variable Percent",
	"results": {
		"time": {
			"base": 2989.0,
			"nohint": 3014.0,
			"base_div_nohint": 0.9917053749170538
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "No Op Constant Method",
	"results": {
		"time": {
			"base": 193.6,
			"nohint": 189.8,
			"base_div_nohint": 1.0200210748155953
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Concatenate",
	"results": {
		"time": {
			"base": 2.99,
			"nohint": 2.994,
			"base_div_nohint": 0.9986639946559787
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Method",
	"results": {
		"time": {
			"base": 818.6,
			"nohint": 825.6,
			"base_div_nohint": 0.9915213178294574
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Method Constant Dict",
	"results": {
		"time": {
			"base": 554.1,
			"nohint": 547.1,
			"base_div_nohint": 1.012794735880095
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Constant Percent",
	"results": {
		"time": {
			"base": 2.887,
			"nohint": 2.935,
			"base_div_nohint": 0.9836456558773424
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Variable Concatenate",
	"results": {
		"time": {
			"base": 209.9,
			"nohint": 213.1,
			"base_div_nohint": 0.984983575786016
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Variable Method",
	"results": {
		"time": {
			"base": 826.4,
			"nohint": 824.6,
			"base_div_nohint": 1.0021828765462042
		}
	}
}
{
	"category": "Gdscript > String Format",
	"name": "Simple Variable Percent",
	"results": {
		"time": {
			"base": 468.7,
			"nohint": 484.2,
			"base_div_nohint": 0.9679884345311854
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Begins With",
	"results": {
		"time": {
			"base": 11.47,
			"nohint": 10.99,
			"base_div_nohint": 1.0436760691537763
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Bigrams",
	"results": {
		"time": {
			"base": 738.6,
			"nohint": 683.0,
			"base_div_nohint": 1.0814055636896047
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Capitalize",
	"results": {
		"time": {
			"base": 1241.0,
			"nohint": 1249.0,
			"base_div_nohint": 0.9935948759007206
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Casecmp To",
	"results": {
		"time": {
			"base": 9.532,
			"nohint": 9.884,
			"base_div_nohint": 0.9643868878996358
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Contains",
	"results": {
		"time": {
			"base": 9.585,
			"nohint": 9.589,
			"base_div_nohint": 0.9995828553550944
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Contains Gdscript In",
	"results": {
		"time": {
			"base": 3.016,
			"nohint": 2.987,
			"base_div_nohint": 1.0097087378640777
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Count",
	"results": {
		"time": {
			"base": 60.93,
			"nohint": 61.04,
			"base_div_nohint": 0.9981979030144168
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Countn",
	"results": {
		"time": {
			"base": 264.2,
			"nohint": 247.6,
			"base_div_nohint": 1.067043618739903
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Ends With",
	"results": {
		"time": {
			"base": 10.89,
			"nohint": 10.93,
			"base_div_nohint": 0.9963403476669718
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Find",
	"results": {
		"time": {
			"base": 45.2,
			"nohint": 45.55,
			"base_div_nohint": 0.9923161361141604
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Findn",
	"results": {
		"time": {
			"base": 65.62,
			"nohint": 65.74,
			"base_div_nohint": 0.9981746273197446
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Get Slice",
	"results": {
		"time": {
			"base": 79.52,
			"nohint": 81.5,
			"base_div_nohint": 0.9757055214723925
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Get Slice Count",
	"results": {
		"time": {
			"base": 23.66,
			"nohint": 25.32,
			"base_div_nohint": 0.9344391785150079
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Humanize Size",
	"results": {
		"time": {
			"base": 939.2,
			"nohint": 975.0,
			"base_div_nohint": 0.9632820512820514
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Insert",
	"results": {
		"time": {
			"base": 68.13,
			"nohint": 67.9,
			"base_div_nohint": 1.0033873343151691
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Is Valid Filename",
	"results": {
		"time": {
			"base": 26.26,
			"nohint": 26.73,
			"base_div_nohint": 0.982416760194538
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Lpad",
	"results": {
		"time": {
			"base": 225.0,
			"nohint": 231.3,
			"base_div_nohint": 0.9727626459143969
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Naturalnocasecmp To",
	"results": {
		"time": {
			"base": 12.69,
			"nohint": 11.58,
			"base_div_nohint": 1.0958549222797926
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Nocasecmp To",
	"results": {
		"time": {
			"base": 38.35,
			"nohint": 34.45,
			"base_div_nohint": 1.1132075471698113
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Decimals",
	"results": {
		"time": {
			"base": 483.6,
			"nohint": 510.6,
			"base_div_nohint": 0.9471210340775558
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Decimals Pre Constructed",
	"results": {
		"time": {
			"base": 81.39,
			"nohint": 83.34,
			"base_div_nohint": 0.9766018718502519
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Zeros",
	"results": {
		"time": {
			"base": 346.8,
			"nohint": 368.0,
			"base_div_nohint": 0.9423913043478261
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Pad Zeros Pre Constructed",
	"results": {
		"time": {
			"base": 223.9,
			"nohint": 230.6,
			"base_div_nohint": 0.9709453599306158
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rfind",
	"results": {
		"time": {
			"base": 48.71,
			"nohint": 47.71,
			"base_div_nohint": 1.0209599664640536
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rfindn",
	"results": {
		"time": {
			"base": 171.7,
			"nohint": 190.3,
			"base_div_nohint": 0.9022595901208617
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rpad",
	"results": {
		"time": {
			"base": 178.6,
			"nohint": 184.3,
			"base_div_nohint": 0.9690721649484535
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Rsplit",
	"results": {
		"time": {
			"base": 474.6,
			"nohint": 488.8,
			"base_div_nohint": 0.970949263502455
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Similarity",
	"results": {
		"time": {
			"base": 34.83,
			"nohint": 34.2,
			"base_div_nohint": 1.018421052631579
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Simplify Path",
	"results": {
		"time": {
			"base": 1370.0,
			"nohint": 1387.0,
			"base_div_nohint": 0.9877433309300648
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Split",
	"results": {
		"time": {
			"base": 441.0,
			"nohint": 461.9,
			"base_div_nohint": 0.9547521108465036
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Split Floats",
	"results": {
		"time": {
			"base": 352.7,
			"nohint": 350.6,
			"base_div_nohint": 1.0059897318881916
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Substr",
	"results": {
		"time": {
			"base": 70.43,
			"nohint": 70.12,
			"base_div_nohint": 1.0044209925841414
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Camel Case",
	"results": {
		"time": {
			"base": 605.9,
			"nohint": 612.5,
			"base_div_nohint": 0.9892244897959184
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Lower",
	"results": {
		"time": {
			"base": 200.4,
			"nohint": 178.5,
			"base_div_nohint": 1.122689075630252
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Pascal Case",
	"results": {
		"time": {
			"base": 1437.0,
			"nohint": 1426.0,
			"base_div_nohint": 1.0077138849929874
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Snake Case",
	"results": {
		"time": {
			"base": 1080.0,
			"nohint": 1040.0,
			"base_div_nohint": 1.0384615384615385
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Utf 16 Buffer",
	"results": {
		"time": {
			"base": 164.4,
			"nohint": 174.1,
			"base_div_nohint": 0.9442848937392304
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Utf 32 Buffer",
	"results": {
		"time": {
			"base": 112.0,
			"nohint": 116.1,
			"base_div_nohint": 0.9646856158484066
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Utf 8 Buffer",
	"results": {
		"time": {
			"base": 162.3,
			"nohint": 165.2,
			"base_div_nohint": 0.9824455205811139
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "To Wchar Buffer",
	"results": {
		"time": {
			"base": 166.7,
			"nohint": 173.2,
			"base_div_nohint": 0.9624711316397229
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Uri Decode",
	"results": {
		"time": {
			"base": 575.2,
			"nohint": 563.9,
			"base_div_nohint": 1.0200390140095763
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Uri Encode",
	"results": {
		"time": {
			"base": 448.2,
			"nohint": 438.6,
			"base_div_nohint": 1.0218878248974008
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Validate Filename",
	"results": {
		"time": {
			"base": 357.6,
			"nohint": 342.2,
			"base_div_nohint": 1.0450029222676798
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Validate Node Name",
	"results": {
		"time": {
			"base": 91.35,
			"nohint": 92.68,
			"base_div_nohint": 0.9856495468277944
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Xml Escape",
	"results": {
		"time": {
			"base": 486.9,
			"nohint": 490.1,
			"base_div_nohint": 0.9934707202611711
		}
	}
}
{
	"category": "Gdscript > String Manipulation",
	"name": "Xml Unescape",
	"results": {
		"time": {
			"base": 88.86,
			"nohint": 104.0,
			"base_div_nohint": 0.854423076923077
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Both Clean And Simplify",
	"results": {
		"time": {
			"base": 5643.0,
			"nohint": 5799.0,
			"base_div_nohint": 0.9730988101396792
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Only Clean",
	"results": {
		"time": {
			"base": 5629.0,
			"nohint": 5783.0,
			"base_div_nohint": 0.973370223067612
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Only Simplify",
	"results": {
		"time": {
			"base": 22.13,
			"nohint": 22.98,
			"base_div_nohint": 0.9630113141862489
		}
	}
}
{
	"category": "Math > Convex Hull 3d",
	"name": "Quickest",
	"results": {
		"time": {
			"base": 27.51,
			"nohint": 26.13,
			"base_div_nohint": 1.0528128587830081
		}
	}
}
{
	"category": "Math > Delaunay 2d",
	"name": "Delaunay 2d",
	"results": {
		"time": {
			"base": 108.0,
			"nohint": 107.7,
			"base_div_nohint": 1.0027855153203342
		}
	}
}
{
	"category": "Math > Delaunay 3d",
	"name": "Delaunay 3d",
	"results": {
		"time": {
			"base": 615.4,
			"nohint": 606.9,
			"base_div_nohint": 1.0140056022408963
		}
	}
}
{
	"category": "Math > Expression",
	"name": "Parse 20 Complex Expressions Cold",
	"results": {
		"time": {
			"base": 320.5,
			"nohint": 323.5,
			"base_div_nohint": 0.990726429675425
		}
	}
}
{
	"category": "Math > Expression",
	"name": "Parse 20 Complex Expressions With Cached Parse",
	"results": {
		"time": {
			"base": 321.8,
			"nohint": 320.4,
			"base_div_nohint": 1.0043695380774034
		}
	}
}
{
	"category": "Math > Expression",
	"name": "Parse 20 Complex Expressions With Cached Parse Then Execute",
	"results": {
		"time": {
			"base": 329.0,
			"nohint": 324.7,
			"base_div_nohint": 1.0132429935324916
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Cellular",
	"results": {
		"time": {
			"base": 1134.0,
			"nohint": 1125.0,
			"base_div_nohint": 1.008
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Perlin",
	"results": {
		"time": {
			"base": 390.3,
			"nohint": 389.7,
			"base_div_nohint": 1.0015396458814474
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Simplex",
	"results": {
		"time": {
			"base": 431.8,
			"nohint": 436.3,
			"base_div_nohint": 0.9896859958743983
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Simplex Smooth",
	"results": {
		"time": {
			"base": 538.4,
			"nohint": 547.6,
			"base_div_nohint": 0.983199415631848
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Value",
	"results": {
		"time": {
			"base": 350.9,
			"nohint": 346.2,
			"base_div_nohint": 1.013575967648758
		}
	}
}
{
	"category": "Math > Noise",
	"name": "Value Cubic",
	"results": {
		"time": {
			"base": 717.4,
			"nohint": 716.4,
			"base_div_nohint": 1.001395868230039
		}
	}
}
{
	"category": "Math > Triangulate",
	"name": "Triangulate",
	"results": {
		"time": {
			"base": 77.26,
			"nohint": 85.34,
			"base_div_nohint": 0.905319896883056
		}
	}
}
{
	"category": "Navigation > Astar 2d",
	"name": "Astar 5000 Times 5000 Points",
	"results": {
		"time": {
			"base": 525.2,
			"nohint": 514.7,
			"base_div_nohint": 1.0204002331455218
		}
	}
}
{
	"category": "Navigation > Astar 3d",
	"name": "Astar 1000 Times 1000 Points",
	"results": {
		"time": {
			"base": 575.0,
			"nohint": 576.4,
			"base_div_nohint": 0.9975711311589175
		}
	}
}
{
	"category": "Navigation > Moving Agents 2d",
	"name": "1000 Moving Agents",
	"results": {
		"render_cpu": {
			"base": 0.08463,
			"nohint": 0.09183,
			"base_div_nohint": 0.921594250245018
		},
		"time": {
			"base": 0.02267,
			"nohint": 0.02067,
			"base_div_nohint": 1.096758587324625
		}
	}
}
{
	"category": "Navigation > Moving Agents 3d",
	"name": "1000 Moving Agents",
	"results": {
		"render_cpu": {
			"base": 0.02854,
			"nohint": 0.02851,
			"base_div_nohint": 1.0010522623640827
		},
		"time": {
			"base": 0.03267,
			"nohint": 0.02,
			"base_div_nohint": 1.6335
		}
	}
}
{
	"category": "Navigation > Navigation 2d",
	"name": "Navigation 10 000 Random Paths",
	"results": {
		"time": {
			"base": 8.406,
			"nohint": 8.626,
			"base_div_nohint": 0.9744957106422445
		}
	}
}
{
	"category": "Navigation > Navigation 3d",
	"name": "Navigation 10 000 Random Paths",
	"results": {
		"time": {
			"base": 8.817,
			"nohint": 9.002,
			"base_div_nohint": 0.9794490113308153
		}
	}
}
{
	"category": "Scene Nodes > Add Children",
	"name": "Add Children With Same Name",
	"results": {
		"time": {
			"base": 77.67,
			"nohint": 79.87,
			"base_div_nohint": 0.9724552397646175
		}
	}
}
{
	"category": "Scene Nodes > Add Children",
	"name": "Add Children Without Name",
	"results": {
		"time": {
			"base": 89.48,
			"nohint": 92.73,
			"base_div_nohint": 0.9649520112153565
		}
	}
}
{
	"category": "Scene Nodes > Delete Children",
	"name": "Delete Children In Order",
	"results": {
		"time": {
			"base": 8.511,
			"nohint": 8.96,
			"base_div_nohint": 0.9498883928571427
		}
	}
}
{
	"category": "Scene Nodes > Delete Children",
	"name": "Delete Children Random Order",
	"results": {
		"time": {
			"base": 19.5,
			"nohint": 19.86,
			"base_div_nohint": 0.9818731117824774
		}
	}
}
{
	"category": "Scene Nodes > Delete Children",
	"name": "Delete Children Reverse Order",
	"results": {
		"time": {
			"base": 8.554,
			"nohint": 8.793,
			"base_div_nohint": 0.9728192880700558
		}
	}
}
{
	"category": "Scene Nodes > Get Node",
	"name": "Get Node",
	"results": {
		"time": {
			"base": 34.88,
			"nohint": 34.26,
			"base_div_nohint": 1.018096906012843
		}
	}
}
{
	"category": "Scene Nodes > Move Children",
	"name": "Move Children",
	"results": {
		"time": {
			"base": 905.1,
			"nohint": 774.9,
			"base_div_nohint": 1.1680216802168022
		}
	}
}
{
	"category": "Viewport > Activation",
	"name": "Activate 1024 Viewports",
	"results": {
		"time": {
			"base": 350.3,
			"nohint": 298.7,
			"base_div_nohint": 1.1727485771677268
		}
	}
}
{
	"category": "Viewport > Activation",
	"name": "Activate 256 Viewports",
	"results": {
		"time": {
			"base": 71.02,
			"nohint": 68.33,
			"base_div_nohint": 1.0393677740377578
		}
	}
}
{
	"category": "Viewport > Activation",
	"name": "Activate 64 Viewports",
	"results": {
		"time": {
			"base": 24.52,
			"nohint": 25.56,
			"base_div_nohint": 0.9593114241001566
		}
	}
}
{
	"category": "Viewport > Allocation",
	"name": "Create 1024 Viewports",
	"results": {
		"time": {
			"base": 211.8,
			"nohint": 223.5,
			"base_div_nohint": 0.9476510067114094
		}
	}
}
{
	"category": "Viewport > Allocation",
	"name": "Create 256 Viewports",
	"results": {
		"time": {
			"base": 25.19,
			"nohint": 22.15,
			"base_div_nohint": 1.1372460496613996
		}
	}
}
{
	"category": "Viewport > Allocation",
	"name": "Create 64 Viewports",
	"results": {
		"time": {
			"base": 21.83,
			"nohint": 20.63,
			"base_div_nohint": 1.0581677169171109
		}
	}
}

godot.wasm is now 29,547,364 bytes.

@AThousandShips AThousandShips changed the title No inline certain functions for smaller binary size Don't inline certain functions for smaller binary size Jan 24, 2025
@AThousandShips
Copy link
Member

AThousandShips commented Jan 24, 2025

I have no enough mem for full LTO

This absolutely needs to be checked with full LTO, if there's any performance loss with this we need to get data on that case, but generally I don't think trading performance for binary size reduction is appropriate

@YYF233333
Copy link
Contributor Author

generally I don't think trading performance for binary size is appropriate

Yes, most of these tricks should be enabled only if building with optimize=size or when size really matters.

@AThousandShips
Copy link
Member

AThousandShips commented Jan 24, 2025

So MSVC doesn't use LTO generally, but with no LTO my production editor build saves about 2 out of 140 MB (with lto=full on MSVC the result grows by 40 MB compared to without, in both cases, and the ~StringName() change saves about 1 MB, LTO seems broken in MSVC)

That's for just the ~StringName() case

On a release build, building with MinGW which uses full LTO there's no change at all, so this is only relevant for non full LTO builds, so absolutely needs to be restricted to certain cases, though it shouldn't matter in most general build cases

Note didn't use optimizing for size, but that shouldn't matter as _FORCE_INLINE_ when it is in effect works the same across all types

Will compare some other cases as well when I have the time

@AThousandShips
Copy link
Member

AThousandShips commented Jan 24, 2025

Correction, in a release build it saves about 1 MB with full LTO, compared the wrong case, will test some other cases and try look at some performance

For a web build with lto=thin (which is the default) the savings in my case is about 1.3 MB, with lto=full it is about 1.2 MB

@Calinou
Copy link
Member

Calinou commented Jan 24, 2025

I think it makes sense to reduce (but not eliminate) our use of inlining when using optimize=size, but I'd keep things as they are with other optimization modes (except for _err_print_error() maybe).

We could even have optimize=size_extra that also makes _FORCE_INLINE a no-op for further size reductions, while also using -Oz on supported compilers.

@AThousandShips
Copy link
Member

AThousandShips commented Jan 24, 2025

I think a better option might simply be to remove _FORCE_INLINE_ from certain methods and compare binary size on normal builds, and then optimize=size builds, or just the suggestion above to have _FORCE_INLINE_ be a no-op in some cases

The ~StringName() method should be inlined in general when inlining is valid, but that would allow it to not be so when the compiler optimizes for size

But the ~StringName() case would have to be judged for performance, it would easily become significantly slower with this change, the method is so short that I don't think there's any question about inlining it, it's simply a two check branch plus a call, so adding a full call into it and handling stack variables etc. might easily make the method multiple times slower, especially when caching is considered, inlining it makes the cache scope one jump less deep, though it depends on the size of the inlined method of course, but I'm not sure the call to ~StringName() would be significantly smaller than the inlined method as it is so tiny

@YYF233333
Copy link
Contributor Author

YYF233333 commented Jan 25, 2025

I think I should explain the results I observed in SizeBench, why I made these changes, and why they can (or theoretically should) reduce the final binary size, to ensure we're on the same page.

~StringName()(same for ~String()) is a quite small function so the compiler tends to inline it anyway, even specified optimize=size. And in contrast, it is inlined into 50266 different place, meaning every single byte in function body contributes to 50KB of final binary size. That's the reason I explicitly stop this inline.

it's simply a two check branch plus a call

Notice that unref() itself is not a big function and tends to be inlined into the destructor. What I got from SizeBench is the inlined content has a length of 30 bytes on average.

This definitely will impact performance. We should decide where to place it based on benchmark results, whether it should be enabled in optimize=size, or a new optimize=size_extra. I’m not trying to have these changes included in the regular build, just haven't got time to touch build flags yet :)

We could even have optimize=size_extra that also makes _FORCE_INLINE a no-op for further size reductions

I have tried this, and it shows quite a bit reduction in binary size, see above.

What I do realized is that there are significant differences in binary layout between full LTO and thin LTO in some areas. So before moving forward, I’ll first try to replicate the build process of our official web release and see which of my previous conclusions hold.

Edit: It seems that the configuration I’m using is already the closest to the web release on Windows.

Another point worth exploring is Template Foldability, but I haven’t yet found a good way to reduce its size. We have quite a few very similar template instantiations, and if we can extract their common parts, LTO should be able to recognize and merge them. This could potentially free up a significant amount of binary size.

@YYF233333
Copy link
Contributor Author

YYF233333 commented Jan 25, 2025

Did some cleanup and made these changes guarded by a SIZE_EXTRA macro. These changes will be enabled when optimize=size is specified from the cmd and LTO is enabled. (Temporarily, for convenience now.)

Still seeking a way to benchmark web releases, not very familiar with the web export process.
Managed to run godot benchmarks on web.

Results

only show regressions.

{
    "category": "Asset Import Export > Runtime",
    "name": "Import Fbx",
    "results": {
        "time": {
            "master": 0.27,
            "pr": 0.3383,
            "master_div_pr": 0.7981081879988177
        }
    }
}
{
    "category": "Asset Import Export > Runtime",
    "name": "Import Gltf",
    "results": {
        "time": {
            "master": 0.2187,
            "pr": 0.2557,
            "master_div_pr": 0.8552991787250686
        }
    }
}
{
    "category": "Asset Import Export > Runtime",
    "name": "Import Ogg Audio",
    "results": {
        "time": {
            "master": 0.128,
            "pr": 0.14,
            "master_div_pr": 0.9142857142857143
        }
    }
}
{
    "category": "Core > Array",
    "name": "Append Array",
    "results": {
        "time": {
            "master": 246.3,
            "pr": 271.2,
            "master_div_pr": 0.9081858407079647
        }
    }
}
{
    "category": "Core > Array",
    "name": "Bsearch",
    "results": {
        "time": {
            "master": 129.0,
            "pr": 131.2,
            "master_div_pr": 0.9832317073170732
        }
    }
}
{
    "category": "Core > Callable",
    "name": "Function Callable",
    "results": {
        "time": {
            "master": 428.3,
            "pr": 451.0,
            "master_div_pr": 0.9496674057649668
        }
    }
}
{
    "category": "Core > Callable",
    "name": "Lambda Inline Callable",
    "results": {
        "time": {
            "master": 500.4,
            "pr": 523.4,
            "master_div_pr": 0.9560565533053115
        }
    }
}
{
    "category": "Core > Random Number Generator",
    "name": "Global Scope Randi",
    "results": {
        "time": {
            "master": 101.1,
            "pr": 104.0,
            "master_div_pr": 0.9721153846153846
        }
    }
}
{
    "category": "Core > Signal",
    "name": "Emission Params 0",
    "results": {
        "time": {
            "master": 275.1,
            "pr": 299.8,
            "master_div_pr": 0.9176117411607739
        }
    }
}
{
    "category": "Core > Signal",
    "name": "Emission Params 1",
    "results": {
        "time": {
            "master": 283.7,
            "pr": 296.8,
            "master_div_pr": 0.9558625336927223
        }
    }
}
{
    "category": "Core > Signal",
    "name": "Emission Params 10",
    "results": {
        "time": {
            "master": 332.1,
            "pr": 351.8,
            "master_div_pr": 0.9440022740193292
        }
    }
}
{
    "category": "Gdscript > Array",
    "name": "Typed Color Array",
    "results": {
        "time": {
            "master": 286.3,
            "pr": 293.5,
            "master_div_pr": 0.9754684838160137
        }
    }
}
{
    "category": "Gdscript > Array",
    "name": "Typed Float Array",
    "results": {
        "time": {
            "master": 229.2,
            "pr": 237.1,
            "master_div_pr": 0.966680725432307
        }
    }
}
{
    "category": "Gdscript > Array",
    "name": "Typed String Array",
    "results": {
        "time": {
            "master": 843.7,
            "pr": 879.3,
            "master_div_pr": 0.9595132491754806
        }
    }
}
{
    "category": "Gdscript > Array",
    "name": "Untyped String Array",
    "results": {
        "time": {
            "master": 948.1,
            "pr": 979.9,
            "master_div_pr": 0.9675477089498928
        }
    }
}
{
    "category": "Gdscript > Control",
    "name": "Control",
    "results": {
        "time": {
            "master": 0.01367,
            "pr": 0.01867,
            "master_div_pr": 0.7321906802356722
        }
    }
}
{
    "category": "Gdscript > String Checksum",
    "name": "Md 5 Buffer Empty",
    "results": {
        "time": {
            "master": 277.0,
            "pr": 282.0,
            "master_div_pr": 0.9822695035460993
        }
    }
}
{
    "category": "Gdscript > String Checksum",
    "name": "Md 5 Text Empty",
    "results": {
        "time": {
            "master": 223.7,
            "pr": 228.4,
            "master_div_pr": 0.9794220665499124
        }
    }
}
{
    "category": "Gdscript > String Checksum",
    "name": "Sha 1 Buffer Empty",
    "results": {
        "time": {
            "master": 275.6,
            "pr": 286.6,
            "master_div_pr": 0.9616189811584089
        }
    }
}
{
    "category": "Gdscript > String Checksum",
    "name": "Sha 1 Text Empty",
    "results": {
        "time": {
            "master": 234.8,
            "pr": 240.4,
            "master_div_pr": 0.9767054908485857
        }
    }
}
{
    "category": "Gdscript > String Format",
    "name": "Simple Variable Concatenate",
    "results": {
        "time": {
            "master": 248.6,
            "pr": 261.7,
            "master_div_pr": 0.949942682460833
        }
    }
}
{
    "category": "Gdscript > String Format",
    "name": "Simple Variable Method",
    "results": {
        "time": {
            "master": 939.0,
            "pr": 952.6,
            "master_div_pr": 0.9857232836447617
        }
    }
}
{
    "category": "Gdscript > String Format",
    "name": "Simple Variable Percent",
    "results": {
        "time": {
            "master": 536.5,
            "pr": 552.7,
            "master_div_pr": 0.9706893432241722
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Begins With",
    "results": {
        "time": {
            "master": 14.86,
            "pr": 15.44,
            "master_div_pr": 0.9624352331606217
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Casecmp To",
    "results": {
        "time": {
            "master": 12.19,
            "pr": 12.4,
            "master_div_pr": 0.9830645161290322
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Contains",
    "results": {
        "time": {
            "master": 12.68,
            "pr": 12.97,
            "master_div_pr": 0.9776407093292212
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Ends With",
    "results": {
        "time": {
            "master": 16.63,
            "pr": 16.93,
            "master_div_pr": 0.9822799763733018
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Get Slice",
    "results": {
        "time": {
            "master": 108.9,
            "pr": 110.6,
            "master_div_pr": 0.9846292947558771
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Get Slice Count",
    "results": {
        "time": {
            "master": 26.0,
            "pr": 26.57,
            "master_div_pr": 0.9785472337222432
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Insert",
    "results": {
        "time": {
            "master": 101.1,
            "pr": 109.1,
            "master_div_pr": 0.9266727772685609
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Lpad",
    "results": {
        "time": {
            "master": 293.7,
            "pr": 296.8,
            "master_div_pr": 0.98955525606469
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Naturalnocasecmp To",
    "results": {
        "time": {
            "master": 15.64,
            "pr": 16.64,
            "master_div_pr": 0.9399038461538461
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Pad Zeros",
    "results": {
        "time": {
            "master": 436.1,
            "pr": 444.9,
            "master_div_pr": 0.9802202742189257
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Pad Zeros Pre Constructed",
    "results": {
        "time": {
            "master": 294.7,
            "pr": 298.9,
            "master_div_pr": 0.9859484777517564
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Rfindn",
    "results": {
        "time": {
            "master": 171.3,
            "pr": 175.2,
            "master_div_pr": 0.9777397260273973
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Rpad",
    "results": {
        "time": {
            "master": 228.9,
            "pr": 234.9,
            "master_div_pr": 0.9744572158365262
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Similarity",
    "results": {
        "time": {
            "master": 28.26,
            "pr": 28.62,
            "master_div_pr": 0.9874213836477987
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Validate Filename",
    "results": {
        "time": {
            "master": 417.4,
            "pr": 430.7,
            "master_div_pr": 0.9691200371488274
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Validate Node Name",
    "results": {
        "time": {
            "master": 131.3,
            "pr": 132.7,
            "master_div_pr": 0.9894498869630748
        }
    }
}
{
    "category": "Gdscript > String Manipulation",
    "name": "Xml Unescape",
    "results": {
        "time": {
            "master": 110.5,
            "pr": 111.7,
            "master_div_pr": 0.9892569382273948
        }
    }
}
{
    "category": "Math > Convex Hull 3d",
    "name": "Only Simplify",
    "results": {
        "time": {
            "master": 14.64,
            "pr": 14.9,
            "master_div_pr": 0.9825503355704698
        }
    }
}
{
    "category": "Math > Noise",
    "name": "Value Cubic",
    "results": {
        "time": {
            "master": 1003.0,
            "pr": 1017.0,
            "master_div_pr": 0.9862340216322517
        }
    }
}
{
    "category": "Navigation > Astar 3d",
    "name": "Astar 1000 Times 1000 Points",
    "results": {
        "time": {
            "master": 498.0,
            "pr": 503.5,
            "master_div_pr": 0.9890764647467726
        }
    }
}
{
    "category": "Navigation > Moving Agents 2d",
    "name": "1000 Moving Agents",
    "results": {
        "render_cpu": {
            "master": 0.3762,
            "pr": 0.3654,
            "master_div_pr": 1.0295566502463054
        },
        "time": {
            "master": 0.09967,
            "pr": 0.1043,
            "master_div_pr": 0.9556088207094917
        }
    }
}
{
    "category": "Navigation > Moving Agents 3d",
    "name": "1000 Moving Agents",
    "results": {
        "render_cpu": {
            "master": 0.204,
            "pr": 0.1993,
            "master_div_pr": 1.0235825388861013
        },
        "time": {
            "master": 0.08833,
            "pr": 0.1163,
            "master_div_pr": 0.7595012897678418
        }
    }
}
{
    "category": "Navigation > Navigation 3d",
    "name": "Navigation 10 000 Random Paths",
    "results": {
        "time": {
            "master": 9.765,
            "pr": 9.984,
            "master_div_pr": 0.9780649038461539
        }
    }
}
{
    "category": "Viewport > Activation",
    "name": "Activate 256 Viewports",
    "results": {
        "time": {
            "master": 152.1,
            "pr": 154.5,
            "master_div_pr": 0.9844660194174757
        }
    }
}
{
    "category": "Viewport > Activation",
    "name": "Activate 64 Viewports",
    "results": {
        "time": {
            "master": 48.96,
            "pr": 53.14,
            "master_div_pr": 0.9213398569815582
        }
    }
}

Generally I see a 5-10% regression in performance.

@YYF233333
Copy link
Contributor Author

I tried some other tricks, but they didn’t work. I think this is about as far as it goes.
To summarize, this PR achieves a 25% (uncompressed)/7% (gzip compressed) reduction in binary size at the cost of a 5%-10% performance loss. This performance loss is not negligible, so I’ve added a new optimization mode. If possible, perhaps a size_extra_template_release could be shipped for the web, giving users more choice.

@YYF233333 YYF233333 marked this pull request as ready for review January 26, 2025 11:45
@YYF233333 YYF233333 requested review from a team as code owners January 26, 2025 11:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants