精华内容
下载资源
问答
  • 硬件加速

    2021-03-01 23:20:59
    应用程序、操作系统、CPU 之间的关系 非硬件加速硬件加速 路径差别 硬件加速和软件的连接

    应用程序、操作系统、CPU 之间的关系

    在这里插入图片描述

    非硬件加速、硬件加速 路径差别

    在这里插入图片描述

    硬件和软件的连接

    在这里插入图片描述

    展开全文
  • 最近项目中遇到了因为硬件加速引起的一些问题,故这里深入学习了解一下关于硬件加速的一些东西背景什么是硬件加速硬件加速是Android系统在绘制图形时采取的一种方式。图形的绘制,本质上就是界面的渲染。在渲染...

    最近项目中遇到了因为硬件加速引起的一些问题,故这里深入学习了解一下关于硬件加速的一些东西

    背景

    什么是硬件加速?

    硬件加速是Android系统在绘制图形时采取的一种方式。

    图形的绘制,本质上就是界面的渲染。在渲染界面的时候,是要经过一系列计算的,这部分计算通常是逻辑较简单,但数据量庞大的浮点运算。

    在操作系统层面,有一个东西叫中央处理器——CPU,他是计算机设备的核心器件之一,主要功能是解释计算机指令以及处理计算机软件中的数据。除此之外,计算机还有一个器件,叫做图形处理器——GPU,他类似于CPU,但是是专门为运行绘图运算的微处理器。

    那么CPU和GPU的区别在哪里呢?

    CPU内部算数逻辑单元(ALU)较少,控制器较复杂,适合进行复杂的逻辑运算

    GPU控制器简单,但是包含了较多的算数逻辑单元,可并行运行大量计算

    结果显而易见,因为界面渲染的计算是逻辑简单但是数据量很大的浮点运算,所以如果使用CPU来对界面渲染做运算,效果自然比不了GPU。

    所以,硬件加速绘制图形是一般会采用的软件绘制就是由CPU来绘制的。硬件加速,就是通过底层代码,将CPU中一部分不擅长的图形计算转换成GPU专用指令,然后交给GPU来完成。而对于Android来讲,硬件加速就是将View的绘制工作从原来的CPU转交给GPU来做。

    原理

    硬件绘制之所以比软件绘制“快速”,除了如上所述的奖一部分计算量交给更适合的硬件来做外,还有一个很重要的原因在于绘制区域即绘制内容的选择不一样。

    在关闭了硬件加速,即采用软件绘制时,绘制区域是这样获取的:从要执行 invalidate() 方法的View开始,遍历从跟View开始的整个View结构,标记出需要重新绘制的 脏区域。在这个过程中,除了我们直接修改的View需要绘制外,其他的所有View,都可能因为遮盖、相交等原因,被标记为需要绘制,这样一来绘制的区域就会变的很大。这样一来一旦开始绘制,搞不好会有很多“无辜”的View也被重新绘制,虽然这些View未必真的需要被重绘。

    而采用硬件加速时,就完全不一样了。硬件绘制,首先将View抽象为 RenderNode 节点,将对View的绘制,抽象为 DrawOp ,每个View不仅持有自己的绘制操作 DrawOp 组成的List,还持有其子View的绘制入口,而 DrawOp 中保存有对应的 OpenGL 绘制命令,这样便形成了一个完整的树状结构。其次,硬件绘制是直接交给一个Render线程来执行绘制的,而不是主线程,这样也缓解了主线程的部分压力。最后,在进行实际绘制时,每个View的实际绘制操作对应于 DrawOp ,在绘制时只需更新其中保存的绘制命令,即可完成这个View单独的绘制,而不会影响到其他View。

    问题

    虽然硬件加速有很多优点,但是也有许多坑。

    首先,一些Api方法是不支持硬件加速的。其次,在使用Webview时,如果启用了硬件加速,那么有时会出现花屏、闪烁等异常状况。

    最后,正如前面说的,由于不支持一些Api,所以在做自定义View时,有可能因为开启硬件加速导致View的绘制效果不理想。

    如何使用

    一开始Android是默认关闭硬件加速的。从Android4.0版本开始,默认是开启了硬件加速的。硬件加速固然有很多优点,但是由于种种原因(系统设计、历史遗留、以及自身的局限性)导致在有些情况会出现一些问题,这个时候又需要我们手动关闭了。

    硬件加速的开关分为四个级别,分别为App级别、Activity级别、Window级别以及View级别。

    App级别:直接在 AndroidManifest.xml 文件中, 标签下加入一个属性,属性值为 true 为开启, false 为关闭:

    Activity级别:类似于App级别,在 标签下加入同样的属性:

    Window级别: 在Window级别,只能通过Java代码形式动态的开启硬件加速而不能关闭:

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

    View级别:View层比较特殊,这里只允许关闭硬件加速,而无法开启。而且相关的接口并不是专门用来做硬件加速开关的,而是在给View设置Layer时“顺便”关闭了硬件加速:

    view.setLayerType(LAYER_TYPE_SOFTWARE, null);

    这个方法只是给View设置了一个LayerType,而且参数有三种:LAYER_TYPE_SOFTWARE LAYER_TYPE_HARDWARE LAYER_TYPE_NONE,这是什么意思呢?关于这一部分,在官网中有详细的解释:

    You currently cannot enable hardware acceleration at the view level. View layers have other functions besides disabling hardware acceleration. See View layers for more information about their uses.

    官方说在View层只能关闭,不能开启,至于为什么,引用一段扔物线大佬的解释:

    setLayerType() 这个方法,它的作用其实就是名字里的意思:设置 View Layer 的类型。所谓 View Layer,又称为离屏缓冲(Off-screen Buffer),它的作用是单独启用一块地方来绘制这个 View ,而不是使用软件绘制的 Bitmap 或者通过硬件加速的 GPU。这块「地方」可能是一块单独的 Bitmap,也可能是一块 OpenGL 的纹理(texture,OpenGL 的纹理可以简单理解为图像的意思),具体取决于硬件加速是否开启。采用什么来绘制 View 不是关键,关键在于当设置了 View Layer 的时候,它的绘制会被缓存下来,而且缓存的是最终的绘制结果,而不是像硬件加速那样只是把 GPU 的操作保存下来再交给 GPU 去计算。通过这样更进一步的缓存方式,View 的重绘效率进一步提高了:只要绘制的内容没有变,那么不论是 CPU 绘制还是 GPU 绘制,它们都不用重新计算,而只要只用之前缓存的绘制结果就可以了。

    所以,如果给View设置了Layer,且值为SOFTWARE,那么就是用软件来做View Layer,自然就关闭了硬件加速。而如果硬件加速已经关闭,参数HARDWARE的作用跟SOFTWARE一样,自然也无法开启硬件加速。而值为NONE时,直接就关闭了ViewLayer,所以在View层只能关闭、不能开启,正如官方文档所说:

    LAYER_TYPE_NONE: The view is rendered normally and is not backed by an off-screen buffer. This is the default behavior.

    LAYER_TYPE_HARDWARE: The view is rendered in hardware into a hardware texture if the application is hardware accelerated. If the application is not hardware accelerated, this layer type behaves the same as LAYER_TYPE_SOFTWARE.

    LAYER_TYPE_SOFTWARE: The view is rendered in software into a bitmap.

    展开全文
  • 从Android3.0(API Level 11)开始,支持硬件加速,可充分利用GPU的特性,使得界面渲染更加平滑。但是硬件加速自身并非完美,在某些Webview版本上,比如Android5初期的一些rom上的Webview版本是chrome37、38版本,由于...

    从Android3.0(API Level 11)开始,支持硬件加速,可充分利用GPU的特性,使得界面渲染更加平滑。

    但是硬件加速自身并非完美,在某些Webview版本上,比如Android5初期的一些rom上的Webview版本是chrome37、38版本,由于其本身的硬件加速策略的bug,导致代码稍微给硬件一些压力,就会引发闪屏、花屏等渲染问题。

    硬件加速的好处

    硬件加速对渲染的流畅度有大幅提升。

    在开启硬件加速后,上下拖动列表的感觉是没有跳帧的平滑拖动感,如果没有硬件加速,拖动时能感受到有丢帧。

    在窗体切换动画上也类似,硬件加速开关对切换动画的影响很大。

    对于video、canvas、webgl,没有硬件加速是没法商用的,Android webview里video标签里的视频如果没有硬件加速会看不到画面。

    硬件加速的代价

    硬件加速属于双缓冲机制,使用显存进行页面渲染(使用较少的物理内存),导致更频繁的显存操作,可能引起以下现象:

    花屏、闪屏、分块渲染;

    那么对于开发者,始终要注意降低页面的内存占用,给硬件加速腾出RAM。

    具体参考http://ask.dcloud.net.cn/article/12837

    硬件加速的开关控制

    在5+App可以从两个级别对硬件加速进行控制:

    App级别

    程序级别开关是设置整个程序是否使用硬件加速,关闭后程序中所有页面将都不可使用硬件加速功能,可通过以下方式操作:

    HBuilder中配置的方法

    打开应用的manifest.json文件,切换到“代码视图”,在plus->distribute->google节点下添加“hardwareAccelerated”字段:

    要开启硬件加速设置值为true,关闭硬件加速则设置值为false。不配置的话默认是auto。

    保存提交到App云端打包才能生效。

    离线打包配置的方法

    打开工程的AndroidManifest.xml文件,切换到代码视图模式,在application节点下修改“android:hardwareAccelerated”属性值:

    要开启硬件加速设置值为true,关闭硬件加速则设置值为false。

    保存后重新编译即可生效。

    Webview窗口级别

    除了App级别,还可以对单个Webview控制是否开启硬件加速功能,比如App关闭了硬件加速,但某个webview又打开了硬件加速:

    新开Webview窗口是否开启硬件加速

    创建Webview窗口时(注意创建完毕再修改无效),可设置WebviewStyle参数的hardwareAccelerated属性值控制是否开启硬件加速:

    var styles = {hardwareAccelerated:true}; // true表示开启Webview的硬件加速,false表示关闭Webview的邮件加速

    var webview = plus.webview.create( "url", "id", styles );

    webview.show();

    设置首页webview是否开启硬件加速

    上面的新开webview时设置硬件加速对首页是无效的,因为首页不是js创建的。首页webview的硬件加速单独配置需要在manifest里进行。

    注意此配置与全局设置不同,虽然都在manifest配置,但此配置仅是对首页生效的,并非全局App的硬件加速配置。

    打开应用的manifest.json文件,切换到“代码视图”,在plus节点下添加“hardwareAccelerated”字段:

    设置值为true表示开启硬件加速,false表示关闭硬件加速。

    关于硬件加速默认的auto值的说明,即不同平台上5+runtime默认开启或关闭硬件加速的策略

    参考:http://ask.dcloud.net.cn/article/12830

    可以通过5+ API查询Webview默认硬件加速是否开启

    但注意此api即defauleHardwareAccelerated,是我们的引擎的默认策略查询,开发者手动打开硬件加速后,并不会更改这个值。

    检测硬件加速是否开启,一方面看上下滑动的流畅度,另一种方法是放一个video标签,看看视频是否有画面。

    关闭硬件加速时,如果想播放视频,有2种方案:

    对播放视频的webview单独开硬件加速,创建这个webview时参考上面的方法开启硬件加速。

    展开全文
  • win10硬件加速是什么?我们知道系统可以通过设置相关项加速运行,那么硬件可否加速呢?下面让小白系统给你介绍下win10硬件加速吧。什么是硬件加速硬件加速是指在电脑中通过把计算量非常大的工作分配给专门的硬件来...

    a0e248f724de511bfbd11f53ac50fbeb.png


    win10硬件加速是什么?我们知道系统可以通过设置相关项加速运行,那么硬件可否加速呢?下面让小白系统给你介绍下win10硬件加速吧。
    什么是硬件加速?
    硬件加速是指在电脑中通过把计算量非常大的工作分配给专门的硬件来处理以减轻CPU的工作量之技术。尤其是在图像处理中这个技术经常被使用。
    随着硬件的更新换代,硬件也具备了很多固定的高级功能,简单来说硬件已经具备处理部分CPU繁杂简单的工作项,从而提高执行效率,减轻CPU工作量,让CPU去做更有意义的工作。
    如何开启硬件加速呢?
    要支持硬件加速有以下几个要求:
    1、是必须硬件上支持硬件加速
    2、是驱动程序必须升级到最新版本
    3、是你想加速的软件如游戏必须支持硬件加速
    使用win10系统的小伙伴不用担心,默认情况下是开启了硬件加速的,只需要你的硬件配置满足上面的条件就可以了。
    同时按下键盘快捷键Win+R打开运行窗口输入【dxdiag】回车确定,点击【显示】,在【DirectX功能】下方可以看到三项加速已经开启了。

    1f9ddad4909f9289bc3f0c5fb258262b.png

    f727af432340423094a7d1ae5c73e943.png


    如何关闭硬件加速呢?
    使用【DirectX Repair】可以关闭【硬件加速】,打开后点击【工具】列表选择【选项】,然后选择【Directx加速】,就可以看到三个选项的加速已经开启,点击【禁用】就可以关闭硬件加速了。

    9d90b51c1159dcab7fc54e96713e64b0.png


    以上就是关于win10硬件加速的介绍,感兴趣的朋友可以自行查看硬件加速情况哦。我是小白系统,带你学习更多有趣的电脑小技巧,我们下期见!

    展开全文
  • win10硬件加速是什么?我们知道系统可以通过设置相关项加速运行,那么硬件可否加速呢?下面让小白系统给你介绍下win10硬件加速吧。什么是硬件加速硬件加速是指在电脑中通过把计算量非常大的工作分配给专门的硬件来...
  • code小生,一个专注 Android 领域的技术平台公众号回复 Android 加入我的安卓技术群作者:NoBugException链接:...(1)定义 所谓硬件加速,指的是把某些计算工作交给专门的硬件来...
  • 控制硬件加速我们可以在以下 4 个级别控制硬件加速:Application在清单文件种,加入以下属性,为整个应用启用硬件加速:Activity在清单文件中对应的 标签下添加下面代码:Windowwindow 级别不能停用硬件加速。...
  • 硬件加速与软件加速

    2019-11-19 10:44:41
    很多人会把 Android 中的硬件加速和 Hardware Layer 搞混,会以为启用了硬件加速,就是启用了 Hardware Layer. 所以在说 Hardware Layer 之前,我们先说一下硬件加速 关于硬件加速的比较详细的文章,推荐大家看这三...
  • 08_属性动画和硬件加速(三)硬件加速自定义 View 1-8 硬件加速概念原理怎么就「加速」了?限制View Layer总结 自定义 View 1-8 硬件加速 硬件加速这个词每当被提及,很多人都会感兴趣。这个词给大部分人的概念大致...
  • android 硬件加速

    2021-01-06 15:41:16
    硬件加速 从 Android 3.0(API 级别 11)开始,Android 2D 渲染管道支持硬件加速,也就是说,在View的画布上执行的所有绘制操作都会使用 GPU。启用硬件加速需要更多资源,因此应用会占用更多内存。 控制硬件加速 ...
  • 硬件解码 硬件加速

    2018-08-22 17:37:00
    1、硬件加速,英文名Hardware acceleration。 2、硬件加速英文名Hardware acceleration;硬件解码生效的时候,系统是怎么运转的呢?硬件有三个处理器,CPU、GPU和APU(不是加速处理器是声音处理器)。他们通过PCI/...
  • ffmpeg 硬件加速

    2014-10-24 16:13:00
    利用ffmpeg 调用dxdva 实现硬件加速
  • Android 硬件加速

    2020-07-10 10:14:10
    我们平时在开发Android的时候,经常会接触到硬件加速这个词,因为我们一般都是在应用层做开发,几乎不怎么接触硬件,其实操作系统已经把底层硬件封装的很完善了,我们并不需要去写C语言就能开启硬件加速。开启硬件...
  • Android硬件加速

    千次阅读 2019-02-15 12:30:38
    Android硬件加速
  • css硬件加速

    2018-08-09 01:48:28
    怎么让浏览器硬件加速 给浏览器发送一个css命令 ,让浏览器 开启硬件加速功能 GPU渲染能力 硬件加速的效果 使动画很流畅,不会出现卡顿现像、残影、回流等问题 硬件加速对象 要给运动的...
  • Android P中打开webview出现闪屏现象,然后把硬件加速关闭之后,不在闪屏,但是 打开webview出现滑动网页,出现卡顿现象,怎么解决?
  • 硬件加速Android 3.0 (API level 11), 开始支持所有的View 的canvas都会使用GPU,但是硬件的加速会占有一定的RAM。在API >= 14上,默认是开启的,如果你的应用只是标准的View和Drawable,全局都打开硬件加速,是...
  • Android从3.0(API Level 11)开始,在绘制View的时候支持硬件加速,充分利用GPU的特性,使得绘制更加平滑,但是会多消耗一些内存。开启或关闭硬件加速:由于硬件加速自身并非完美无缺,所以Android提供选项来打开或者...
  • 用于数据缩减功能的硬件加速,是一种数据分流的概念,由储存控制器的处理器,与专用加速芯片构成协同架构,控制器处理器负责一般I/O处理与系统控制,加速芯片则专门负责压缩、重复数据删除等数据缩减功能的运算。...
  • 硬件加速

    2012-10-03 22:23:45
    硬件加速器,基于FPGA的FIR、FFT算法,需要有硬件加速器,运行速度更高!
  • 从 Android 3.0(API 级别 11)开始,Android 2D 渲染管道支持硬件加速,也就是说,在View的画布上执行的所有绘制操作都会使用 GPU。启用硬件加速需要更多资源,因此应用会占用更多内存。如果您的目标 API 级别为 14 ...
  • 硬件加速器的设计

    2018-12-14 11:47:19
    FPGA硬件加速器的设计

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,402
精华内容 4,560
关键字:

硬件加速