// Path: app/src/main/java/com/lsjwzh/test/FpsCalculator.java
// public class FpsCalculator {
// 
// 	private final static String TAG = "FpsCalculator";
// 	
//     private long mFrameIntervalNanos;
//     
//     private boolean mRunning = false;
//     
//     private static FpsCalculator instance;
// 
// 	private AtomicInteger atom = new AtomicInteger(0);
// 	private Thread syncCheckThread = null;
//     
//     static {
//     	instance = new FpsCalculator();
//     }
//     
//     public static FpsCalculator instance() {
//     	return instance;
//     }
// 	
// 	private int totalFps;
// 	private int fpsCalculateCount;
// 	private boolean isCalculatingFPS;
// 	
// 	// calculate the average fps
// 	
// 	public void startCalculate() {
// 		totalFps = 0;
// 		fpsCalculateCount = 0;
// 		isCalculatingFPS = true;
// 	}
// 	
// 	public int stopGetAvgFPS() {
// 		isCalculatingFPS = false;
// 		int avgFPS = totalFps / fpsCalculateCount;
// 		totalFps = 0;
// 		fpsCalculateCount = 0;
// 		return avgFPS;
// 	}
// 
// 	private void syncCheckThread(){
// 		if(!mRunning){
// 			return;
// 		}
// 		int val = atom.getAndSet(0);
// 		if (isCalculatingFPS) {
// 			totalFps += val;
// 			fpsCalculateCount++;
// 		}
// 		android.util.Log.i(TAG, "FPS: " + val);
// 		try {
// 			Thread.sleep(1000);
// 		} catch (InterruptedException e) {
// 			e.printStackTrace();
// 		}
// 	}
// 	    
// 	private FrameCallback frameCallback = new FrameCallback() {
// 
// 		@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
// 		@Override
// 		public void doFrame(long frameTimeNanos) {
// 			
// 			if (!mRunning) {
// 				return;
// 			}
//             
//             Choreographer.getInstance().postFrameCallback(frameCallback);
// 
// 			atom.incrementAndGet();
// 		}};
// 	
// 	@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
// 	public void start() {
// 		Log.d(TAG, "start vsync detect");
// 		if (mRunning) {
// 			return;
// 		}
// 		
// 		mRunning = true;
// 
// 		syncCheckThread = new Thread(new Runnable() {
// 			@Override
// 			public void run() {
// 				for (;;) {
// 					if (!mRunning) {
// 						break;
// 					}
// 					syncCheckThread();
// 				}
// 			}
// 		});
// 		syncCheckThread.start();
// 		
// 		Choreographer chor = Choreographer.getInstance();
// 		Field field;
// 		try {
// 			field = chor.getClass().getDeclaredField("mFrameIntervalNanos");
// 			field.setAccessible(true);
// 			mFrameIntervalNanos = field.getLong(chor);
// 			Log.d(TAG, "mFrameIntervalNanos " + mFrameIntervalNanos);
// 		} catch (Exception e) {
// 			Log.e(TAG, "error: " + e.getMessage());
// 		}
// 		chor.postFrameCallback(frameCallback);
// 
// 	}
// 	
// 	public void stop() {
// 		mRunning = false;
// 		if (syncCheckThread != null) {
// 			try {
// 				syncCheckThread.join();
// 			} catch (InterruptedException e) {
// 				e.printStackTrace();
// 			}
// 		}
// 	}
// }
// 
// Path: app/src/main/java/com/lsjwzh/test/GhostThread.java
// public class GhostThread  {
//     private static final String TAG = "GhostThread";
//     
//     private static boolean isStart = false;
//     
//     private static Thread[] threads = new Thread[0];
// 
//     private static Random random = new Random();
//     private static Runnable runnable = new Runnable() {
//         @Override
//         public void run() {
//             for (; ;) {
//                 if (!isStart) {
//                     break;
//                 }
//                 double c = Math.PI * Math.PI * Math.PI * random.nextFloat();
// //                Log.e("test", "v:" + c);
//             }
//         }
//     };
// 
//     public static void start() {
//         if (isStart) {
//             return;
//         }
//         isStart = true;
//         for (int i = 0; i < threads.length; i++) {
//             Thread thread = new Thread(runnable);
//             thread.setPriority(Thread.NORM_PRIORITY);
//             thread.start();
//             threads[i] = thread;
//         }
//     }
//     
//     public static void stop() {
//         isStart = false;
//         for (Thread thread : threads) {
//             try {
//                 thread.join();
//             } catch (InterruptedException e) {
//                 e.printStackTrace();
//             }
//         }
//     }
// }


import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import com.lsjwzh.test.FpsCalculator;
import com.lsjwzh.test.GhostThread;
package com.wechat.testdemo;



public class MainActivity extends FragmentActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
//    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        getSupportFragmentManager().popBackStackImmediate();
      }
    });
    getSupportFragmentManager().beginTransaction()
        .replace(R.id.fragment, new MainActivityFragment())
        .commit();

//    GhostThread.start();
// Path: app/src/main/java/com/lsjwzh/test/FpsCalculator.java
// public class FpsCalculator {
// 
// 	private final static String TAG = "FpsCalculator";
// 	
//     private long mFrameIntervalNanos;
//     
//     private boolean mRunning = false;
//     
//     private static FpsCalculator instance;
// 
// 	private AtomicInteger atom = new AtomicInteger(0);
// 	private Thread syncCheckThread = null;
//     
//     static {
//     	instance = new FpsCalculator();
//     }
//     
//     public static FpsCalculator instance() {
//     	return instance;
//     }
// 	
// 	private int totalFps;
// 	private int fpsCalculateCount;
// 	private boolean isCalculatingFPS;
// 	
// 	// calculate the average fps
// 	
// 	public void startCalculate() {
// 		totalFps = 0;
// 		fpsCalculateCount = 0;
// 		isCalculatingFPS = true;
// 	}
// 	
// 	public int stopGetAvgFPS() {
// 		isCalculatingFPS = false;
// 		int avgFPS = totalFps / fpsCalculateCount;
// 		totalFps = 0;
// 		fpsCalculateCount = 0;
// 		return avgFPS;
// 	}
// 
// 	private void syncCheckThread(){
// 		if(!mRunning){
// 			return;
// 		}
// 		int val = atom.getAndSet(0);
// 		if (isCalculatingFPS) {
// 			totalFps += val;
// 			fpsCalculateCount++;
// 		}
// 		android.util.Log.i(TAG, "FPS: " + val);
// 		try {
// 			Thread.sleep(1000);
// 		} catch (InterruptedException e) {
// 			e.printStackTrace();
// 		}
// 	}
// 	    
// 	private FrameCallback frameCallback = new FrameCallback() {
// 
// 		@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
// 		@Override
// 		public void doFrame(long frameTimeNanos) {
// 			
// 			if (!mRunning) {
// 				return;
// 			}
//             
//             Choreographer.getInstance().postFrameCallback(frameCallback);
// 
// 			atom.incrementAndGet();
// 		}};
// 	
// 	@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
// 	public void start() {
// 		Log.d(TAG, "start vsync detect");
// 		if (mRunning) {
// 			return;
// 		}
// 		
// 		mRunning = true;
// 
// 		syncCheckThread = new Thread(new Runnable() {
// 			@Override
// 			public void run() {
// 				for (;;) {
// 					if (!mRunning) {
// 						break;
// 					}
// 					syncCheckThread();
// 				}
// 			}
// 		});
// 		syncCheckThread.start();
// 		
// 		Choreographer chor = Choreographer.getInstance();
// 		Field field;
// 		try {
// 			field = chor.getClass().getDeclaredField("mFrameIntervalNanos");
// 			field.setAccessible(true);
// 			mFrameIntervalNanos = field.getLong(chor);
// 			Log.d(TAG, "mFrameIntervalNanos " + mFrameIntervalNanos);
// 		} catch (Exception e) {
// 			Log.e(TAG, "error: " + e.getMessage());
// 		}
// 		chor.postFrameCallback(frameCallback);
// 
// 	}
// 	
// 	public void stop() {
// 		mRunning = false;
// 		if (syncCheckThread != null) {
// 			try {
// 				syncCheckThread.join();
// 			} catch (InterruptedException e) {
// 				e.printStackTrace();
// 			}
// 		}
// 	}
// }
// 
// Path: app/src/main/java/com/lsjwzh/test/GhostThread.java
// public class GhostThread  {
//     private static final String TAG = "GhostThread";
//     
//     private static boolean isStart = false;
//     
//     private static Thread[] threads = new Thread[0];
// 
//     private static Random random = new Random();
//     private static Runnable runnable = new Runnable() {
//         @Override
//         public void run() {
//             for (; ;) {
//                 if (!isStart) {
//                     break;
//                 }
//                 double c = Math.PI * Math.PI * Math.PI * random.nextFloat();
// //                Log.e("test", "v:" + c);
//             }
//         }
//     };
// 
//     public static void start() {
//         if (isStart) {
//             return;
//         }
//         isStart = true;
//         for (int i = 0; i < threads.length; i++) {
//             Thread thread = new Thread(runnable);
//             thread.setPriority(Thread.NORM_PRIORITY);
//             thread.start();
//             threads[i] = thread;
//         }
//     }
//     
//     public static void stop() {
//         isStart = false;
//         for (Thread thread : threads) {
//             try {
//                 thread.join();
//             } catch (InterruptedException e) {
//                 e.printStackTrace();
//             }
//         }
//     }
// }


// Path: app/src/main/java/com/wechat/testdemo/MainActivity.java
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import com.lsjwzh.test.FpsCalculator;
import com.lsjwzh.test.GhostThread;

package com.wechat.testdemo;



public class MainActivity extends FragmentActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
//    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        getSupportFragmentManager().popBackStackImmediate();
      }
    });
    getSupportFragmentManager().beginTransaction()
        .replace(R.id.fragment, new MainActivityFragment())
        .commit();

//    GhostThread.start();
    FpsCalculator.instance().start();