欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于安卓設(shè)備的fps值獲取方法及獲取系統(tǒng)的制作方法_2

文檔序號:8257966閱讀:來源:國知局
驟S70、將計算得到的FPS值寫入Pipe文件,之后執(zhí)行步驟S80 ;
步驟S80、建立服務(wù)讀取Pipe文件,之后執(zhí)行步驟S90 ;
步驟S90、將得到FPS值顯示到屏幕上,之后執(zhí)行步驟S100。
[0031]具體實施時,Pipe服務(wù)的具體包括以下幾個步驟:
I)監(jiān)聽Pipe服務(wù)的啟動,即監(jiān)聽服務(wù)啟動、服務(wù)結(jié)束按鈕,如果點擊了啟動按鈕,則開啟監(jiān)聽Pipe服務(wù);如果點擊了停止按鈕,則停止監(jiān)聽Pipe的服務(wù)。具體的實現(xiàn)代碼如下:case R.1d.buttonStart:
Log.d (TAG, "starting service") ; // 監(jiān)聽服務(wù)啟動按鈕 //startService(new Intent (this, FPSService.class)) ; //如果點擊了啟動按鈕,則開啟監(jiān)聽Pipe服務(wù)//break;case R.1d.buttonStop:
Log.d(TAG, "stopping service") ; //監(jiān)聽服務(wù)結(jié)束按鈕//stopService (new Intent (this, FPSService.class));break; //如果點擊了停止按鈕,則停止監(jiān)聽Pipe的服務(wù)//。
[0032]2)服務(wù)的初始化。這里進行Pipe的創(chuàng)建,懸浮文字的創(chuàng)建,注入的執(zhí)行等工作。具體實施時,首先建立Pipe文件,建立顯示懸浮文字的布局,將更改文件系統(tǒng)權(quán)限值的命令,統(tǒng)一添加到一個字符串?dāng)?shù)組中。然后執(zhí)行命令,給應(yīng)用加root權(quán)限。如果命令執(zhí)行不成功,則給用戶提示請確保手機已經(jīng)被root。實現(xiàn)代碼如下:
Il Create the Pipe file for receiving data createPipe () ; // 建立 Pipe 文件 //
Il Create floating textview to display FPS createLayout () ;//建立顯示懸浮文字的布局//
H Inject and hook
ArrayList<String> list = new ArrayList<String>(); list, add ("chmod 775 " + APP—PATH + "inject"); list, add ("chmod 666 " + APP—PATH+ "Pipe");
list, add("chmod 775 〃 + APP—PATH+ "libfpsshow.so");
list, add (APP—PATH + "inject") ; //將更改文件系統(tǒng)權(quán)限值的命令,統(tǒng)一添加到一個字符串?dāng)?shù)組中//
H Execute as root if (execute (list)) {
Log.e (TAG, "0K\n");
} else {
Toast.makeText(this, "Execute abnormalIyj Can not get rootpermiss1n.〃,Toast.LENGTH—LONG).show ();
Log.e (TAG, 〃Error\n〃); this.stopSelf ();
} / /執(zhí)行命令,給應(yīng)用加root權(quán)限。如果命令執(zhí)行不成功,則給用戶提示請確保手機應(yīng)用不能獲得root權(quán)限//。
[0033]3)對于注入的命令的執(zhí)行,需要root權(quán)限,方法如下:建立一個系統(tǒng)進程類Process對象suProcess,建立一個輸出流os用來獲取suProcess的輸出。然后從字符串?dāng)?shù)組中依次讀取更改文件權(quán)限值的命令,并依次執(zhí)行。最后執(zhí)行退出命令。代碼實現(xiàn)如下:
public final boolean execute (ArrayList<String> commands) {
Process suProcess = Runtime.getRuntime ().exec (〃su〃); //建立一個系統(tǒng)進程類Process對象suProcess//
DataOutputStream os = new DataOutputStream (suProcess.getOutputStreamO) ; //建立一個輸出流os用來獲取suProcess的輸出//for (String currCommand: commands) {os.writeBytes (currCommand + 〃\n〃);os.flush 0 ;
} //然后從字符串?dāng)?shù)組中依次讀取更改文件權(quán)限值的命令,并依次執(zhí)行//os.writeBytes(〃exit\n〃);os.flush O ;
int suProcessRetval = suProcess.waitFor ();
} //執(zhí)行退出命令/7。
[0034]4)懸浮文字的顯示。這里通過一個Layout即可。具體的,通過設(shè)置懸浮窗口,將其設(shè)置為系統(tǒng)提醒模式,不可獲取焦點,不可觸摸,位置在屏幕頂端中間,大小隨內(nèi)容而定。代碼實現(xiàn)如下:
windowManager = (WindowManager) getApplicat1nContext ().getSystemService(〃window〃);
IayoutParams = new WindowManager.LayoutParams();
IayoutParams.type = WindowManager.LayoutParams.TYPE—SYSTEM—ALERT;IayoutParams.flags = WindowManager.LayoutParams.FLAG—NOT—FOCUSABLE |WindowManager.LayoutParams.FLAG—NOT—TOUCH—MODAL; IayoutParams.format = PixelFormat.RGBA_8888;
IayoutParams.gravity = Gravity.TOP | Gravity.CENTER;
IayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT; IayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; IayoutParams.x = 0;
IayoutParams.y = 0;
Il myLayout is the customized layout which contains textview myLayout = new MyLayout(this);
windowManager.addView(myLayout, IayoutParams);//。
[0035]5)在監(jiān)聽服務(wù)的onStartCommand()被調(diào)用時,會啟動線程,線程每一秒執(zhí)行一次run O函數(shù),該函數(shù)從Pipe讀Surfaceflinger傳來的FPS,然后顯示在屏幕上。這里不一定必須是每一秒run—次,可以根據(jù)需要調(diào)整。具體實施時,在線程的1m函數(shù)中,通過readFpsO方法讀取fps值,然后將值傳遞到懸浮窗的對象myLayout中去,設(shè)置間隔執(zhí)行時間為I秒。代碼實現(xiàn)如下:
private Runnable myTasks = new Runnable () {
?Override
public void run() {
int fps = readFpsO ;
Log.e (TAG, "Service FPS = 〃 + fps + 〃\n");myLayout.setFPS (fps);
// Do other customized computat1n.myLayout.setFPSAvg(fps_avg);myhandler.postDelayed(myTasks, 1000);
}
}o
[0036]6) FPS的計算方法。eglSwapBuffers函數(shù)每執(zhí)行一次,相當(dāng)于顯示一次。在I秒鐘內(nèi)的次數(shù),即FPS值。即獲取系統(tǒng)當(dāng)前時間,賦值給Timel ;執(zhí)行緩存交換函數(shù);重新獲取系統(tǒng)當(dāng)前時間,賦值給Time2 ;交換時間swapTime等于兩時間差;fps等于I秒除以交換時間。具體代碼如下方法一所示,也可以通過單位時間與單次執(zhí)行函數(shù)所用時間的比值計算得到。通過當(dāng)前時間currentTime、上次時間prev1usTime、開始時間startTime三個時間點來確立framesNum,來計算fps。currentTime是系統(tǒng)當(dāng)前時間,prev1usTime是每次緩存交換函數(shù)開始執(zhí)行的時間,startTime是每次計算fps的起始時間,framesNum是顯示的中貞數(shù)。緩存交換函數(shù)每執(zhí)行一次,framesNum增加1,當(dāng)前時間currentTime減去開始時間startTime,即總共花費時間totalTime。當(dāng)totalTime大于1000毫秒,輸出一次fps。fps的值等于總共的幀數(shù)除以所用總共時間。然后將當(dāng)前時間重新設(shè)為開始時間startTime,將framesNum重新設(shè)為O。再進行下一次新的計算。代碼實現(xiàn)如下所示:
方法一:
當(dāng)前第2頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
鹤峰县| 湖北省| 石棉县| 威海市| 高青县| 紫阳县| 姜堰市| 龙岩市| 琼结县| 南涧| 洮南市| 磴口县| 淮安市| 阿合奇县| 长顺县| 阿拉善右旗| 罗田县| 宜良县| 汉源县| 资溪县| 万州区| 尼勒克县| 梨树县| 龙南县| 博兴县| 比如县| 南宁市| 桂阳县| 竹北市| 英山县| 南郑县| 邹平县| 米脂县| 搜索| 开远市| 海晏县| 盈江县| 密山市| 梅河口市| 卢湾区| 乌审旗|