CPU: Difference between revisions

From Pico-8 Wiki
Jump to navigation Jump to search
imported>Sam Hocevar
imported>Sam Hocevar
(→‎Functions with a system cost: cost for circfill())
Line 35: Line 35:
|-
|-
| [[circ|<code>circ()</code>]] || <code>2+n*4</code>
| [[circ|<code>circ()</code>]] || <code>2+n*4</code>
|warning: the formula is incomplete for clipped circles
|warning: that formula is incomplete for clipped circles
|-
|-
| [[circfill|<code>circfill()</code>]] || <code>?</code>
| [[circfill|<code>circfill()</code>]] || <code>n*flr((n+9)/4)</code>
|
|warning: that formula is incomplete for clipped circles
|-
|-
| [[line|<code>line()</code>]] || <code>ceil(n/2)</code> || <code>n</code> is the number of pixels drawn; there is an additional cost of <code>1</code> if at least one pixel had to be clipped
| [[line|<code>line()</code>]] || <code>ceil(n/2)</code> || <code>n</code> is the number of pixels drawn; there is an additional cost of <code>1</code> if at least one pixel had to be clipped

Revision as of 17:55, 20 December 2018

Pico-8 keeps track of CPU usage using two values: a Lua instruction usage, and a system usage.

The function stat(1) returns the total (Lua + system) usage for the current frame, and stat(2) returns the system usage.

Only a few functions have a system usage, measured in ticks. There are 4194304 ticks in a second (2^22), so about 69905 ticks per frame at 60 FPS.

Functions with a system cost

Function Ticks Notes
cls() 1024 same cost as rectfill of same size
print() 2+n*8 n is the number of characters in the string, even those not rendered

spaces, newlines, and double-width glyphs each count as one character

spr() n n is the number of pixels drawn, including transparent pixels (width × height of the sprite rectangle)

cost is 0 if first argument is outside the [0, 255] range

sspr() n n is the number of pixels drawn, including transparent pixels (width × height of the destination rectangle)
rect() max(1,2*ceil(a/4)) + max(0,2*ceil(b/2-1))

Where:

  • w,h = abs(x2-x1),abs(y2-y1)
  • a,b = max(w,h),min(w,h)
rectfill() max(1,flr(n/16)) n is the number of pixels drawn (width × height)
circ() 2+n*4 warning: that formula is incomplete for clipped circles
circfill() n*flr((n+9)/4) warning: that formula is incomplete for clipped circles
line() ceil(n/2) n is the number of pixels drawn; there is an additional cost of 1 if at least one pixel had to be clipped
map() / mapdraw() max(1,n*64) n is the number of sprites rendered; only cells that are not zero in the map are considered
music() 16 no cost if no argument
sfx() 16 no cost if no argument
memcpy() n+1 n is the number of bytes copied
memset() max(1,ceil(n/2)) n is the number of bytes set
reload() max(1,n*8) n is the number of bytes reloaded
btn() 4 no cost if no argument
btnp() 4 no cost if no argument
rnd() 4
sqrt() 24 only 16 if argument is zero
stat() 16