久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)

發(fā)布時間:2023/12/20 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

Android 的窗口管理系統(tǒng)?(View, Canvas, WindowManager)

在圖解Android - Zygote 和 System Server 啟動分析一 文里,我們已經(jīng)知道Android 應用程序是怎么創(chuàng)建出來的,大概的流程是 ActivityManagerService -> Zygote -> Fork App, 然后應用程序在ActivityThread 中的進入loop循環(huán)等待處理來自AcitivyManagerService的消息。如果一個Android的應用有Acitivity, 那它起來后的第一件事情就是將自己顯示出來,這個過程是怎樣的? 這就是本章節(jié)要討論的話題。

?

Android 中跟窗口管理相關(不包括顯示和按鍵處理)主要有兩個進程,Acitivty所在進程 和 WndowManagerService 所在進程(SystemServer).? 上圖中用不同顏色區(qū)分這兩個進程,黃色的模塊運行在Activity的進程里,綠色的模塊則在System Server內部,本文主要討論的是WindowManager Service。它們的分工是,Activity進程負責窗口內View的管理,而WindowManager Service 管理來自與不同Acitivity以及系統(tǒng)的的窗口。

1. Acitivty顯示前的準備工作

在圖解Android - Zygote, System Server 啟動分析中我們已經(jīng)知道,一個新的應用被fork完后,第一個調用的方法就是 ActivityThread的main(),這個函數(shù)主要做的事情就是創(chuàng)建一個ActivityThread線程,然后調用loop()開始等待。當收到來自 ActivityManager 的 LAUNCH_ACTIVITY 消息后,Activity開始了他的顯示之旅。下圖描繪的是Activity在顯示前的準備流程。


?

圖分為三部分, 右上角是Acitivity應用的初始化。中間部分是Acitivity 與WindowManager Service的交互準備工作,左下角是window顯示的開始。本文主要描述后兩部分,而Activity的啟動會放在圖解Android - Android GUI 系統(tǒng) (4) - Activity的生命周期里講解。

  • Activity內部的準備過程,這里面有一個重要對象,ContextImpl 生成,它是Context類的具體實現(xiàn),它里面封裝了應用程序訪問系統(tǒng)資源的一些基本API, 比如說,連接某一個服務并獲取其IBinder,發(fā)送Intent, 獲取應用程序的信息,訪問數(shù)據(jù)庫等等,在應用看來,它就是整個AndroidSDK的入口。ContextImpl 除了實現(xiàn)函數(shù),里面還維護成員變量,其中有一個mDisplay,代表當前應用輸出的顯示設備,如果應用沒有特別指定,一般指向系統(tǒng)的默認顯示輸出,比如手機的液晶屏。
  • 在圖解Android - Android GUI 系統(tǒng) (1) - 概論中我們已經(jīng)介紹過ViewRootImpl 的地位相當與MVC架構中的C,Controller是連接View和Modal的關鍵,所以需要首先創(chuàng)建它。當addView(view, param)被調用的時候,一個ViewRoot就被創(chuàng)建出來,addView()的實現(xiàn)如下:
    public void addView(View view, ViewGroup.LayoutParams params) {mGlobal.addView(view, params, mDisplay, mParentWindow); } public void addView(View view, ViewGroup.LayoutParams params,Display display, Window parentWindow){...root = new ViewRootImpl(view.getContext(), display);... }

    這里的參數(shù)View是想要添加到WindowManagerService 的“window", 一般一個Activity只需要一個’Window', 所以,Acitivy的默認實現(xiàn)是將DecorView作為”Window" 交給Window Manager Service 進行管理。Params是Layout相關的參數(shù),里面包含有長,寬,邊緣尺寸(Margin)等信息,mDisplay就是這個窗口想要輸出的Display設備編號,由ContextImpl傳遞過來。mParentWindow 就是Activity的成員變量mWindow,從最上面的類圖可以很容易看出來,對于手機而言,就是一個PhoneWindow對象,對于GoogleTV,就是TVWindow對象。

  • ViewRootImpl 在構造過程成初始化一些重要的成員變量,包括一個Surface對象(注意這是一個空的Surface對象,沒有賦給任何有效的值,后面會通過CopyFromParcel來填充),還有mChoreophaer定時器(Singleton對象,每個進程只有一個),與此同時,ViewRootImp通過WindowManagerGlobal創(chuàng)建了一個和WindowManagerService 的通話通道,接下來會利用這條通道做進一步的初始化工作。
  • 還是在addView()里,WindowManagerImpl拿到ViewRoot對象后調用它的setView方法,將view, layout參數(shù)交給ViewRootImpl開始接管。在setView()里ViewRootImpl做進一步的初始化工作,包括創(chuàng)建一個InputChannel接收用戶按鍵輸入,enable圖形硬件加速,請求第一次的Layout等等,這里只介紹跟WindowManagerService 有關系的一件事,就是向WindowManager service 報道,加入到WindowManager的窗口管理隊列中。這個函數(shù)是 addToDisplay(),
    int addToDisplay(in IWindow window, //提供給WMS的回調接口in int seq, in windowManager.LayoutParams attrs, // layout參數(shù)in int viewVisibility, in int layerStackId, // display IDout Rect outContentInsets, // WMS計算后返回這個View在顯示屏上的位置out InputChannel outInputChannel); // 用戶輸入通道Handle

    addToDisplay() 最終會調到WindowManager Service的addWindow() 接口。

  • addWindow() 里首先生成了一個WindowState對象,它是ViewRootImpl 在WindowManager Service端的代表。在它的構造函數(shù)里,WindowState 會生成IWindowId.Stub 對象和DeathRecipient對象來分別監(jiān)聽Focus和窗口死亡的信息,根據(jù)用戶傳進來的Window Type計算出窗口的mBaseLayer,mSubLayer和mLastLayer值,分別對應于主窗口,主窗口上彈出的子窗口(如輸入法),以及動畫時分別對應的ZOrder值,(在本文后面會具體介紹),生成一個WindowStateAnimation 負責整個Window的動畫,并在內部將windowToken, appWindowToken等關聯(lián)起來。
  • WindowManager Service 調用openInputChannelPair() and RegisterInputChannel(), 創(chuàng)建用于通信的SocketPair , 將其傳給InputManagerService, 用于接下來的用戶輸入事件對應的響應窗口(參考Android的用戶輸入處理),
  • 最后,WindowManagerService 調用WindowState的attach(),創(chuàng)建了一個Surface Session 并將Surface Session,WindowSession 還有WindowState 三者關聯(lián)起來.
  • WindowManager Service 調用 assignLayersLocked()計算所有Window的Z-Order。
  • addToDisplay() 返回,ViewRootImpl 和 WindowManager Service 內部的準備工作就緒。ActivityThread會發(fā)送ACTIVITY_RESUMED消息告訴Activity顯示開始??梢允菆D還沒有畫,不是嗎?對的,此刻Surface還沒有真正初始化(我們前面說過ViewRootImpl只是New了一個空的對象,需要有人往里面填東西)。底層存放繪制結果的Buffer也沒有創(chuàng)建,但是最多16ms以后這一切就會開始。
  • 2. Choreographer 和 Surface的創(chuàng)建

    所有的圖像顯示輸出都是由時鐘驅動的,這個驅動信號稱為VSYNC。這個名詞來源于模擬電視時代,在那個年代,因為帶寬的限制,每一幀圖像都有分成兩次傳輸,先掃描偶數(shù)行(也稱偶場)傳輸,再回到頭部掃描奇數(shù)行(奇場),掃描之前,發(fā)送一個VSYNC同步信號,用于標識這個這是一場的開始。場頻,也就是VSYNC 頻率決定了幀率(場頻/2). 在現(xiàn)在的數(shù)字傳輸中,已經(jīng)沒有了場的概念,但VSYNC這一概念得于保持下來,代表了圖像的刷新頻率,意味著收到VSYNC信號后,我們必須將新的一幀進行顯示。

    VSYNC一般由硬件產生,也可以由軟件產生(如果夠準確的話),Android 中VSYNC來著于HWComposer,接收者沒錯,就是Choreographer。Choreographer英文意思是編舞者,跳舞很講究節(jié)奏不是嗎,必須要踩準點。Choreographer 就是用來幫助Android的動畫,輸入,還是顯示刷新按照固定節(jié)奏來完成工作的??纯碈hroreographer 和周邊的類結構。

    ?

    ?

    從圖中我們可以看到, Choreographer 是ViewRootImpl 創(chuàng)建的(Choreographer是一個sigleton類,第一個訪問它的ViewRootImpl創(chuàng)建它),它擁有一個Receiver, 用來接收外部傳入的Event,它還有一個Callback Queue, 里面存放著若干個CallbackRecord, 還有一個FrameHandler,用來handleMessage, 最后,它還跟Looper有引用關系。再看看下面這張時序圖,一切就清楚了,

    ?

    ?

    首先Looper調用loop() 后,線程進入進入睡眠,直到收到一個消息。Looper也支持addFd()方法,這樣如果某個fd上發(fā)生了IO操作(read/write), 它也會從睡眠中醒來。Choreographer的實現(xiàn)用到了這兩種方式,首先他通過某種方式獲取到SurfaceFlinger 進程提供的fd,然后將其交給Looper進行監(jiān)聽,只要SurfaceFlinger往這個fd寫入VSync事件,looper便會喚醒。Lopper喚醒后,會執(zhí)行onVsync()時間,這里面沒有做太多事情,而是調用Handler接口 sendMessageAtTime() 往消息隊列里又送了一個消息。這個消息最終調到了Handler (實際是FrameHandler)的handleCallback來完成上層安排的工作。為什么要繞這么大個圈?為什么不在onVSync里直接handleCallback()? 畢竟onVSync 和 handleCallback() 都在一個線程里。這是因為MessageQueue 不光接收來自SurfaceFlinger 的VSync 事件,還有來自上層的控制消息。VSync的處理是相當頻繁的,如果不將VSync信號送人MessageQueue進行排隊,MessageQueue里的事件就有可能得不到及時處理,嚴重的話會導致溢出。當然了,如果因為VSync信號排隊而導致處理延遲,這就是設計的問題了,這也是為什么Android文檔里反復強調在Activity的onXXX()里不要做太耗時的工作,因為這些回調函數(shù)和Choreographer運行在同一個線程里,這個線程就是所謂的UI線程。

    言歸正傳,繼續(xù)往前,VSync事件最終在doFrame()里調了三次doCallbacks()來完成不同的功能, 分別處理用戶輸入事件,動畫刷新(動畫就是定時更新的圖片), 最后執(zhí)行performTraversals(),這個函數(shù)里面主要是檢查當前窗口當前狀態(tài),比如說是否依然可見,尺寸,方向,布局是否發(fā)生改變(可能是由前面的用戶輸入觸發(fā)的),分別調用performMeasure(), performLayout, performDraw()完成測量,布局和繪制工作。我們會在后面詳細學習這三個函數(shù),這里我們主要看一下第一次進入performTraversals的情況,因為第一次會做些初始化的工作,最重要的一件就是如本節(jié)標題,創(chuàng)建Surface對象。

    回看圖2,我們可以看到Surface的創(chuàng)建不是在Activity進程里,而是在WindowManagerService完成的(粉顏色)。當一個Activity第一次顯示的時候,Android顯示切換動畫,因此Surface是在動畫的準備過程中創(chuàng)建的,具體發(fā)生在類WindowStateAnimator的createSurfaced()函數(shù)。它最終創(chuàng)建了一個SurfaceControl 對象。SurfaceControl是Android 4.3 里新引進的類,Google從之前的Surface類里拆出部分接口,變成SurfaceControl,為什么要這樣? 為了讓結構更清晰,WindowManagerService 只能對Surface進行控制,但并不更新Surface里的內容,分拆之后,WindowManagerService 只能訪問SurfaceControl,它主要控制Surface的創(chuàng)建,銷毀,Z-order,透明度,顯示或隱藏,等等。而真正的更新者,View會通過Canvas的接口將內容畫到Surface上。那View怎么拿到WMService創(chuàng)建的Surface,答案是下面的代碼里,surfaceControl 被轉換成一個Surface對象,然后傳回給ViewRoot, 前面創(chuàng)建的空的Surface現(xiàn)在有了實質內容。Surface通過這種方式被創(chuàng)建出來,Surface對應的Buffer 也相應的在SurfaceFlinger內部通過HAL層模塊(GRAlloc)分配并維護在SurfaceFlinger 內部,Canvas() 通過dequeueBuffer()接口拿到Surface的一個Buffer,繪制完成后通過queueBuffer()還給SurfaceFlinger進行繪制。

    SurfaceControl surfaceControl = winAnimator.createSurfaceLocked();if (surfaceControl != null) {outSurface.copyFrom(surfaceControl);if (SHOW_TRANSACTIONS) Slog.i(TAG," OUT SURFACE " + outSurface + ": copied");} else {outSurface.release();}

    到這里,我們知道了Activity的三大工作,用戶輸入響應,動畫,和繪制都是由一個定時器驅動的,Surface在Activity第一次啟動時由WindowManager Service創(chuàng)建。接下來我們具體看一下View是如何畫在Surface Buffer上的,而Surface Buffer的顯示則交由圖解Android - Android GUI 系統(tǒng) (3) - Surface Flinger?來討論。

    3. View的Measure, Layout 和 Draw

    直接從前面提到的performMeasure()函數(shù)開始.

    ?因為遞歸調用,實際的函數(shù)調用棧比這里顯示的深得很多,這個函數(shù)會從view的結構樹頂(DecorView), 一直遍歷到葉節(jié)點。中間會經(jīng)過三個基類,DecorView, ViewGroup 和 View, 它們的類結構如下圖所示:

    ?

    所有可見的View(不包括DecorView 和 ViewGroup)都是一個矩形,Measure的目的就是算出這個矩形的尺寸, mMeasuredWidth 和 mMeasuredHeight (注意,這不是最終在屏幕上顯示的尺寸),這兩個尺寸的計算受其父View的尺寸和類型限制,這些信息存放在 MeasureSpec里。MeasureSpec 里定義了三種constraints,

    • /*父View對子View尺寸沒有任何要求,其可以設任意尺寸*/public static final int UNSPECIFIED = 0 << MODE_SHIFT;/* 父View為子View已經(jīng)指定了大小*/public static final int EXACTLY = 1 << MODE_SHIFT;/*父View沒有指定子View大小,但其不能超過父View的邊界 */public static final int AT_MOST = 2 << MODE_SHIFT;

    widthMeasureSpec 和 heightMeasureSpec 作為 onMeasure的參數(shù)出入,子View根據(jù)這兩個值計算出自己的尺寸,最終調用 setMeasuredDimension() 更新mMeasuredWidth 和 mMeasuredHeight.

    performMeasure() 結束后,所有的View都更新了自己的尺寸,接下來進入performLayout().

    performLayout() 的流程和performMeasure基本上一樣,可以將上面圖中的measure() 和 onMeasure 簡單的換成 layout() 和 onLayout(), 也是遍歷整課View樹,根據(jù)之前算出的大小將每個View的位置信息計算出來。這里不做太多描述,我們把重心放到performDraw(), 因為這塊最復雜,也是最為重要的一塊。

    很早就玩過Android手機的同學應該能體會到Android2.3 到 Android 4.0 (其實Android3.0就有了,只是這個版本只在平板上有)的性能的巨大提升,UI界面的滑動效果一下變得順滑很多,到底是framework的什么改動帶來的?我們馬上揭曉。。。(這塊非本人工作領域,網(wǎng)上相關的資料也很少,所以純憑個人磚研,歡迎拍磚指正)

    Android Graphics Hardware Acceleration

    OK, 如標題所述,最根本的原因就是引入了硬件加速, GPU是專門優(yōu)化圖形繪制的硬件單元,很多GPU(至少手機上的)都支持OpenGL,一種開放的跨平臺的3D繪圖API。Android3.0以前,幾乎所有的圖形繪制都是由Skia完成,Skia是一個向量繪圖庫,使用CPU來進行運算, 所以它的performance是一個問題(當然,Skia也可以用GPU進行加速,有人在研究,但好像GPU對向量繪圖的提升不像對Opengl那么明顯),所以從Android3.0 開始,Google用hwui取代了Skia,準確的說,是推薦取代,因為Opengl的支持不完全,有少量圖形api仍由Skia完成,另外還要考慮到兼容性,硬件加速的功能并不是默認打開,需要程序在AndroidManifests.xml 或代碼里控制開關。當然,大部分Canvas的基本操作都通過hwui重寫了,hwui下面就是Opengl和后面的GPU,這也是為什么Android 4.0的launcher變得異常流暢的緣故。OK,那我們接下來的重點就是要分析HWUI的實現(xiàn)了。

    在此之前,簡單的介紹一下OpenGL的一些概念,否則很難理解。要想深入理解Opengl,請必讀經(jīng)典的紅包書:http://www.glprogramming.com/red/

    Opengl說白了,就是一組圖形繪制的API。 這些API都是一些非常基本的命令,通過它,你可以構造出非常復雜的圖形和動畫,同時,它又是跟硬件細節(jié)無關的,所以無需改動就可以運行在不同的硬件平臺上(前提是硬件支持所需特性)。OpenGL的輸入是最基本幾何元素(geometric primitives), 點(points), 線(lines), 多邊形(polygons), 以及bitmap和pixle data, 他的輸出是一個或兩個Framebuffer(真3D立體). 輸入到輸出的流程(rendering pipeline)如下圖所示:

    ?這里有太多的概念,我們只描述跟本文相關的幾個:

    ?vertex data
    ????? 所有的幾何元素(點線面)都可以用點(vertics)來描述, 每個點都對應三維空間中的一個坐標(x,y,z), 如下圖所示,改變若干點的位置,我們便可以構造出一個立體的圖形。 ???

    Triangles

    ? ?? OpenGL只能畫非凹(nonconvex)的多邊形,可是現(xiàn)實世界中存在太多的凹性的物體,怎么辦呢?通過連線可以將凹的物體分成若干個三角形,三角形永遠都是凸(convex)的。同時三角形還有一個特性,三個點可以唯一確定一個平面,所以用盡可能多的三角形就可以逼近現(xiàn)實世界中復雜的曲線表面,比如下圖的例子,三角形的數(shù)目越多,球體的表示就越逼真。這也是為什么我們經(jīng)??吹斤@卡的性能評測都以三角形的生成和處理作為一個非常重要的指標。

    ?Display List

    ????? 所有的Vertex和Pixel信息均可以存在Display List 里面,用于后續(xù)處理,換句話說,Display List 就是OpenGL命令的緩存。Display List的使用對OpenGL的性能提升有很大幫助。這個很容易理解,想象一個復雜的物體,需要大量的OpenGL命令來描繪,如果畫一次都需要重新調用OpenGL API,并把它轉換成Vertex data,顯然是很低效的,如果把他們緩存在Display List里,需要重繪的時候,發(fā)一個個命令通知OpenGL直接從Display List 讀取緩存的Vertex Data,那勢必會快很多,如果考慮到Opengl是基于C/S架構,可以支持遠程Client,這個提升就更大了。Display也可以緩存BitMap 或 Image, 舉個例子,假設要顯示一篇文章,里面有很多重復的字符,如果每個字符都去字庫讀取它的位圖,然后告訴Opengl去畫,那顯然是很慢的。但如果將整個字庫放到Display List里,顯示字符時候只需要告訴Opengl這個字符的偏移量,OpenGL直接訪問Display List,那就高效多了。

    Pixel Data

    ????? Pixle data 包括位圖(bitmap), Image, 和任何用于繪制的Pixel數(shù)據(jù)(比如Fonts)。通常是以矩陣的形式存放在內存當中。通過Pxiel data, 我們避免大量的圖形繪制命令。同時通過現(xiàn)實世界中獲取的紋理圖片,可以將最終的物體渲染得更逼真。比如說畫一堵墻,如果沒有pixel data,我們需要將每塊磚頭都畫出來,也就是說需要大量的Vertex??墒侨绻ㄟ^一張現(xiàn)實生活中拍攝的磚墻的圖片,只需要4個點畫出一個大矩形,然后上面貼上紋理,顯然,速度和效果都要好得多。

    FrameBuffer

    ????? Framebuffer就是Opengl用來存儲結果的buffer。Opengl的frameBuffer類型有幾種。Front Buffer 和 Back Buffer, 分別用于顯示和繪制,兩者通過swapBuffer 進行交換。Left Buffer 和 Right buffer, 用于真立體(需要帶眼鏡的那種) 圖像的左右眼Buffer,Stencil buffer, 用于禁止在某些區(qū)域上進行繪制,想像一下如果在一件T恤上印上圖案,你是不是需要一個鏤空的紙板?這個紙板就是stencil buffer.

    OK, 對Opengl rendering pipeline簡單介紹到此,有興趣的同學可以閱讀opengl的紅包書或運行一些簡單的例子來深入理解Opengl?;氐街黝},僅僅使用Opengl 和 GPU 取代Skia 就能夠大幅提升性能?答案當然不是,性能的優(yōu)化很大程度上取決于應用,應用必須正確的使用Opengl命令才能發(fā)揮其最大效能。Android從pipeline 角度提供了兩種機制來提升性能,一個就是我們剛才說到的Display List,另一個叫 Hardware Layer, 其實就是緩存的FrameBuffer, 比如說Android的墻紙,一般來說,他是不會發(fā)生變化的,因此我們可以將它緩存在Hardware Layer里,這張就不需要每次進行拷貝和重繪,從而大幅提升性能。

    說白了,優(yōu)化圖形性能的核心在于 1)用硬件來減少CPU的參與,加速圖形計算。 2)從軟件角度,通過Display List 和 Hardware Layer, 將已經(jīng)完成的工作盡可能的緩存起來,只做必須要做的事情,盡可能的減少運算量。

    接下來看實現(xiàn)吧。

    Canvas, Renderer, DisplayList, HardwareLayer 實現(xiàn)

    這塊代碼相當?shù)膹碗s,花了兩天時間才把下面的圖整理出來,但還是沒有把細節(jié)完全吃透,簡單的介紹一下框架和流程吧,如果有需要大家可以下來細看代碼。??

    ?
    ?

    ?

    圖中上半部為Java 代碼,下半部為Native層。先介紹里面出現(xiàn)的一些概念:

    ?Canvas

    Canvas是Java層獨有的概念,它為View提供了大部分圖形繪制的接口。這個類主要用于純軟件的繪制,硬件加速的圖形繪制則由HardwareCanvas取代。

    HardwareCanvas,GLES20Canvas, GLES20RecordingCanvas

    hardwareCanvas是一個抽象類,如果系統(tǒng)屬性和應用程序指定使用硬件加速(現(xiàn)已成為默認),它將會被View(通過AttachInfo,如 下圖所示) 引用來完成所有的圖形繪制工作。GLES20Canvas?則是hardwareCanvas的實現(xiàn),但它也只是一層封裝而已,真正的實現(xiàn)在Native 層,通過jni (andriod_view_gles20Canvas.cpp)接口來訪問底層的Renderer, 進而執(zhí)行OpenGL的命令。 此外,GLES20Canvas還提供了一些靜態(tài)接口,用于創(chuàng)建各類Renderer對象。

    GLES20RecordingCanvas 繼承GLES20Canvas, 通過它調用的OpenGL命令將會存儲在DisplayList里面,而不會立即執(zhí)行。

    HardwareRenderer, GLRender, GL20Renderer

    這三個類都是Java的Wrapper類,通過訪問各種Canvas來控制繪制流程。詳見下面兩張時序圖。

    OpenGLRenderer, DisplayListRenderer, HardwareLayerRenderer

    Java的HardwareCanvas 和 HardwareRenderer在底層的對應實現(xiàn)。OpenGLRenderer是基類,只有它直接訪問底層OpenGL庫。DisplayListRenderer 將View通過GLES20Canvas傳過來的OpenGL 命令存在OpenGL的DisplayList中。而HardwareLayerRenderer 管理HardwareLayer的資源。

    GLES20
    ? ? ? 就是OpenGL ES 2.0 的API。它的實現(xiàn)一般由GPU的設計廠家提供,可以在設備的/system/lib/egl/ 找到它的so,名字為 libGLES_xxx.so, xxx 就是特定設備的代號,比如說,libGLES_gc.so 就是Vivante公司的GPU實現(xiàn),libGLESv2_mali.so 就是ARM公司提供的Mali GPU的實現(xiàn)。它也可以由軟件實現(xiàn),比如說 libGLES_android.so, 是Google提供的軟件實現(xiàn)。

    EGL
    ? ? ? 雖然對于上層應用來說OpenGL接口是跨平臺的,但是它的底層(GPU)實現(xiàn)和平臺(SoC)是緊密相關的,于是OpenGL組織定義一套接口用來訪問平臺本地的窗口系統(tǒng)(native platform window system),這套接口就是EGL,比如說 eglCreateDisplay(), eglCreateSurface(), eglSwapBuffer()等等。EGL的實現(xiàn)一般明白libEGL.so, 放在/system/lib/egl/ 下面。

    View, Canvas, Renderer, DisplayList, HardwareLayer 的關系如下圖所示:

    每個View都對應一個DisplayList, 在Native層代碼里管理。每個View通過GLESRecordingCanvas 以及Native層對應的DisplayRenderer 將OpenGL命令存入DisplayList.最后View 通過GLES20Canvas 通知OpenGLRenderer 執(zhí)行這些DisplayList 里面的OpenGL 命令。

    ?

    ?他們的生命周期如下圖所示 (粉紅代表 New, 黑色代表 Delete, 黃色代表Java類,藍色代表C++, 綠色代表JNI).

    ?

  • 如果系統(tǒng)支持硬件加速,ViewRootImpl首先創(chuàng)建一個GL20Renderer, 存在成員變量 mHardwareRenderer 里。
  • Surafce是繪畫的基礎,如果不存在,HardwareRenderer會調用GLRenderer->createEglSurface() 創(chuàng)建一個新的Surface。
  • Surface創(chuàng)建好后,接著生成Canvas,因為大部分應用程序不會直接操作Surface。
  • 在Canvas的構造函數(shù)里,會依次創(chuàng)建Native層對應的OpenGLRenderer對象,它會直接訪問庫 libGLES_xxx提供的OpenGL ES API,來負責整個View樹的繪制工作。
  • 與此同時,一個CanvasFinalizer 成員對象也會被創(chuàng)建,它保存剛剛創(chuàng)建出來的OpenGLRenderer 指針,當它的finalizer()函數(shù)被調用是,負責將其銷毀,回收資源。
  • 在運行過程中,如果窗口死掉或者不在可見,ViewRootImpl 會調用DestroyHardwareResource() 來釋放資源。這里會最終將底層創(chuàng)建的Hardware Layer回收。
  • 同時Java端的GLES20Layer 對象也會因為被賦值 NULL 被GC在將來回收。
  • 接下來,ViewRootImpl調用 destroyHardwareRenderer() 將之前創(chuàng)建的Native Renderer(DisplayListRenderer,OpenGLRenderer)依次回收。
  • 最后將Java 層的mHardwareRenderer 賦空,GC將會回收最開始創(chuàng)建的GL20Renderer對象。支持,一個View樹的生命周期完成,所有資源清楚干凈。

  • 等等!好像少了點什么,怎么沒有DisplayList? 前面不是說它是性能優(yōu)化的幫手之一嗎?對了,上面只介紹了繪制的開始和結尾,在View的生命周期中,還有最重要的一步,Draw 還沒有被介紹,DisplayList 相關的操作就是在Draw()里面完成的。

    ?Draw 流程

    ? 繞了好大一圈,終于回到最初的話題,Android是怎樣將View畫出來的??讓我們按照圖中的序號一一進行講解。(黃色:Java, 綠色:C++,藍色:JNI,粉色:New, 黑色:Delete).

    ?

  • 首先,ViewRootImpl直接訪問的HardwareRenderer 對象,首先在BeginFrame() 里獲取EGLDisplay(用于顯示) 和 初始化一個EGLSurface,OpenGL將在這個Surface上進行繪圖。關于EGLDisplay 和 EGLSurface 將在 圖解Android - Android GUI 系統(tǒng) (3) - Surface Flinger 里詳細描述。
  • 我們前面說過,Android 4.0 帶來的圖形性能的提升,有很大程度是DisplayList 帶來的,所以,HardwareRenderer接下來就通過buildDisplayList() 創(chuàng)建整個View樹的DisplayList. 最開始,GL20Renderer為View生成了一個GLES20DisplayList, 這是一個影子類,沒有實際用途,主要用來管理Native層的DisplayList的銷毀。
  • View 調用剛剛生成的GLES20DisplayList的 start() 方法,真正開始構建DisplayList的上下文。obtain() 函數(shù)里會判斷是否mCanvas 已經(jīng)存在,如果沒有則New 一個新的GLES20RecordingCanvas對象。
  • 創(chuàng)建與GLES20RecordingCanvas 一一對應的Native層的 DisplayListRenderer。
  • 3,4是一個遞歸的過程,直到所有的View的DisplayList上下文生成,View才真正開始Draw(), 這里,OpenGL命令(Op)不會被立即執(zhí)行,而是被存儲到剛剛生成的DisplayListRenderer里。
  • 接著View調用GLESDisplayList的 end() 方法,這里Native層的DisplayList 對象才真正被創(chuàng)建出來,Java 和 Native 的 DisplayList 對象一一對應起來。
  • end() 方法最后,調用GLES20RecordingCanvas.recycle() 方法,首先將Native的DisplayListRender 進行重新初始化,然后將剛才創(chuàng)建出來的臨時對象賦NULL值(GLES20RecordingCanvas 和 GLES20DisplayList), 因為它們的使命已經(jīng)完成,將View的OpenGL命令存儲在Native層的DisplayList對象里。
  • GC() 被調用后,GLES20RecordingCanvas 和 GLES20DisplayList 被釋放,相應的Finalizer 對象方法會被調用,進而調用Natice層的deleteDisplayListDefered(), 將之前不用的DisplayList 送入 Caches的Gabage 隊列中,等待回收。(這是在Native層實現(xiàn)的類似Java GC的機制)
  • 到此,所有的DisplayList 上下文準備就緒。進入preDraw 狀態(tài),在GL20Renderer的 onPreDraw() 方法里,最終調用到底層的clearGarbage將上一次繪圖操作的DisplayList在底層釋放。
  • HardwareRenderer調用 GLES20Canvas 的drawDisplayList(), 通知 Native層的 OpenGLRenderer,其最終調用每個DisplayList的Replay() 方法執(zhí)行OpenGL命令。
  • 所有OpenGL命令執(zhí)行完后, 圖形被繪制到第一步生成的EGLSurface, hardwareRender 調用 GLES20Canvas 的 eglSwapBuffers() 交換Buffer,交由SurfaceFlinger 在下一個VSync到來時進行顯示。
  • Hardware Layer

    即便是使用了DisplayList, 對于復雜的圖形,仍然需要執(zhí)行大量的OpenGL命令,如果需要對這一部分進行優(yōu)化,就需要使用到 HardwareLayer對繪制的圖形進行緩存,如果圖形不發(fā)生任何變化,就不需要執(zhí)行任何OpenGL命令,而是將之前緩存在GPU內存的Buffer 直接與其他View進行合成,從而大大的提高性能。這些存儲在GPU內部的Buffer就稱為 Hardware Layer。除了Hardware Layer, Android 還支持Software Layer,和Hardware Layer 不同之處在于,它不存在于GPU內部,而是存在CPU的內存里,因此它不經(jīng)過前面所說的 Hardware Render Pipeline, 而是走Android最初的軟件Render pipeline。不管是Hardware Layer 還是 Software Layer, 在Draw() 內部均稱為Cache,只要有Cache的存在,相對應的View將不用重繪,而是使用已有的Cache。Hardware Layer, Software Layer 和 Display List 是互斥的,同時只能有一種方法生效(當然,Hardware Layer的第一次繪制還是通過Display List 完成),下表總結了它們的差別, 從中可以看到,Hardware Layer 對性能的提升是最大的,唯一的問題是占用GPU的內存(這也是為什么顯卡的內存變得越來越大的原因之一),所以一般來說,Hardware Layer使用在那些圖片較為復雜,但不經(jīng)常改變,有動畫操作或與其他窗口有合成的場景,比如說WallPaper, Animation 等等。

    ?

    ?Enabled ifGPU accelerated?Cached in

    Performance(from Google I/O 2001)

    Usage
    Display ListHardware Accelerated = TrueYGPU DisplayList2.1Complex View
    Hardware LayerLayerType = HARDWAREYGPU Memory0.009Complex View, Color Filter(顏色過濾), Alpha blending (透明度設置), etc.?
    Software LayerLayerType = SOFTWARENCPU Memory10.3No Hardware Accelerated, Color filter, Alpha blending, etc.

    ?

    ?

    ?

    ?

    ?

    ?

    重繪 - Invaliate

    前面介紹了View的第一次繪制的過程。但是一個View在運行中終究是要發(fā)生變化的,比如說,用戶在TextView的文字發(fā)生了改變,或者動畫導致View的尺寸發(fā)生變化,再或者說一個對話框彈出然后又消失,被遮擋的部分重新露了出來,這些都需要對View進行重繪。在介紹重繪之前,我們先了解一下View內部的一些Flag 定義。

    ?

    Flags?== 1Set atClear at
    PFFLAG_HAS_BOUNDS

    1: View has size and Position set.
    0:?setFrame() was not called yet

    View::setFrame()?
    PFFLAG_DRAWN

    1: Has been drawn, only after which, invalidate() is valid.
    0: not drawn, need to draw() later to show it.

    ViewGroup::addViewInLayout
    ViewGroup::attachViewToParent
    View::draw()
    View::buildDrawingCache()
    View::getHardwareLayer()
    View::invalidate()
    View::setLeft/Right/Top/Bottom()

    View::invalidate()

    PFFLAG_DRAWING_CACHE_VALID

    1: Has DisplayList / Hardware Layer / Software Layer  
    0: No Cache, using Software rendering path.

    View::GetHardwareLayer()
    View::GetDisplayList()

    View::invalidate(true)
    View::invalidate(rect)
    View::invalidateChild()

    PFFLAG_INVALIDATED  View is specifically invalidated, not just dirty(child for instance).
    DisplayList will be recreated if set.?
    ViewGroup::addViewInLayout
    ViewGroup::attachViewToParent
    View::force/requestLayout()
    View::invalidate()

    View::draw()
    PFLAG_DIRTY  Set to indicate that the view need to be redrawn.
    (use displaylist cache if PFFLAG_INVALIDATED flag is false)
    View::invalidate()

    ViewGroup::addViewInLayout
    ViewGroup::attachViewToParent
    View::draw()
    View::buildDrawingCache()
    View::getHardwareLayer()
    View::invalidate()
    View::setLeft/Right/Top/Bottom()
    View::getDisplayList()

    PFLAG_DIRTY_OPAQUEDIRTY because of OPAQUE (hidden by others).View::invalidateChild()

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    從上表可以看出,View通過內部這些Flag來控制重繪。基本上重繪分兩種情況,一種是需要重新生成DisplayList, 另外一種是使用之前已有的Cache,包括DisplayList或者是Hardware Layer。使用哪種重繪方式由當前View的Flags,以及應用程序傳入的參數(shù)決定。控制它的就是一組Invalidate() 函數(shù)。

    ?

    void invalidate(boolean invalidateCache) {if (skipInvalidate()) { //如果View不可見,并且不再動畫退出過程中(fade out),將不執(zhí)行Invalidate().return;}if ((mPrivateFlags & (PFLAG_DRAWN | PFLAG_HAS_BOUNDS)) == (PFLAG_DRAWN | PFLAG_HAS_BOUNDS) || //DRAWN -> 已經(jīng)被Draw()過(invalidateCache && (mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == PFLAG_DRAWING_CACHE_VALID) || //有Cache,且被要求重新刷新Cache(mPrivateFlags & PFLAG_INVALIDATED) != PFLAG_INVALIDATED || isOpaque() != mLastIsOpaque) //沒有正在Invalidate()中 {mLastIsOpaque = isOpaque();mPrivateFlags &= ~PFLAG_DRAWN;mPrivateFlags |= PFLAG_DIRTY;if (invalidateCache) { mPrivateFlags |= PFLAG_INVALIDATED; mPrivateFlags &= ~PFLAG_DRAWING_CACHE_VALID; //標記將來清除Cache,如果為false,則有系統(tǒng)根據(jù)Dirty Region決定是否需要重新生成DisplayList。 }final AttachInfo ai = mAttachInfo;final ViewParent p = mParent;if (!HardwareRenderer.RENDER_DIRTY_REGIONS) { //系統(tǒng)不支持Dirty Region,必須重繪整個區(qū)域, 基本不會進去 }if (p != null && ai != null) {final Rect r = ai.mTmpInvalRect;r.set(0, 0, mRight - mLeft, mBottom - mTop);p.invalidateChild(this, r); //通知兄弟view(有共同的ViewParent(ViewGroup 或者 ViewRoot)進行 Invalidate. }}}

    假如所有的條件都支持重繪,便會調用到ViewParent的invalidateChild()方法。(ViewParent是一個接口類,它的實現(xiàn)類是ViewGroup 和 ViewRootImpl。)這個方法會從當前View開始,向上遍歷到ViewRoot 或者 到某個ViewGroup的區(qū)域與當前View的Dirty區(qū)域沒有重疊為止。途中的每個ViewGroup都會被標記上Dirty。在接下來VSYNC的performDraw()里,ViewRootImpl 會遍歷所有標記Dirty的ViewGroup,然后找到里面標記Dirty的View,只有這些View的DisplayList 被重建,而其他實際上沒有變化的View(雖然它們在同一個ViewGroup里面),如果沒有Hardware Layer, 只需重新執(zhí)行對應Display List 里面的OpenGL 命令。通過這種方式,Android只重繪需要重繪的View,從軟件層面將GPU的輸入最小化,從而優(yōu)化圖形性能。

    ?

    4. Windows 的管理

    到此,我們已經(jīng)了解了一個Acitivty(Window)是如何畫出來的,讓我們在簡要重溫一下這個過程:

  • Acitivity創(chuàng)建, ViewRootImpl將窗口注冊到WindowManager Service,WindowManager Service 通過SurfaceFlinger 的接口創(chuàng)建了一個Surface Session用于接下來的Surface 管理工作。
  • 由Surface Flinger 傳上來的VSYNC事件到來,Choreographer 會運行ViewRootImpl 注冊的Callback函數(shù), 這個函數(shù)會最終調用 performTraversal 遍歷View樹里的每個View, 在第一個VSYNC里,WindowManager Service 會創(chuàng)建一個SurafceControll 對象,ViewRootImpl 根據(jù)Parcel返回的該對象生成了Window對應的Surface對象,通過這個對象,Canvas 可以要求Sruface Flinger 分配OpenGL繪圖用的Buffer。
  • View樹里的每個View 會根據(jù)需要依次執(zhí)行 measure(),layout() 和 draw() 操作。Android 在3.0之后引入了硬件加速機制,為每個View生成DisplayList,并根據(jù)需要在GPU內部生成Hardware Layer,從而充分利用GPU的功能提升圖形繪制速度。
  • 當某個View發(fā)生變化,它會調用invalidate() 請求重繪,這個函數(shù)從當前View 出發(fā),向上遍歷找到View Tree中所有Dirty的 View 和 ViewGroup, 根據(jù)需要重新生成DisplayList, 并在drawDisplayList() 函數(shù)里執(zhí)行OpenGL命令將其繪制在某個Surface Buffer上。
  • 最后,ViewRootImpl 調用 eglSwapBuffer 通知OpenGL 將繪制的Buffer 在下一個VSync點進行顯示。
  • 注意的是,上面討論的只是一個窗口的流程,而Android是個多窗口的系統(tǒng),窗口之間可能會有重疊,窗口切換會有動畫產生,窗口的顯示和隱藏都有可能會導致資源的分配和釋放,這一切需要有一個全局的服務進行統(tǒng)一的管理,這個服務就是我們大名鼎鼎的Window Manager Service (簡寫 WMS).

    其實Window Manager Service 的工作不僅僅是管理窗口,還會跟很多其他服務打交道,如 InputManager Service, AcitivityManager Service 等等,但本章只討論它在Window Manager 方面的工作,下圖中紅色標記部分。

    ?Layout

    ?首先來看Layout。Layout 是Window Manager Service 重要工作之一,它的流程如下圖所示:

    ?

    • 每個View將期望窗口尺寸交給WMS(WindowManager Service).
    • WMS 將所有的窗口大小以及當前的Overscan區(qū)域傳給WPM (WindowPolicy Manager).
    • WPM根據(jù)用戶配置確定每個Window在最終Display輸出上的位置以及需要分配的Surface大小。
    • 返回這些信息給每個View,他們將在給會的區(qū)域空間里繪圖。

    Android里定義了很多區(qū)域,如下圖所示?

    ??????????????????????????????????????????

    Overscan:
    ??? Overscan 是電視特有的概念,上圖中黃色部分就是Overscan區(qū)域,指的是電視機屏幕四周某些不可見的區(qū)域(因為電視特性,這部分區(qū)域的buffer內容顯示時被丟棄),也意味著如果窗口的某些內容畫在這個區(qū)域里,它在某些電視上就會看不到。為了避免這種情況發(fā)生,通常要求UI不要畫在屏幕的邊角上,而是預留一定的空間。因為Overscan的區(qū)域大小隨著電視不 同而不同,它一般由終端用戶通過UI指定,(比如說GoogleTV里就有確定Overscan大小的應用)。

    OverscanScreen, Screen:?
    ? ? OverscanScreen 是包含Overscan區(qū)域的屏幕大小,而Screen則為去除Overscan區(qū)域后的屏幕區(qū)域, OverscanScreen > Screen.

    Restricted and Unrestricted:
    ? ??某些區(qū)域是被系統(tǒng)保留的,比如說手機屏幕上方的狀態(tài)欄(如圖紙綠色區(qū)域)和下方的導航欄,根據(jù)是否包括這些預留的區(qū)域,Android把區(qū)域分為Unrestricted Area 和 Resctrited Aread, 前者包括這部分預留區(qū)域,后者則不包含, Unrestricted area > Rectricted area。

    mFrame, mDisplayFrame, mContainingFrame
    ? ?
    Frame指的是一片內存區(qū)域, 對應于屏幕上的一塊矩形區(qū)域. mFrame的大小就是Surface的大小, 如上上圖中的藍色區(qū)域. mDisplayFrame 和 mContainingFrame 一般和mFrame 大小一致. mXXX 是Window(ViewRootImpl, Windowstate) 里面定義的成員變量.

    mContentFrame, mVisibleFrame
    ? ?
    一個Surface的所有內容不一定在屏幕上都得到顯示, 與Overscan重疊的部分會被截掉, 系統(tǒng)的其他窗口也會遮擋掉部分區(qū)域 (比如短信窗口,ContentFrame是800x600(沒有Status Bar), 但當輸入法窗口彈出是,變成了800x352), 剩下的區(qū)域稱為Visible Frame, UI內容只有畫在這個區(qū)域里才能確保可見. 所以也稱為Content Frame. mXXX也是Window(ViewRootImpl, WindowState) 里面定義的成員變量.

    Insects
    ? ?
    insets的定義如上圖所示, 用了表示某個Frame的邊緣大小.

    Layout 在WMS 內部的時序如下圖所示,外部調整Overscan參數(shù)或View內部主動調用requestLayout() 都會觸發(fā)WMS的重新layout,layout完成后,WMS會通過IWindow的resized()接口通知ViewRoot, 最終會調用requestLayout(), 并在下一個VSYNC 事件到來時更新。

    。

    ?計算Layout主要有圖中三個紅色的函數(shù)完成,它們代碼很多,涉及到很多計算,但只要對著我們上面給的三個圖來看,不難看出它的意思,本文將不詳細深入。

    Animation

    Animation的原理很簡單,就是定時重繪圖形。下面的類圖中給出了Android跟Animation相關的類。

    Animation:
    ? ? Animation抽象類,里面最重要的一個接口就是applyTranformation, 它的輸入是當前的一個描述進度的浮點數(shù)(0.0 ~ 1.0), 輸出是一個Transformation類對象,這個對象里有兩個重要的成員變量,mAlpha 和 mMatrix, 前者表示下一個動畫點的透明度(用于灰度漸變效果),后者則是一個變形矩陣,通過它可以生成各種各樣的變形效果。Android提供了很多Animation的具體實現(xiàn),比如RotationAnimation, AlphaAnimation 等等,用戶也可以實現(xiàn)自己的Animation類,只需要重載applyTransform 這個接口。注意,Animation類只生成繪制動畫所需的參數(shù)(alpha 或 matrix),不負責完成繪制工作。完成這個工作的是Animator.

    Animator:
    ? ? 控制動畫的‘人’, 它通常通過向定時器Choreographer 注冊一個Runnable對象來實現(xiàn)定時觸發(fā),在回調函數(shù)里它要做兩件事情:1. 從Animation那里獲取新的Transform, 2. 將Transform里的值更新底層參數(shù),為接下來的重繪做準備。動畫可以發(fā)生在Window上,也可以發(fā)生在某個具體的View。前者的動畫會通過SurfaceControl直接在某個Surface上進行操作(會在SurfaceFlinger里詳細描述),比如設置Alpha值。后者則通過OpenGL完成(生成我們前面提過的DisplayList).

    WindowStateAnimator, WindowAnimator,? AppWindowAnimator:
    ??? 針對不同對象的Animator. WindowAnimator, 負責整個屏幕的動畫,比如說轉屏,它提供Runnable實現(xiàn)。WindowStateAnimator, 負責ViewRoot,即某一個窗口的動畫。AppWindowAnimator, 負責應用啟動和退出時候的動畫。這幾個Animator都會提供一個函數(shù),stepAnimationLocked(), 它會完成一個動畫動作的一系列工作,從計算Transformation到更新Surface的Matrix.

    ?

    具體來看一下Window的Animation和View的Animation

  • WindowManagerService 的 scheduleAnimationLocked() 將windowAnimator的mAnimationRunnable 注冊到定時器 Choreographer.
  • 如果應用程序的res/anim/下有xml文件定義animation,在layout過程中,會通過appTransition類的loadAnimation() 函數(shù)將XML轉換成 Animation_Set 對象,它里面可以包含多個Animation。
  • 當下一個VSYNC事件到來,剛才注冊的Callback函數(shù)被調用,即WindowAnimator的mAnimationRunnable,里面調用 animateLocked(), 首先,打開一個SurfaceControl的動畫會話,animationSession。
  • 首先執(zhí)行的動畫是 appWindowAnimator, 如果剛才loadAnimation() 返回的animation不為空,便會走到Animation的getTransform() 獲取動畫的參數(shù),這里可能會同時有多個動畫存在,通過Transform的compose()函數(shù)將它們最終合為一個。
  • 接下來上場的是DisplayContentsAnimator, 它主要用來實現(xiàn)灰度漸變和轉屏動畫。同樣,首先通過stepAnimation() 獲取動畫變形參數(shù),然后通過SurfaceControl將其更新到SrufaceFlinger內部對應的Layer. 這里首先完成的是轉屏的動畫
  • 然后就是每個窗口的動畫。后面跟著的 perpareSurfaceLocked() 則會更新參數(shù)。
  • Wallpaper的動畫。
  • 接下來,就是上面提到的DisplayContentsAnimator的第二部分,通過DimLayer實現(xiàn)漸變效果。
  • Surface的控制完成后,關閉對話。然后scheduleAnimationLocked() 規(guī)劃下一步動畫。
  • 接下來的performDraw()會把所有更新參數(shù)的View,或Surface交給OpenGL或HWcomposer進行處理,于是我們就看到了動畫效果。
  • ?View 的動畫實現(xiàn)步驟與Windows 類似,有興趣的同學可以去看View.java 的 drawAnimation() 函數(shù)。

    ?管理窗口

    WMS 里面管理著各式各樣的窗口, 如下表所示(在WindowManagerService.java 中定義)

    ??類型用途
    mAnimatingAppToken  ArrayList<AppWindowToken>正在動畫中的應用
    mExistingAppTokenArrayList<AppWindowToken>退出但退出動畫還沒有完成的應用。
    mResizingWindowsArrayList<WindowState>尺寸正在改變的窗口,當改變完成后,需要通知應用。
    mFinishedStartingArrayList<AppWindowToken>已經(jīng)完成啟動的應用。
    mPendingRemoveArrayList<WindowState>動畫結束的窗口。
    mLosingFocus?ArrayList<WindowState>?失去焦點的窗口,等待獲得焦點的窗口進行顯示。
    mDestorySurface  ?ArrayList<WindowState>需要釋放Surface的窗口。
    mForceRemoves?ArrayList<WindowState>需要強行關閉的窗口,以釋放內存。
    mWaitingForDrawnArrayList<Pair<WindowState, IRemoteCallback>>等待繪制的窗口
    mRelayoutWhileAnimatingArrayList<WindowState>請求relayout但此時仍然在動畫中的窗口。
    mStrictModeFlashStrictModeFlash一個紅色的背景窗口,用于提示可能存在的內存泄露。
    mCurrentFocus  WindowState當前焦點窗口
    mLastFocusWindowState上一焦點窗口
    mInputMethodTargetWindowState輸入法窗口下面的窗口。
    mInputMethodWindow WindowState輸入法窗口
    mWallpaperTargetWindowState墻紙窗口
    mLowerWallpaperTargetWindowState墻紙切換動畫過程中Z-Order 在下面的窗口
    mHigherWallpaperTargetWindowState墻紙切換動畫過程中Z-Order 在上面的窗口
    ???
    ???

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    可以看到這里大量的用到了隊列,不同的窗口,或同一窗口在不同的階段,可能會出現(xiàn)在不同的隊列里。另外因為WindowManager Service 的服務可能被很多個線程同時調用,在這種復雜的多線程環(huán)境里,通過鎖來實現(xiàn)線程安全非常難以實現(xiàn),一不小心就可能導致死鎖,所以在 WindowManager 內專門有一個執(zhí)行線程(WM Thread)來將所有的服務請求通過消息進行異步處理,實現(xiàn)調用的序列化。隊列是實現(xiàn)異步處理的常用手段。隊列加Looper線程是Android 應用常用的設計模型。

    此外,WindowManager還根據(jù)Window的類型進行了分類(在WindowManager.java),如下表,

    類型常量范圍子類常量值說明例子
    APPLICATION_WINDOW1~99TYPE_BASE_APPLICATION1 ??
    ??TYPE_APPLICATION2?應用窗口?大部分的應用程序窗口
    ??TYPE_APPLICATION_STARTING3?應用程序的Activity顯示之前由系統(tǒng)顯示的窗口?
    ??LAST_APPLICATION_WINDOW 99??
    SUB_WINDOW1000~1999FIRST_SUB_WINDOW1000??
    ??TYPE_APPLICATION_PANEL1000?顯示在母窗口之上,遮擋其下面的應用窗口。?
    ??TYPE_APPLICATION_MEDIA1001?顯示在母窗口之下,如果應用窗口不挖洞,即不可見。SurfaceView,在小窗口顯示時設為MEDIA, 全屏顯示時設為PANEL
    ??TYPE_APPLICATION_SUB_PANEL1002      ?
    ??TYPE_APPLICATION_ATTACHED_DIALOG1003??
    ??TYPE_APPLICATION_MEIDA_OVERLAY1004?用于兩個SurfaceView的合成,如果設為MEDIA,
    則上面的SurfaceView 擋住下面的SurfaceView
    ?
    SYSTEM_WINDOW  2000~2999TYPE_STATUS_BAR  2000頂部的狀態(tài)欄?
    ??TYPE_SEARCH_BAR2001搜索窗口,系統(tǒng)中只能有一個搜索窗口?
    ??TYPE_PHONE2002?電話窗口?
    ??TYPE_SYSTEM_ALERT2003警告窗口,在所有其他窗口之上顯示  電量不足提醒窗口
    ??TYPE_KEYGUARD2004鎖屏界面?
    ??TYPE_TOAST2005短時的文字提醒小窗口?
    ??TYPE_SYSTEM_OVERLAY2006沒有焦點的浮動窗口?
    ??TYPE_PRIORITY_PHONE2007緊急電話窗口,可以顯示在屏保之上?
    ??TYPE_SYSTEM_DIALOG  2008系統(tǒng)信息彈出窗口 ?比如SIM插上后彈出的運營商信息窗口
    ??TYPE_KEYGUARD_DIALOG2009跟KeyGuard綁定的彈出對話框鎖屏時的滑動解鎖窗口
    ??TYPE_SYSTEM_ERROR2010系統(tǒng)錯誤提示窗口 ?ANR 窗口
    ??TYPE_INPUT_METHOD2011輸入法窗口,會擠占當前應用的空間?
    ??TYPE_INPUT_METHOD_DIALOG2012彈出的輸入法窗口,不會擠占當前應用窗口空間,在其之上顯示?
    ??TYPE_WALLPAPER2013?墻紙?
    ??TYPE_STATUS_BAR_PANEL2014從狀態(tài)條下拉的窗口?
    ??TYPE_SECURE_SYSTEM_OVERLAY2015只有系統(tǒng)用戶可以創(chuàng)建的OVERLAY窗口?
    ??TYPE_DRAG2016浮動的可拖動窗口360安全衛(wèi)士的浮動精靈
    ??TYPE_STATUS_BAR_PANEL2017??
    ??TYPE_POINTER2018光標?
    ??TYPE_NAVIGATION_BAR2019??
    ??TYPE_VOLUME_OVERLAY2020音量調節(jié)窗口?
    ??TYPE_BOOT_PROGRESS2021啟動進度,在所有窗口之上?
    ??TYPE_HIDDEN_NAV_CONSUMER2022隱藏的導航欄?
    ??TYPE_DREAM2023屏保動畫?
    ??TYPE_NAVIGATION_BAR_PANEL2024Navigation bar 彈出的窗口比如說應用收集欄
    ??TYPE_UNIVERSAL_BACKGROUND  2025??
    ??TYPE_DISPLAY_OVERLAY2026用于模擬第二顯示設備?
    ??TYPE_MAGNIFICATION2027用于放大局部?
    ??TYPE_RECENTS_OVERLAY2028當前應用窗口,多用戶情況下只顯示在用戶節(jié)目?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    windowManager Service 會根據(jù)窗口的類型值來決定Z-Order (于常量值無關,值大說明是后面Android版本添加的,比如說2025~2028就是4.3 新加的)。比如說SurfaceView.java 里的一個函數(shù),

    public void setZOrderOnTop(boolean onTop) {if (onTop) {mWindowType = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; //PANEL在上面// ensures the surface is placed below the IMEmLayout.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;} else {mWindowType = WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA; //MEDIA類型窗口在應用窗口之下,應用必需挖洞(設Alpha值)才能露出它。mLayout.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;}}

    這些類型最終在WindowManager 內部轉換成幾個Z-Order 值,mBaseLayer, mSubLayer, mAnimationLayer, 分別表明主窗口,子窗口(附加在主窗口之上),和動畫窗口的Z-Order值(越大越在上邊)。不同的窗口類型在不同的硬件產品上有不同的定義,因此它是實現(xiàn)在WindowManagerPolicy里的windowTypeToLayerLw(), 舉PhoneWindowManager 為例,它的ZOrder 順序是:

    Univese background < Wallpaper < Phone < Search Bar < System Dialog < Input Method Window < Keyguard < Volume < System Overlay < Navigation < System Error < ?< Display Overlay< Drag < Pointer < Hidden NAV consumer,?

    所以,我們如果要在手機鎖屏時顯示歌曲播放進度,就必須給這個窗口分配一個大于Keyguard的type,如 system overlay 等。

    一個Window可以有若干個Sub Window, 他們和主窗口的ZOrder關系是

    Media Sublayer(-2) < Media Overlay sublayer (-1) < Main Layer(0) < Attached Dialog (1) < Sub panel Sublayer (2)

    通過 "adb shell dumpsys window" 可以查看系統(tǒng)當前運行的窗口的ZOrder 和 Visibility, 比如下面就是在短信輸入界面下運行“dumpsys" 獲得的結果,

    1 Window #0 Window{4ea4e178 u0 Keyguard}:2 mBaseLayer=121000 mSubLayer=0 mAnimLayer=121000+0=121000 mLastLayer=1210003 mViewVisibility=0x8 mHaveFrame=true mObscured=false4 Window #1 Window{4ea4aa7c u0 InputMethod}:5 mBaseLayer=101000 mSubLayer=0 mAnimLayer=21020+0=21020 mLastLayer=210206 mViewVisibility=0x0 mHaveFrame=true mObscured=false7 Window #2 Window{4ec1a150 u0 com.android.mms/com.android.mms.ui.ComposeMessageActivity}:8 mBaseLayer=21000 mSubLayer=0 mAnimLayer=21015+0=21015 mLastLayer=210159 mViewVisibility=0x0 mHaveFrame=true mObscured=false10 Window #3 Window{4ea7c714 u0 com.android.mms/com.android.mms.ui.ConversationList}:11 mBaseLayer=21000 mSubLayer=0 mAnimLayer=21010+0=21010 mLastLayer=2101512 mViewVisibility=0x8 mHaveFrame=true mObscured=true13 Window #4 Window{4eaedefc u0 com.android.launcher/com.android.launcher2.Launcher}:14 mBaseLayer=21000 mSubLayer=0 mAnimLayer=21005+0=21005 mLastLayer=2101015 mViewVisibility=0x8 mHaveFrame=true mObscured=true16 Window #5 Window{4ea17064 u0 jackpal.androidterm/jackpal.androidterm.Term}:17 mBaseLayer=21000 mSubLayer=0 mAnimLayer=21000+0=21000 mLastLayer=2200018 mViewVisibility=0x8 mHaveFrame=true mObscured=true

    可以看到:

  • 當前只有兩個窗口可見, InputMethod 和 com.android.mms/com.android.mms.ui.ComposeMessageActivity, mViewVisibility = 0 (0在View.java定義是可見), 而其他 mViewVisibility=0x8 (定義在View.java里, 意思是”GONE").
  • InputMethod(mLastLayer=21020) 在 ComposeMessageActivity(mLastLayer=21015) 之上. 細心的同學可能會發(fā)現(xiàn),InputMethod的mBaseLayer = 101000,為什么mLastLayer小那么多?因為mLastLayer才是真正的z-order, 它經(jīng)過了WidowManager的調整。當用戶點擊輸入框,View會通過InputMethodManager 發(fā)送一個showSoftInput命令,經(jīng)過InputManagerService的處理,輸入法窗口(KeyboardView)會被加入到WndowManager Service里,WindowManager Service 會尋找它的目標窗口, 即需要輸入的窗口,(遍歷WindowList 然后根據(jù)窗口的Flags判斷),然后將輸入法窗口的mLayer值改為 目標窗口的mLayer + 5,這樣,輸入法窗口就顯示在了目標窗口之上。在這里,輸入法窗口存在于InputMethodManagerService 的上下文里,而不是某個Activity,所以他可以跟任何需要輸入法的Activity綁定。其他一些應用,比如說PiP(三星的Galaxy S3可以在一個浮動的小窗口里顯示視頻)也是運用了類似的方法來實現(xiàn)的。Android的輸入法是一個非常值得研究的模塊,留到后面探討。
  • 所以,WindowManager Service 是通過調整窗口的mViewVisibility 和 mLayer 值來實現(xiàn)窗口重疊。最后給出跟Z-order相關的類圖。

    ?

    ?圖中序號表示輸入法窗口找到它的目標窗口的過程:

  • WindowManagerService 找到默認輸出(Default Display) 的DisplayContents成員變量。
  • 里面有一個數(shù)組WindowList-mWindows, 按照Z-Order順序保存了當前在這個Display上輸出的所有窗口WindowState。
  • 遍歷所有的WindowState,判斷它的mAppToken是否和輸入法窗口的mAppToken一致。呼起輸入法窗口的窗口會將自己的mAppToken拷貝給它。
  • 相同的Token下,可能有多個窗口,通過WindowToken.windows 或者 AppWindowToken.allAppWindows, 可以找到他們。
  • ?

    WindowManager Service的介紹暫告一段落,它與其他重要的Service,SurfaceFlinger, ActivityManager, InputManager, PowerManager, WatchDog 之間的關系將在其他文章介紹。

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    轉載于:https://www.cnblogs.com/samchen2009/p/3367496.html

    總結

    以上是生活随笔為你收集整理的图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

    对白脏话肉麻粗话av | 久久精品国产大片免费观看 | 丰腴饱满的极品熟妇 | 午夜福利不卡在线视频 | 亚洲国产精品一区二区美利坚 | 婷婷丁香六月激情综合啪 | 国产绳艺sm调教室论坛 | 国产香蕉尹人综合在线观看 | 亚洲欧美日韩成人高清在线一区 | 色诱久久久久综合网ywww | 国产sm调教视频在线观看 | 欧美丰满熟妇xxxx | 午夜嘿嘿嘿影院 | 国产精品多人p群无码 | 精品偷拍一区二区三区在线看 | 亚洲乱码中文字幕在线 | 久久久久亚洲精品男人的天堂 | 中文字幕精品av一区二区五区 | 久久国产精品萌白酱免费 | 色综合久久88色综合天天 | 亚洲精品一区三区三区在线观看 | 爽爽影院免费观看 | 精品国产aⅴ无码一区二区 | 国产精品无码一区二区桃花视频 | 国产午夜手机精彩视频 | 国产在热线精品视频 | 欧美真人作爱免费视频 | 国产精品美女久久久网av | 国产无套粉嫩白浆在线 | 欧美肥老太牲交大战 | 成年美女黄网站色大免费全看 | 大地资源中文第3页 | 日韩av无码一区二区三区 | 亚洲人成无码网www | 久久精品人人做人人综合试看 | 中文字幕av伊人av无码av | 亚洲熟悉妇女xxx妇女av | 全黄性性激高免费视频 | 人妻尝试又大又粗久久 | 亚洲成av人综合在线观看 | 亚洲人成网站免费播放 | 日韩成人一区二区三区在线观看 | 好屌草这里只有精品 | 无码免费一区二区三区 | 国产人妻久久精品二区三区老狼 | 亚洲小说春色综合另类 | 丰满人妻翻云覆雨呻吟视频 | 天天av天天av天天透 | 人人澡人人透人人爽 | 亚洲日韩一区二区 | 国产黑色丝袜在线播放 | 男人扒开女人内裤强吻桶进去 | 国产超碰人人爽人人做人人添 | 亚洲中文字幕成人无码 | 欧美精品在线观看 | 国产精品成人av在线观看 | 精品人妻人人做人人爽夜夜爽 | 国産精品久久久久久久 | 一区二区传媒有限公司 | 强奷人妻日本中文字幕 | 99久久久无码国产aaa精品 | 亚洲成色www久久网站 | 国产午夜福利亚洲第一 | 乱码午夜-极国产极内射 | 大地资源中文第3页 | 玩弄少妇高潮ⅹxxxyw | 内射白嫩少妇超碰 | 国产区女主播在线观看 | 日本www一道久久久免费榴莲 | 亚洲中文字幕va福利 | 久久午夜无码鲁丝片秋霞 | av香港经典三级级 在线 | 中文字幕色婷婷在线视频 | 国产极品美女高潮无套在线观看 | 俺去俺来也www色官网 | 日日麻批免费40分钟无码 | 国产av剧情md精品麻豆 | 亚洲国产日韩a在线播放 | 亚洲狠狠婷婷综合久久 | 成 人 网 站国产免费观看 | 亚洲自偷自偷在线制服 | 精品无码国产自产拍在线观看蜜 | 欧美自拍另类欧美综合图片区 | 美女扒开屁股让男人桶 | 麻豆成人精品国产免费 | 亚洲成a人片在线观看无码 | 久久久久久久久蜜桃 | 国产精品亚洲综合色区韩国 | 人妻熟女一区 | 亚洲 a v无 码免 费 成 人 a v | 色窝窝无码一区二区三区色欲 | 欧美丰满少妇xxxx性 | 九九久久精品国产免费看小说 | 人人妻人人澡人人爽欧美一区九九 | 风流少妇按摩来高潮 | 精品少妇爆乳无码av无码专区 | 国产精品高潮呻吟av久久4虎 | 熟妇人妻中文av无码 | 欧美日韩一区二区三区自拍 | 亚洲精品鲁一鲁一区二区三区 | 成人欧美一区二区三区黑人 | 国产猛烈高潮尖叫视频免费 | 国产综合久久久久鬼色 | 蜜臀av无码人妻精品 | 国产亚洲精品久久久久久 | 内射巨臀欧美在线视频 | 无码av免费一区二区三区试看 | 中文精品久久久久人妻不卡 | 日本精品久久久久中文字幕 | 免费播放一区二区三区 | 人妻少妇被猛烈进入中文字幕 | 国内精品人妻无码久久久影院 | 日韩亚洲欧美精品综合 | 精品乱子伦一区二区三区 | 欧洲精品码一区二区三区免费看 | 国产午夜无码视频在线观看 | 国产欧美熟妇另类久久久 | 亚无码乱人伦一区二区 | 性生交片免费无码看人 | 国产精品99爱免费视频 | 久久99精品国产.久久久久 | 久久国产精品_国产精品 | 无码国内精品人妻少妇 | 久热国产vs视频在线观看 | 国产亚洲欧美日韩亚洲中文色 | 51国偷自产一区二区三区 | 狠狠色噜噜狠狠狠7777奇米 | 少妇性荡欲午夜性开放视频剧场 | 亚洲成熟女人毛毛耸耸多 | 欧洲极品少妇 | 一二三四社区在线中文视频 | 色欲人妻aaaaaaa无码 | 成人无码视频在线观看网站 | 精品熟女少妇av免费观看 | 无码精品国产va在线观看dvd | 成人一在线视频日韩国产 | 白嫩日本少妇做爰 | 在线天堂新版最新版在线8 | 亚洲男人av天堂午夜在 | 女高中生第一次破苞av | 欧美丰满少妇xxxx性 | 性欧美熟妇videofreesex | 亚洲精品久久久久中文第一幕 | 成人免费视频一区二区 | 国产精品va在线播放 | 欧美午夜特黄aaaaaa片 | 日韩无码专区 | 久久精品女人天堂av免费观看 | 中文字幕精品av一区二区五区 | 久久久精品欧美一区二区免费 | 中文久久乱码一区二区 | 女高中生第一次破苞av | 成人无码精品一区二区三区 | 18禁止看的免费污网站 | 三级4级全黄60分钟 | 风流少妇按摩来高潮 | 久久久无码中文字幕久... | 少妇性l交大片 | 欧美真人作爱免费视频 | 扒开双腿疯狂进出爽爽爽视频 | 色婷婷欧美在线播放内射 | 美女黄网站人色视频免费国产 | 国产极品视觉盛宴 | 欧美freesex黑人又粗又大 | 强开小婷嫩苞又嫩又紧视频 | 亚洲中文无码av永久不收费 | 亚洲另类伦春色综合小说 | 扒开双腿疯狂进出爽爽爽视频 | a片免费视频在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | 久久99精品国产麻豆 | 少妇的肉体aa片免费 | 亚洲欧美日韩成人高清在线一区 | 国产在线aaa片一区二区99 | 永久免费精品精品永久-夜色 | 小sao货水好多真紧h无码视频 | 欧美乱妇无乱码大黄a片 | 人人妻人人澡人人爽人人精品 | 精品欧美一区二区三区久久久 | 少妇被黑人到高潮喷出白浆 | 亚洲国产精品久久久天堂 | 日韩 欧美 动漫 国产 制服 | 丁香花在线影院观看在线播放 | 亚洲国产av精品一区二区蜜芽 | 日本护士xxxxhd少妇 | 未满成年国产在线观看 | 国产偷抇久久精品a片69 | 欧美变态另类xxxx | 亚洲一区二区三区在线观看网站 | 中文字幕日产无线码一区 | 中文字幕乱码亚洲无线三区 | 欧美丰满熟妇xxxx性ppx人交 | 好男人www社区 | 99精品视频在线观看免费 | 国内精品久久久久久中文字幕 | 东京热无码av男人的天堂 | 成人无码精品一区二区三区 | 天堂久久天堂av色综合 | 欧洲极品少妇 | √天堂资源地址中文在线 | 欧美 亚洲 国产 另类 | 国产办公室秘书无码精品99 | 亚洲码国产精品高潮在线 | 精品国产aⅴ无码一区二区 | 国产激情一区二区三区 | 久久久久av无码免费网 | 国产女主播喷水视频在线观看 | 精品无码一区二区三区的天堂 | 国产97人人超碰caoprom | 又大又紧又粉嫩18p少妇 | 精品久久久久久人妻无码中文字幕 | 伊人久久大香线蕉av一区二区 | 国产 浪潮av性色四虎 | 亚洲欧美综合区丁香五月小说 | 国产sm调教视频在线观看 | 少妇太爽了在线观看 | 亚洲综合伊人久久大杳蕉 | 中文字幕乱码人妻二区三区 | 粗大的内捧猛烈进出视频 | 国产精品福利视频导航 | 欧美刺激性大交 | а√资源新版在线天堂 | 草草网站影院白丝内射 | 中文毛片无遮挡高清免费 | 精品国产一区二区三区av 性色 | 国产激情精品一区二区三区 | 精品乱码久久久久久久 | 国内精品久久毛片一区二区 | 中文字幕精品av一区二区五区 | 无码一区二区三区在线 | 婷婷综合久久中文字幕蜜桃三电影 | 天天做天天爱天天爽综合网 | 国产亚洲精品精品国产亚洲综合 | 丝袜足控一区二区三区 | 少妇高潮一区二区三区99 | 婷婷五月综合激情中文字幕 | 国产极品视觉盛宴 | 中文字幕乱妇无码av在线 | 亚洲欧洲日本无在线码 | 永久黄网站色视频免费直播 | 免费看男女做好爽好硬视频 | 国产深夜福利视频在线 | 亚洲成a人片在线观看无码 | 国产婷婷色一区二区三区在线 | 亚洲男人av天堂午夜在 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产两女互慰高潮视频在线观看 | 在线天堂新版最新版在线8 | 妺妺窝人体色www在线小说 | 露脸叫床粗话东北少妇 | 亚洲日韩中文字幕在线播放 | 国产精品多人p群无码 | 日韩在线不卡免费视频一区 | 日本护士毛茸茸高潮 | 久9re热视频这里只有精品 | 久9re热视频这里只有精品 | 亚洲精品久久久久中文第一幕 | 成在人线av无码免费 | 国内精品九九久久久精品 | 一本色道婷婷久久欧美 | 日本一卡二卡不卡视频查询 | 天天燥日日燥 | 97夜夜澡人人爽人人喊中国片 | 狠狠色色综合网站 | 亚洲国产精品久久人人爱 | 波多野结衣 黑人 | 色综合久久中文娱乐网 | 亚洲欧美日韩国产精品一区二区 | 日本又色又爽又黄的a片18禁 | 青草青草久热国产精品 | 日本一区二区三区免费高清 | 国产成人午夜福利在线播放 | 久久天天躁夜夜躁狠狠 | 精品国产一区二区三区四区 | 嫩b人妻精品一区二区三区 | 中文字幕无码视频专区 | 精品国产一区av天美传媒 | 日韩精品无码免费一区二区三区 | 亚洲色欲色欲天天天www | 无码吃奶揉捏奶头高潮视频 | 精品久久久久久亚洲精品 | 美女毛片一区二区三区四区 | 人人妻人人澡人人爽欧美精品 | 97人妻精品一区二区三区 | 亚洲精品综合一区二区三区在线 | 久久久久免费精品国产 | 国产精品成人av在线观看 | 无码一区二区三区在线 | 亚洲精品国产第一综合99久久 | 欧美成人家庭影院 | 暴力强奷在线播放无码 | 国产av人人夜夜澡人人爽麻豆 | 精品欧美一区二区三区久久久 | 亚洲精品中文字幕久久久久 | 国产精品毛片一区二区 | 一本久久a久久精品亚洲 | 国产麻豆精品一区二区三区v视界 | 久久精品中文字幕大胸 | 久久久久av无码免费网 | 人人爽人人爽人人片av亚洲 | 亚洲国产高清在线观看视频 | 国产av一区二区三区最新精品 | 熟妇女人妻丰满少妇中文字幕 | 一本精品99久久精品77 | 波多野结衣av在线观看 | 日本精品久久久久中文字幕 | 曰本女人与公拘交酡免费视频 | 亚洲日韩av片在线观看 | 亚洲伊人久久精品影院 | 日日干夜夜干 | 久久久国产精品无码免费专区 | 夜精品a片一区二区三区无码白浆 | 曰韩无码二三区中文字幕 | 午夜成人1000部免费视频 | 国产精品二区一区二区aⅴ污介绍 | 欧美喷潮久久久xxxxx | 中文字幕亚洲情99在线 | 亚洲精品中文字幕乱码 | 大胆欧美熟妇xx | 亚洲乱亚洲乱妇50p | 日本爽爽爽爽爽爽在线观看免 | 国产成人无码专区 | 性啪啪chinese东北女人 | 人人妻人人澡人人爽欧美精品 | 日日麻批免费40分钟无码 | 亚洲人成无码网www | 任你躁在线精品免费 | 澳门永久av免费网站 | 国产肉丝袜在线观看 | 国产精品永久免费视频 | 国产9 9在线 | 中文 | 亚洲七七久久桃花影院 | 99国产欧美久久久精品 | 亚洲午夜无码久久 | 伊人久久婷婷五月综合97色 | 激情内射亚州一区二区三区爱妻 | 黑人玩弄人妻中文在线 | 久久99精品久久久久久动态图 | 国产精品无码成人午夜电影 | 在线精品国产一区二区三区 | 又大又紧又粉嫩18p少妇 | 精品厕所偷拍各类美女tp嘘嘘 | 人妻与老人中文字幕 | 鲁鲁鲁爽爽爽在线视频观看 | 久久精品国产一区二区三区肥胖 | 免费无码的av片在线观看 | 日欧一片内射va在线影院 | 人人爽人人澡人人高潮 | 欧洲极品少妇 | 午夜无码区在线观看 | 99久久久无码国产aaa精品 | 天堂久久天堂av色综合 | 在线欧美精品一区二区三区 | 国产精品a成v人在线播放 | 国产精品欧美成人 | 成人aaa片一区国产精品 | 成人aaa片一区国产精品 | 国产免费久久久久久无码 | 欧美人与牲动交xxxx | 草草网站影院白丝内射 | 中文字幕人妻丝袜二区 | 成人无码视频免费播放 | 人人妻人人藻人人爽欧美一区 | 亚洲成a人一区二区三区 | 在线观看欧美一区二区三区 | 美女极度色诱视频国产 | 国产一精品一av一免费 | 亚洲aⅴ无码成人网站国产app | 日韩精品无码一区二区中文字幕 | 18禁黄网站男男禁片免费观看 | 久久久国产精品无码免费专区 | 精品成在人线av无码免费看 | 无码人妻久久一区二区三区不卡 | 国内精品九九久久久精品 | 久久久亚洲欧洲日产国码αv | 亚洲国产欧美国产综合一区 | 精品人人妻人人澡人人爽人人 | 亚洲国产高清在线观看视频 | 日日躁夜夜躁狠狠躁 | 亚洲国产精品成人久久蜜臀 | 一本无码人妻在中文字幕免费 | 少妇邻居内射在线 | 国语精品一区二区三区 | 99久久人妻精品免费一区 | 国产精品资源一区二区 | 国产精品亚洲一区二区三区喷水 | 久久99精品久久久久久 | 18黄暴禁片在线观看 | 老太婆性杂交欧美肥老太 | 最新国产乱人伦偷精品免费网站 | 国产人妻久久精品二区三区老狼 | 国产午夜手机精彩视频 | 美女毛片一区二区三区四区 | 国产在线一区二区三区四区五区 | 波多野结衣av在线观看 | 日产精品高潮呻吟av久久 | 丰满少妇弄高潮了www | 麻豆国产丝袜白领秘书在线观看 | 波多野结衣aⅴ在线 | 爽爽影院免费观看 | 欧美人与牲动交xxxx | 日韩精品无码免费一区二区三区 | 婷婷五月综合缴情在线视频 | 国产人妻精品一区二区三区不卡 | 国产亚洲精品久久久久久久久动漫 | 亚洲色成人中文字幕网站 | 高清不卡一区二区三区 | 欧美日韩精品 | 国精品人妻无码一区二区三区蜜柚 | 窝窝午夜理论片影院 | 亚洲成av人在线观看网址 | 美女毛片一区二区三区四区 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久综合香蕉国产蜜臀av | 天堂在线观看www | 国产亚洲精品久久久久久国模美 | 亚洲人成影院在线观看 | 日韩人妻无码一区二区三区久久99 | 丰满人妻翻云覆雨呻吟视频 | 老熟女重囗味hdxx69 | 乱人伦中文视频在线观看 | 男女爱爱好爽视频免费看 | 人人妻人人澡人人爽人人精品 | 97久久精品无码一区二区 | 国产又爽又黄又刺激的视频 | 日欧一片内射va在线影院 | 一区二区三区乱码在线 | 欧洲 | 岛国片人妻三上悠亚 | 无码精品人妻一区二区三区av | 久久精品女人天堂av免费观看 | 亚洲 日韩 欧美 成人 在线观看 | 又色又爽又黄的美女裸体网站 | 久久伊人色av天堂九九小黄鸭 | 97资源共享在线视频 | 乱码午夜-极国产极内射 | 欧美日韩亚洲国产精品 | 色一情一乱一伦一区二区三欧美 | 国精产品一区二区三区 | 精品一区二区不卡无码av | 兔费看少妇性l交大片免费 | 久久午夜无码鲁丝片秋霞 | 国产成人人人97超碰超爽8 | 人人妻人人澡人人爽精品欧美 | 亚洲精品一区二区三区在线观看 | 精品人妻人人做人人爽夜夜爽 | 精品国产一区av天美传媒 | 在教室伦流澡到高潮hnp视频 | 在线看片无码永久免费视频 | 久久久无码中文字幕久... | 精品一区二区不卡无码av | 亚洲中文字幕va福利 | 天天爽夜夜爽夜夜爽 | 免费无码午夜福利片69 | 秋霞成人午夜鲁丝一区二区三区 | 丰满少妇高潮惨叫视频 | 乱码av麻豆丝袜熟女系列 | 全黄性性激高免费视频 | 亚洲第一无码av无码专区 | 一本久久伊人热热精品中文字幕 | 无码一区二区三区在线观看 | 国产成人无码av一区二区 | 国产av一区二区三区最新精品 | 无码毛片视频一区二区本码 | 国产乱码精品一品二品 | 在教室伦流澡到高潮hnp视频 | 欧美国产日韩久久mv | 中文字幕乱码中文乱码51精品 | 蜜臀av无码人妻精品 | 国产精品无码永久免费888 | 国产精品人妻一区二区三区四 | 精品成在人线av无码免费看 | 亚洲午夜福利在线观看 | 欧美激情综合亚洲一二区 | 精品久久久无码中文字幕 | 免费乱码人妻系列无码专区 | 亚洲另类伦春色综合小说 | 久久久国产一区二区三区 | 久久熟妇人妻午夜寂寞影院 | av香港经典三级级 在线 | 免费无码av一区二区 | 亚洲 欧美 激情 小说 另类 | 夜精品a片一区二区三区无码白浆 | 国产成人亚洲综合无码 | 成 人影片 免费观看 | 2019午夜福利不卡片在线 | 日日天日日夜日日摸 | 日韩人妻少妇一区二区三区 | 亚洲乱码日产精品bd | 亚洲七七久久桃花影院 | 激情人妻另类人妻伦 | 天天做天天爱天天爽综合网 | 精品午夜福利在线观看 | 婷婷五月综合激情中文字幕 | 亚洲成a人片在线观看无码 | 欧美野外疯狂做受xxxx高潮 | 男女下面进入的视频免费午夜 | 久久无码中文字幕免费影院蜜桃 | 国产激情一区二区三区 | 麻豆国产丝袜白领秘书在线观看 | 久久久婷婷五月亚洲97号色 | 一本久久伊人热热精品中文字幕 | 福利一区二区三区视频在线观看 | 国产精品亚洲lv粉色 | 丰满肥臀大屁股熟妇激情视频 | 久久久久久久女国产乱让韩 | 欧美精品免费观看二区 | 久久久国产精品无码免费专区 | 色老头在线一区二区三区 | 四虎4hu永久免费 | 国产深夜福利视频在线 | 国产亚洲欧美在线专区 | 青青久在线视频免费观看 | 国产绳艺sm调教室论坛 | 成人精品一区二区三区中文字幕 | 亚洲一区二区三区国产精华液 | 国产综合在线观看 | 18禁黄网站男男禁片免费观看 | 99久久人妻精品免费二区 | 久久aⅴ免费观看 | 亚洲区欧美区综合区自拍区 | 狠狠躁日日躁夜夜躁2020 | 免费观看黄网站 | 久久国产36精品色熟妇 | 蜜臀aⅴ国产精品久久久国产老师 | 精品国产青草久久久久福利 | 久久久久99精品成人片 | 九月婷婷人人澡人人添人人爽 | ass日本丰满熟妇pics | 中国大陆精品视频xxxx | 欧美丰满熟妇xxxx | 男女下面进入的视频免费午夜 | 好爽又高潮了毛片免费下载 | 日本熟妇乱子伦xxxx | 无码吃奶揉捏奶头高潮视频 | 理论片87福利理论电影 | 国产成人精品三级麻豆 | 初尝人妻少妇中文字幕 | 色综合视频一区二区三区 | 蜜桃视频插满18在线观看 | 俺去俺来也www色官网 | 亚洲欧美国产精品专区久久 | 无码毛片视频一区二区本码 | 亚洲熟悉妇女xxx妇女av | 亚洲色偷偷男人的天堂 | 国内精品人妻无码久久久影院 | 国产午夜无码视频在线观看 | 377p欧洲日本亚洲大胆 | 东京一本一道一二三区 | 无码国产乱人伦偷精品视频 | 精品午夜福利在线观看 | 国产亚洲精品久久久久久国模美 | 国产精品久久福利网站 | 日本乱偷人妻中文字幕 | 国产精品香蕉在线观看 | 国产精品无码久久av | 天天拍夜夜添久久精品大 | 扒开双腿吃奶呻吟做受视频 | 亚洲另类伦春色综合小说 | 97无码免费人妻超级碰碰夜夜 | 欧美精品国产综合久久 | 宝宝好涨水快流出来免费视频 | 成在人线av无码免观看麻豆 | 精品熟女少妇av免费观看 | 成年美女黄网站色大免费视频 | 最新国产乱人伦偷精品免费网站 | 精品国产一区二区三区av 性色 | 呦交小u女精品视频 | 国产女主播喷水视频在线观看 | 99精品久久毛片a片 | 麻豆人妻少妇精品无码专区 | 丰满岳乱妇在线观看中字无码 | 亚洲欧洲中文日韩av乱码 | 国产精品人妻一区二区三区四 | 国产成人无码专区 | 亚洲啪av永久无码精品放毛片 | 撕开奶罩揉吮奶头视频 | 日日摸日日碰夜夜爽av | 精品成在人线av无码免费看 | 日本精品久久久久中文字幕 | 亚洲无人区一区二区三区 | 国产乱人伦偷精品视频 | 成人精品一区二区三区中文字幕 | 亚洲欧美综合区丁香五月小说 | 一本久道高清无码视频 | 国产无套内射久久久国产 | 三上悠亚人妻中文字幕在线 | 国产精品毛多多水多 | 久久国产精品_国产精品 | 荫蒂添的好舒服视频囗交 | 亚洲啪av永久无码精品放毛片 | 午夜精品久久久久久久 | 欧美兽交xxxx×视频 | 精品无码国产一区二区三区av | 无码福利日韩神码福利片 | 欧美日韩视频无码一区二区三 | 日韩人妻无码一区二区三区久久99 | 丰满人妻精品国产99aⅴ | 亚洲欧美日韩综合久久久 | 中文字幕无码免费久久99 | 精品国产麻豆免费人成网站 | 国产激情艳情在线看视频 | 亚洲日本va中文字幕 | 欧美性猛交xxxx富婆 | 国产一区二区三区影院 | 一二三四在线观看免费视频 | av香港经典三级级 在线 | 大地资源中文第3页 | 岛国片人妻三上悠亚 | 无码精品人妻一区二区三区av | 乱码午夜-极国产极内射 | 亚洲一区av无码专区在线观看 | 亚洲人亚洲人成电影网站色 | 国产精品第一区揄拍无码 | 亚洲欧洲日本无在线码 | 蜜桃视频韩日免费播放 | 亚洲午夜久久久影院 | 国产精品igao视频网 | 欧美变态另类xxxx | 国内综合精品午夜久久资源 | 四虎国产精品免费久久 | 波多野结衣一区二区三区av免费 | 亚洲 a v无 码免 费 成 人 a v | 亚洲中文字幕无码中文字在线 | 午夜福利试看120秒体验区 | 中文字幕日产无线码一区 | 性欧美大战久久久久久久 | 久久综合给合久久狠狠狠97色 | 黑人巨大精品欧美一区二区 | 骚片av蜜桃精品一区 | 欧美 丝袜 自拍 制服 另类 | 欧美亚洲国产一区二区三区 | 国内精品久久久久久中文字幕 | 国产综合色产在线精品 | 久久久久成人片免费观看蜜芽 | 亚洲欧美色中文字幕在线 | 国产亚洲美女精品久久久2020 | 国产在线无码精品电影网 | 波多野结衣av在线观看 | 99在线 | 亚洲 | 乱码av麻豆丝袜熟女系列 | 成人精品视频一区二区三区尤物 | 国产片av国语在线观看 | 成人免费视频在线观看 | 撕开奶罩揉吮奶头视频 | 超碰97人人做人人爱少妇 | 免费观看激色视频网站 | 久久亚洲精品成人无码 | 国产成人无码av片在线观看不卡 | 亚洲а∨天堂久久精品2021 | 国产精品久久久久无码av色戒 | 精品无人国产偷自产在线 | 红桃av一区二区三区在线无码av | 夜夜躁日日躁狠狠久久av | 亚洲大尺度无码无码专区 | 久久久国产一区二区三区 | 久久久中文字幕日本无吗 | 十八禁真人啪啪免费网站 | 男女性色大片免费网站 | 对白脏话肉麻粗话av | 丰满人妻翻云覆雨呻吟视频 | 人妻与老人中文字幕 | 四虎影视成人永久免费观看视频 | 亚洲啪av永久无码精品放毛片 | 无码纯肉视频在线观看 | 精品亚洲成av人在线观看 | 四虎影视成人永久免费观看视频 | 亚洲日韩一区二区 | 亚洲精品成人av在线 | 高潮毛片无遮挡高清免费视频 | 97久久国产亚洲精品超碰热 | 鲁鲁鲁爽爽爽在线视频观看 | 成人综合网亚洲伊人 | 激情五月综合色婷婷一区二区 | 久久亚洲日韩精品一区二区三区 | 乱中年女人伦av三区 | 日日躁夜夜躁狠狠躁 | 亚洲一区二区三区在线观看网站 | 狠狠躁日日躁夜夜躁2020 | 欧美人与禽zoz0性伦交 | 久9re热视频这里只有精品 | 亚洲成熟女人毛毛耸耸多 | 妺妺窝人体色www婷婷 | 男女猛烈xx00免费视频试看 | 欧美人与动性行为视频 | 欧美性色19p | 曰本女人与公拘交酡免费视频 | 精品亚洲韩国一区二区三区 | аⅴ资源天堂资源库在线 | 久久国产精品偷任你爽任你 | 国产极品视觉盛宴 | 亚洲国产精华液网站w | 亚洲热妇无码av在线播放 | 男女下面进入的视频免费午夜 | 国产精品久久久久久久9999 | 精品国产aⅴ无码一区二区 | 黑森林福利视频导航 | 最新版天堂资源中文官网 | 国产成人无码午夜视频在线观看 | 亚洲日韩精品欧美一区二区 | 国产激情无码一区二区 | 蜜桃臀无码内射一区二区三区 | 亚洲精品成a人在线观看 | 未满小14洗澡无码视频网站 | 国产无遮挡又黄又爽免费视频 | 97资源共享在线视频 | 熟妇人妻无码xxx视频 | 久久国产精品精品国产色婷婷 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 少妇人妻大乳在线视频 | 国产内射爽爽大片视频社区在线 | 漂亮人妻洗澡被公强 日日躁 | 欧美成人高清在线播放 | 人妻中文无码久热丝袜 | 中文字幕精品av一区二区五区 | 久热国产vs视频在线观看 | 在教室伦流澡到高潮hnp视频 | 无码人妻黑人中文字幕 | 国产艳妇av在线观看果冻传媒 | 国产精品久久久久无码av色戒 | 亚洲精品一区二区三区在线观看 | 国产尤物精品视频 | 日本熟妇乱子伦xxxx | 精品厕所偷拍各类美女tp嘘嘘 | 狠狠色色综合网站 | 西西人体www44rt大胆高清 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲一区二区三区无码久久 | 鲁鲁鲁爽爽爽在线视频观看 | 国产精品.xx视频.xxtv | 精品人妻人人做人人爽 | 国产亚洲欧美日韩亚洲中文色 | 牲欲强的熟妇农村老妇女视频 | 日本www一道久久久免费榴莲 | 乱码av麻豆丝袜熟女系列 | 乱中年女人伦av三区 | 国产偷抇久久精品a片69 | 夜夜影院未满十八勿进 | 又大又黄又粗又爽的免费视频 | 在线精品亚洲一区二区 | 亚洲理论电影在线观看 | 成人精品视频一区二区 | 国产日产欧产精品精品app | 美女黄网站人色视频免费国产 | 久久99精品国产麻豆蜜芽 | а√资源新版在线天堂 | 日本xxxx色视频在线观看免费 | 一二三四社区在线中文视频 | 久久国产精品精品国产色婷婷 | 亚洲精品美女久久久久久久 | 亚无码乱人伦一区二区 | 鲁一鲁av2019在线 | 亚洲人成无码网www | 免费人成网站视频在线观看 | 国内综合精品午夜久久资源 | 熟女体下毛毛黑森林 | 国产精品亚洲а∨无码播放麻豆 | 国产高清不卡无码视频 | 国产精品a成v人在线播放 | 国产农村妇女高潮大叫 | 日日麻批免费40分钟无码 | 天堂亚洲免费视频 | 性欧美牲交xxxxx视频 | 暴力强奷在线播放无码 | 女人被爽到呻吟gif动态图视看 | 亚洲精品www久久久 | 国产精品爱久久久久久久 | 色老头在线一区二区三区 | 久久 国产 尿 小便 嘘嘘 | 无遮无挡爽爽免费视频 | 丁香啪啪综合成人亚洲 | 装睡被陌生人摸出水好爽 | 国产综合在线观看 | 在线观看国产午夜福利片 | 亚洲国产综合无码一区 | 偷窥村妇洗澡毛毛多 | 一本色道久久综合亚洲精品不卡 | 午夜福利一区二区三区在线观看 | 中文亚洲成a人片在线观看 | 日日摸天天摸爽爽狠狠97 | 国产熟女一区二区三区四区五区 | 岛国片人妻三上悠亚 | 国产乱人偷精品人妻a片 | 国产亚洲精品精品国产亚洲综合 | 丁香啪啪综合成人亚洲 | 成熟女人特级毛片www免费 | 国产超级va在线观看视频 | 日韩在线不卡免费视频一区 | 成人毛片一区二区 | 大屁股大乳丰满人妻 | 国产综合在线观看 | 少妇的肉体aa片免费 | 小sao货水好多真紧h无码视频 | 欧美第一黄网免费网站 | 亚洲精品中文字幕 | 暴力强奷在线播放无码 | 久激情内射婷内射蜜桃人妖 | 99久久久无码国产精品免费 | 欧美性猛交内射兽交老熟妇 | 免费播放一区二区三区 | 亚洲va欧美va天堂v国产综合 | 人妻少妇精品无码专区动漫 | 久久精品中文字幕一区 | 天堂а√在线地址中文在线 | 日日摸天天摸爽爽狠狠97 | 正在播放东北夫妻内射 | 人妻尝试又大又粗久久 | 婷婷五月综合激情中文字幕 | 性色欲情网站iwww九文堂 | 狂野欧美激情性xxxx | 亚洲の无码国产の无码步美 | 久久精品中文字幕大胸 | 欧美熟妇另类久久久久久不卡 | 久久成人a毛片免费观看网站 | 中文无码精品a∨在线观看不卡 | 网友自拍区视频精品 | 中文字幕无码av波多野吉衣 | 国产精品久久久久7777 | 国产成人无码区免费内射一片色欲 | 成熟女人特级毛片www免费 | 久久精品人人做人人综合 | 精品亚洲韩国一区二区三区 | 麻豆人妻少妇精品无码专区 | 久久国产精品萌白酱免费 | 国产卡一卡二卡三 | 成人精品一区二区三区中文字幕 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 99精品视频在线观看免费 | 亚洲精品久久久久avwww潮水 | 无遮挡国产高潮视频免费观看 | 麻豆果冻传媒2021精品传媒一区下载 | 久久人人97超碰a片精品 | 国产香蕉尹人视频在线 | 久久综合狠狠综合久久综合88 | 亚洲成av人片在线观看无码不卡 | 国产又爽又黄又刺激的视频 | 精品国精品国产自在久国产87 | 97色伦图片97综合影院 | 99久久无码一区人妻 | 国产精品久久久久无码av色戒 | 亚洲人亚洲人成电影网站色 | 亚洲国产精品一区二区美利坚 | 国产黄在线观看免费观看不卡 | 日韩亚洲欧美中文高清在线 | 少妇性荡欲午夜性开放视频剧场 | 曰韩无码二三区中文字幕 | 日日天日日夜日日摸 | 97夜夜澡人人爽人人喊中国片 | 国产三级久久久精品麻豆三级 | 久久精品人人做人人综合 | 国产熟妇另类久久久久 | 久久久久亚洲精品男人的天堂 | 人妻互换免费中文字幕 | 狠狠亚洲超碰狼人久久 | 亚洲欧美国产精品久久 | 国产精品无码一区二区桃花视频 | 国产精品无套呻吟在线 | 久久国产精品精品国产色婷婷 | 小泽玛莉亚一区二区视频在线 | 欧美日韩在线亚洲综合国产人 | 中文字幕亚洲情99在线 | 欧美日韩亚洲国产精品 | 帮老师解开蕾丝奶罩吸乳网站 | 日韩人妻少妇一区二区三区 | 国产精品人妻一区二区三区四 | 亚洲熟妇色xxxxx欧美老妇 | 国产精品久久久久久久影院 | 欧美成人午夜精品久久久 | 国产精品人妻一区二区三区四 | 岛国片人妻三上悠亚 | 少妇无套内谢久久久久 | 久久精品国产大片免费观看 | 秋霞成人午夜鲁丝一区二区三区 | 99精品无人区乱码1区2区3区 | 国产精品怡红院永久免费 | 亚洲欧美色中文字幕在线 | 亚洲日韩av一区二区三区四区 | 精品国产成人一区二区三区 | 白嫩日本少妇做爰 | 久久午夜无码鲁丝片 | 人人爽人人澡人人人妻 | 97精品人妻一区二区三区香蕉 | 99久久人妻精品免费二区 | 久久精品女人天堂av免费观看 | 色老头在线一区二区三区 | 日产精品高潮呻吟av久久 | 成人无码视频免费播放 | 久久久久久久人妻无码中文字幕爆 | 无码人妻av免费一区二区三区 | 国产亚洲精品久久久久久大师 | 麻豆果冻传媒2021精品传媒一区下载 | 成人影院yy111111在线观看 | 九九久久精品国产免费看小说 | 午夜福利电影 | 成 人影片 免费观看 | 人妻与老人中文字幕 | 大肉大捧一进一出好爽视频 | 国产猛烈高潮尖叫视频免费 | 亚洲国产日韩a在线播放 | 水蜜桃亚洲一二三四在线 | 久久无码中文字幕免费影院蜜桃 | 亚洲欧美日韩成人高清在线一区 | 领导边摸边吃奶边做爽在线观看 | 亚洲国产精品美女久久久久 | 成人一在线视频日韩国产 | 国产人妻精品一区二区三区 | 色婷婷久久一区二区三区麻豆 | 中文字幕av无码一区二区三区电影 | 久久99精品久久久久久动态图 | 天天拍夜夜添久久精品 | 色偷偷人人澡人人爽人人模 | 亚洲综合在线一区二区三区 | 久久久久久九九精品久 | 成 人 网 站国产免费观看 | 99久久久无码国产精品免费 | 精品久久综合1区2区3区激情 | 久久综合香蕉国产蜜臀av | 久久亚洲日韩精品一区二区三区 | 中文字幕无线码免费人妻 | 国产明星裸体无码xxxx视频 | 伊人久久大香线蕉av一区二区 | 成熟女人特级毛片www免费 | 成人免费视频视频在线观看 免费 | 一本久久伊人热热精品中文字幕 | 自拍偷自拍亚洲精品10p | 亚洲精品综合五月久久小说 | 无码国产乱人伦偷精品视频 | 久激情内射婷内射蜜桃人妖 | 青春草在线视频免费观看 | 国产精品无套呻吟在线 | 国产成人无码区免费内射一片色欲 | 精品无码一区二区三区的天堂 | 精品成在人线av无码免费看 | 性欧美牲交在线视频 | 无码人妻精品一区二区三区不卡 | 少妇高潮喷潮久久久影院 | 久久zyz资源站无码中文动漫 | 日日鲁鲁鲁夜夜爽爽狠狠 | 成人一区二区免费视频 | 婷婷色婷婷开心五月四房播播 | 国产麻豆精品精东影业av网站 | 亚洲中文字幕无码中字 | 欧美兽交xxxx×视频 | 亚洲乱码国产乱码精品精 | 风流少妇按摩来高潮 | 亚洲国产精品一区二区美利坚 | 精品欧美一区二区三区久久久 | 国产在线一区二区三区四区五区 | 久久精品99久久香蕉国产色戒 | 白嫩日本少妇做爰 | 国产精品视频免费播放 | 成人免费无码大片a毛片 | 少妇厨房愉情理9仑片视频 | www国产亚洲精品久久久日本 | 午夜精品久久久久久久久 | 国产色在线 | 国产 | 18精品久久久无码午夜福利 | а√天堂www在线天堂小说 | 无码人妻精品一区二区三区下载 | 亚洲国产精品成人久久蜜臀 | 午夜丰满少妇性开放视频 | 国产色在线 | 国产 | 日日摸夜夜摸狠狠摸婷婷 | 男女性色大片免费网站 | 婷婷综合久久中文字幕蜜桃三电影 | 波多野结衣av一区二区全免费观看 | 少妇的肉体aa片免费 | 波多野结衣乳巨码无在线观看 | 日本护士xxxxhd少妇 | 男女猛烈xx00免费视频试看 | 欧美激情内射喷水高潮 | 亚洲色大成网站www国产 | 丰满少妇人妻久久久久久 | 国产成人亚洲综合无码 | 蜜臀av无码人妻精品 | 97久久精品无码一区二区 | 国精产品一品二品国精品69xx | 人人妻人人澡人人爽人人精品浪潮 | 亚洲欧美中文字幕5发布 | 久久99国产综合精品 | 麻豆人妻少妇精品无码专区 | 少妇性l交大片欧洲热妇乱xxx | 成人无码视频免费播放 | 国语精品一区二区三区 | 国产两女互慰高潮视频在线观看 | 图片区 小说区 区 亚洲五月 | 成人综合网亚洲伊人 | 久久精品国产99久久6动漫 | 亚洲成色在线综合网站 | 国产精品丝袜黑色高跟鞋 | 亚洲国产高清在线观看视频 | 久久综合网欧美色妞网 | 伊人久久大香线焦av综合影院 | 在线a亚洲视频播放在线观看 | 色综合天天综合狠狠爱 | 无码人妻丰满熟妇区毛片18 | 国语自产偷拍精品视频偷 | 国产午夜视频在线观看 | 久激情内射婷内射蜜桃人妖 | 青青青爽视频在线观看 | 在线视频网站www色 | 国产精品国产自线拍免费软件 | 国产免费无码一区二区视频 | 日日橹狠狠爱欧美视频 | 亚洲乱码国产乱码精品精 | 国产欧美熟妇另类久久久 | 大胆欧美熟妇xx | 亚洲中文字幕成人无码 | 亚洲欧美日韩国产精品一区二区 | 鲁一鲁av2019在线 | 亚洲国产一区二区三区在线观看 | 亚洲熟悉妇女xxx妇女av | 久久熟妇人妻午夜寂寞影院 | 国产尤物精品视频 | 国产免费观看黄av片 | 日韩少妇白浆无码系列 | 欧美日本精品一区二区三区 | 久久久精品欧美一区二区免费 | 熟妇女人妻丰满少妇中文字幕 | 国产真人无遮挡作爱免费视频 | 亚洲国产成人a精品不卡在线 | 欧美性色19p | 亚洲成a人一区二区三区 | 亚洲天堂2017无码 | 国产成人av免费观看 | 色婷婷综合中文久久一本 | 国产精品欧美成人 | 老子影院午夜伦不卡 | 国内综合精品午夜久久资源 | 欧洲熟妇色 欧美 | 国产色xx群视频射精 | 波多野结衣高清一区二区三区 | 日韩少妇白浆无码系列 | 特大黑人娇小亚洲女 | 成人亚洲精品久久久久软件 | 中文字幕乱码亚洲无线三区 | 狠狠cao日日穞夜夜穞av | 欧美 日韩 人妻 高清 中文 | 国内精品人妻无码久久久影院蜜桃 | 俺去俺来也www色官网 | 爱做久久久久久 | 超碰97人人射妻 | 成年美女黄网站色大免费视频 | 精品偷自拍另类在线观看 | 无码人中文字幕 | 国产成人精品视频ⅴa片软件竹菊 | 国产精品理论片在线观看 | 三级4级全黄60分钟 | 亚洲精品久久久久久一区二区 | 久久精品中文字幕大胸 | 综合人妻久久一区二区精品 | 国产欧美亚洲精品a | 白嫩日本少妇做爰 | 久久精品中文闷骚内射 | 精品国产一区二区三区av 性色 | 亚洲 另类 在线 欧美 制服 | 娇妻被黑人粗大高潮白浆 | 亚洲中文字幕av在天堂 | 日本精品人妻无码77777 天堂一区人妻无码 | 日本丰满护士爆乳xxxx | 国产精品久久久久久亚洲影视内衣 | 99久久久无码国产aaa精品 | 97久久精品无码一区二区 | 日日摸天天摸爽爽狠狠97 | 76少妇精品导航 | 香蕉久久久久久av成人 | 国产成人久久精品流白浆 | 国产精品久久久久7777 | 亚洲乱亚洲乱妇50p | 日本精品少妇一区二区三区 | 爽爽影院免费观看 | 国产特级毛片aaaaaaa高清 | 国产亚洲精品久久久闺蜜 | 大肉大捧一进一出视频出来呀 | 一本色道婷婷久久欧美 | 国产又爽又黄又刺激的视频 | 小sao货水好多真紧h无码视频 | 国产精品亚洲综合色区韩国 | 性欧美疯狂xxxxbbbb | 2019nv天堂香蕉在线观看 | 大地资源网第二页免费观看 | 免费无码肉片在线观看 | 国产精品99爱免费视频 | 国产综合在线观看 | 亚洲成av人影院在线观看 | 国产又粗又硬又大爽黄老大爷视 | 精品国产青草久久久久福利 | 2020久久超碰国产精品最新 | 欧洲vodafone精品性 | 亚洲国产精品久久久久久 | 亚洲成av人片天堂网无码】 | 性做久久久久久久免费看 | 九九综合va免费看 | 人人妻人人澡人人爽精品欧美 | 狠狠cao日日穞夜夜穞av | 国产一区二区三区精品视频 | 四虎永久在线精品免费网址 | 成人欧美一区二区三区黑人 | 日日干夜夜干 | 亚洲欧美综合区丁香五月小说 | 无码免费一区二区三区 | 女人被爽到呻吟gif动态图视看 | 麻花豆传媒剧国产免费mv在线 | аⅴ资源天堂资源库在线 | 无码国产激情在线观看 | 久久久久久久久蜜桃 | 少妇无码一区二区二三区 | 亚洲人亚洲人成电影网站色 | 国产免费无码一区二区视频 | 人妻少妇精品无码专区二区 | 波多野结衣av在线观看 | 天天燥日日燥 | 久久久久久久人妻无码中文字幕爆 | 亚洲精品成人福利网站 | 欧洲精品码一区二区三区免费看 | 成人精品视频一区二区 | 亚洲色成人中文字幕网站 | 国产特级毛片aaaaaa高潮流水 | √8天堂资源地址中文在线 | 夜夜影院未满十八勿进 | 亚洲一区二区三区含羞草 | 国产9 9在线 | 中文 | 牲交欧美兽交欧美 | 亚洲一区二区三区偷拍女厕 | 亚无码乱人伦一区二区 | 欧美精品国产综合久久 | 久久精品国产大片免费观看 | 国产精品爱久久久久久久 | 樱花草在线社区www | 人妻与老人中文字幕 | 国产精品久久久av久久久 | 2020久久香蕉国产线看观看 | 亚洲国产av精品一区二区蜜芽 | 亚洲成av人在线观看网址 | 亚洲国产午夜精品理论片 | 国产乱人伦偷精品视频 | 日欧一片内射va在线影院 | 无码av免费一区二区三区试看 | 99久久人妻精品免费一区 | 性色欲网站人妻丰满中文久久不卡 | 强开小婷嫩苞又嫩又紧视频 | 精品无人国产偷自产在线 | 亚洲成av人片天堂网无码】 | 日日天日日夜日日摸 | 粗大的内捧猛烈进出视频 | 亚洲人亚洲人成电影网站色 | 婷婷色婷婷开心五月四房播播 | 99久久精品日本一区二区免费 | 久久久久久九九精品久 | 国产精品亚洲а∨无码播放麻豆 | 久久这里只有精品视频9 | 欧美黑人巨大xxxxx | 国产精品第一国产精品 | 国产在热线精品视频 | 天堂亚洲免费视频 | 内射后入在线观看一区 | 欧美zoozzooz性欧美 | 久久久婷婷五月亚洲97号色 | 亚洲国产一区二区三区在线观看 | 青青草原综合久久大伊人精品 | 巨爆乳无码视频在线观看 | 国产亚洲tv在线观看 | 国产手机在线αⅴ片无码观看 | 成人一在线视频日韩国产 | 99精品视频在线观看免费 | 好男人www社区 | 国产莉萝无码av在线播放 | 国产精品成人av在线观看 | 亚洲欧美中文字幕5发布 | 丰满人妻被黑人猛烈进入 | 亚洲色欲久久久综合网东京热 | 国产欧美精品一区二区三区 | 久久久av男人的天堂 | 2020最新国产自产精品 | 久久久久久av无码免费看大片 | 久久久婷婷五月亚洲97号色 | 中国女人内谢69xxxx | 久久成人a毛片免费观看网站 | 免费看少妇作爱视频 | 亚洲精品欧美二区三区中文字幕 | 亚洲综合久久一区二区 | 久久久久免费看成人影片 | 蜜臀aⅴ国产精品久久久国产老师 | 性色欲网站人妻丰满中文久久不卡 | 国产情侣作爱视频免费观看 | 国产成人无码区免费内射一片色欲 | 久久久久国色av免费观看性色 | 中文字幕 人妻熟女 | 人人妻人人澡人人爽欧美精品 | 强奷人妻日本中文字幕 | 国产深夜福利视频在线 | 国产内射爽爽大片视频社区在线 | 日日天干夜夜狠狠爱 | 国产无av码在线观看 | 青青草原综合久久大伊人精品 | 99久久人妻精品免费一区 | 无码av中文字幕免费放 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 日本一卡2卡3卡四卡精品网站 | 亚洲 另类 在线 欧美 制服 | 中文字幕无码日韩专区 | 久久久无码中文字幕久... | 国产综合久久久久鬼色 | 欧美日韩亚洲国产精品 | 四虎永久在线精品免费网址 | 综合激情五月综合激情五月激情1 | 亚洲中文字幕va福利 | 特黄特色大片免费播放器图片 | 麻豆蜜桃av蜜臀av色欲av | 久久综合给合久久狠狠狠97色 | 国产精品亚洲五月天高清 | 亚洲无人区午夜福利码高清完整版 | 国产两女互慰高潮视频在线观看 | 国内综合精品午夜久久资源 | 成在人线av无码免费 | 性生交大片免费看女人按摩摩 | 鲁大师影院在线观看 | 亚洲日本一区二区三区在线 | 偷窥村妇洗澡毛毛多 | 强辱丰满人妻hd中文字幕 | 老熟妇乱子伦牲交视频 | 西西人体www44rt大胆高清 | 亚洲精品成人福利网站 | 无码人妻黑人中文字幕 | 亚洲欧美中文字幕5发布 | 色情久久久av熟女人妻网站 | 久久亚洲中文字幕精品一区 | 风流少妇按摩来高潮 | 日日噜噜噜噜夜夜爽亚洲精品 | 美女张开腿让人桶 | 久久综合九色综合欧美狠狠 | 欧美人与善在线com | 国产va免费精品观看 | 国产精华av午夜在线观看 | av无码久久久久不卡免费网站 | 99在线 | 亚洲 | 午夜精品一区二区三区的区别 | 亚洲成色在线综合网站 | 久久国产精品萌白酱免费 | 国产精品免费大片 | 爽爽影院免费观看 | 国产午夜无码精品免费看 | 久久精品国产亚洲精品 | 黑森林福利视频导航 | 国产成人无码午夜视频在线观看 | 300部国产真实乱 | 日产精品高潮呻吟av久久 | 国产情侣作爱视频免费观看 | 一本大道久久东京热无码av | 中文字幕日韩精品一区二区三区 | 国产精品毛多多水多 | 玩弄人妻少妇500系列视频 | 少女韩国电视剧在线观看完整 | 国产手机在线αⅴ片无码观看 | 成人性做爰aaa片免费看 | 一本加勒比波多野结衣 | 精品成在人线av无码免费看 | 国产又粗又硬又大爽黄老大爷视 | 久久综合久久自在自线精品自 | 午夜精品久久久内射近拍高清 | 久久久av男人的天堂 | 久久99热只有频精品8 | 领导边摸边吃奶边做爽在线观看 | 一本久久伊人热热精品中文字幕 | 99久久精品无码一区二区毛片 | 精品无码成人片一区二区98 | 免费人成在线视频无码 | 红桃av一区二区三区在线无码av | 久久综合给久久狠狠97色 | 国产人成高清在线视频99最全资源 | 国产乡下妇女做爰 | 荫蒂被男人添的好舒服爽免费视频 | 久久久久久国产精品无码下载 | 中国大陆精品视频xxxx | 精品厕所偷拍各类美女tp嘘嘘 | 亚欧洲精品在线视频免费观看 | 无码精品国产va在线观看dvd | 国产农村妇女高潮大叫 | 国产莉萝无码av在线播放 | 国内精品一区二区三区不卡 | 精品国产麻豆免费人成网站 | 色偷偷人人澡人人爽人人模 | 国产福利视频一区二区 | 国产亚洲人成在线播放 | 高清不卡一区二区三区 | 天干天干啦夜天干天2017 | 国色天香社区在线视频 | 成人一在线视频日韩国产 | 午夜熟女插插xx免费视频 | 2020最新国产自产精品 | 国产精品无码mv在线观看 | 亚洲成a人片在线观看无码 | 俄罗斯老熟妇色xxxx | 2020久久香蕉国产线看观看 | 日韩欧美成人免费观看 | 欧美人与禽zoz0性伦交 | www一区二区www免费 | 俺去俺来也在线www色官网 | 色五月丁香五月综合五月 | 精品日本一区二区三区在线观看 | 少妇无码一区二区二三区 | 熟妇人妻中文av无码 | 久久久久久国产精品无码下载 | 又大又硬又黄的免费视频 | 色婷婷综合中文久久一本 | 99精品视频在线观看免费 | 日本熟妇人妻xxxxx人hd | 麻豆精品国产精华精华液好用吗 | 蜜臀av无码人妻精品 | 中文字幕久久久久人妻 | 久久人人爽人人人人片 | 久久精品国产亚洲精品 | av人摸人人人澡人人超碰下载 | 天堂一区人妻无码 | 亚洲娇小与黑人巨大交 | 国产深夜福利视频在线 | 永久免费精品精品永久-夜色 | 午夜时刻免费入口 | 亚洲色欲色欲天天天www | 欧美日本精品一区二区三区 | 一区二区三区乱码在线 | 欧洲 | 国产人妻精品一区二区三区不卡 | 综合人妻久久一区二区精品 | √8天堂资源地址中文在线 | 无码任你躁久久久久久久 | 欧美成人午夜精品久久久 | 国产无套内射久久久国产 | 国产免费久久精品国产传媒 | 妺妺窝人体色www婷婷 | 亚洲一区二区三区国产精华液 | 精品国产国产综合精品 | 亚洲中文字幕久久无码 | 久久97精品久久久久久久不卡 | 无码人妻丰满熟妇区五十路百度 | 国产人妻精品一区二区三区不卡 | 亚洲国产精品久久人人爱 | 日韩人妻无码一区二区三区久久99 | 俺去俺来也www色官网 | 亚洲国产成人av在线观看 | 人妻无码αv中文字幕久久琪琪布 | 夜夜躁日日躁狠狠久久av | 欧美 亚洲 国产 另类 | 国产无套粉嫩白浆在线 | 成人精品天堂一区二区三区 | 红桃av一区二区三区在线无码av | 高清国产亚洲精品自在久久 | 无码福利日韩神码福利片 | 亚洲 a v无 码免 费 成 人 a v | 日本熟妇人妻xxxxx人hd | 日韩无码专区 | 老司机亚洲精品影院 | 亚洲精品国偷拍自产在线观看蜜桃 | 无码av免费一区二区三区试看 | 天天做天天爱天天爽综合网 | 精品国产av色一区二区深夜久久 | 成人无码精品一区二区三区 | 偷窥日本少妇撒尿chinese | 亚洲日本在线电影 | 天堂久久天堂av色综合 | 国产69精品久久久久app下载 | 亚洲色大成网站www国产 | 亚洲色大成网站www国产 | 久久综合给合久久狠狠狠97色 | 久久久久免费精品国产 | 丰满人妻被黑人猛烈进入 | 99久久精品日本一区二区免费 | 女人色极品影院 | 亚洲午夜无码久久 | 国产性生大片免费观看性 | 女人和拘做爰正片视频 | 无码国产色欲xxxxx视频 | 99久久精品日本一区二区免费 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 日韩亚洲欧美精品综合 | 欧美 日韩 亚洲 在线 | 欧美 亚洲 国产 另类 | 帮老师解开蕾丝奶罩吸乳网站 | 国内精品九九久久久精品 | 男女下面进入的视频免费午夜 | 国模大胆一区二区三区 | 中文字幕av无码一区二区三区电影 | 国产成人人人97超碰超爽8 | 天干天干啦夜天干天2017 | 国产成人人人97超碰超爽8 | 国内精品一区二区三区不卡 | 国产精品成人av在线观看 | 国产精品久久久久久亚洲影视内衣 | 欧美熟妇另类久久久久久多毛 | 日韩精品a片一区二区三区妖精 | 成年美女黄网站色大免费全看 | 久久久精品欧美一区二区免费 | 四虎永久在线精品免费网址 | 小sao货水好多真紧h无码视频 | 久久精品国产99久久6动漫 | 最新国产麻豆aⅴ精品无码 | 丰满人妻被黑人猛烈进入 | 天天拍夜夜添久久精品大 | 人人澡人人透人人爽 | 日韩在线不卡免费视频一区 | 无码人中文字幕 | 日本熟妇乱子伦xxxx | 日日干夜夜干 | 国产精品香蕉在线观看 | 性啪啪chinese东北女人 | 欧美精品免费观看二区 | 国产精品怡红院永久免费 | 国产激情艳情在线看视频 | 亚洲精品国产品国语在线观看 | 九九热爱视频精品 | 国产成人无码区免费内射一片色欲 | 国产精品美女久久久网av | 伊人久久大香线焦av综合影院 | 国产成人无码av片在线观看不卡 | 日韩精品成人一区二区三区 | 99riav国产精品视频 | 久精品国产欧美亚洲色aⅴ大片 | 丰满人妻一区二区三区免费视频 | 免费无码肉片在线观看 | 成熟妇人a片免费看网站 | 色婷婷av一区二区三区之红樱桃 | 牲欲强的熟妇农村老妇女 | 香蕉久久久久久av成人 | 中文字幕av无码一区二区三区电影 | 成人一区二区免费视频 | 国产午夜无码视频在线观看 | 国内精品久久毛片一区二区 | 亚洲精品一区三区三区在线观看 | 国产电影无码午夜在线播放 | 久久国产自偷自偷免费一区调 | 婷婷五月综合激情中文字幕 | 曰本女人与公拘交酡免费视频 | 国产精品99爱免费视频 | 爽爽影院免费观看 | 最近免费中文字幕中文高清百度 | 少妇厨房愉情理9仑片视频 | 未满小14洗澡无码视频网站 | 久久久久99精品成人片 | 激情内射亚州一区二区三区爱妻 | 97se亚洲精品一区 | 欧洲精品码一区二区三区免费看 | 又湿又紧又大又爽a视频国产 | 欧美 日韩 亚洲 在线 | 亚洲国产av美女网站 | 四虎4hu永久免费 | 亚洲爆乳精品无码一区二区三区 | 日本护士xxxxhd少妇 | 国产精品第一国产精品 | 欧美野外疯狂做受xxxx高潮 | 奇米影视7777久久精品人人爽 | 亚洲男人av天堂午夜在 | 久久亚洲中文字幕精品一区 | 97人妻精品一区二区三区 | 国产一精品一av一免费 | 久久久久久av无码免费看大片 | 人人澡人人妻人人爽人人蜜桃 | 日韩人妻无码中文字幕视频 | 午夜嘿嘿嘿影院 | 男女下面进入的视频免费午夜 | 蜜臀av在线播放 久久综合激激的五月天 | 丰满人妻一区二区三区免费视频 | 少妇激情av一区二区 | 日本熟妇浓毛 | 国产精品久免费的黄网站 | 欧美人与物videos另类 | 未满成年国产在线观看 | 久久久中文久久久无码 | 在线精品国产一区二区三区 | 久久久久亚洲精品中文字幕 | 国产亚洲精品久久久久久国模美 | 波多野结衣一区二区三区av免费 | 少妇高潮一区二区三区99 | 99久久无码一区人妻 | 好男人www社区 | 日本乱人伦片中文三区 | 99久久99久久免费精品蜜桃 | 欧美人与善在线com | 无人区乱码一区二区三区 | 国产免费久久久久久无码 | 久久99精品国产.久久久久 | 黄网在线观看免费网站 | 正在播放老肥熟妇露脸 | 亚洲自偷自拍另类第1页 | 高潮喷水的毛片 | 国产美女极度色诱视频www | 在线欧美精品一区二区三区 | 色综合久久久无码中文字幕 | 最近中文2019字幕第二页 | 图片区 小说区 区 亚洲五月 | 全黄性性激高免费视频 | 亚洲成av人综合在线观看 | 久久亚洲a片com人成 | 精品一区二区不卡无码av | 国内少妇偷人精品视频免费 | 成人一在线视频日韩国产 | 欧美三级不卡在线观看 | 久久成人a毛片免费观看网站 | 色婷婷综合激情综在线播放 | 狠狠色欧美亚洲狠狠色www | 日本乱偷人妻中文字幕 | 久久国内精品自在自线 | 99久久亚洲精品无码毛片 | 大肉大捧一进一出视频出来呀 | 97夜夜澡人人双人人人喊 | 亚洲无人区一区二区三区 | 久久久中文字幕日本无吗 | 强伦人妻一区二区三区视频18 | 色欲av亚洲一区无码少妇 | 自拍偷自拍亚洲精品10p | 最新版天堂资源中文官网 | 久久久精品欧美一区二区免费 | 精品久久综合1区2区3区激情 | 伦伦影院午夜理论片 | 夜先锋av资源网站 | 中文字幕人妻无码一夲道 | 国产国产精品人在线视 | 强伦人妻一区二区三区视频18 | 色一情一乱一伦 | 亚洲人交乣女bbw | 日本成熟视频免费视频 | 日本va欧美va欧美va精品 | 欧美老妇交乱视频在线观看 | 无码av岛国片在线播放 | 漂亮人妻洗澡被公强 日日躁 | 精品人妻中文字幕有码在线 | 久久aⅴ免费观看 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 人人爽人人爽人人片av亚洲 | 国産精品久久久久久久 | 无码国产乱人伦偷精品视频 | 欧洲vodafone精品性 | 东京无码熟妇人妻av在线网址 | 亚洲日韩一区二区三区 | 成人免费视频在线观看 | 亚洲国产精品一区二区美利坚 | 人人澡人人透人人爽 | 欧美丰满熟妇xxxx性ppx人交 | 国产在线精品一区二区三区直播 | 日韩精品成人一区二区三区 | 欧美 丝袜 自拍 制服 另类 | 大屁股大乳丰满人妻 | 久久久精品国产sm最大网站 | 亚洲另类伦春色综合小说 | 国产成人综合美国十次 | 又粗又大又硬毛片免费看 | 欧美人与善在线com | 理论片87福利理论电影 | 亚洲国产成人a精品不卡在线 | 少妇高潮喷潮久久久影院 | 国产精品久免费的黄网站 | 国产成人无码av片在线观看不卡 | 网友自拍区视频精品 | 激情五月综合色婷婷一区二区 | 欧美丰满老熟妇xxxxx性 | 无码帝国www无码专区色综合 | 欧美乱妇无乱码大黄a片 | 国精产品一区二区三区 | 夜先锋av资源网站 | 兔费看少妇性l交大片免费 | 亚洲午夜久久久影院 | 99视频精品全部免费免费观看 | 乱中年女人伦av三区 | 国产精品香蕉在线观看 | 中文字幕久久久久人妻 | 亚洲国产精品美女久久久久 | 少妇被粗大的猛进出69影院 | 欧美freesex黑人又粗又大 | 在线播放亚洲第一字幕 | 狂野欧美性猛交免费视频 | 老熟女重囗味hdxx69 | 免费人成在线视频无码 | 色欲综合久久中文字幕网 | 国产成人午夜福利在线播放 | 日产精品99久久久久久 | 东京无码熟妇人妻av在线网址 | 国内老熟妇对白xxxxhd | 亚洲日本一区二区三区在线 | 自拍偷自拍亚洲精品被多人伦好爽 | 清纯唯美经典一区二区 | 国产麻豆精品精东影业av网站 | 2019nv天堂香蕉在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 荫蒂被男人添的好舒服爽免费视频 | 日本一区二区更新不卡 | 中文亚洲成a人片在线观看 | 欧美人妻一区二区三区 | 欧美激情综合亚洲一二区 | 久久五月精品中文字幕 | 久久人人爽人人爽人人片av高清 | 色综合天天综合狠狠爱 | 久久国产精品偷任你爽任你 | 国产精品亚洲专区无码不卡 | 亚洲区小说区激情区图片区 | 国产激情精品一区二区三区 | 欧美xxxx黑人又粗又长 | 丰满人妻一区二区三区免费视频 | 日本熟妇乱子伦xxxx | 日本精品人妻无码免费大全 | 九月婷婷人人澡人人添人人爽 | 无码人妻出轨黑人中文字幕 | 女人高潮内射99精品 | 亚洲精品综合一区二区三区在线 | 老司机亚洲精品影院 | 性欧美熟妇videofreesex | 激情人妻另类人妻伦 | 亚洲中文字幕无码中文字在线 | v一区无码内射国产 | 人人爽人人澡人人高潮 | 性色av无码免费一区二区三区 | 强辱丰满人妻hd中文字幕 | 久久午夜夜伦鲁鲁片无码免费 | 国产成人精品一区二区在线小狼 | 老熟妇仑乱视频一区二区 | 久久99热只有频精品8 | 亚洲の无码国产の无码影院 | 亚洲日韩一区二区三区 | 久久精品丝袜高跟鞋 | 色欲久久久天天天综合网精品 | 中文字幕久久久久人妻 | 亚洲国产成人av在线观看 | 亚洲国产午夜精品理论片 | 久久综合给久久狠狠97色 | 午夜精品一区二区三区的区别 | 精品水蜜桃久久久久久久 | 国产黄在线观看免费观看不卡 | 亚洲人成人无码网www国产 | 久久国产精品萌白酱免费 | 99久久久国产精品无码免费 | 熟女少妇人妻中文字幕 | 中文字幕无码乱人伦 | 97久久超碰中文字幕 | 麻豆成人精品国产免费 | 午夜精品一区二区三区在线观看 | 日韩 欧美 动漫 国产 制服 | 又紧又大又爽精品一区二区 | 精品无码成人片一区二区98 | 国产性生大片免费观看性 | ass日本丰满熟妇pics | 大地资源网第二页免费观看 | 人人妻人人澡人人爽人人精品浪潮 | 国内精品一区二区三区不卡 | 久久精品中文闷骚内射 | 毛片内射-百度 | 少妇厨房愉情理9仑片视频 | 国产激情无码一区二区app | 国内精品人妻无码久久久影院 | 99久久人妻精品免费一区 | 日本在线高清不卡免费播放 | 亚洲国产日韩a在线播放 | 久久精品国产大片免费观看 | 国产熟女一区二区三区四区五区 | 欧美亚洲国产一区二区三区 | 无码av中文字幕免费放 | 欧美性黑人极品hd | 精品人妻中文字幕有码在线 | 鲁鲁鲁爽爽爽在线视频观看 | 天堂а√在线地址中文在线 | 久久久亚洲欧洲日产国码αv | 国语自产偷拍精品视频偷 | 日韩精品成人一区二区三区 | 欧美 亚洲 国产 另类 | 性做久久久久久久免费看 | 亚洲成av人片天堂网无码】 | 久久无码专区国产精品s | 1000部夫妻午夜免费 | 亚洲色欲久久久综合网东京热 | 国产高潮视频在线观看 | 欧美 日韩 人妻 高清 中文 | 久久www免费人成人片 | 久久久精品国产sm最大网站 | 午夜福利一区二区三区在线观看 | 国产香蕉尹人视频在线 | 亚洲乱码日产精品bd | 久久综合狠狠综合久久综合88 | 综合网日日天干夜夜久久 | 天天摸天天碰天天添 | 水蜜桃亚洲一二三四在线 |