I don’t have a old device, but does this help at all.
-------------------------------------------------------------------------------------------------------- -- Constants -------------------------------------------------------------------------------------------------------- local RADIUS = 400; local OBJECT\_COUNT = 2000; local DEMONSTRATE\_BUG = true; -------------------------------------------------------------------------------------------------------- -- Helper Methods -------------------------------------------------------------------------------------------------------- local function getPointOnRadius(x, y, radius, angle) local a = math.rad(angle) local x = x + radius \* math.cos(a) local y = y + radius \* math.sin(a) return x, y; end local function recurseDisplayObjectsForCount(displayObject) local count = 1; if displayObject.numChildren then for i=1, displayObject.numChildren do local child = displayObject[i]; count = count + recurseDisplayObjectsForCount(child); end end return count; end -------------------------------------------------------------------------------------------------------- -- Variables to calculate delta time and average fps -------------------------------------------------------------------------------------------------------- local lastMillis = system.getTimer(); local millis = 0; local deltaTime = 0; local totalMillis = 0; local totalFrames = 0; -------------------------------------------------------------------------------------------------------- -- Scene initialization -------------------------------------------------------------------------------------------------------- local mainParent = display.newGroup(); mainParent.x = display.contentCenterX; mainParent.y = display.contentCenterY; local useParent = mainParent; for i=1, OBJECT\_COUNT do local angle = (i/OBJECT\_COUNT) \* 360; local square = display.newImageRect("Icon.png", system.ResourceDirectory, 100, 100); square.x, square.y = getPointOnRadius(0, 0, RADIUS + math.random(-100, 100), angle); square.rotation = angle + 45; useParent:insert(square); if DEMONSTRATE\_BUG == true then -- This code assigns a 1/3 chance of either creating a new child group, popping up the display list hierarchy, or staying at the current group object in the hierarchy -- This simply allows us to simulate a complex hierarchy of display objects. local decision = math.random(0, 99); if decision \<= 33 then if useParent ~= mainParent then useParent = useParent.parent; end elseif decision \<= 66 then local newParent = display.newGroup(); useParent:insert(newParent); useParent = newParent; else -- Nothing end end end -------------------------------------------------------------------------------------------------------- -- Update once per frame -------------------------------------------------------------------------------------------------------- Runtime:addEventListener("enterFrame", function (event) -- Find Delta Time millis = event.time - lastMillis; deltaTime = (millis/1000); -- Sumation for average FPS totalMillis = totalMillis + millis; totalFrames = totalFrames + 1; -- A little animation to know the scene is active mainParent.rotation = mainParent.rotation + deltaTime \* 60; -- Store for the next frame's delta time lastMillis = event.time; end); -------------------------------------------------------------------------------------------------------- -- Print the AVERAGE Frame rate and count objects in the scene every second -------------------------------------------------------------------------------------------------------- timer.performWithDelay(1000, function () local avgMillis = totalMillis/totalFrames; local stage = display.getCurrentStage(); local count = recurseDisplayObjectsForCount(stage); print("FPS", (1000/avgMillis), "# OBJECTS:", count); totalFrames = 0; totalMillis = 0; end, -1); local background = display.newRect( display.contentCenterX, display.contentCenterY, display.actualContentWidth, display.actualContentHeight ) background.alpha = 0.00000000001 background:addEventListener( "touch", function ( ) return true end )