Android-GUI图形子系统
文章平均质量分 93
lin-0410
最痛苦的事情,不是失败了,而是我本可以......
所以,如果目标还没去实现,不要感叹为时已晚,因为种一棵树最好的时间是十年前,其次是现在!
展开
-
Android Display架构分析
android display转载 2022-03-27 17:56:31 · 6241 阅读 · 0 评论 -
Android硬件加速
深度好文:理解Android硬件加速原理转 https://baijiahao.baidu.com/s?id=1709178794607037191&wfr=spider&for=pc教育专家雷教授发布时间: 2021-08-27 01:45工具主管,教育领域创作者关注硬件加速,直观上说就是依赖GPU实现图形绘制加速,软硬件加速的区别主要是图形的绘制究竟是GPU来处理还是CPU,如果是GPU,就认为是硬件加速绘制,反之,软件绘制。在Android中也是如此,不过相对于普通的软件绘转载 2022-03-21 16:42:55 · 704 阅读 · 0 评论 -
Android 7.1 GUI系统-surfaceflinger(四)
surfaceflinger的启动:frameworks/native/services/surfaceflinger/surfaceflinger.rcservice surfaceflinger /system/bin/surfaceflinger class core user system group graphics drmrpc readpro原创 2017-11-25 19:53:25 · 1362 阅读 · 0 评论 -
Android 7.1 GUI系统-BufferQueue 的管理(三)
BufferQueue 的管理1),对buffer的管理符合“生产者-消费者”模型,这里有以下几个相关的类:BufferQueueProducer.cpp是IGraphicBufferProducer对应服务端的实现,负责缓冲区的申请。BufferQueueConsumer.cpp是IGraphicBufferProducer对应的服务端的实现,是buffer消费者。原创 2017-11-25 19:40:15 · 5618 阅读 · 0 评论 -
Android7.1 GUI系统中的本地窗口(二)
先看下Android中本地窗口的定义:system/core/include/system/window.hstruct AnativeWindow{//所支持的最小和最大交换间隔时间。 const int minSwapInterval; const int maxSwapInterval;//水平方向和垂直方向的密度。 const float xdpi; const fl...原创 2017-11-25 19:23:59 · 2338 阅读 · 0 评论 -
Android7.1 GUI系统-概述(一)
SurfaceFlinger介绍Android的GUI系统(Graphic User Interface),是基于opengl/egl实现的。一,opengles/egl的关系,借鉴网上的图。1),hal层提供了gralloc,包括fb和gralloc两个设备,fb负责打开内核中的framebuffer,提供post,setwapInterval等操作,grallo原创 2017-11-25 19:05:16 · 4238 阅读 · 0 评论 -
Android 7.1 GUI系统-窗口管理WMS-窗口大小计算(五)
窗口大小的计算一个应用窗口,除了应用程序本身的内容外,还有状态栏,可能还有输入法窗口,状态栏的大小是固定的,输入法窗口可以在AndroidManifest.xml中配置,相关属性如下:以state开头的表示当Activity成为焦点时软键盘是隐藏还是可见,以adjust开头的表示如何调整Activity窗口以容纳软键盘。frameworks/base/core/res/res/values/Att...原创 2017-12-16 22:44:01 · 1984 阅读 · 0 评论 -
Vsync信号的产生,都有那些类需要接收vsync信号
笔记记录,没有加太多注释,避免显得啰嗦。SurfaceFlinger模块下的HWComposer,其中一个功能就是产生硬件的vsync。SurfaceFlinger_hwc1.cpp初始化HWComposer对象,同时传入参数SurfaceFlinger本身,作为回调事件的接收方。void SurfaceFlinger::init() { mHwc.reset(new HWComposer...原创 2018-05-20 16:40:10 · 2116 阅读 · 0 评论 -
Android 7.1 GUI系统-vsync信号的产生和接收(五)
Vsync信号的产生。以下代码基于高通msm8909芯片,android7.1的源码。Vsync信号的产生有两种来源,一种是硬件,也就是显示模块产生;一中是软件模拟,因为目前基本都是硬件产生的,所以软件模拟的代码就没有分析的必要了。接下来分析由硬件产生的vsync是怎么传到surfaceflinger的。这个硬件源就是HWComposer,它一方面管理这composer的hal模块,compose...原创 2017-11-25 20:20:48 · 3105 阅读 · 4 评论 -
Android 7.1 GUI系统-vsync信号的处理(六)
一旦有事件发生,MessageQueue::cb_eventReceiver就会执行,进一步调用eventReceiver,如果事件类型是DisplayEventReceiver::DISPLAY_EVENT_VSYNC,开始处理UI数据的合成。MessageQueue.cppint MessageQueue::cb_eventReceiver(int fd, int events, void* ...原创 2017-12-03 11:35:42 · 2025 阅读 · 0 评论 -
Android 7.1 GUI系统-窗口管理WindowManagerService(一)
一,WindowManagerService窗口管理员。什么是窗口?直观的看是一个界面,比如桌面,比如打开的一张照片。从SurfaceFlinger的角度看,它是一个layer,当向surfaceflinger申请一个surface时,实际是创建了一个layer,承载着跟窗口有关的数据。从WindowManagerService的角度看,它是windowState,管理着窗口有关的状态。Windo...原创 2017-12-06 22:08:38 · 1318 阅读 · 0 评论 -
Android GUI系统-ViewTree的遍历(四)
那些情况会引起ViewTree的遍历1)应用程序刚启动时,会在构造出整棵ViewTree后,执行第一次遍历。public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) @ViewRootImpl.java{ requestLayout();} public vo原创 2017-12-26 07:09:08 · 989 阅读 · 0 评论 -
Android GUI系统-ViewTree遍历过程(五)
ViewTree的遍历过程performTraversals。遍历过程主要对应三个函数performMeasure(计算大小),perforLayout(计算位置),performDraw(绘制内容)。具体看下这三个步骤执行的条件,及怎么执行的?1)performMeasureprivate void performTraversals() @ViewRootImpl.java{//mView是...原创 2017-12-28 21:25:17 · 445 阅读 · 0 评论 -
Android GUI系统-ViewTree的绘图遍历(六)
ViewTree的绘图遍历绘图遍历也就是ViewTree遍历过程的最后一步。这个过程有3个核心的步骤:1)canvas= mSurface.lockCanvas(dirty);2)mView.draw(canvas);3)surface.unlockCanvasAndPost(canvas);和View直接交互的是canvas,可以认为是作画的工具集。应用程序跟surf原创 2018-01-07 20:48:50 · 397 阅读 · 0 评论 -
Android GUI系统-ViewTree的创建(二)
View树的创建过程当AMS通知应用进程来启动一个Activity任务时,最终这个请求会转化为ActivityThread中的一个消息LAUNCH_ACTIVITY,同类型的消息还是RESUME_ACTIVITY,PAUSE_ACTIVITY等。主线程ActivityThread对这个LAUNCH_ACTIVITY消息的处理是整个ViewTree建立的起点。private class H exte...原创 2017-12-21 22:38:36 · 625 阅读 · 0 评论 -
Android GUI系统-View框架(一)
View框架相关元素的关系:1)View和ViewRoot,ViewRoot可以理解为View树的管理者,是ViewRootImpl类型的对象,Activity和ViewRoot是一对一的关系,他有一个成员变量mView,是View树的根,也就是xml布局的顶层元素,ViewRoot的核心任务是跟WMS通信。2)Activity和Window,Activity有一个成员变量mWindow就是Win...原创 2017-12-20 07:32:11 · 1559 阅读 · 0 评论 -
Android 7.1 GUI系统-窗口管理WMS-动画的执行(七)
前面只是动画资源的加载过程,下面看下动画是怎么执行起来的?前面在分析窗口申请的过程中,分析过relayoutWindow中的调用performSurfacePlacement,在这个函数的最后调用了mService.scheduleAnimationLocked(),来安排动画的执行。void scheduleAnimationLocked() @WindowManagerService.java...原创 2017-12-19 22:01:06 · 1311 阅读 · 0 评论 -
Android 7.1 GUI系统-窗口管理WMS-窗口动画、应用动画的加载(六)
转载两篇矢量动画的文章,做个记录:矢量图形与矢量动画 https://blog.csdn.net/aqi00/article/details/54944816Android-矢量动画技巧 https://blog.csdn.net/z82367825/article/details/60574053窗口动画的加载:Activity窗口显示的过程中,除了窗口的申请,窗口大小的计算,窗口层级的设置...原创 2017-12-17 23:20:04 · 1533 阅读 · 0 评论 -
Android 7.1 GUI系统-窗口管理WMS-Surface管理(四)
Surface的管理Surface是窗口能真正显示到物理屏幕上的基础,由surfaceflinger管理,可以通过WindowStateAnimator.java中的变量mDrawState来查看每个窗口相关的surface的状态。surface有5中状态:WindowStateAnimator.java//Surface还没有创建。staticfinal int NO_SUR原创 2017-12-13 23:27:32 · 4195 阅读 · 0 评论 -
Android 7.1 GUI系统-窗口管理WMS-窗口添加(三)
窗口的添加过程。Android中窗口通常分为两大类,一是系统窗口,一是应用窗口。添加的过程上,WMS不会特别区分这两类窗口,只是在权限和层级有差别。1)系统窗口的添加,以状态栏为例。private void addStatusBarWindow() @PhoneStatusBar.java{//把R.layout.super_status_bar资源inflate为View对象mStatusBa...原创 2017-12-11 22:44:26 · 863 阅读 · 0 评论 -
Android 7.1 GUI系统-窗口管理WMS-窗口属性(二)
窗口类型及属性。1),Android都有那些窗口类型,定义在WindowManager.java的内部类LayoutParams中。public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable @WindowManager.java{//代表通常的应用程序窗口的开始。 pu原创 2017-12-09 11:23:36 · 1068 阅读 · 0 评论 -
Android GUI系统-ViewTree的管理者(三)
作为ViewTree的管理者ViewRoot,是怎么工作的。一,ViewRootImpl跟WMS间的通信ViewRootImpl.java在构造的时候,需要建立跟WMS的通信的双向通道:ViewRootImpl –>WMS:IwindowSessionWMS →ViewRootImpl :IwindowIwindowSession和IWindow是匿名的BinderServer需要借助一定的...原创 2017-12-24 18:16:01 · 278 阅读 · 0 评论