Log In  


function _draw()
  cls()
  print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n") -- 19 newlines
end

costs 0.1 cpu according to ctrl-p.
however,

function _draw()
  cls()
  print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n") -- 20 newlines
end

costs 0.47 cpu. Each additional newline after that adds around 0.46 cpu usage. This happens with seperate print calls as well. Supplying coordinates to the print call will prevent the cpu from spiking. Note that the 20th newline is when print will scroll the first line off the screen.

1


I think this is a known cost (because of the scrolling which does a full redraw)


@merwok, that can't be it because it takes 1050 loops of the first print (with coordinates) to eat the same amount of cpu as the second print

function _draw()
	cls()
	for i = 1, 1050 do
		print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", 0, 0)
	end
end

edit: and even if you include the cls in the loop and remove the coordinates it takes 60 loops to reach the same cpu cost

function _draw()
	for i = 1, 60 do
		cls()
		print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n")
	end
end

cls() resets the cursor position to 0,0

In both of your examples, the difference is that they don't cause the screen to scroll. It's the scrolling of the screen (necessitating redraw) that eats the CPU.

Try this:

function _draw()
 print("x")
end

Notice that CPU usage jumps 40+ percent once it hits the bottom and the screen is made to scroll.

Passing explicit coordinates or using cls() regularly will prevent print() from causing the screen to scroll.


The net CPU cost of print scrolling seems to be much lower.
Re-implemented, it is 0.11 for scrolling by sspr and 0.02 for scrolling by memcpy. (at 30 FPS).

cls()
poke(0x5f36,@0x5f36|0x40) -- disable autoscroll by print
function _draw()
  if @0x5f27>122 then
    ---[[
    --0.02 cpu
    local sb=0.5*128*6 -- scroll 6px
    memcpy(0x6000,0x6000+sb,0x2000-sb)
    memset(0x8000-sb,0,sb)
    --[=[]]
    --0.11 cpu
    poke(0x5f54,0x60)
    local oldc=color(0)
    palt(0,false)
    sspr(0,6,128,122,0,0)
    rectfill(0,122,127,127)
    palt()
    poke(0x5f54,0x00)
    color(oldc)
    --]=]
    cursor(0,@0x5f27-6)
  end
  poke(0x5f26,rnd(124))
  print("x")
end


[Please log in to post a comment]