Resource system: Difference between revisions

→‎Resource size calculation: mention how the table is automatically generated by Nintendo
imported>NiceneNerd
(Moved BFRES RSTB estimation to Help:Updating the RSTB)
imported>Leoetlino
(→‎Resource size calculation: mention how the table is automatically generated by Nintendo)
Line 110: Line 110:


==== Resource size calculation ====
==== Resource size calculation ====
It is currently unknown how Nintendo has determined the values in the RSTB. However by REing the resource system it was found that the resource loading heap is, for most factories, only used to allocate the file loading buffer (which is as large as the file to load), the C++ resource class, extra allocations depending on the resource class and some extra bytes to ensure data is aligned correctly in memory.
According to an internal source, Nintendo automatically generates the Resource Size Table using development builds of the game that are believed to contain instrumentation code (perhaps in the [[Patrol]] component) This is consistent with the fact that the RSTB asset has the "product" suffix in its name, which is used for machine-generated files, and also with the fact that a similar solution is used for actor instance heap size measurement.
 
The resource loading heap is, for most factories, only used to allocate the file loading buffer (which is as large as the file to load), the C++ resource class, extra allocations depending on the resource class and some extra bytes to ensure data is aligned correctly in memory.


Therefore, the following formula should give a correct size value for all resource types:
Therefore, the following formula should give a correct size value for all resource types:
Line 117: Line 119:


PARSE_SIZE is the amount of memory allocated from the resource heap in the <code>Resource::parse</code> function. Determining the exact value of PARSE_SIZE requires reversing that function and tracking calls to <code>operator new()</code> because the amount of dynamically allocated memory depends on the resource.
PARSE_SIZE is the amount of memory allocated from the resource heap in the <code>Resource::parse</code> function. Determining the exact value of PARSE_SIZE requires reversing that function and tracking calls to <code>operator new()</code> because the amount of dynamically allocated memory depends on the resource.


[[Category:Internals]]
[[Category:Internals]]
<references />
<references />
Anonymous user