Make 2D benches harder to avoid reaching 60fps vsync barrier on highend phone
diff --git a/src/org/zeroxlab/graphics/DrawArcView.java b/src/org/zeroxlab/graphics/DrawArcView.java
index d05cfa9..4566e1f 100644
--- a/src/org/zeroxlab/graphics/DrawArcView.java
+++ b/src/org/zeroxlab/graphics/DrawArcView.java
@@ -55,18 +55,29 @@
     }
 
     private void drawArc(Canvas canvas) {
-        int color = (0x00252525 | new Random().nextInt() ) | Color.BLACK; 
+        if (angle > 360) angle = 0;
+
+        int color = (0x00252525 | new Random().nextInt() ) | Color.BLACK;
         Paint p = new Paint();
         p.setAntiAlias(false);
         p.setStyle(Paint.Style.FILL);
         p.setColor(color);
 
-        canvas.drawArc(new RectF(0,0, getWidth(), getHeight()), 0, angle, center, p);
-        center = !center;
-        angle += step;
-        if (angle >= 360) {
-            angle = 0;
+        canvas.drawArc(new RectF(0,0, getWidth(), getHeight()), 0, angle, true, p);
+
+        for(int j=0; j<3; j++) for(int x=0; x<4; x++) for(int y=0; y<4; y++) {
+            color = (0x88252525 | new Random().nextInt() );
+            p = new Paint();
+            p.setAntiAlias(false);
+            p.setStyle(Paint.Style.FILL);
+            p.setColor(color);
+
+            if(x%2==0)
+                canvas.drawArc(new RectF( x*getWidth()/4, y*getHeight()/4, (1+x)*getWidth()/4, (1+y)*getHeight()/4), 0, angle, (x+y)%2 == 0, p);
+            else
+                canvas.drawArc(new RectF( x*getWidth()/4, y*getHeight()/4, (1+x)*getWidth()/4, (1+y)*getHeight()/4), 0, -angle, (x+y)%2 == 0, p);
         }
+        angle += step;
     }
 
     public DrawArcView(Context context, AttributeSet attrs) {
diff --git a/src/org/zeroxlab/graphics/DrawCircle2View.java b/src/org/zeroxlab/graphics/DrawCircle2View.java
index 62f8074..ee30b14 100644
--- a/src/org/zeroxlab/graphics/DrawCircle2View.java
+++ b/src/org/zeroxlab/graphics/DrawCircle2View.java
@@ -52,22 +52,26 @@
     }
 
     private void drawCircle(Canvas canvas) {
-        Random mRandom = new Random();
 
-        int color = (0x00252525 | mRandom.nextInt() ) | Color.BLACK; 
-        Paint p = new Paint();
-        p.setAntiAlias(false);
-        p.setStyle(Paint.Style.FILL);
-        p.setColor(color);
+        Random mRandom = new Random();
 
         int height = getHeight();
         int width  = getWidth();
 
         int cx = (int)((mRandom.nextInt() % (width*0.8) ) + (width*0.1));
         int cy = (int)((mRandom.nextInt() % (height*0.8) ) + (height*0.1));
-        int  r = (int)((mRandom.nextInt() % (width*0.4) ) + (width*0.1));
+        int  r = (int)((mRandom.nextInt() % (width*0.3) ) + (width*0.2));
 
-        canvas.drawCircle(cx, cy, r, p);
+        int color;
+        Paint p;
+        for(int i=6; i>=0; i--) {
+            color = (0x33252525 | mRandom.nextInt()); 
+            p = new Paint();
+            p.setAntiAlias(true);
+            p.setStyle(Paint.Style.FILL);
+            p.setColor(color);
+            canvas.drawCircle(cx, cy, (int)(r*(1 + i/10.0)), p);
+        }
     }
 
     public DrawCircle2View(Context context, AttributeSet attrs) {
diff --git a/src/org/zeroxlab/graphics/DrawImageView.java b/src/org/zeroxlab/graphics/DrawImageView.java
index f8bf15d..ac144ea 100644
--- a/src/org/zeroxlab/graphics/DrawImageView.java
+++ b/src/org/zeroxlab/graphics/DrawImageView.java
@@ -47,12 +47,16 @@
 
 class DrawImageView extends SurfaceView {
 
+    private final int COL = 5;
+    private final int ROW = 9;
+
     private SurfaceHolder mSurfaceHolder;
-    private int position[] = {0,0,0,0,0};
-    private boolean direction[] = {true,true,true,true,true};
+    private float position[] = new float[ROW];
+    private boolean direction[] = new boolean[ROW];
     private Bitmap mBitmap;
     private Paint bgPaint;
 
+
     protected void setImage(Bitmap bmp) {
         mBitmap = bmp;
     }
@@ -64,15 +68,18 @@
     }
 
     private void drawImage(Canvas canvas) {
-        canvas.drawRect(0,0,getWidth(),getHeight(),bgPaint);
+        int w = getWidth();
+        int h = getHeight();
+        canvas.drawRect(0,0,w,h,bgPaint);
 
-        for(int x=0; x<5; x++) {
+        for(int x=0; x<ROW; x++) {
             int speed = (x+1) * 2;
-
-            canvas.drawBitmap(mBitmap, (getWidth() - mBitmap.getWidth())/2, position[x], null);
+            
+            for(int j=0; j<COL; j++)
+                canvas.drawBitmap(mBitmap, null, new RectF((w/(float)COL)*j, position[x], (w/(float)COL)*(j+1), position[x]+(w/(float)COL)), null);
             if(direction[x]) {
                 position[x] += speed;
-                if (position[x] + mBitmap.getHeight() >= getHeight())
+                if (position[x] + (w/(float)COL) >= getHeight())
                     direction[x] = !direction[x];
             } else {
                 position[x] -= speed;
@@ -89,6 +96,11 @@
         bgPaint = new Paint();
         bgPaint.setColor(Color.BLACK);
         bgPaint.setStyle(Paint.Style.FILL);
+
+        for(int i=0; i<ROW; i++) {
+            position[i] = 0;
+            direction[i] = true;
+        }
     }
 }
 
diff --git a/src/org/zeroxlab/graphics/DrawTextView.java b/src/org/zeroxlab/graphics/DrawTextView.java
index 7238fcd..d125e77 100644
--- a/src/org/zeroxlab/graphics/DrawTextView.java
+++ b/src/org/zeroxlab/graphics/DrawTextView.java
@@ -45,6 +45,9 @@
 
     public final String TEXT1 = "0xbench";
     public final String TEXT2 = "0xlab";
+    public final int TIMES = 10;
+
+    private Paint bgPaint;
 
     class PaintText {
         public int x;
@@ -72,34 +75,43 @@
         Random mRandom = new Random();
         int height = getHeight();
         int width  = getWidth();
+        canvas.drawRect(0,0,width,height,bgPaint);
+       
+        int cx;
+        int cy;
+        int color; 
+        for(int i=0; i<TIMES; i++) {
+            cx = (int)((mRandom.nextInt() % (width*0.8) ) + (width*0.1));
+            cy = (int)((mRandom.nextInt() % (height*0.8) ) + (height*0.1));
 
-        int cx = (int)((mRandom.nextInt() % (width*0.8) ) + (width*0.1));
-        int cy = (int)((mRandom.nextInt() % (height*0.8) ) + (height*0.1));
+            color = (0x00555555 | mRandom.nextInt() ) | Color.BLACK; 
+            Paint p = new Paint();
+            p.setAntiAlias(true);
+            p.setStyle(Paint.Style.FILL);
+            p.setTextAlign(Paint.Align.CENTER);
 
-        int color = (0x00353535 | mRandom.nextInt() ) | Color.BLACK; 
-        Paint p = new Paint();
-        p.setAntiAlias(false);
-        p.setStyle(Paint.Style.FILL);
-        p.setTextAlign(Paint.Align.CENTER);
+            if(mRandom.nextInt()%2 == 0)
+                p.setFakeBoldText(true);
 
-        if(mRandom.nextInt()%2 == 0)
-            p.setFakeBoldText(true);
+            if(mRandom.nextInt()%2 == 0)
+                p.setTextSkewX((float)-0.45);
 
-        if(mRandom.nextInt()%2 == 0)
-            p.setTextSkewX((float)-0.35);
+            p.setColor(color);
+            p.setTextSize(42 + (mRandom.nextInt()%28));
 
-        p.setColor(color);
-        p.setTextSize(32 + (mRandom.nextInt()%24));
-
-        if(mRandom.nextInt()%2 == 0)
-            canvas.drawText(TEXT1, cx, cy, p);
-        else
-            canvas.drawText(TEXT2, cx, cy, p);
+            if(mRandom.nextInt()%2 == 0)
+                canvas.drawText(TEXT1, cx, cy, p);
+            else
+                canvas.drawText(TEXT2, cx, cy, p);
+        }
     }
 
     public DrawTextView(Context context, AttributeSet attrs) {
         super(context, attrs);
         mSurfaceHolder = getHolder();
+        bgPaint = new Paint();
+        bgPaint.setColor(Color.BLACK);
+        bgPaint.setStyle(Paint.Style.FILL);
     }
 }