Windows Phone 7 中的图形线程

简介:

 

  Windows Phone的图形线程架构针对移动设备进行了优化,同传统系统的主要区别如下:
  • 在原来用户界面(User Interface thread)线程基础上,引入了构图线程来分担用户界面线程的工作,以便改善性能。
  • 在构图线程(composition thread)上会对动画做自动缓存处理后交由GPU处理。
    在进行动画处理时,大量图形属性值每33毫秒进行一次计算、更新。为了避免这些计算影响其他代码的运行,在Windows Phone中引入了构图线程完成这类计算,其结果无需进一步栅格化,就可以直接传给GPU进行呈现。这就是所谓自动缓存。
   
    使用构图线程和手机、仿真器上的GPU可以显著改善图形处理性能。应用程序设计中应该充分利用构图线程,而限制使用用户界面线程,并采用自动缓存技术发挥GPU的优势。
 
    构图线程
    构图线程处理的动画同一些属性值相关。例如DoubleAnimation类及其EasingFunction属性。使用构图属性的动画还有很多属性中的双精度变量,例如:RenderTransform属性中的双精度变量TranslateTransform.X。再例如Opacity属性本身就是双精度变量。
系统支持一组帧频计数器衡量构图线程的性能。
 
    用户界面线程
    在用户界面线程处理用户输入,用户代码,控件代码,布局,以及构图线程不处理的动画。这里的用户代码是指类似托管代码,游戏循环,每帧回调函数,以及网络阻塞处理代码。Windows Phone设备比桌面操作系统消耗更多CPU资源处理输入。所以当用户界面线程负荷过高,系统性能会受到影响。为了避免这种情况,应用程序设计时应该尽量利用构图线程。
   
    用 GPU 展现缓存内容
    通过使用缓存,应用程序可以像处理图像一样地处理视觉子树上的每一帧静态内容,这种处理有点像处理WriteableBitmap。系统使用GPU展现缓存中的内容。当缓存内容主要是更新频率较低的内容时,程序性能就得了到优化。
   
    桌面和手机系统中的Silverlight都能用GPU展现缓存内容,加速图形化处理。手机上的Silverlight支持桌面上没有的功能:构图线程上的动画会自动缓存;GPU直接进行透视变换;GPU支持矩形剪纸; EnableGPUAccleration是内置的无需手工开启。
   
    开发人员可以尽量利用构图线程的自动缓存和GPU加速机制优化应用程序。比如将双精度数值计算集中在自动缓存的属性中,例如 RenderTransform,透视转换的Projection,矩形的Clip,以及Opacity。
   
    没有在构图线程上运行的属性也可以手工将CacheMode设成BitmapCahce启用缓存和GPU加速。当然这是以额外的缓存空间消耗为代价换取运行性能,在实际应用开发中应该在缓存空间和运行性能间进行折中。

 

本文转自飞雁 51CTO博客,原文链接:http://blog.51cto.com/felixyan/528366 ,如需转载请自行联系原作者

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
22天前
|
调度 Windows
|
22天前
|
Windows
LabVIEW在Windows平台上的图形导入
LabVIEW在Windows平台上的图形导入
23 0
|
6月前
|
监控 安全 API
6.9 Windows驱动开发:内核枚举进线程ObCall回调
在笔者上一篇文章`《内核枚举Registry注册表回调》`中我们通过特征码定位实现了对注册表回调的枚举,本篇文章`LyShark`将教大家如何枚举系统中的`ProcessObCall`进程回调以及`ThreadObCall`线程回调,之所以放在一起来讲解是因为这两中回调在枚举是都需要使用通用结构体`_OB_CALLBACK`以及`_OBJECT_TYPE`所以放在一起来讲解最好不过。
58 1
6.9 Windows驱动开发:内核枚举进线程ObCall回调
|
6月前
|
网络协议 安全 API
9.9 Windows驱动开发:内核远程线程实现DLL注入
在笔者上一篇文章`《内核RIP劫持实现DLL注入》`介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的,本章将继续探索全新的注入方式,通过`NtCreateThreadEx`这个内核函数实现注入DLL的目的,需要注意的是该函数在微软系统中未被导出使用时需要首先得到该函数的入口地址,`NtCreateThreadEx`函数最终会调用`ZwCreateThread`,本章在寻找函数的方式上有所不同,前一章通过内存定位的方法得到所需地址,本章则是通过解析导出表实现。
89 0
9.9 Windows驱动开发:内核远程线程实现DLL注入
|
6月前
|
监控 安全 API
7.1 Windows驱动开发:内核监控进程与线程回调
在前面的文章中`LyShark`一直在重复的实现对系统底层模块的枚举,今天我们将展开一个新的话题,内核监控,我们以`监控进程线程`创建为例,在`Win10`系统中监控进程与线程可以使用微软提供给我们的两个新函数来实现,此类函数的原理是创建一个回调事件,当有进程或线程被创建或者注销时,系统会通过回调机制将该进程相关信息优先返回给我们自己的函数待处理结束后再转向系统层。
68 0
7.1 Windows驱动开发:内核监控进程与线程回调
|
6月前
|
监控 Windows
4.4 Windows驱动开发:内核监控进程与线程创建
当你需要在Windows操作系统中监控进程的启动和退出时,可以使用`PsSetCreateProcessNotifyRoutineEx`函数来创建一个`MyCreateProcessNotifyEx`回调函数,该回调函数将在每个进程的创建和退出时被调用。PsSetCreateProcessNotifyRoutineEx 用于在系统启动后向内核注册一个回调函数,以监视新进程的创建和退出,
45 0
4.4 Windows驱动开发:内核监控进程与线程创建
|
6月前
|
监控 安全 Windows
4.3 Windows驱动开发:监控进程与线程对象操作
在内核中,可以使用`ObRegisterCallbacks`这个内核回调函数来实现监控进程和线程对象操作。通过注册一个`OB_CALLBACK_REGISTRATION`回调结构体,可以指定所需的回调函数和回调的监控类型。这个回调结构体包含了回调函数和监控的对象类型,还有一个`Altitude`字段,用于指定回调函数的优先级。优先级越高的回调函数会先被调用,如果某个回调函数返回了一个非NULL值,后续的回调函数就不会被调用。当有进程或线程对象创建、删除、复制或重命名时,内核会调用注册的回调函数。回调函数可以访问被监控对象的信息,如句柄、进程ID等,并可以采取相应的操作,如打印日志、记录信息等。
42 0
4.3 Windows驱动开发:监控进程与线程对象操作
|
7月前
|
存储 安全 调度
4.2 Windows驱动开发:内核中进程线程与模块
内核进程线程和模块是操作系统内核中非常重要的概念。它们是操作系统的核心部分,用于管理系统资源和处理系统请求。在驱动安全开发中,理解内核进程线程和模块的概念对于编写安全的内核驱动程序至关重要。内核进程是在操作系统内核中运行的程序。每个进程都有一个唯一的进程标识符(PID),它用于在系统中唯一地标识该进程。在内核中,进程被表示为一个进程控制块(PCB),它包含有关进程的信息,如进程状态、优先级、内存使用情况等。枚举进程可以让我们获取当前系统中所有正在运行的进程的PID和其他有用的信息,以便我们可以监视和管理系统中的进程。
81 0
4.2 Windows驱动开发:内核中进程线程与模块
|
8月前
|
编译器 索引 Windows
[笔记]Windows核心编程《二十一》线程本地存储器TLS
[笔记]Windows核心编程《二十一》线程本地存储器TLS
|
8月前
|
存储 编译器 C++
[笔记]Windows核心编程《十六》线程栈
[笔记]Windows核心编程《十六》线程栈