Erase mask, running slow on IOS

Hi,

I’m using the script below to erase an image from the screen. On an iPad. On my computer it’s running fine. On the iPad it’s very slow. I was wondering if someone has suggestions on improving this script to make it run faster.

Thanks,
Joost


//
////////////////////////////////////////////////////
////////////////////////////////////////////////////
//
var lineSize:Number=200;
var doDraw:Boolean=false;
var resumeDrawing:Boolean=false;
var erasableBitmapData:BitmapData = new BitmapData(768, 1024, true, 0xFFFFFFFF);
var erasableBitmap:Bitmap = new Bitmap(erasableBitmapData);
erasableBitmap.cacheAsBitmap = true;
addChild(erasableBitmap);

maskee.cacheAsBitmap = true;
maskee.mask = erasableBitmap;
/*************************
ERASER
**************************/
var eraserClip:Sprite = new Sprite();
initEraser();
function initEraser():void {
    eraserClip.graphics.lineStyle(lineSize,0xff0000);
    eraserClip.graphics.moveTo(stage.mouseX,stage.mouseY);
}
//
var drawnBitmapData:BitmapData = new BitmapData(768, 1024, true, 0x00000000);
var drawnBitmap:Bitmap = new Bitmap(drawnBitmapData);
drawnBitmap.cacheAsBitmap = true;
//
var tempD:BitmapData = new BitmapData(drawnBitmapData.width,drawnBitmapData.height,true,0x0000CCFF);

var countDraw:int = 0;
var endDraw:int = 0;
//
var animationSpeed:int = 40; // 1000 is seconde
var timerVarken:Timer;
//
/*************************
MOUSE EVENTS
**************************/
timerVarken = new Timer(animationSpeed,0);
timerVarken.addEventListener(TimerEvent.TIMER, maskMove);
timerVarken.start();
maskee.addEventListener(MouseEvent.MOUSE_DOWN,startDrawing);
maskee.addEventListener(MouseEvent.MOUSE_UP,stopDrawing);


function startDrawing(e:MouseEvent):void {
    eraserClip.graphics.moveTo(stage.mouseX,stage.mouseY);
    doDraw=true;
}

function stopDrawing(e:MouseEvent):void {
    doDraw=false;
    resumeDrawing = false;
}

function maskOut(e:Event):void {
    if (doDraw){
        resumeDrawing = true;
    }
}

function maskOver(e:MouseEvent):void {
    if (resumeDrawing){
        resumeDrawing = false;
        eraserClip.graphics.moveTo(stage.mouseX,stage.mouseY);
    }
}

function maskMove(e:TimerEvent):void {
    //
    if (doDraw && !resumeDrawing){
        eraserClip.graphics.lineTo(stage.mouseX,stage.mouseY);
        drawnBitmapData.fillRect(drawnBitmapData.rect, 0x00000000); 
        drawnBitmapData.draw(eraserClip , new Matrix(), null, BlendMode.NORMAL);
        erasableBitmapData.fillRect(erasableBitmapData.rect, 0xFFFFFFFF);
        erasableBitmapData.draw(drawnBitmap, new Matrix(), null, BlendMode.ERASE);
        // -----------------------------
        // ------------ ALI ------------
        // -----------------------------
        tempD.draw(eraserClip);
        
        var totalImgRect:Rectangle = new Rectangle(0,0,drawnBitmapData.width,drawnBitmapData.height);
        var bArr:ByteArray = tempD.getPixels(new Rectangle(0,0,eraserClip.width,eraserClip.height));
        var totArr:ByteArray = drawnBitmapData.getPixels(totalImgRect);
        
        var transRedPixels:uint = tempD.histogram()[0][0];
        
        var v1:Vector.<uint> = drawnBitmapData.getVector(totalImgRect);
        var perc:Number = 100 - ((100 * transRedPixels) / v1.length);
        if (perc > 80) {
            maskee.x = 768;
            reset(null);
            startDrawing(null);
            tempD = new BitmapData(drawnBitmapData.width,drawnBitmapData.height,true,0x0000CCFF);
            //MovieClip(root).removeChild(MovieClip(root).getChildByName("BMP"));
        }
        //
        e.updateAfterEvent();
    }
}

function reset(e:Event):void {
    eraserClip.graphics.clear();
    initEraser();
    erasableBitmapData.fillRect(erasableBitmapData.rect, 0xFFFFFFFF);
}