`
hite
  • 浏览: 50553 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

一则关于flash与耗能(散热)的关系的实测

阅读更多

一则关于flash的耗能(散热的关系的实测

  1. 引子
    事实上,我既不是flash开发人员也不是乔帮主的fans,所以在html5和flash之争时,我是没有立场的。这次对flash耗能的测试完全是个倒叙的结构——现有结果,后有这个耗能的研究。起因来自我的09年5月买来的Lenovo 300G530这款鸡肋笔记本电脑。在室温30度的时候开机温度就到达五六十度,更牛逼的是我好几次玩wow副本的时候自动关机(后面知道是100℃过热保护),使用pifiform speccy测试cpu100°,经过我肉手测试,很温暖,就像冬天里的一把火。这让我对这个夏天电脑温度的特别关注,不管是浏览网页,还是运作wow,我都会开着speccy监视,而且使用机身悬空,手动风扇等多种措施,测试发现情况并没有好转。
        今日,使用迅雷看看看,在非全屏的情况下,被两侧不停闪烁的“防滑文胸”的广告(两侧轮播广告的视频网站模式不知道谁先做的)惹急了,有了干掉广告的冲动,灵感于greaseMonkey,使用IE developer tools 的display:none;(delete不如firebug容易)干掉了,然后看了看speccy,大吃一惊,结果就有了这篇文章。

  2. 测试目的
    谁在燃烧我的cpu,graphic card,这是个问题
        鉴于我干掉两侧flash广告产生的结果,让我有理由相信flash是个值得注意的家伙,所以我的目的就是找出谁是发热的真凶,是flash?总结计算机耗能
    (使用温度标度) 的影响 因素  ,然后能总结出一个形式化的表达
  3. 测试环境
    软件环境 Operating System
        MS Windows 7 Ultimate 32-bit
    运行程序
        在ie8中迅雷看看DVD版电影《刚果惊魂》

    硬件环境 CPU
        Intel Mobile Core 2 Duo T6400  @ 2.00GHz   
        Penryn 45nm Technology
    RAM
        2.0GB Dual-Channel DDR2 @ 332MHz  5-5-5-15
    Motherboard
        LENOVO JIWA1 (U2E1)
    Graphics
        Generic PnP Monitor @ 1280x800
        256MB GeForce 9300M GS (Lenovo)  
    Hard Drives
        250GB Hitachi Hitachi HTS543225L9A300 ATA Device (IDE)   
    Optical Drives
        HL-DT-ST DVDRAM GSA-T50N ATA Device
        ELBY CLONEDRIVE SCSI CdRom Device
    Audio
        High Definition Audio Device
    测试环境常量 1m网速不变
    运行程序数量不变
    运行程序种类不变
    测试环境变量 flash数量
        迅雷看看播放器和广告播放器
    player是否全屏
    下载上传活动
    (option)其他程序
        一般的浏览器
        一些程序

    测试指标项 温度
        使用piriform speccy 测试直接映射耗能
    上传下载
        使用networx测试,以比特数映射cpu活动
    全屏
        是或者否
    其他程序
        简单的使用是否打开来映射cpu活动
  4. 约定
    H(x) 表示耗能(heat)
    f(x)
    表示是否全屏(fullscreen)
    t(x)
    表示上传下载(transfer)
    o(x)
    表示其他程序(others)
    c(x)
    表示播放器数量(count)
  5. 测试步骤
    按照一般测试的规则(具体我不知道,瞎猜的) ,固定变量,只容许单变量。
    1. 没有变量
      常量 f(x)=t(x)=o(x)=c(x)=0
      变量 条件 #无
      截图
      结果#基本温度65°
      结论 win7下桌面环境里温度为65°,高出室温35°+

    2. 改变播放器数量

      常量 非全屏,有上传下载,有若干其他程序,
      变 量 条件#2个flash对象,c(x)=2;f(x)=M,t(x)=N,o(x)=P;
      解释#电影播放器和广告都在
      截图 #
      结果#基本温度87°~

      条件#1个flash对象,c(x)=2;f(x)=M,t(x)=N,o(x)=P;
      解释#电影播放器存在,广告flash设置为display:none
      截图 #
      结果#基本温度79°

      条件#0个flash对象,c(x)=2;f(x)=M,t(x)=N,o(x)=P;
      解释#迅雷看看页面,没有flash
      截图 #
      结果#基本温度64°~
      结论 忽略2个flash的区别,认为一个活动flash相当于耗能增加6~13°。
    3. 改变全屏状态

      常量 1个flash对象,有上传下载,有若干其他程序,
      变 量 条件#全屏,1个flash对象f(x)=是,c(x)=1,t(x)=N,o(x)=P;
      解释#全屏播放
      截 图 #
      结果#基本温度79°

      条件#非全屏,1个flash对象f(x)=否,c(x)=1;t(x)=N,o(x)=P;
      解释#全屏播放
      截 图 #
      结果#基本温度79°

      条件#全屏,2个flash对象f(x)=否,c(x)=2;t(x)=N,o(x)=P;
      解释#全屏播放
      截 图 #
      结果#基本温度87°

      条件#非全屏,2个flash对象f(x)=否,c(x)=2;t(x)=N,o(x)=P;
      解释#全屏播放
      截 图 #
      结果#基本温度87°
      结论 flash是否全屏不影响耗能
    4. 下载上传活动

      常量 非全屏,有若干其他程序,
      变 量 条件#有下载上传,1个flash对象;c(x)=1,f(x)=N,o(x)=P;
      解释#只有下载,上传活动很小忽略
      截图 #
      结果#基本温度76°

      条件#没有下载,1个flash对象;c(x)=1,f(x)=N,o(x)=P;
      解释#没有下载,上传活动忽略
      截图 #
      结果#基本温度74°

      条件#有下载上传,2个flash对象;c(x)=2,f(x)=N,o(x)=P;
      解释#只有下载,上传活动很小忽略
      截图 #
      结果#基本温度87°

      条件#很小下载,2个flash对象;c(x)=2,f(x)=N,o(x)=P;
      解释#很小下载,上传活动忽略
      截图 #
      结果#基本温度79°
      结论 下载影响耗能但是影响不大,100KB下载大概增温2°
      在flash变动时,温度变化很明显,加上下载的影响温差达到8°。
      下面这图说明下载和上传与耗能的曲线走势
       
      截图 #
    5. 其他程序的影响
      常量 非全屏,没有flash对象,没有全屏,没有上传下载
      变 量 条件#包含speccy,mspaint,普通的浏览器(没有浏览含flash的页面)
      解释#
      截图 #
      结果#基本温度66°

      条件#包含speccy,没有mspaint,普通的浏览器(没有浏览含flash的页面)
      解释#
      截 图 #
      结果#基本温度64°
      结论 普通程序对耗能影响可以忽略,(虽然有2°的差距,我认为这个是噪音)
  6. 结论
    通过测试我们发现让我的电脑燃烧的主凶是flash,从结果里可以排除了其他程序、全屏、上传下载的噪音干扰。
    • flash确实是个耗能的大户
    • 是否全屏没有影响
    • 上传下载影响有限
    • 其他些小程序影响可以忽略不计
    • 从另外一个角度说明内存消耗不贡献耗能

    形式化的公式
    : H(x)=98%*c(x)+2%*t(x)+0*f(x)+0*o(x);
  7. 后记
    看来我得支持乔帮主了。
    申明:所有涉及的程序截图都是original,保证真实有效,兼历史意义,没有宣传,枪手的意图,勿反向工程我!


    不过这里有几个疑问,希望高手解答

    • display:none就是停止flash的占用了?
    • 在我理解里不显示只是显卡不工作,为什么对cpu影响如此大?
    • 在页面里script删除的意义——会刷新页面reflow,repaint吗? 删除的 script里 正在执行的程序会停止吗(这些代码应该在内存里了吧)?
    • 使用js来切换不同flash和flash自身替换自己的不同,也就是flash能自己操作自己本身不——就像汇编可以修改正在运行的自己那样(程序的自举)?

    而这测试的意义并不在于得出了什么重要的结论,而是让我认识一个测试的构成要素都有哪些?为以后积累模板
  8. 附录
    附件
  • 大小: 991.4 KB
  • 大小: 466.1 KB
  • 大小: 381.5 KB
  • 大小: 376 KB
  • 大小: 384.3 KB
  • 大小: 383.6 KB
  • 大小: 479.7 KB
  • 大小: 493.9 KB
  • 大小: 540.6 KB
  • 大小: 254.7 KB
分享到:
评论
22 楼 elemark 2010-08-03  
xlq208 写道
文章分析的很细,我觉得关键flash是使用cpu干gpu的事,flash应该退出历史舞台了。那些喊枪手的更像枪手。实在看不下去了,第二次回帖了。。。

第二次回帖too

还是难以表达看到这么有水准的原创文的敬佩呵呵
用滔滔江水来表达好了哈哈
21 楼 xlq208 2010-08-02  
文章分析的很细,我觉得关键flash是使用cpu干gpu的事,flash应该退出历史舞台了。那些喊枪手的更像枪手。实在看不下去了,第二次回帖了。。。
20 楼 elemark 2010-08-02  
楼主辛苦了,对于这个命题进行了这么详细的科学的系统的探讨。
个别盆友说是枪文,请拿出跟这个文章一样科学系统的枪文出来举例说明。有哪个枪文做到这样的了啊 拜托

而且还引出了那么有深度那么有理论的diferent,这篇文章很有力量哦呵呵
向楼主致敬

顺便说一下,现在的网页版的游戏,FLASH的,真的很耗系统资源。最近玩儿的一款游戏,本本平放着直接卡死,必须下面垫起来通风散热才行。
所以,用我的实例来辅助证明一下楼主的结论。
19 楼 hite 2010-08-01  
diferent 写道
mycybyb 写道
显卡和显示器刷新的原理就不用你普及了,就算鼠标不动,图片是静态的,程序也得有个判断要不要刷新缓冲区吧,你就那么肯定flash实现的那么完美。我说的只是自己猜测的一个可能的原因而已,你既然那么“专业”,那就请给个答案吧

Flash Player 呈现图像的时候 是以帧的概念,进行绘制的.
.


难得这么长的回复,,很有营养。有些东西在冲突的时候可能更容易暴露,欢迎良性的争论!
18 楼 xlq208 2010-07-31  
cpu运行动画,肯定耗能厉害;移到gpu,可能又不想做2d了,呵呵,而且gpu级别上的开发成本太高了,耗能估计也不会低的很明显(一般优化好了耗能可能也会相应低些),gpu级别的喜欢60fps,相信对楼主的机器很摧残啊。
17 楼 ltian 2010-07-31  

若说你是枪文,恐怕你不服!
图形动画需要大量计算。会导致计算机发热。
你要是有个同样动画,用其他技术来实现,然后进行温度比较才公平客观,否则你要马儿跑,又不要马儿吃草,明显有问题!
16 楼 diferent 2010-07-31  
mycybyb 写道
显卡和显示器刷新的原理就不用你普及了,就算鼠标不动,图片是静态的,程序也得有个判断要不要刷新缓冲区吧,你就那么肯定flash实现的那么完美。我说的只是自己猜测的一个可能的原因而已,你既然那么“专业”,那就请给个答案吧

Flash Player 呈现图像的时候 是以帧的概念,进行绘制的.
每一帧交付出去的时候(咱俩讨论的是浏览器的,所以就交付给浏览器了),都是一个位图信息.
这个信息的由来是在FlashPlayer(我就简称FPR了)好一顿渲染计算得来的
在Flex与Flash中 程序员在画界面的时候都是以层的概念来布局的.
在Flex3中大量使用的布局Box,到Flex4中的Group.充拆着Flash的整个屏幕,
打开一个Spark控件的Skin 就可以看得到,Group一层又一层的堆满了.
但是FPR显然不能每一帧都是一层层的输出到屏幕上去的,要是这样,估计Adobe这个公司早就黄了.

有一个队列,是当时屏上可显控件组成的,渲染的时候,是根据这个队列中的控件可视形状生成边缘列表,之后再对这个形状进行优化,再进行填充.之后再扫描逐行边缘生成像素的信息.
比如你放置了一个按钮90*90, 然后又放置了一个全屏大小的图片上去,图片是在按钮之上的,也就是把按钮遮盖住了
那么在成像计算的时候,这个按钮实际上并没有被绘制出来,而是在根据它的大小,位置,层级进行计算的时候,创建出形状为空.
而且,这个渲染计算也不是即时的,而是稍有一些延迟.
这也使得期间进行了一系列的优化工作.比如一个按钮刚加上去就被移除了, 实际上这个按钮进入队列还未参加下一次渲染计算的时候,被发现,就会直接再从队列中移出.
又比如说,你使用一个画笔画一个矩形,马上清空,又使用这个画笔画了一个圆.在优化工作中,第一个绘制矩形并没有被真的绘制.


至于"程序也得有个判断要不要刷新缓冲区吧",这个在FPR里边是通过事件机制来实现的.事件发生后就是执行代码的时候,在虚拟机中.
假设,一个空白的画布,然后静静不动,一分钟后(我可以通过定时器,或是鼠标点击)我在这个画布上添加了一个Button.
我使用的是AddElement方法.这个AddElement方法执行的时候,它也就触发了渲染的事件,于是这个新加入的Button也就进入了待显示队列之中,
当下一次的渲染操作(其实就是下一帧成像时)执行的时候,渲染器就会对这个Button进行扫描边缘....上面提到的过程
最后得出了 Button所在区域的像素信息.这个时候把这个信息更新到之前的已成像的位图缓冲区中就可以了.
即这样一个简单的动作,并没有重新计算其他的不变的地方,只是改变的地方被重新计算了.
我们使用的FlashPlayer都是发布版,也可以去Google搜"FlashPlayer Debug DownLoad"下载Debug版本的FlashPlayer,
在Debug版中, 点击右键,会多出来一个显示重绘区域,选上之后,会用红色框标记出来,在画图发生变化的时候哪一区域被重绘了

既然楼上提到了FPS,我就再多说一点,据听闻,除了MAC机外的其他PC机上使用的FPR,它的FPS貌似是变化的.帧之间的间隔好像是十几MS至100MS之间?记不太清楚了.当FPR要求的频率比当前频率低的时候,好像是会自动降频的.

不过这个无所谓,咱们说的是画面不动的时候.如果真的画面一点不动了,就没有任何事件发生,那么显示的列表也就是一个空列表,渲染器工作的时候,列表为空,那它就算已经工作完了.没更新,So把之前缓冲区中的旧数据再输出就可以了.

打字有些快, 错别字,语病就不挑了
---------------
没有攻击的意思
但是我觉得好像国内从事Flex与Flash开发的人员中,出身自艺术类要多一些,零编程经验的也要多一些.
你让这些人去搞颜色,布局那自是非常不错的了.但是要让他们像正常的Coder一样去注重算法,注重逻辑,注意内存泄漏,貌似有一些困难.
一个优秀的有经验的C/C++或Javaer尚不能完全控制自己的代码.何况这些人呢.
我举一个简单的例子,比如一张柱形图的图表,当这个图表更新的时候,它有两部分在更新(我就说成是两部分吧,有可能更多的),一部分是显示区,一部分是坐标轴.当两部分都更新结束之后,这张图才是我们要呈现的.可是中途有可能其他的事件会影响这个过程,导致未完成时,就把它加入到显示列表中了.
所以,官方实现的时候,非常注意,在覆写UpdateDisplay的时候,很多阶段都使用了阻止重绘的方法,以防止进行很多不必要的重复的工作.
又比如,控件要更改宽度和高度,如果在更改宽度后立即更新组件,然后在设置新高度后,再次更新组件,就有些浪费。更改两个属性后再使用新的大小一次性呈示组件,效率会更高。
很难相像现在有多少的Flash/Flex程序员在设计自己的图形控件时都如此细微的考虑.那么那种基于Flash的网游,
满屏幕人物花草,随意的使用资源,随意地呈现动画,让你的电脑卡一些也是正常的.不卡才不正常呢.

还有就是Adobe的Flash版本也是在变化的.如Java一样. 说1.6已经这么多年了, 可还有人在使用1.4吧.那你使用1.4编程,用不了新的特性,没有新的优化,又能怪谁呢.要知道现在很多开发Flash版本也是旧的.
假设它发布的8版的,即使用的环境是10版的也没有用,也是按8版的去执行.搞不好还可能有兼容不好的地方,在新版的FPR下还会报错.历史原因,和习惯问题.谁也阻止不了.
15 楼 mycybyb 2010-07-30  
显卡和显示器刷新的原理就不用你普及了,就算鼠标不动,图片是静态的,程序也得有个判断要不要刷新缓冲区吧,你就那么肯定flash实现的那么完美。我说的只是自己猜测的一个可能的原因而已,你既然那么“专业”,那就请给个答案吧
14 楼 diferent 2010-07-30  
mycybyb 写道
diferent 写道
mycybyb 写道
应该是flash的刷新导致的吧,就算是个静态的图片,flash每秒都要刷新几十次的

我敢保证 你这话说的不对
要是Flash本身的程序不在有动作 你也停止掉鼠标动作的时候(并不是指不移动鼠标,而是Flash程序里没有对MouseMove Mouseout,Mouseover 等等事件有需要重绘界面的动作话),Flash也会保持不动,不会进行重绘.

是的,它肯定会保持不动,不进行重绘。但不代表它没有刷新屏幕,就像游戏一样,你不动,难道FPS就是0吗


就算是个静态的图片,flash每秒都要刷新几十次的....你指的是什么呢
它如果不重绘 当然就不必进行那么复杂的计算了.
那你以为什么软件呈现图像不需要"你说的刷新么"
我来告诉你 你电脑要是液晶屏的话 频率应该是60HZ 它本身不会计算 计算是在显卡的部分[或是CPU],影像不动的话 显卡只是把之前显存的数据输出给显示器 显示器不断地刷新 ,显示器并不关心数据是否变化 它一直只管不断不断地刷新屏幕.一点不动 它也在刷新.

但是如果你的图像不动 你的显卡会热的爆掉么  同学  它不必计算了  这就是为什么你玩<镜之边缘>时而热的死机,但是什么不做,退到桌面的时候不会死机 非计算机专业的吧
服了U

13 楼 hite 2010-07-29  
spiritfrog 写道
早就听说过flash对cpu的占用高, 发热问题是最近发现的, 偶尔拿着本本看看优酷和土豆视频, 却发现本本很快就烫手了,比玩游戏发热还要猛。,
lz太有心了, 分析的很有条理。


在我这里来说视频到还好,pplive,kank最高也就95℃,如果是玩游戏——一般的如deadtime之类的一直99℃,而魔兽争霸b必须说会100℃。而wow则100+,搞不好就自动关机。。

flash我倒是没有什么怨念,除了不能选择文本,在浏览器里的index过高,还有最近的发热外。。

但不得不说flash干了Java生来具备的使命——跨平台。因为发热问题转到Ubuntu后,发现消遣的地方还真少,,视频网站好的几个pplive,ppstream,迅雷看看,pipi,风行等全不能用了,,,但是像youku,土豆和yiqi之类的flash播放器网站幸存了,,,,


不得不感慨Java的命运啊!
12 楼 spiritfrog 2010-07-29  
早就听说过flash对cpu的占用高, 发热问题是最近发现的, 偶尔拿着本本看看优酷和土豆视频, 却发现本本很快就烫手了,比玩游戏发热还要猛。
lz太有心了, 分析的很有条理。
11 楼 fight_bird 2010-07-29  
要那马儿跑,又要不吃草,难。

要那马儿跑,但要少吃草,可以。

Flash在功耗上改进需两方面之一支持:
1、宿主程序,即浏览器支持GPU渲染,ie9支持,慢慢等吧;
2、Flash Player支持GPU渲染,这个已部分实现,在10.1版本后已支持大部分新的GPU。

不过,确实,Adobe的动作太慢!垄断太久,惰性太大,需要有力的竞争者。
10 楼 aiyanbo 2010-07-29  
个人观点:当我们没有选择权的时候,我们只能忍气吞声...所以由软件引起的一些问题,我们只能通过改善运行环境来解决,面对flash这个耗能问题,我很是喜欢有新的技术代替它,以前我玩一款flash小游戏,cup温度从47°C飙升到69°C,这个东西让我很是害怕
9 楼 i2534 2010-07-28  
这个我可以顶楼主了.我的电脑最近散热出问题,过高温度也会死机.
一般用FF浏览网页,看小说(图片式的),温度保持在70°左右.然后上youku看视频,或者玩网页版的三国杀,温度会直线上升,直到自动重启.并且我的显卡温度比较稳定,一直在75°左右徘徊.
8 楼 xlongbuilder 2010-07-28  
mycybyb 写道
diferent 写道
mycybyb 写道
应该是flash的刷新导致的吧,就算是个静态的图片,flash每秒都要刷新几十次的

我敢保证 你这话说的不对
要是Flash本身的程序不在有动作 你也停止掉鼠标动作的时候(并不是指不移动鼠标,而是Flash程序里没有对MouseMove Mouseout,Mouseover 等等事件有需要重绘界面的动作话),Flash也会保持不动,不会进行重绘.

是的,它肯定会保持不动,不进行重绘。但不代表它没有刷新屏幕,就像游戏一样,你不动,难道FPS就是0吗

刷新屏幕不一定需要大量计算,可以从缓冲区里读
7 楼 mycybyb 2010-07-28  
diferent 写道
mycybyb 写道
应该是flash的刷新导致的吧,就算是个静态的图片,flash每秒都要刷新几十次的

我敢保证 你这话说的不对
要是Flash本身的程序不在有动作 你也停止掉鼠标动作的时候(并不是指不移动鼠标,而是Flash程序里没有对MouseMove Mouseout,Mouseover 等等事件有需要重绘界面的动作话),Flash也会保持不动,不会进行重绘.

是的,它肯定会保持不动,不进行重绘。但不代表它没有刷新屏幕,就像游戏一样,你不动,难道FPS就是0吗
6 楼 diferent 2010-07-28  
mycybyb 写道
应该是flash的刷新导致的吧,就算是个静态的图片,flash每秒都要刷新几十次的

我敢保证 你这话说的不对
要是Flash本身的程序不在有动作 你也停止掉鼠标动作的时候(并不是指不移动鼠标,而是Flash程序里没有对MouseMove Mouseout,Mouseover 等等事件有需要重绘界面的动作话),Flash也会保持不动,不会进行重绘.

5 楼 linkerlin 2010-07-27  
升级Flash至10.1就好了
4 楼 mycybyb 2010-07-27  
应该是flash的刷新导致的吧,就算是个静态的图片,flash每秒都要刷新几十次的
3 楼 block 2010-07-27  
说一个我了解的事实:
ie9之前的版本渲染都是用的cpu,和gpu没关系,ie9开始才用了gpu开始渲染网页。

相关推荐

Global site tag (gtag.js) - Google Analytics