平面计算机

Android系统Surface机制的SurfaceFlinger服务的启动过程分析

落花浮王杯 提交于 2019-11-27 08:37:16
分享一下我老师大神的人工智能教程!零基础,通俗易懂! http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 在前面一篇文章中,我们简要介绍了 Android 系统 Surface 机制中的 SurfaceFlinger 服务。 SurfaceFlinger 服务是在 System 进程中启动的,并且负责统一管理设备的帧缓冲区。 SurfaceFlinger 服务在启动的过程中,会创建两个线程,其中一个线程用来监控控制台事件,而另外一个线程用来渲染系统的 UI 。在本文中,我们就将详细分析 SurfaceFlinger 服务的启动过程。 《Android系统源代码情景分析》一书正在进击的程序员网( http://0xcc0xcd.com )中连载,点击进入! 从前面 Android系统进程Zygote启动过程的源代码分析 一文可以知道, System 进程是由Zygote进程启动的,并且是以Java层的SystemServer类的静态成员函数main为入口函数的。因此,接下来我们就从SystemServer类的静态成员函数main开始,分析 SurfaceFlinger 服务的启动过程,如图1所示。 图1 SurfaceFlinger服务的启动过程 SurfaceFlinger

Android6.0 显示系统(一) Surface创建

元气小坏坏 提交于 2019-11-27 08:36:28
之前在分析Activity的时候,我们分析过Surface创建。这个系列的博客是讲述显示系统,这里再系统的分析下Surface创建过程。 之前我们分析在Activity在调用attach方法时,建立ViewRootImpl,以及创建其Surface过程,还有在WMS中创建Surface的过程。 这篇博客我们通过另外一个方式分析,但是其实质是一样的。 一、应用层创建Surface 应用开发中很少直接使用Surface,因为每个Activity中已经创建好了各自的Surface对象(就是之前博客分析的在ViewRootImpl通过WMS创建的),通常只有一些特殊应用才需要在Activity之外创建Surface,例如照相机、视频播放应用。通常这些应用也是通过创建SurfaceView来使用Surface。在应用中不直接创建一个可用的Surface对象,或者说直接创建出来的Surface对象也没用,因为这样的Surface不能和SurfaceFlinger之间有关联。 下面我们就来看下SurfaceView是如何创建Surface的,在SurfaceView有两个Surface一个mSurface表示正在用的,另一个mNewSurface代表我们要切换的。 final Surface mSurface = new Surface(); // Current surface in use

ANativeWindow 和 Surface

纵然是瞬间 提交于 2019-11-27 08:35:55
Android播放视频从解码到显示实质也是BufferQueue的生产消费的过程,如下图所示: 其中生产者是Surface,消费者是SurfaceFlinger。 本文主要针对Surface进行分析,理清ANativeWindow 和 Surface之间的关系。 ANativeWindow的定义如下: // 代码位置 frameworks/native/libs/nativewindow/include/system/window.h ... struct ANativeWindow { ... int (*dequeueBuffer_DEPRECATED)(struct ANativeWindow* window, struct ANativeWindowBuffer** buffer); ... int (*queueBuffer_DEPRECATED)(struct ANativeWindow* window, struct ANativeWindowBuffer* buffer); ... int (*query)(const struct ANativeWindow* window, int what, int* value); ... int (*perform)(struct ANativeWindow* window, int operation, ... ); .

android MediaPlayer surface分析

人盡茶涼 提交于 2019-11-27 08:34:32
简单记录一下mediaplayer Surface和Render的过程 void setSurface(Surface surface) ------MediaPlayer.java void android_media_MediaPlayer_setVideoSurface ---- android_media_MediaPlayer .cpp 313 sp < IGraphicBufferProducer > new_st ; 314 if ( jsurface ) { 315 sp < Surface > surface ( android_view_Surface_getSurface ( env , jsurface )); 316 if ( surface != NULL ) { 317 new_st = surface -> getIGraphicBufferProducer (); 318 if ( new_st == NULL ) { 319 jniThrowException ( env , " java / lang / IllegalArgumentException " , 320 "The surface does not have a binding SurfaceTexture!" ); 321 return ; 322 } 323 new_st -

Android深入浅出之Surface[1]

混江龙づ霸主 提交于 2019-11-27 08:33:59
Android深入浅出之Surface 一 目的 本节的目的就是为了讲清楚Android中的Surface系统,大家耳熟能详的SurfaceFlinger到底是个什么东西,它的工作流程又是怎样的。当然,鉴于SurfaceFlinger的复杂性,我们依然将采用情景分析的办法,找到合适的切入点。 一个Activity是怎么在屏幕上显示出来的呢?我将首先把这个说清楚。 接着我们把其中的关键调用抽象在Native层,以这些函数调用为切入点来研究SurfaceFlinger。好了,开始我们的征途吧。 二 Activity是如何显示的 最初的想法就是,Activity获得一块显存,然后在上面绘图,最后交给设备去显示。这个道理是没错,但是Android的SurfaceFlinger是在System Server进程中创建的,Activity一般另有线程,这之间是如何...如何挂上关系的呢?我可以先提前告诉大家,这个过程还比较复杂。呵呵。 好吧,我们从Activity最初的启动开始。代码在 framework/base/core/java/android/app/ActivityThread.java中,这里有个函数叫handleLaunchActivity [---->ActivityThread:: handleLaunchActivity()] private final void

Windows Phone 7 Emulatorのフレームレートカウンター

我们两清 提交于 2019-11-26 19:13:39
が~ん、またReject…今度は何?アプリケーション画面にフレームレートカウンターが写ってるから駄目?…ってことで、調べてみました。他のエバのブログにも特に説明がないようなので、ここで解説しておきます。 英語の説明は、こちら http://msdn.microsoft.com/en-us/library/gg588380(v=VS.92).aspx フレームレートカウンターは、図の通り この意味するところは、上から、 Composition Render Thread FPS Composition Render スレッドの更新レート User Interface Thread FPS UIスレッドの実行レート Texture Memory Usage アプリケーションで使用されているテクスチャに関するビデオメモリとシステムメモリのコピー量 Surface Counter 明確に表面に描画するためにGPU処理に渡される数 Intermediate Surface Counter キャッシュされた表面用に暗黙的に生成された数 Screen Fill Rate Counter スクリーンの一フレームあたりで描画されたピクセル数。480X800ピクセルを1として表現 という意味だそうです。要はアプリケーションのパフォーマンスがどうかってことですね。作ったアプリがもっさり動いとるなぁ

课程20 NGUI

孤街醉人 提交于 2019-11-26 12:15:00
课程20 NGUI Label文字 Texture纹理。Container容器、Panel全屏的“容器”、2D Sprite存放精灵图片 Spriter存放图集 制作按钮 Scroll View滑动视图 制作单选 Tween动画 制作物品栏 对话项目:裸熊 Label文字 Texture纹理。Container容器、Panel全屏的“容器”、2D Sprite存放精灵图片 Spriter存放图集 制作按钮 Scroll View滑动视图 制作单选 Tween动画 制作物品栏 public class Item : UIDragDropItem { //把MonoBehaviour改成UIDragDropItem(拖拽项)继承来的 /* //开始拖拽时调用(在NGUI里通常不用写) protected override void OnDragDropStart() { base.OnDragDropStart(); Debug.Log("开始拖拽"); } */ //结束拖拽是调用 //在unity里,所有的格子同一标签 //新格子会当做参数GameObject surface传过来,就是告诉你拖到谁身上了。 protected override void OnDragDropRelease ( GameObject surface ) { base .