gpt4 book ai didi

android - 10 秒后 Android 上 OpenGL ES 的 CPU 使用率大幅增加

转载 作者:太空宇宙 更新时间:2023-11-03 10:18:37 27 4
gpt4 key购买 nike

我有一个在 Android 上运行的非常简单的 OpenGL ES 应用程序 - 它只加载纹理图集,然后在预定位置绘制大量图 block

它基于本教程:http://androidblog.reindustries.com/a-real-open-gl-es-2-0-2d-tutorial-part-1/

渲染大约 10 秒后,CPU 增加得相当快(如图所示),渲染每帧所花费的时间从大约 1 毫秒增加到大约 14 毫秒(在我的 Nexus 5 上运行)

CPU Usage Graph

我在 onDrawFrame 方法中对所有内容进行了计时,这完全是 GLES20.glDrawElements 的错

我的整个渲染方法是这样的:

GLES20.glUseProgram(ShaderTools.sp_Image);

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

int mPositionHandle = GLES20.glGetAttribLocation(ShaderTools.sp_Image, "vPosition");
GLES20.glVertexAttribPointer(mPositionHandle, 3, GLES20.GL_FLOAT, false, 0, vertexBuffer);
GLES20.glEnableVertexAttribArray(mPositionHandle);

int mTexCoordLoc = GLES20.glGetAttribLocation(ShaderTools.sp_Image, "a_texCoord");
GLES20.glVertexAttribPointer(mTexCoordLoc, 2, GLES20.GL_FLOAT, false, 0, uvBuffer);
GLES20.glEnableVertexAttribArray(mTexCoordLoc);

int mtrxhandle = GLES20.glGetUniformLocation(ShaderTools.sp_Image, "uMVPMatrix");
GLES20.glUniformMatrix4fv(mtrxhandle, 1, false, mtrxProjectionAndView, 0);

int mSamplerLoc = GLES20.glGetUniformLocation(ShaderTools.sp_Image, "s_texture");

GLES20.glUniform1i(mSamplerLoc, 0);

GLES20.glDrawElements(GLES20.GL_TRIANGLES, indices.length, GLES20.GL_UNSIGNED_SHORT, drawListBuffer);

GLES20.glDisableVertexAttribArray(mPositionHandle);
GLES20.glDisableVertexAttribArray(mTexCoordLoc);

如果有人能阐明可能导致此问题的原因,以及如何纠正它,那么我将非常感激:-)

最佳答案

Nexus5 基于 Qualcomm 芯片组并配备 Adreno 330 GPU。

众所周知,如果您的应用是图形密集型/没有 fps 限制器/以(巨大的)原始分辨率呈现(因此不使用 hardware scaler),高通芯片组会快速限制 GPU 频率。

因此可能发生的情况是 GPU 频率受到限制,然后您会看到高 CPU 使用率,这表示帧末尾的“CPU 正在等待 GPU”。

CPU 也有可能受到限制,但根据我的经验,这往往发生在三星手机上,因为 DVFS , Nexus 上不多...

好消息是,实际上存在一种工具可以监控 Qualcomm 设备上的当前 CPU 和 GPU 频率,它称为 Trepn Profiler您可以在非 root 设备上使用它。

因此,您应该安装此工具,将其配置为以叠加方式显示 GPU 频率和 CPU0 频率,然后启动您的应用,您将能够实时查看 GPU 和/或 CPU 如何随时间节流。

额外注意:手机充电时节流会更快。

关于android - 10 秒后 Android 上 OpenGL ES 的 CPU 使用率大幅增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com