package com.asha.vrlib.common;
import android.os.Looper;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
/**
* Created by hzqiujiadi on 16/9/8.
* hzqiujiadi ashqalcn@gmail.com
*/
public class MDGLHandler {
private boolean died;
private Queue<Runnable> mAddQueue = new LinkedBlockingQueue<>();
private Queue<Runnable> mWorkQueue = new LinkedBlockingQueue<>();
private final Object addLock = new Object();
public MDGLHandler() {
}
// main thread
public void post(Runnable runnable){
// destroyed ?
if (died){
return;
}
// check the runnable is not null
if (runnable == null){
return;
}
if (Looper.getMainLooper() == Looper.myLooper()){
synchronized (addLock){
mAddQueue.remove(runnable);
mAddQueue.offer(runnable);
}
} else {
runnable.run();
}
}
// gl thread
public void dealMessage(){
synchronized (addLock){
mWorkQueue.addAll(mAddQueue);
mAddQueue.clear();
}
while (mWorkQueue.size() > 0){
Runnable runnable = mWorkQueue.poll();
runnable.run();
}
}
public void markAsDestroy() {
died = true;
}
}