package org.coderoller.springlayoutsample;

import org.coderoller.springlayout.SpringLayout;

import android.content.Context;
import android.os.Debug;
import android.util.AttributeSet;

public class ProxySpringLayout extends SpringLayout implements MeasurableLayout {
    private int mMeasuresCount, mLayoutsCount;
    private long mTotalMeasuresTime, mTotalLayoutsTime;

    public ProxySpringLayout(Context context) {
        super(context);
    }

    public ProxySpringLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ProxySpringLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        final long start = Debug.threadCpuTimeNanos();
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        mTotalMeasuresTime += (Debug.threadCpuTimeNanos() - start);
        mMeasuresCount++;
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        final long start = Debug.threadCpuTimeNanos();
        super.onLayout(changed, l, t, r, b);
        mTotalLayoutsTime += (Debug.threadCpuTimeNanos() - start);
        mLayoutsCount++;
    }

    @Override
    public int getMeasuresCount() {
        return mMeasuresCount;
    }

    @Override
    public long getTotalMeasuresTime() {
        return mTotalMeasuresTime / 1000;
    }

    @Override
    public long getAverageMeasureTime() {
        return getTotalMeasuresTime() / getMeasuresCount();
    }

    @Override
    public int getLayoutsCount() {
        return mLayoutsCount;
    }

    @Override
    public long getTotalLayoutsTime() {
        return mTotalLayoutsTime / 1000;
    }

    @Override
    public long getAverageLayoutTime() {
        return getTotalLayoutsTime() / getLayoutsCount();
    }
}