專利名稱:一種繪圖方法、裝置及終端的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù),尤其涉及一種繪圖方法、裝置及終端。
背景技術(shù):
2D (Two Dimensions,二維)圖形庫(kù)作為計(jì)算機(jī)操作系統(tǒng)的核心庫(kù),它所提供的各個(gè)繪圖接口的性能直接影響系統(tǒng)對(duì)用戶UI (User Interface,用戶界面)操作響應(yīng)的及時(shí)性。目前2D繪制有CPU (Central Processing Unit,中央處理器)和GPU (GraphicProcessing Unit,圖形處理器)兩種方式,從性能的角度來(lái)講,CPU方式適合簡(jiǎn)單小場(chǎng)景繪圖,GPU方式適合大場(chǎng)景繪圖。所謂2D繪圖中的場(chǎng)景,是指繪圖過(guò)程中涉及的操作復(fù)雜度(如幾何變換)以及區(qū)域的大小。若小場(chǎng)景的繪圖采用GPU繪圖方式或者大場(chǎng)景采用CPU繪圖方式,性能都會(huì)大打折扣,直接影響系統(tǒng)的n性能。還有一種實(shí)現(xiàn)方式是由繪制幀所屬的應(yīng)用程序決定,開(kāi)發(fā)者可以在應(yīng)用程序中設(shè)置是否采用GPU方式繪制。若設(shè)置為GPU繪制方式,則系統(tǒng)會(huì)采用GPU方式繪制該應(yīng)用程序的每一幀內(nèi)容;否則采用CPU方式繪制。但是,采用應(yīng)用程序配置的方式,由于開(kāi)發(fā)者對(duì)所開(kāi)發(fā)的應(yīng)用程序是采用GPU繪制還是CPU繪制哪個(gè)更優(yōu)也是未知的,所以該方式也必然會(huì)導(dǎo)致某些復(fù)雜內(nèi)容的幀最終采用了 CPU方式繪制或者簡(jiǎn)單的幀采用GPU方式,從而2D繪圖性能也同樣偏低。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種繪圖方法、裝置及終端,用以一定程度上提高計(jì)算機(jī)系統(tǒng)的顯示性能。第一方面,本發(fā)明實(shí)施例提供一種繪圖方法,該方法包括:接收當(dāng)前幀的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù);根據(jù)所述當(dāng)前幀的繪圖命令集中的一條或多條繪圖命令及所述繪圖命令的參數(shù)確定所述當(dāng)前幀的中央處理器CPU繪圖時(shí)間和圖形處理器GPU繪圖時(shí)間;若所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則使用CPU對(duì)所述當(dāng)前幀進(jìn)行繪制,若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則使用GPU對(duì)所述當(dāng)前幀進(jìn)行繪制。結(jié)合第一方面,在第一種實(shí)現(xiàn)方式下,所述根據(jù)所述當(dāng)前幀的繪圖命令集中的一條或多條繪圖命令及所述繪圖命令的參數(shù)確定所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間,包括;遍歷所述當(dāng)前幀的繪圖命令集中的每一條繪圖命令及該條繪圖命令的參數(shù);根據(jù)所述每一條繪圖命令及所述繪圖命令的參數(shù)在預(yù)設(shè)的性能表中查詢,得到與所述每一條繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的CPU繪圖時(shí)間累加得到所述當(dāng)前幀的CPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的GPU繪圖時(shí)間累加得到所述當(dāng)前幀的GPU繪圖時(shí)間。結(jié)合第一方面的第一種實(shí)現(xiàn)方式,在第二種實(shí)現(xiàn)方式下,若在所述預(yù)設(shè)的性能表中查詢不到與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間,則根據(jù)所述繪圖命令及所述繪圖命令的參數(shù)計(jì)算與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間;將計(jì)算得到的所述CPU繪圖時(shí)間和所述GPU繪圖時(shí)間,以及所述繪圖命令及所述繪圖命令的參數(shù)存儲(chǔ)到所述預(yù)設(shè)的性能表中。結(jié)合第一方面的第二種實(shí)現(xiàn)方式,在第三種實(shí)現(xiàn)方式下,所述根據(jù)所述繪圖命令及所述繪圖命令的參數(shù)計(jì)算與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間,包括:根據(jù)所述繪圖命令與所述繪圖命令的參數(shù),使用所述CPU和所述GPU分別繪制與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象;在所述CPU和所述GTO繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象的過(guò)程中分別記錄所述CPU和所述GPU繪制所述圖像對(duì)象所使用的時(shí)間,其中所述記錄的所述CPU繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象所使用的時(shí)間為與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間,所述記錄的所述GPU繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象所使用的時(shí)間為與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的GPU繪圖時(shí)間。結(jié)合第一方面、第一方面的第一種實(shí)現(xiàn)方式、第一方面的第二種實(shí)現(xiàn)方式或第一方面的第三種實(shí)現(xiàn)方式,在第四種實(shí)現(xiàn)方式下,所述方法還包括:若使用CPU對(duì)所述當(dāng)前幀進(jìn)行繪制,則將當(dāng)前幀的CPU繪制結(jié)果保存在位像中,若使用GPU對(duì)所述當(dāng)前幀進(jìn)行繪制,則將當(dāng)前幀的GPU繪制結(jié)果保存在紋理圖像中;將所述位像或紋理圖像中保存的繪制結(jié)果顯示到屏幕上。第二方面,本發(fā)明實(shí)施例提供一種繪圖裝置,該裝置包括接收模塊,用于接收當(dāng)前幀的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù);確定模塊,用于根據(jù)所述接收模塊接收的當(dāng)前幀的繪圖命令集中的一條或多條繪圖命令及所述繪圖命令的參數(shù)確定所述當(dāng)前幀的中央處理器CPU繪圖時(shí)間和圖形處理器GPU繪圖時(shí)間;繪制決策模塊,用于若所述確定模塊確定的所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間中,所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則使用CPU對(duì)所述當(dāng)前幀進(jìn)行繪制,若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則使用GPU對(duì)所述當(dāng)前幀進(jìn)行繪制。結(jié)合第二方面,在第一種實(shí)現(xiàn)方式下,所述確定模塊具體用于:遍歷所述當(dāng)前幀的繪圖命令集中的每一條繪圖命令及該條繪圖命令的參數(shù);根據(jù)所述每一條繪圖命令及該條繪圖命令的參數(shù)在預(yù)設(shè)的性能表中查詢,得到與所述每一條繪圖命令及該條繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的CPU繪圖時(shí)間累加得到當(dāng)前幀的CPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的GPU繪圖時(shí)間累加得到當(dāng)前幀的GPU繪圖時(shí)間。結(jié)合第二方面的第一種實(shí)現(xiàn)方式,在第二種實(shí)現(xiàn)方式下,所述裝置還包括:計(jì)算模塊,用于若所述確定模塊在所述預(yù)設(shè)的性能表中查詢不到與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間,則根據(jù)該條繪圖命令及所述繪圖命令的參數(shù)計(jì)算與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間;更新模塊,用于將所述計(jì)算模塊計(jì)算得到的所述CPU繪圖時(shí)間和所述GPU繪圖時(shí)間,以及所述繪圖命令及所述繪圖命令的參數(shù)存儲(chǔ)到所述預(yù)設(shè)的性能表中。結(jié)合第二方面的第二種實(shí)現(xiàn)方式,在第三種實(shí)現(xiàn)方式下,所述計(jì)算模塊具體用于:若所述確定模塊在所述預(yù)設(shè)的性能表中查詢不到與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間,則根據(jù)所述繪圖命令與所述繪圖命令的參數(shù),使用所述CPU和所述GPU分別繪制與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象;在所述CPU和所述GPU繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象的過(guò)程中分別記錄所述CPU和所述GPU繪制所述圖像對(duì)象所使用的時(shí)間,其中所述記錄的所述(PU繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象所使用的時(shí)間為與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間,所述記錄的所述GPU繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象所使用的時(shí)間為與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的GPU繪圖時(shí)間。結(jié)合第二方面、第二方面的第一種實(shí)現(xiàn)方式、第二方面的第二種實(shí)現(xiàn)方式或第二方面的第三種實(shí)現(xiàn)方式,在第四種實(shí)現(xiàn)方式下,所述裝置還包括:保存模塊,用于若使用CPU對(duì)所述當(dāng)前幀進(jìn)行繪制,則將當(dāng)前幀的CPU繪制結(jié)果保存在位像中,若使用GPU對(duì)所述當(dāng)前幀進(jìn)行繪制,則將當(dāng)前幀的GPU繪制結(jié)果保存在紋理圖像中;顯示模塊,用于將所述位像或紋理圖像中保存的繪制結(jié)果顯示到屏幕上。第三方面,本發(fā)明實(shí)施例還提供一種終端設(shè)備,該終端設(shè)備包括中央處理器CPU、圖形處理器GPU和設(shè)備屏幕,所述中央處理器CPU、圖形處理器GPU與所述設(shè)備屏幕相連,其中:所述CPU用于:接收當(dāng)前幀的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù);根據(jù)所述當(dāng)前幀的繪圖命令集中的一條或多條繪圖命令及所述繪圖命令的參數(shù)確定所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間;若所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則對(duì)所述當(dāng)前幀進(jìn)行繪制,若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則由所述GPU對(duì)所述當(dāng)前幀進(jìn)行繪制;所述GPU用于:對(duì)所述當(dāng)前幀進(jìn)行繪制;所述設(shè)備屏幕用于顯示所述CPU或所述GPU對(duì)所述當(dāng)前幀的繪制結(jié)果。結(jié)合第三方面,在第一種實(shí)現(xiàn)方式下,所述CPU具體用于:遍歷所述當(dāng)前幀的繪圖命令集中的每一條繪圖命令及該條繪圖命令的參數(shù);根據(jù)所述每一條繪圖命令及所述繪圖命令的參數(shù)在預(yù)設(shè)的性能表中查詢,得到與所述每一條繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的CPU繪圖時(shí)間累加得到當(dāng)前幀的CPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的GPU繪圖時(shí)間累加得到當(dāng)前幀的GPU繪圖時(shí)間。結(jié)合第三方面的第一種實(shí)現(xiàn)方式下,在第二種實(shí)現(xiàn)方式下,所述CPU還用于:若所述繪圖命令集中的一條繪圖命令及該條繪圖命令的參數(shù)在所述預(yù)設(shè)的性能表中查詢不到與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間,則根據(jù)所述繪圖命令及所述繪圖命令的參數(shù)計(jì)算與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間;將計(jì)算得到的所述CPU繪圖時(shí)間和GPU繪圖時(shí)間,以及該條繪圖命令及該條繪圖命令的參數(shù)存儲(chǔ)到所述預(yù)設(shè)的性能表中。可見(jiàn),本發(fā)明實(shí)施例提供的繪圖方法、裝置以及終端,通過(guò)接收當(dāng)前幀的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù),根據(jù)所述當(dāng)前幀的繪圖命令集確定所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間,若所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則使用CPU對(duì)當(dāng)前幀進(jìn)行繪制,若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則使用GPU對(duì)當(dāng)前幀進(jìn)行繪制,實(shí)現(xiàn)根據(jù)CPU/GPU方式對(duì)應(yīng)的繪圖時(shí)間動(dòng)態(tài)決定采用繪圖時(shí)間較短的繪圖方式,從而一定程度上減少每一幀的繪圖時(shí)間,進(jìn)而提高系統(tǒng)的顯示速度,提升顯示性能。
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為現(xiàn)有的一種終端的邏輯結(jié)構(gòu)示意圖;圖2a為本發(fā)明實(shí)施例提供的一種繪圖方法的方法流程示意圖;圖2b為本發(fā)明實(shí)施例提供的另一種繪圖方法的方法流程示意圖;圖3a為本發(fā)明實(shí)施例提供的再一種繪圖方法的方法流程示意圖;圖3b為本發(fā)明實(shí)施例提供的再一種繪圖方法的方法流程示意圖;圖4a為本發(fā)明實(shí)施例提供的一種繪圖裝置的結(jié)構(gòu)示意圖;圖4b為本發(fā)明實(shí)施例提供的另一種繪圖裝置的結(jié)構(gòu)示意圖;圖4c為本發(fā)明實(shí)施例提供的再一種繪圖裝置的結(jié)構(gòu)示意圖;圖5為本發(fā)明實(shí)施例提供的一種終端設(shè)備的結(jié)構(gòu)示意圖;圖6為本發(fā)明實(shí)施例提供的另一種終端設(shè)備的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。請(qǐng)參閱附圖2a,為本發(fā)明實(shí)施例提供的一種繪圖方法的方法流程示意圖,本發(fā)明實(shí)施例提供的繪圖方法可以應(yīng)用于計(jì)算機(jī)系統(tǒng)中,該計(jì)算機(jī)系統(tǒng)可以位于一臺(tái)物理主機(jī)上,也可以分布位于多臺(tái)物理主機(jī)上。具體地,該計(jì)算機(jī)系統(tǒng)可以位于一臺(tái)或多臺(tái)計(jì)算機(jī)、便攜式電腦、手持設(shè)備(例如手機(jī),PAD等)、服務(wù)器等類型的終端上。以圖1為例介紹本發(fā)明實(shí)施例提供的繪圖方法應(yīng)用的終端的邏輯結(jié)構(gòu)。該終端具體可以為一智能手機(jī)。如圖所示,硬件層包括CPU和GPU,當(dāng)然還可以包括存儲(chǔ)器、輸入/輸出設(shè)備、網(wǎng)絡(luò)接口等,在硬件層之上運(yùn)行有操作系統(tǒng)Android以及一些應(yīng)用程序。2D圖形庫(kù)引擎是操作系統(tǒng)的核心部分,包括實(shí)現(xiàn)CPU繪圖的Skia和實(shí)現(xiàn)GPU繪圖的openGL(0penGraphics Library);除此之外,該終端還包括顯示驅(qū)動(dòng)層的顯示驅(qū)動(dòng)器;顯示合成層的SurfaceFlinger ;顯示框架,包括view、widget以及canvas ;以及應(yīng)用層,該應(yīng)用層包括Android操作系統(tǒng)常見(jiàn)的主界面Home、聯(lián)系簿Contacts、瀏覽器Browser等。在此終端中,采用本發(fā)明實(shí)施例提供的繪圖方法,可以根據(jù)當(dāng)前幀的繪圖命令集動(dòng)態(tài)選取CPU繪圖或GPU繪圖,從而提供系統(tǒng)的繪圖性能。如圖2a所示,本發(fā)明實(shí)施例提供的繪圖方法包括:S101、接收當(dāng)前巾貞的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù)。
所述繪圖命令可以包括線性漸變、圖片漸變,對(duì)應(yīng)的參數(shù)可以包括區(qū)域大小、坐標(biāo)、漸變顏色等;所述繪圖命令還可以包括繪制方形或圓形或直線或曲線,對(duì)應(yīng)的參數(shù)可以包括繪制的起始坐標(biāo)和結(jié)束坐標(biāo)、線條類型、線條粗細(xì)、線條顏色等。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,以上僅是舉例,本發(fā)明實(shí)施例所述的繪圖命令還可以包括任意一種計(jì)算機(jī)系統(tǒng)中會(huì)使用的任意一種繪圖命令,其對(duì)應(yīng)的參數(shù)也可以根據(jù)實(shí)際的參數(shù)需求來(lái)靈活確定,本發(fā)明實(shí)施例對(duì)此并不作限定。S102、根據(jù)所述當(dāng)前幀的繪圖命令集中的一條或多條繪圖命令及所述繪圖命令的參數(shù)確定所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間。所述CPU繪圖時(shí)間為CPU執(zhí)行完所述當(dāng)前幀的繪圖命令集需要的時(shí)間;所述GPU繪圖時(shí)間為GPU執(zhí)行完所述當(dāng)前幀的繪圖命令集需要的時(shí)間。S103、若所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則使用CPU對(duì)所述當(dāng)前幀進(jìn)行繪制。具體地,CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間可以實(shí)現(xiàn)為:所述GPU繪圖時(shí)間與所述CPU繪圖時(shí)間的差值大于一定的閾值ki。例如CPU繪圖時(shí)間為T(mén)mi,GPU繪圖時(shí)間為T(mén)ePU,則 Tgpu-Tcpu = t1; > Ic1,其中,h > O。S104、若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則使用GPU對(duì)所述當(dāng)前幀進(jìn)行繪制。具體地,GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間可以實(shí)現(xiàn)為:所述CPU繪圖時(shí)間與所述GPU繪圖時(shí)間的差值大于一定的閾值k2。例如CPU繪圖時(shí)間為T(mén)mi,GPU繪圖時(shí)間為T(mén)ePU,則 Tcpu-Tgpu = t2, t2 > k2,其中,t2 > O。值得注意的是,k:和k2可以分分別設(shè)置為一個(gè)具體的數(shù)值,也可以分別設(shè)置為一個(gè)數(shù)值范圍。!^和匕可以設(shè) 置為相同,也可以設(shè)置為不同。需說(shuō)明的是,若當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間相等;或者,當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間的差值的絕對(duì)值不超過(guò)某一特定閾值k3,例如可以設(shè)置匕=2 ;或者,當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間的差值不屬于某一特定區(qū)間k3,例如可以設(shè)置k3=[-2,2]或[_3,4],那么說(shuō)明當(dāng)前幀采用CPU繪制和采用GPU繪制的性能相近,那么可以根據(jù)當(dāng)前系統(tǒng)的實(shí)際情況選擇采取哪一種繪圖,本發(fā)明實(shí)施例對(duì)此不作限定。以圖1為例,本發(fā)明實(shí)施例提供的繪圖方法可以應(yīng)用于2D圖形庫(kù)引擎層,在該層中根據(jù)CPU繪圖時(shí)間和GPU繪圖時(shí)間動(dòng)態(tài)決定調(diào)用Skia提供的API (Application ProgramInterface,應(yīng)用程序接口)實(shí)現(xiàn)CPU繪圖,或調(diào)用openGL提供的API接口實(shí)現(xiàn)GPU繪圖。進(jìn)一步的,如圖2b所示,本發(fā)明實(shí)施例還包括:S105、若對(duì)當(dāng)前幀采用CPU進(jìn)行繪制,則將當(dāng)前幀的CPU繪制結(jié)果保存在位像(Bitmap)中。S106、若對(duì)當(dāng)前幀采用GPU進(jìn)行繪制,則將當(dāng)前幀的GPU繪制結(jié)果保存在紋理圖像(Texture)中。Bitmap和Texture是操作系統(tǒng)提供的兩種不同的渲染通道。Bitmap對(duì)應(yīng)一塊內(nèi)存,訪問(wèn)方式為逐行逐像數(shù);若為GPU方式,則所有的繪圖命令執(zhí)行后會(huì)將繪圖內(nèi)容保存在Texture中,Texture也是對(duì)應(yīng)一塊內(nèi)存,訪問(wèn)方式按塊(Tile)訪問(wèn)。S107、將Bitmap或Texture保存的繪制結(jié)果顯示到屏幕上。
以圖1為例,顯示合成層支持多任務(wù),一次可顯示多個(gè)應(yīng)用程序的n窗體,且同一個(gè)應(yīng)用程序也可能創(chuàng)建多個(gè)窗體。在所有窗體繪制完成后,系統(tǒng)最終顯示結(jié)果是當(dāng)前可顯示的所有窗體的一個(gè)集合。合成完成后,調(diào)用顯示驅(qū)動(dòng)層的顯示驅(qū)動(dòng)器將結(jié)果拷貝到幀緩沖區(qū)(FrameBuffer);顯示驅(qū)動(dòng)器,例如終端的IXD (Liquid Crystal Display,液晶顯示)驅(qū)動(dòng),會(huì)將幀緩沖區(qū)的內(nèi)容顯示在屏幕上。可見(jiàn),本發(fā)明實(shí)施例提供的繪圖方法,通過(guò)接收當(dāng)前幀的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù),根據(jù)所述當(dāng)前幀的繪圖命令集確定所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間,若所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則使用CPU對(duì)當(dāng)前幀進(jìn)行繪制,若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則使用GPU對(duì)當(dāng)前幀進(jìn)行繪制,實(shí)現(xiàn)根據(jù)CPU/GPU方式對(duì)應(yīng)的繪圖時(shí)間動(dòng)態(tài)決定采用繪圖時(shí)間較短的繪圖方式,從而一定程度上減少每一幀的繪圖時(shí)間,進(jìn)而提高系統(tǒng)的顯示速度,提升顯示性能。在n交互過(guò)程中,可以極大地提升用戶體驗(yàn)。進(jìn)一步的,通過(guò)選擇采用Bitmap或Texture的保存方式,實(shí)現(xiàn)根據(jù)不同的繪圖方式,選擇不同的渲染通道顯示的方法,更加有效地提升了系統(tǒng)的顯示性能。請(qǐng)參閱附圖3a,為本發(fā)明實(shí)施例提供的另一種繪圖方法的方法流程示意圖,該方法可以應(yīng)用于計(jì)算機(jī)系統(tǒng)中,該計(jì)算機(jī)系統(tǒng)可以位于一臺(tái)物理主機(jī)上,也可以分布位于多臺(tái)物理主機(jī)上。具體地,可以應(yīng)用于如圖1所示的終端。該方法包括:S101、接收當(dāng)前巾貞的繪圖命令集,所述繪圖命令集中包含多條繪圖命令及與這些繪圖命令分別對(duì)應(yīng)的繪圖參數(shù)。S1021、遍歷每一條繪圖命令及該條繪圖命令的參數(shù)。S1022、根據(jù)每一條繪圖命令及該條繪圖命令的參數(shù)在預(yù)設(shè)的性能表中查詢,得到與所述每一條繪圖命令及該條繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間。需說(shuō)明的是,在本發(fā)明實(shí)施例中,同樣的繪圖命令不同的參數(shù),其CPU繪圖時(shí)間或GPU繪圖時(shí)間也可能不相同。S1023、將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的CPU繪圖時(shí)間累加得到當(dāng)前幀的CPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的GPU繪圖時(shí)間累加得到當(dāng)前幀的GPU繪圖時(shí)間。當(dāng)然,本發(fā)明實(shí)施例還包括前述實(shí)施例的S103和S104,進(jìn)一步的,也可以包括前述實(shí)施例的步驟S105、S106、S107,在此不再贅述??梢?jiàn),本發(fā)明實(shí)施例提供的繪圖方法,通過(guò)接收當(dāng)前幀的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù),根據(jù)所述當(dāng)前幀的繪圖命令集確定所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間,若所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則使用CPU對(duì)當(dāng)前幀進(jìn)行繪制,若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則使用GPU對(duì)當(dāng)前幀進(jìn)行繪制,實(shí)現(xiàn)根據(jù)CPU/GPU方式對(duì)應(yīng)的繪圖時(shí)間動(dòng)態(tài)決定采用繪圖時(shí)間較短的繪圖方式,從而一定程度上減少每一幀的繪圖時(shí)間,進(jìn)而提高系統(tǒng)的顯示速度,提升顯示性能。在n交互過(guò)程中,可以極大地提升用戶體驗(yàn)。在n交互過(guò)程中,可以極大地提升用戶體驗(yàn)。下面通過(guò)一個(gè)具體實(shí)施例描述本發(fā)明提供的繪圖方法中獲得當(dāng)前幀的CPU繪圖時(shí)間和CPU繪圖時(shí)間的一種具體實(shí)現(xiàn)。
如圖3b所示,該方法包括:S201、接收當(dāng)前幀的繪圖命令集,所述繪圖命令集中包含多條繪圖命令及與這些繪圖命令分別對(duì)應(yīng)的繪圖參數(shù)。S202、遍歷每一條繪圖命令及該條繪圖命令的參數(shù)。S203、在預(yù)設(shè)的性能表中查詢CPU繪圖時(shí)間和GPU繪圖時(shí)間。預(yù)設(shè)的性能表示例如下:表I性能表
權(quán)利要求
1.一種繪圖方法,其特征在于,所述方法包括: 接收當(dāng)前幀的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù); 根據(jù)所述當(dāng)前幀的繪圖命令集中的一條或多條繪圖命令及所述繪圖命令的參數(shù)確定所述當(dāng)前幀的中央處理器CPU繪圖時(shí)間和圖形處理器GPU繪圖時(shí)間; 若所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則使用CPU對(duì)所述當(dāng)前幀進(jìn)行繪制,若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則使用GPU對(duì)所述當(dāng)前幀進(jìn)行繪制。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述當(dāng)前幀的繪圖命令集中的一條或多條繪圖命令及所述繪圖命令的參數(shù)確定所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間,包括; 遍歷所述當(dāng)前幀的繪圖命令集中的每一條繪圖命令及該條繪圖命令的參數(shù); 根據(jù)所述每一條繪圖命令及所述繪圖命令的參數(shù)在預(yù)設(shè)的性能表中查詢,得到與所述每一條繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間; 將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的CPU繪圖時(shí)間累加得到所述當(dāng)前幀的CPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的GPU繪圖時(shí)間累加得到所述當(dāng)前幀的GPU繪圖時(shí)間。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述方法還包括: 若在所述預(yù)設(shè)的性能表中查詢不到與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間,則根據(jù)所述繪圖命令及所述繪圖命令的參數(shù)計(jì)算與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間; 將計(jì)算得到的所述CPU繪圖時(shí)間和所述GPU繪圖時(shí)間,以及所述繪圖命令及所述繪圖命令的參數(shù)存儲(chǔ)到所述預(yù)設(shè)的性能表中。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述根據(jù)所述繪圖命令及所述繪圖命令的參數(shù)計(jì)算與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間,包括: 根據(jù)所述繪圖命令與所述繪圖命令的參數(shù),使用所述CPU和所述GPU分別繪制與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象; 在所述CPU和所述GPU繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象的過(guò)程中分別記錄所述CPU和所述GPU繪制所述圖像對(duì)象所使用的時(shí)間,其中所述記錄的所述CPU繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象所使用的時(shí)間為與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間,所述記錄的所述GPU繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象所使用的時(shí)間為與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的GPU繪圖時(shí)間。
5.根據(jù)權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在于,所述方法還包括: 若使用CPU對(duì)所述當(dāng)前幀進(jìn)行繪制,則將當(dāng)前幀的CPU繪制結(jié)果保存在位像中,若使用GPU對(duì)所述當(dāng)前幀進(jìn)行繪制,則將當(dāng)前幀的GPU繪制結(jié)果保存在紋理圖像中; 將所述位像或紋理圖像中保存的繪制結(jié)果顯示到屏幕上。
6.一種繪圖裝置,其特征在于,所述裝置包括: 接收模塊,用于接收當(dāng)前幀的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù); 確定模塊,用于根據(jù)所述接收模塊接收的當(dāng)前幀的繪圖命令集中的一條或多條繪圖命令及所述繪圖命令的參數(shù)確定所述當(dāng)前幀的中央處理器CPU繪圖時(shí)間和圖形處理器GPU繪圖時(shí)間; 繪制決策模塊,用于若所述確定模塊確定的所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間中,所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則使用CPU對(duì)所述當(dāng)前幀進(jìn)行繪制,若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則使用GPU對(duì)所述當(dāng)前幀進(jìn)行繪制。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述確定模塊具體用于: 遍歷所述當(dāng)前幀的繪圖命令集中的每一條繪圖命令及該條繪圖命令的參數(shù); 根據(jù)所述每一條繪圖命令及該條繪圖命令的參數(shù)在預(yù)設(shè)的性能表中查詢,得到與所述每一條繪圖命令及該條繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間; 將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的CPU繪圖時(shí)間累加得到當(dāng)前幀的CPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的GPU繪圖時(shí)間累加得到當(dāng)前幀的GPU繪圖時(shí)間。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括: 計(jì)算模塊,用于若所述確定模塊在所述預(yù)設(shè)的性能表中查詢不到與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間,則根據(jù)該條繪圖命令及所述繪圖命令的參數(shù)計(jì)算與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間; 更新模塊,用于將所述計(jì)算模塊計(jì)算得到的所述CPU繪圖時(shí)間和所述GPU繪圖時(shí)間,以及所述繪圖命令及所述繪圖命令的參數(shù)存儲(chǔ)到所述預(yù)設(shè)的性能表中。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述計(jì)算模塊具體用于:若所述確定模塊在所述預(yù)設(shè)的性能表中查詢不到與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間,則根據(jù)所述繪圖命令與所述繪圖命令的參數(shù),使用所述CPU和所述GPU分別繪制與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象;在所述CPU和所述GTO繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象的過(guò)程中分別記錄所述CPU和所述GPU繪制所述圖像對(duì)象所使用的時(shí)間,其中所述記錄的所述CPU繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象所使用的時(shí)間為與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間,所述記錄的所述GPU繪制所述與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的圖像對(duì)象所使用的時(shí)間為與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的GPU繪圖時(shí)間。
10.根據(jù)權(quán)利要求6-9任一項(xiàng)所述的裝置,其特征在于,所述裝置還包括: 保存模塊,用于若使用CPU對(duì)所述當(dāng)前幀進(jìn)行繪制,則將當(dāng)前幀的CPU繪制結(jié)果保存在位像中,若使用GPU對(duì)所述當(dāng)前幀進(jìn)行繪制,則將當(dāng)前幀的GPU繪制結(jié)果保存在紋理圖像中; 顯示模塊,用于將所述位像或紋理圖像中保存的繪制結(jié)果顯示到屏幕上。
11.一種終端設(shè)備,其特征在于,包括中央處理器CPU、圖形處理器GPU和設(shè)備屏幕,所述中央處理器CPU、圖形處理器GPU與所述設(shè)備屏幕相連,其中: 所述CPU用于:接收當(dāng)前幀的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù);根據(jù)所述當(dāng)前幀的繪圖命令集中的一條或多條繪圖命令及所述繪圖命令的參數(shù)確定所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間;若所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則對(duì)所述當(dāng)前幀進(jìn)行繪制,若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則由所述GPU對(duì)所述當(dāng)前幀進(jìn)行繪制; 所述GPU用于:對(duì)所述當(dāng)前幀進(jìn)行繪制; 所述設(shè)備屏幕用于顯示所述CPU或所述GPU對(duì)所述當(dāng)前幀的繪制結(jié)果。
12.根據(jù)權(quán)利要求11所述的終端,其特征在于,所述CPU具體用于:遍歷所述當(dāng)前幀的繪圖命令集中的每一條繪圖命令及該條繪圖命令的參數(shù);根據(jù)所述每一條繪圖命令及所述繪圖命令的參數(shù)在預(yù)設(shè)的性能表中查詢,得到與所述每一條繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的(PU繪圖時(shí)間累加得到當(dāng)前幀的CPU繪圖時(shí)間;將所述當(dāng)前幀的繪圖命令集中每一條繪圖命令的GPU繪圖時(shí)間累加得到當(dāng)前幀的GPU繪圖時(shí)間。
13.根據(jù)權(quán)利要求12所述的終端,其特征在于,所述CPU還用于:若所述繪圖命令集中的一條繪圖命令及該條繪圖命令的參數(shù)在所述預(yù)設(shè)的性能表中查詢不到與所述繪圖命令及所述繪圖命令的參 數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間,則根據(jù)所述繪圖命令及所述繪圖命令的參數(shù)計(jì)算與所述繪圖命令及所述繪圖命令的參數(shù)對(duì)應(yīng)的CPU繪圖時(shí)間和GPU繪圖時(shí)間;將計(jì)算得到的所述CPU繪圖時(shí)間和GPU繪圖時(shí)間,以及該條繪圖命令及該條繪圖命令的參數(shù)存儲(chǔ)到所述預(yù)設(shè)的性能表中。
全文摘要
本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù)。本發(fā)明實(shí)施例提供一種繪圖方法、裝置以及終端,通過(guò)接收當(dāng)前幀的繪圖命令集,所述繪圖命令集包含一條或多條繪圖命令及所述繪圖命令的參數(shù),根據(jù)所述當(dāng)前幀的繪圖命令集確定所述當(dāng)前幀的CPU繪圖時(shí)間和GPU繪圖時(shí)間,若所述CPU繪圖時(shí)間小于所述GPU繪圖時(shí)間,則使用CPU對(duì)所述當(dāng)前幀進(jìn)行繪制,若所述GPU繪圖時(shí)間小于所述CPU繪圖時(shí)間,則使用GPU對(duì)所述當(dāng)前幀進(jìn)行繪制,實(shí)現(xiàn)根據(jù)CPU/GPU方式對(duì)應(yīng)的繪圖時(shí)間動(dòng)態(tài)決定采用繪圖時(shí)間較短的繪圖方式,從而一定程度上減少每一幀的繪圖時(shí)間,進(jìn)而提高系統(tǒng)的顯示速度,提升顯示性能。
文檔編號(hào)G06T1/20GK103164839SQ20131007293
公開(kāi)日2013年6月19日 申請(qǐng)日期2013年3月7日 優(yōu)先權(quán)日2013年3月7日
發(fā)明者賈香宏 申請(qǐng)人:華為技術(shù)有限公司