真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何獲取PowerVRGPU數(shù)據(jù)-創(chuàng)新互聯(lián)

什么是Power VR

PowerVR 是Imagination公司生產(chǎn)的一種GPU系列。早期的蘋果A系列芯片優(yōu)秀的GPU性能大多是基于Power VR GPU實(shí)現(xiàn)的。從早期的游戲機(jī)實(shí)體建模到現(xiàn)在的移動終端設(shè)備圖形計(jì)算中都能夠見到它的身影,雖中間有多次動蕩,至今依舊在汽車HMI系統(tǒng)中占據(jù)著比較大的份額。

創(chuàng)新互聯(lián)建站于2013年開始,先為本溪等服務(wù)建站,本溪等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為本溪企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。如何獲取Power VR GPU數(shù)據(jù)

雖然對于Power VR的GPU,近期已經(jīng)很難見到了。不過依舊還是有不少性價比手機(jī)內(nèi)部使用的是Power VR,而Imagination也很給力,把對應(yīng)的API全都開源了,所以相比Adreno和Mali就方便不少。我們可以直接從開源代碼中直接學(xué)習(xí)。

https://github.com/powervr-graphics/Native_SDKicon-default.png?t=M85Bhttps://github.com/powervr-graphics/Native_SDK在這個PowerVR開源的SDK中,包含了多個Demo,這邊主要介紹的是如何獲取性能數(shù)據(jù)。

我們以vulkan為例,將該項(xiàng)目clone到本地之后,進(jìn)入到以下路徑“Native_SDK/examples/Vulkan/PVRScopeExample/”

這邊我們可以簡單地使用Android Studio打開build-android文件夾,就會直接加載對應(yīng)的庫內(nèi)容。其中可能存在這樣一些問題。

Android存在的問題

1. Cmake路徑?jīng)]有指定(cmake沒有識別出來)

com.intellij.openapi.externalSystem.model.ExternalSystemException (no error message)

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
com.intellij.openapi.externalSystem.model.ExternalSystemException: 
	at org.jetbrains.plugins.gradle.model.ProjectImportAction.addBuildModels(ProjectImportAction.java:258)
	at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:116)
	at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:41)
	at org.gradle.tooling.internal.consumer.connection.InternalBuildActionAdapter.execute(InternalBuildActionAdapter.java:64)
	at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner$ActionRunningListener.runAction(ClientProvidedPhasedActionRunner.java:120)
	at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner$ActionRunningListener.run(ClientProvidedPhasedActionRunner.java:110)
	at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner$ActionRunningListener.buildFinished(ClientProvidedPhasedActionRunner.java:104)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	

這個問題就是配置問題,可以在local.properties中設(shè)置cmake的路徑,在里面加上

cmake.dir=D\:\\SDK\\cmake\\3.18.1

具體路徑根據(jù)用戶計(jì)算機(jī)的cmake路徑和版本決定。

主要還是因?yàn)锳ndroid Studio上默認(rèn)安裝的cmake和配置要求的版本號不匹配。

2. NDK路徑問題

同樣的,在local.properties中設(shè)置ndk的路徑,在里面加上

ndk.dir=D\:\\SDK\\ndk\\21.4.7075529

具體的路徑依舊是根據(jù)用戶計(jì)算機(jī)中的ndk路徑配置。

加載完成

正確加載Android Studio后,會在Gradle Scipts下面出現(xiàn)其他幾個module的build.gradle文件,這是因?yàn)榧幢闶呛唵蔚腜VRScope Example也是需要依賴于其他Module的。

這時候只需要點(diǎn)擊菜單欄 Build->Build Bundle(s)/APK(s)->Build APK(s)即可。

但是這時候感覺會有點(diǎn)懵逼,因?yàn)榇蜷_主要的Java文件中,我們只會看到一個簡單的Java文件,內(nèi)容也很簡單,如下:

package com.powervr.VulkanPVRScopeExample;


import android.app.NativeActivity;
import android.os.Bundle;
import android.widget.Toast;
import android.view.Gravity;

public class VulkanPVRScopeExample extends NativeActivity
{
	public void displayExitMessage(final String text) 
	{
		runOnUiThread(new Runnable() {
		public void run() {
			Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG);
			toast.setGravity(Gravity.CENTER, 0, 0);
			toast.show();
		}
		});
	}
}

那么這個APK的核心究竟在哪里呢?

這時候可以注意到,這個Class繼承的是NativeActivity,因此主要的代碼應(yīng)該是外圍的C源碼。

C++ Android 源碼

該源碼主要指的是VulkanPVRScopeExample.cpp文件

包括initApplication, initView, releaseView, quitApplication和renderFrame,我們都能很清楚的看懂內(nèi)部邏輯,但是對于C/C++不太熟悉的就會比較困難了。

這個文件中主要是對于UI框架和顯示以及動作的一些描寫,如果要關(guān)注具體的值獲取可以跳過。

C++獲取圖形數(shù)據(jù)

該源碼主要指的是PVRScopeGraph.h和PVRScopeGraph.cpp文件

在源碼中,構(gòu)建了

class PVRScopeGraph

用于直接獲取PVR的圖形數(shù)據(jù)。在里面封裝了如下方法,主要也是通過調(diào)用如下方法獲取所需的圖形圖像數(shù)據(jù)。

uint32_t getActiveGroup() const { return activeGroup; }
	float getMaximumOfData(uint32_t nCounter);
	float getMaximum(uint32_t nCounter);
	void setMaximum(uint32_t nCounter, float fMaximum);
	float getStandardFPS() const;
	int32_t getStandardFPSIndex() const;
	float getStandard2D() const;
	int32_t getStandard2DIndex() const;
	float getStandard3D() const;
	int32_t getStandard3DIndex() const;
	float getStandardTA() const;
	int32_t getStandardTAIndex() const;
	float getStandardCompute() const;
	int32_t getStandardComputeIndex() const;
	float getStandardShaderPixel() const;
	int32_t getStandardShaderPixelIndex() const;
	float getStandardShaderVertex() const;
	int32_t getStandardShaderVertexIndex() const;
	float getStandardShaderCompute() const;
	int32_t getStandardShaderComputeIndex() const;
	uint32_t getCounterNum() const { return numCounter; }
	const char* getCounterName(const uint32_t i) const;
	int getCounterGroup(const uint32_t i) const;

如果要開發(fā)對應(yīng)的C++應(yīng)用就很方便,但是如果要在Android使用Jni的方法編寫對應(yīng)的app就非常麻煩,需要在setting.gradle中將所有的模塊Include進(jìn)來,這多種依賴又是一個比較大的工程,容易牽一發(fā)而動全身,顯然不是一個非常方便的做法。

另辟蹊徑

我這邊的目標(biāo)主要是通過APK或者app_process的方式獲取手機(jī)內(nèi)的Power VR的圖形圖像信息,最好還是能夠通過Java或者kotlin + Jni的方式實(shí)現(xiàn),比起include這么多module,如果能夠直接把需要的內(nèi)容剝離出來就好了。

https://github.com/powervr-graphics/PVRMonitoricon-default.png?t=M85Bhttps://github.com/powervr-graphics/PVRMonitorPowerVR官方還提供了一個apk的項(xiàng)目,里面很簡單地將Scope內(nèi)容剝離出來,倒是可以直接小修小改用上。

該項(xiàng)目使用Jni的方式調(diào)用了PVRScopeGraph和CpuMetrics(順便),不過項(xiàng)目時間比較長,實(shí)際使用起來會發(fā)現(xiàn)在現(xiàn)在(date up to 2022)的一些設(shè)備,甚至是早期的Redmi 9A手機(jī),都不是很支持的樣子。這是因?yàn)閷?yīng)的內(nèi)容需要修改。

修改方式

1. 更換.so文件

在上一節(jié)中說到了,最好是將各種Module直接剝離出來,這邊就是采取了這樣的思路,將各種需要的模塊編譯出libPVRScopeDeveloper.so,然后直接調(diào)用里面的方法,里面的方法在PVRScopeStats.h里面,可以進(jìn)行參考。

但是存在的問題在于,這個項(xiàng)目的so文件過于老舊,所以需要更換最新的,需要自己編譯出新版的libPVRScopeDeveloper.so文件,當(dāng)然也可以下載官方的PVRTune Developers,然后尋找對應(yīng)的so文件拷貝出來替換。

2. 添加初始化代碼

在PVRScopeHUD.cpp文件中的initialisePVRScope()方法中,本意是用來初始化PVR數(shù)據(jù)讀取的,但是在初始化的過程中獲取了一次Counter,而在PVRScopeStats.h中有說明,在獲取Counter數(shù)據(jù)前需要不時地調(diào)用PVRScopeReadCounters方法,所以在該方法的

//Initialise the counter data structures.

之前,最好加上一句

readCounters(true); // this method is defined in the class

直接調(diào)用了原項(xiàng)目已經(jīng)封裝好的readcounters,再獲取一次Counter數(shù)據(jù)就能夠不出問題了。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


文章標(biāo)題:如何獲取PowerVRGPU數(shù)據(jù)-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://weahome.cn/article/hjpps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部