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.

P#143951 2024-03-20 15:05

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

P#143992 2024-03-20 22:49

@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
P#144045 2024-03-21 14:42 ( Edited 2024-03-21 14:45)

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.

P#144049 2024-03-21 15:44 ( Edited 2024-03-21 15:57)

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
P#144110 2024-03-22 06:15

[Please log in to post a comment]