// Path: saklib/src/main/java/com/wanjian/sak/utils/LoopQueue.java
// public class LoopQueue<T> {
//     private int size;
//     private LinkedList<T> queue;
//     private int cursor;
// 
//     public LoopQueue(int size) {
//         if (size < 1) {
//             throw new IllegalArgumentException();
//         }
//         this.size = size;
//         queue = new LinkedList<T>();
//     }
// 
//     public T take() {
//         if (has() == false) {
//             throw new IllegalStateException("end!");
//         }
//         return queue.get(cursor++);
//     }
// 
//     public void append(T t) {
//         if (queue.size() == size) {
//             queue.remove(0);
//             cursor--;
//             if (cursor < 0) {
//                 cursor = 0;
//             }
//         }
//         queue.add(t);
//     }
// 
//     public boolean has() {
//         return cursor != queue.size();
//     }
// 
//     public int maxSize() {
//         return size;
//     }
// 
//     public int size() {
//         return queue.size();
//     }
// 
//     public void reset() {
//         cursor = 0;
//     }
// 
//     public void clean() {
//         cursor = 0;
//         queue.clear();
//     }
// }


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import com.wanjian.sak.utils.LoopQueue;
package com.wanjian.sak.support;



public class FPSView extends View {
    private Paint paint;
    private float density;
    private Path path = new Path();
    private LoopQueue<Long> data;

    public FPSView(@NonNull Context context) {
        this(context, null);
    }

    public FPSView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        setWillNotDraw(false);
        density = getRootView().getResources().getDisplayMetrics().density;
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setTextSize(dp2px(10));
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(dp2px(0.8f));
    }

    protected int dp2px(float dip) {
        return (int) (dip * density + 0.5);
    }


// Path: saklib/src/main/java/com/wanjian/sak/utils/LoopQueue.java
// public class LoopQueue<T> {
//     private int size;
//     private LinkedList<T> queue;
//     private int cursor;
// 
//     public LoopQueue(int size) {
//         if (size < 1) {
//             throw new IllegalArgumentException();
//         }
//         this.size = size;
//         queue = new LinkedList<T>();
//     }
// 
//     public T take() {
//         if (has() == false) {
//             throw new IllegalStateException("end!");
//         }
//         return queue.get(cursor++);
//     }
// 
//     public void append(T t) {
//         if (queue.size() == size) {
//             queue.remove(0);
//             cursor--;
//             if (cursor < 0) {
//                 cursor = 0;
//             }
//         }
//         queue.add(t);
//     }
// 
//     public boolean has() {
//         return cursor != queue.size();
//     }
// 
//     public int maxSize() {
//         return size;
//     }
// 
//     public int size() {
//         return queue.size();
//     }
// 
//     public void reset() {
//         cursor = 0;
//     }
// 
//     public void clean() {
//         cursor = 0;
//         queue.clear();
//     }
// }


// Path: saklib/src/main/java/com/wanjian/sak/support/FPSView.java
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import com.wanjian.sak.utils.LoopQueue;

package com.wanjian.sak.support;



public class FPSView extends View {
    private Paint paint;
    private float density;
    private Path path = new Path();
    private LoopQueue<Long> data;

    public FPSView(@NonNull Context context) {
        this(context, null);
    }

    public FPSView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        setWillNotDraw(false);
        density = getRootView().getResources().getDisplayMetrics().density;
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setTextSize(dp2px(10));
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(dp2px(0.8f));
    }

    protected int dp2px(float dip) {
        return (int) (dip * density + 0.5);
    }


    public void update(LoopQueue<Long> data) {