Flash执行模型之可变跑道

RacetrackDay.rar 《深入浅出C#》中第一个实验的代码及实现。可以通过运行该代码来看到程序运行时的具体效果。完整的实现了书中未实现的部分,可以帮助读者较好的理解书中前四章的内容及应用。 立即下载

转自:http://blogs.adobe.com/xwlin/2010/04/flash_player_101_-_adobe_max_2009_1.html

理解执行模型
执行模型是指Flash Player在每一个帧周期中如何执行相应的指令操作。Flash Player后台事实上运行着n多线程,只是AS并没有给开发人员提供多线程编程模型。这意味着从概念上来讲我们要把Flash Player看做是单线程运行实体,有关这一单线程编程模型的优势/劣势的争论从未休止过,我不想对这一具有争议性的问题做过多评论,但请大家记住这一事实。

可变跑道(Elastic Racetrack)
可变跑道是Flash Player的帧执行模型,这个模型描述了在一帧的处理周期中,代码执行和帧渲染的工作是怎样彼此平衡的。Flash Player 9和AVM2对这一模型进行了一些改进,这一信息是基于对事件机制和渲染模型的研究总结出来的,完整的模型尚未被官方公布。

基本的跑道理论没有发生改变,在Flash Player执行一帧的周期里,前一部分时间用于执行代码,剩余时间用于渲染显示列表中的对象。每个执行阶段都可以根据实际需求增加执行时间来执行更多代码或做更多的渲染工作,而跑道的总长度也将相应增长。

elasticracetrackexport.png

在前一模型基础上发生改变的是每一阶段在一个微观周期里的样子以及他们怎样形成一帧。

AVM2是由Flash Player中一个叫做Marshal的元帅级组件所操控,Marshal负责将时间切割成Flash Player工作所依的基本时间片,在这里我希望澄清一下Flash Player的时间片跟swf文件运行时的帧速率没有任何关系,我们将最终看到Flash Player是如何将这些时间片合成为一帧。在Mac OS版Firefox中执行一个由Flex编译得来的swf文件,Marshal通常会将时间切割成19-20毫秒的时间片,时间片大小根据平台和浏览器的不同而存在差异.为方便我们接下来的讨论,我们假定时间片大小为20毫秒,也就是说Marshal每秒钟会产生不超过50个时间片,每个时间片中,五步可能的操作按如下顺序执行:
 

  1. Player事件调度 – 比如Timer事件,鼠标事件,ENTER_FRAME事件,URLLoader事件等等。
  2. 用户代码执行 – 所有侦听上一步相应事件的代码被执行。
  3. RENDER事件调度 – 在用户代码执行期间调用stage.invalidate()会触发这一特殊事件。
  4. 最后的用户代码执行 – 侦听上述第三步特殊事件的用户代码此时被执行。
  5. Player更改显示列表。

marshalledsliceexport.png
Marshal如此反复的执行20毫秒时间片并在运行中决定下一步操作。一个时间片中执行的所有这些操作最终归纳为上述两段式跑道(代码执行,图像渲染)也就是我们所说的一帧。用户代码和失效操作填充在代码执行区,渲染操作填充在跑道的渲染区段。需要指出的是相关操作只能在Marshal预定的时间内发生,如果你的用户代码很短,那么Marshal仍然会在执行完用户代码后等待一段时间然后进入渲染阶段。

为了更好阐述哪些action被如何执行以及可变跑道如何被创建,请参考如下示例,分别描述了以5fps, 25fps和50fps帧速率工作的swf中时间片是如何被处理的。

framemarshalingexport.png
以上示例可以看出,不同的帧速率下,一个帧周期中的可变跑道会执行不同操作,例如对于5fps的swf,每帧处理10个用户action,1个失效action,1个渲染action;帧速率25fps的swf,每帧处理2个用户action,1个失效action,1个渲染action;对于50fps的swf,每帧只能处理1个用户action,1个失效action,1个渲染action。需要指出的很重要的一点是,某些事件只可能能发生在某些特定的时间片里,比如,Event.ENTER_FRAME事件只能在某一帧的初始时间片中被调度。

  1. 一个时间片中代码部分和渲染部分都有可能过长而导致相应时间片大于20毫秒,这就是”可变”的含义,为了保证帧的播放速率仍然接近swf编译时设定的帧率,Marshal会选择丢掉一些时间片。
  2. swf文件的播放速率不可能超过当前Flash Player切割时间片的速率,你可以为swf文件设定120fps的播放速率,但Flash最多可以按照50帧的速度播放(具体数值取决于当前系统的设置)。
  3. 代码的执行频率可能比swf的帧率更高,播放一个1fps的swf文件,播放一帧时间为1秒,也就是50个时间片,但在每个时间片里,都会有触发鼠标或计时器事件,尽管只有最后一个时间片才会渲染,另外你可以选择通过调用函数updateAfterEvent() 提前渲染,但只能在鼠标,计时器和键盘事件处理函数中调用。在这种情况下,Marshal会认为当前帧已结束并从下一个时间片起进入下一帧。 最后,如果一个Sprite的外观属性比如width,height等发生变化而将鼠标从该Sprite上方掠过,Flash会进行强制渲染。
  4. 如果帧率不是每秒时间片数量的整数因子,那么该平台的渲染时间间隔将变得不固定,比如帧率20fps的swf运行在50个时间片每秒的系统上,Flash Player的行为将是每5个时间片播放两帧,那swf的渲染频率将是2-3-2-3-2-3(时间片)。
FLASH游戏渲染技术 FLASH游戏渲染技术 as 游戏开发必备 Flash游戏渲染方法分析 Flash渲染效率提高 Flash游戏素材保存与优化 立即下载

相关推荐

Flash渲染机制

做了那么久Flash开发,还不知道Flash底层的渲染机制是怎样的?开发过程中,经常碰到掉帧甚至直接卡死白屏的问题吗?来听听这堂课,希望可以给你一个清晰的印象和实用的优化思路。

执行模型之可变跑道(Elastic Racetrack)

理解执行模型 执行模型是指Flash Player在每一个帧周期中如何执行相应的指令操作。Flash Player后台事实上运行着n多线程,只是AS并没有给开发人员提供多线程编程模型。这意味着从概念上来讲我们要把Flash Player看做是单线程运行实体,有关这一单线程编程模

ityuany 1355

racetrack:表格式强化学习代理的环境

蒙特卡洛赛车场 这是Racetrack环境和蒙特卡洛代理的实现,如Sutton and Barto的《强化学习:简介》第5章中所述。我的代理可以解决书中提出的问题,并且我将进一步尝试增加环境的难度。 环境 本书推荐了两种环境(第二和第三张图片),我又添加了一个用于调试。 第三种环境比第二种更大,但实际上更容易解决。 赛车从底部开始,应尽可能快地移至终点(位于右上角)。 for track in track_1 track_2 track_3; do python -m scripts.show_racetrack "$track" --save-path "images/$track.svg"; done 结果 原始问题 在最初的问题中,当汽车试图离开赛道但情节没有终止时会受到处罚。 取而代之的是,将赛车放回到赛道上,环境确保赛车始终向终点移动至少一个正方形。 而且,汽车只能移动到

Flash Player内部机制

1. Flash 运行时用C++、汇编语言和ActionScirpt编写发布的Flash Player版本向前兼容一切归结为核心周期。。。2. 核心周期事件、用户代码、运行时环境和输出相当于Flash Player(其实是不只这些,还有通信),而Flash Player嵌入到浏览

sysu_2010的专栏 7544

sentaurus学习笔记(HFET_pGate_GaN仿真)(九)

`(sdedr:define-constant-profile-placement "Ohmic.s" "Ohmic" "Pl.ohmic.s" 0.002)`这一行将`"Ohmic"`掺杂剖面放置在`"Pl.ohmic.s"`参考评估窗口中,同样`0.002`可能表示掺杂剖面在窗口中的偏移量或其他参数。欧姆接触是半导体器件中的一种低阻抗电气接触,通常需要高掺杂来减少接触电阻并提高器件性能。通过这些步骤,SDE能够为器件的源极和漏极区域设置高掺杂的欧姆接触,这对于确保器件的高性能和低接触电阻至关重要。

qq_52640792的博客 1382

LVDS接口总结--(0)LVDS硬件电路接口

xilinx LVDS接口硬件总结

zidan1412的博客 9721

基于“蘑菇书”的强化学习知识点(十三):第三章的代码:MonteCarlo.ipynb及其涉及的其他代码的更新以及注解(gym版本 >= 0.26)(一)

第三章的代码:MonteCarlo.ipynb及其涉及的其他代码的更新以及注解(gym版本 >= 0.26)

xzs1210652636的博客 568

PCB之AD层次化原理图设计

PCB之AD层次化(模块化)原理图设计 软件版本:AD17.1.9(bBuild 592) 先上效果图: 可以看到,图中有RS485和W5500这两个部分是复用了原理图,当项目中需要多个功能相同的电路时,这种设计就可以大大节约PCB布局布线的时间,方法后面介绍; 1.首先确定好项目中个部分电路的功能模块 不同功能的电路分开不同原理图画,然后给出输入输出端口,这样方便复用,下面是实例项目的功能划分 2.单个模块电路的接口设计 这里以W5500以太网接口电路为例说明: 主要就分为通讯接口和电源接口:

洋洋洋的博客 3万+

强化学习知识总结(一)

本篇主要是对这段时间以来我在科学网上发的一些强化学习相关的文章进行一个大汇总(Sutton书1-8章内容)。作为对强化学习Tabular方法的一个简单指导性的目录,本篇也会提供之前讨论过的强化学习中的经典问题实现的代码与相关的图表分析的源文件。   K-level 相关文章: 【RL系列】Multi-Armed Bandit问题笔记 【RL系列】Multi-Armed Ban...

baidu_37355300的博客 855

【Chisel】2.4 时序逻辑

2.4 时序逻辑@[TOC](2.4 时序逻辑)前言寄存器(`Reg`)实例Chisel的状态函数实例2 RegNext实例3 RegInit移位器附录 显式的时钟信号和复位信号 前言 没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,重要的事情说三遍。 这一节我们将要学习Chisel中的时序逻辑。在最后我们会实现一个移位器。 这里你需要知道的是,前面的这几节实际上都是对Chisel的基础语法的学习,它并不会给你带来很大的“惊喜”。Chisel真正的作用是把电路

快乐学习小猪猪的博客 844

SOLIDWORKS Flow Simulation 颗粒分离器仿真:从流场分析到分离效率优化

计算流体力学(CFD)是研究流体流动、传热及相关物理现象的核心工具,其基本原理是通过数值方法求解控制流体运动的纳维-斯托克斯方程。在工程实践中,CFD的价值在于能够对复杂流动进行高保真度仿真,从而在产品设计阶段预测性能、优化结构,显著降低物理样机的试制成本和周期。颗粒分离器作为环保、化工、矿业等领域的关键设备,其设计核心在于平衡分离效率与压力损失。借助SOLIDWORKS内嵌的Flow Simulation模块,工程师可以高效地执行流体仿真,特别是对涉及离散相的颗粒运动进行轨迹追踪和效率统计。该技术方案通过

weixin_28709649的博客 325

Flash Player内部执行机制

参考地址: 1).[url]http://ted.onflash.org/2005/07/flash-player-mental-model-elastic.php[/url] 2).[url]http://www.senocular.com/flash/tutorials/asyncoperations/[/url]

Justin 199

黑金AXU9EG开发板深度学习部署全流程解析

本文详细解析了黑金AXU9EG开发板的深度学习模型部署全流程,从环境搭建、模型转换到上板验证,提供了实用的技术指导和优化技巧。该开发板基于Xilinx Zynq UltraScale+ MPSoC架构,特别适合边缘计算场景,通过FPGA加速实现高效AI推理。

weixin_29062613的博客 447

Flash Player 10.1内部机制(第二部分) - 执行模型之可变跑道

By Xiaowei Lin on April 7, 2010 1:03 AM | No Comments<br />演讲人: Lee Thomason (lthomaso@adobe.com)<br /> 翻译: 林晓伟 (xwlin@adobe.com)<br /><br /> 上一篇我们介绍了Flash Player的代码库是如何归并一体以及对Flash平台的后期开发产生的影响,在第二节里,我们将重点讨论Flash Player的体系结构及其对开发人员的影响。<br

wkyb608的专栏 511

Spatial-ORMLLM: Improve Spatial Relation Understanding in the Operating Room with Multimodal Larg...

手术室(OR)中的精准空间建模是众多临床任务的基础,可为术中感知、风险规避及手术决策提供支持。现有方法虽利用大规模多模态数据集进行 latent 空间对齐,以隐式学习空间关系,但却忽视了多模态大型语言模型(MLLM)的3D能力。然而,这种方法存在两个问题:1)手术室通常缺乏多台视频和音频传感器,多模态3D数据难以获取;2)仅依赖易获取的2D数据训练,无法捕捉复杂场景中的细粒度细节。为解决这一问题,我们提出——首个针对手术室3D空间推理的大型视觉语言模型。

UnknownBody_2的博客 592

YOLO26 实战全流程:从数据集标注到端到端无NMS推理(完整版,附ProgLoss核心调参技巧+避坑指南)

本章节是实战经验的精华❌ 数据集标注不规范,导致模型精度低 → ✅ 严格遵守工业级标注规范,标注框紧贴目标边缘,不要漏标/多标;❌ 训练时未使用预训练权重,导致收敛极慢 → ✅ 必须开启,预训练权重能让模型快速收敛;❌ ProgLoss参数调整幅度过大,导致训练崩溃 → ✅ 每次只调整一个参数,幅度±0.02即可,循序渐进;❌ 推理时强行添加NMS参数,画蛇添足 → ✅ YOLO26无需NMS,推理命令中不要加conf/iou参数,否则会降低推理速度;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1141

Flash Player 10.1内部机制(第二部分)-执行模型之可变跑道

演讲人: Lee Thomason (lthomaso@adobe.com) 翻译: 林晓伟 (xwlin@adobe.com) 上一篇我们介绍了Flash Player的代码库是如何归并一体以及对Flash平台的后期开发产生的影响,在第二节里,我们将重点讨论Flash Player的体系结构及其对开发人员的影响。 理解执行模型 执行模型是指Flash Player在每一个帧周期中如何执行

txiejun的专栏 872

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[转]Flash Player 执行模型之可变跑道

本站文章除注明转载外,均为本站原创或者翻译。本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;本文标题:[转]Flash Player 执行模型之可变跑道本文链接:http://zengrong.net/post/1365.htm本文源码原文地址:http://blogs.ad...

chqj_163的专栏 163

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Flash Player 10.1内部机制(第二部分) – 执行模型之可变跑道

演讲人: Lee Thomason (lthomaso@adobe.com)翻译: 林晓伟 (xwlin@adobe.com)上一篇我们介绍了Flash Player的代码库是如何归并一体以及对Flash平台的后期开发产生的影响,在第二节里,我们将重点讨论Flash Player的体系结构及其对开发人员的影响。理解执行模型执行模型是指Flash Player在每一个帧周期中如何执行相应的指令操作。...

chqj_163的专栏 151

Flash Player内部机制 – 执行模型之可变跑道--非常值得一看

序:这段时间正在整理AS3的教学资料,让我回想起工作和面试中出现的很多问题,这些问题直接或间接 的影响了程序员在工作中的编码品质,且在各类教学的资料中也未提及,很多公司的游戏框架和编码规 范中也未对代码品质进行严格约束,导致很多程序员工作时一味的堆代码,代码臃肿、调用随意、模块 混乱、效率质量不可控已是很多游戏公司技术管理人员头疼的问题; 从今天这一篇开始会慢慢收纳和整理关

yeyingsenling的专栏 678

Flash Player 跑道模型 资料汇总

转自http://www.cc-space.com/?p=1326 POSTED BY ADMIN | FILED UNDER RIA相关 演讲人: Lee Thomason (lthomaso@adobe.com)翻译: 林晓伟 (xwlin@adobe.com)地址:http://blogs.adobe.com/xwlin/2010/04/flash_player_101_-_adob...

小黑的成长记录 167

flash渲染机制

http://blogs.adobe.com/xwlin/2010/04/flash_player_101_-_adobe_max_2009_1.html 理解执行模型执行模型是指Flash Player在每一个帧周期中如何执行相应的指令操作。Flash Player后台事实上运行着n多线程,只是AS并没有给开发人员提供多线程编程模型。这意味着从概念上来讲我们要把Flash P...

weixin_30338743的博客 261

as3 弹性跑道模型

2005年,Ted Patrick发布了一篇伟大的文章《elastic racetrack》。它充当了我多年的参考资料,用于理解一帧内的代码的执行和渲染是如何平稳的处理的。等到了FlashPlayer9和AVM2的面世,我发现弹性跑道模型有了一些变化。此信息是基于我对FashPlayer内部事件和渲染的研究,但整个模型并没有被Adobe公司的工程师证实。弹性跑到模型的基础没变:以一个具体...

acy864266的博客 247
上一篇: 探究 Flex 组件的生命周期
下一篇: Flex开发者必须知道的10件事
narutobing
博客等级 码龄18年 2粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值