精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

前車之鑒:聊聊釘釘 Flutter 落地桌面端踩過的“坑”

開發(fā) 前端 新聞
本文將闡述釘釘基于 Flutter 構(gòu)建的跨四端應(yīng)用框架(代號 Dutter)的技術(shù)實踐與踩坑經(jīng)驗。

本文主要介紹一下釘釘 Flutter 業(yè)務(wù)灰度過程中,在桌面端遇到并處理過的幾個 FlutterEngine 層面的 Bug。具體包含:

  • Mac 端:
  • Windows 端:

下面來為大家分別介紹一下。

FlutterEngine Mac 端問題

1.1 FlutterEngine 退出之后內(nèi)存泄漏問題

1 問題背景

Mac 端 FlutterViewController 在銷毀之后,其開辟的內(nèi)存并未并實際釋放,會出現(xiàn)內(nèi)存泄漏問題。此問題在 Flutter issue 中有一些討論,但一直未有明確定位。在釘釘 Mac 端 Flutter 業(yè)務(wù)灰度過程中也遇到此問題,如無法處理將直接影響 Dutter 在 Mac 端落地的可行性:

2 定位分析

一句話原因:

Mac 端 FlutterEngine 實現(xiàn)中對 weak property 使用不合理導(dǎo)致。FlutterViewController 強持有 FlutterEngine,后者持有一個指向 FlutterViewController 的 weak property。FlutterViewController 在 dealloc 流程中嘗試釋放 FlutterEngine,但是此時 FlutterEngine 中持有的 weak property 已經(jīng)無法正確訪問(nil),導(dǎo)致釋放流程未能正常執(zhí)行,出現(xiàn)泄漏。

下面結(jié)合具體實現(xiàn)來為大家做一個簡單說明。

由于設(shè)計到 OC 和 C++ 對象生命周期管理問題, FlutterEngine 內(nèi)部對象持有關(guān)系略微特殊一些,大致如下圖所示:

  • FlutterViewController 作為對外暴露的主要 Class,負(fù)責(zé)創(chuàng)建并持有 FlutterEngine 以及 FlutterView;
  • FluterEngine 在初始化階段會自己強持有自己,并在 shutdown 時自我 Release;
  • FlutterEngine 會創(chuàng)建并持有 FlutterRenderer,F(xiàn)lutterRenderer 會強持有 FlutterView;
  • FlutterEngine 間接強持有 FlutterView;
  • FlutterEngine 有一個指向 FlutterViewController 的弱引用指針。

正常情況下,F(xiàn)lutterViewController 退出之后,會通過調(diào)用 FlutterEngine 的 setViewController 傳入 nil 的方式,來觸發(fā) FlutterEngine shudown 動作。參考實現(xiàn)如下:

即正常情況下,F(xiàn)lutterViewController dealloc 之后應(yīng)該觸發(fā) 369 行代碼運行,進(jìn)而釋放 FlutterEngine 資源。但是實際運行情況缺不是這樣,在代碼運行到 359 行時,嘗試判斷 if (_viewController != controller) 時并未成立。通過上述代碼我們知道,controller 是外部傳入的對象此時為 nil;_viewController 作為一個 weak proptry,在 FlutterViewController 進(jìn)入 dealloc 流程之后也變?yōu)?nil。因而在此流程下,我們希望中的 shutDownEngine 方法并未被調(diào)用。

3 處理方案

問題定位之后處理方式就很簡單了,可以在 FlutterViewController dealloc 的時候手動觸發(fā) FlutterEngine shutDownEngine 方法。并且通過在上層通過 OC 動態(tài)特性 hook 實現(xiàn)、或者直接修改重新編譯 FlutterEngine 都可以。

但此處修改一定要謹(jǐn)慎,注意完整還原 FlutterEngine 中的 shutdown 流程,否則可能導(dǎo)致我們遇到的第二個問題:死鎖。

1.2 FlutterEngine shutdown 階段死鎖問題

1 問題背景

釘釘最初在處理上述「FlutterEngine 泄漏」問題時,采用了一種相對比較簡單的方案:在 FlutterViewController dealloc 方法中,手動調(diào)用 FlutterEngine 提供的 shutDownEngine 方法,手動觸發(fā)相關(guān)資源釋放。

通過此方案,F(xiàn)lutterViewController 退出之后內(nèi)存確實出現(xiàn)了下降,但是在灰度時發(fā)現(xiàn)偶爾會有整個頁面卡死的情況。通過對出現(xiàn)問題的鏈路進(jìn)行簡單分析以及配合暴力測試,我們在 debug 環(huán)境對問題做了還原。最終初確認(rèn) UI 線程與 Raster 線程出現(xiàn)死鎖,死鎖之后的線程狀態(tài)大致如下。

UI 線程狀態(tài):

Raster 線程:

2 定位分析

一句話原因:

釘釘側(cè)調(diào)用 FlutterEngine shutDownEngine 方法不合理導(dǎo)致。shutDownEngine 之前,必須先調(diào)用 FlutterView 的 shutdown 方法來停止渲染流程。待渲染流程正常停止之后,才可進(jìn)入 FlutterEngine 資源釋放流程,否則即有可能出現(xiàn)上述死鎖問題。

因為此問題為釘釘調(diào)用不合理導(dǎo)致,具體異常原因不再深入分析,感興趣的同學(xué)可以根據(jù)上述線索自行查閱。

3 處理方案

在上層補全 FlutterEngine 釋放流程,在調(diào)用 FlutterEngine shutDownEngine 之前首先調(diào)用 FlutterView shutdown 停止 Raster 線程。

1.3 低版本 macOS OpenGL 析構(gòu)階段 Crash 問題

1 問題背景

此問題還是接兩個問題,在處理完問題1和問題2之后,參考 FlutterEngine shutdown 流程,釘釘會在 FlutterViewController 析構(gòu)之后做3件事情:

  1. 將 FlutterRenderer 中綁定的 FlutterView 置為 nil;
  2. 調(diào)用 FlutterView shutdown 方法;
  3. 調(diào)用 FlutterEngine shutDownEngine 方法。

經(jīng)過一系列處理之后,測試發(fā)現(xiàn)內(nèi)存泄漏和死鎖問題基本得以根治。但是在內(nèi)部灰度過程中發(fā)現(xiàn)低版本 macOS 上會出現(xiàn) Crash,堆棧大致如下:

2 定位分析

一句話原因:

與問題2類似,此問題也是因為釘釘處理泄漏問題而引入。其大致由兩方面因素迭代導(dǎo)致。一方面因為重置 FlutterOpenGLRenderer 綁定的 FlutterView,導(dǎo)致在 embedder 層創(chuàng)建的 OpenGL 對象被提前釋放;另外一方面因為低版本 macOS OpenGL 實現(xiàn)不完善析構(gòu)流程中未能對關(guān)鍵鏈路做保護,進(jìn)而導(dǎo)致異常。

下面對異常相關(guān)代碼做一下簡答分析,避免其他同學(xué)再遇到類似問題。

  1. 在 FlutterEngine setViewController 方法中,如果處于釋放流程,會調(diào)用 FlutterOpenGLRenderer setFlutterView 方法,并傳入 nil:

  1. FlutterOpenGLRenderer setFlutterView 方法在入?yún)?nil 時,會釋放其內(nèi)部維護的 NSOpenGLContext 對象:

  1. FlutterEngine 底層實現(xiàn)會在 GrDirectContext 對象析構(gòu)時執(zhí)行 flush,如果此時 OpenGL 相關(guān)對象已經(jīng)釋放,在低版本 macOS(10.11, 10.12)會出現(xiàn) Crash:

3 處理方案

由于出現(xiàn)問題的部分是由釘釘上層代碼觸發(fā),處理相對比較簡單。最終我們在所有使用 OpenGL 渲染的 Mac 設(shè)備上(macOS 10.14 之前的版本)移除 FlutterView 置空動作。即最終 FlutterViewController 釋放階段只執(zhí)行以下兩個動作:

  1. 調(diào)用 FlutterView shutdown 方法;
  2. 調(diào)用 FlutterEngine shutDownEngine 方法。

FlutterEngine Windows 端問題

2.1 Win7 設(shè)備渲染模塊「Crash + 殘影」問題

1 問題背景

此問題背景略微有些復(fù)雜,如果細(xì)分來看的話,此問題應(yīng)該可以拆分為兩個子問題。

第一個問題是,在部分 Win7 設(shè)備上(x86 + x64)出現(xiàn) d3d11 導(dǎo)致的 Crash,堆棧大致如下:

由于遲遲無法定位導(dǎo)致此問題的具體原因、且 Flutter 官方表示他們對 Win7 設(shè)備的覆蓋度并不完善「參考」(https://github.com/flutter/flutter/issues/92650#issuecomment-961341821)。因此我們決定對 FlutterEngine 稍加定制,在 Win7 等陳舊設(shè)備上強制通過「軟解模式」來渲染 Flutter 頁面。

本以為通過此方式可以繞過此問題,但很不幸運的是此方案暴露了 FlutterEngine 里另外一個 Bug:通過「軟解模式」來渲染頁面時,F(xiàn)lutterViewController 關(guān)閉只有有一定概率會導(dǎo)致 Windows 桌面出現(xiàn)殘影。

2 定位分析

一句話原因:

此問題主要是因為 FlutterEngine 內(nèi)部 shutdown 流程中,未及時修改 FlutterWindowsEngine 指向 FlutterWindowsView 對象的指針,導(dǎo)致多線程場景下出現(xiàn)野指針;因為野指針導(dǎo)致raster 線程在 FlutterWindowsView 已經(jīng)銷毀情況下仍向其輸出繪制幀,進(jìn)而導(dǎo)致異常。

在定位時,我們通過增加輔助 log 的方式來加快問題定位過程。通過對關(guān)鍵節(jié)點補充日志,我們很快發(fā)現(xiàn)了可疑點:

上圖是出現(xiàn)問題之后關(guān)鍵節(jié)點輸出的日志。我們通過日志可以得到以下關(guān)鍵信息:

  1. OnBitmapSurfaceUpdated 是 FlutterWindowsView 的成員函數(shù)。但是在輸出最后兩行 OnBitmapSurfaceUpdated 方法時,F(xiàn)lutterWindowsView 的析構(gòu)函數(shù)已被執(zhí)行(野指針);
  2. 最后一次執(zhí)行 OnBitmapSurfaceUpdated 時,渲染使用的 Window 句柄為 nullptr,即可供渲染的窗口(與 FlutterWindowsView 綁定)以被釋放。

因為最后渲染所使用 Window 句柄為 nullptr,進(jìn)而導(dǎo)致出現(xiàn)殘影問題。

補充說明:在調(diào)用 C++ 成員函數(shù)時,即使調(diào)用時 this 已經(jīng)為野指針,但只要成員函數(shù)中并未訪問到 this 對象,則不會出現(xiàn)內(nèi)存訪問異常(Crash)。

3 處理方案

修改 FlutterEngine 內(nèi)部實現(xiàn),在 SoftwareRenderer 模式下 FlutterWindowsView 析構(gòu)時,置空 FlutterWindowsEngine 指向其的指針(因 GPU 模式會有異常輸出,暫未修改):

通過此方式,可以保證在 FlutterWindowsView 銷毀之后 raster 線程中的任務(wù)不會再回調(diào)渲染接口:

2.2 FlutterPlugin 注冊階段野指針 Crash

1 問題背景

在釘釘 Flutter 版本「+面板」業(yè)務(wù) Windows 端一灰、二灰階段出現(xiàn)較多例 Crash,客戶端整體 Crash 率高達(dá) x%:

通過簡單分析,還原 Crash 堆棧大致如下:

從堆棧可以達(dá)到兩個比較重要的信息:

  1. Crash 出現(xiàn)在 FlutterEngine 初始化階段,具體是在 Plugin 注冊時出現(xiàn)異常;
  2. 導(dǎo)致 Crash 原因是野指針問題。

2 定位分析

一句話原因:

Flutter 為 Windows 平臺提供 wrapper 層代碼中,包含一個設(shè)計上為單例的對象 PluginRegistrarManager。PluginRegistrarManager 主要服務(wù)于 FlutterPlugin 注冊、設(shè)計上為一個單例,其內(nèi)部通過 map 維持了一個 FlutterEngine 指針與 Registrar 的映射關(guān)系,保證 Registrar 與 FlutterEngine 生命周期保持一致。但是因為 wrapper 層的代碼在構(gòu)建時被編入了 pulgin.dll,導(dǎo)致每一個 plugin.dll 中都包含一份 PluginRegistrarManager 實現(xiàn)副本,即「單例機制」失效。帶來的問題是 FlutterEngine 析構(gòu)時無法正確清除 PluginRegistrarManager 中的綁定關(guān)系,導(dǎo)致其內(nèi)部維護一個失效的指針地址,再次訪問時出現(xiàn) Crash。

下面簡單介紹一下分析過程。通過暴力測試,我們可以復(fù)現(xiàn)問題:

根據(jù)上圖可以確認(rèn),出現(xiàn) Crash 是因為 FlutterEngine 對象野指針導(dǎo)致。進(jìn)一步定位插件注冊時 Engine 指針來源,最終可定位到 flutter::PluginRegistrarManager::GetInstance()->GetRegistrar() 方法中:

進(jìn)一步分析 PluginRegistrarManager 中的實現(xiàn),可知 GetRegistrar 內(nèi)部需要 map + emplace 方法來維系 FlutterEngine 地址與 Registrar 關(guān)系:

其內(nèi)部會通過 FlutterDesktopPluginRegistrarSetDestructionHandler 將方法注冊到底層 Engine 對象中,其會在 FlutterEngine 析構(gòu)時被調(diào)用,進(jìn)而解除綁定關(guān)系:

問題即出現(xiàn)在此流程中, 如果 PluginRegistrarManager 并非真正的單例,且 FlutterEngine 只能維護一份有效的 OnRegistrarDestroyed 回調(diào) ,那么在 FlutterEngine 析構(gòu)時,有部分 PluginRegistrarManager 對象中保存的 FlutterEngine 地址不會被清除,再次使用時即會導(dǎo)致問題。

3 處理方案

修改 FlutterEngine wrapper 層 PluginRegistrarManager 實現(xiàn),優(yōu)化「單例」實現(xiàn)方案。將單例生命周期周期管理下層到底層,wrapper 層僅負(fù)責(zé)提供相關(guān)服務(wù)。

具體可參考:

2.3 Flutter Window 可見性變化之后頁面白屏

1 問題背景

在 Windows 端 Flutter 頁面中,如果將 Flutter Window:

  • 先通過 ShowWindow(flutter_wnd, SW_HIDE) 隱藏;
  • 再通過 ShowWindow(flutter_wnd, SW_SHOWNORMAL) 顯示出來。

會發(fā)現(xiàn) Flutter 頁面內(nèi)容無法正常展示,畫布上為空白一片。如果在白屏之后通過 setState 或者 拖拽窗口等方式觸發(fā)  Flutter 頁面刷新,則內(nèi)容可被正常渲染。

2 定位分析

此問題相對比較明確,F(xiàn)lutter Windows 端實現(xiàn)存在 bug,在 Window 可見性發(fā)生變化之后,應(yīng)重新出發(fā) flush 將最新視圖繪制到對應(yīng)窗口,但是目前此流程并未實現(xiàn),導(dǎo)致出現(xiàn)以上問題。

3 處理方案

此問題已經(jīng)提交issue,暫時釘釘側(cè)是通過上層補償?shù)姆绞絹砝@過此此問題。我們在 Native Window 可視性變化之后,手動通知 Flutter 側(cè)刷新當(dāng)前可見頁面,以此觸發(fā)重繪、規(guī)避問題。

總結(jié)

以上即為釘釘 Flutter 落地過程中桌面端處理的幾大主要問題。從我們實際體驗來看,雖然在 Flutter v2.10 版本已經(jīng)正式發(fā)布對 Windows 的支持。但僅從穩(wěn)定性角度來看,F(xiàn)lutter 在 Mac 端的表現(xiàn)無疑要優(yōu)于 WIndows。如果有其它團隊希望在使用 Flutter 在桌面單端做一下嘗試,我們優(yōu)先推薦選擇 Mac 端,其無論是上手門檻還是性能穩(wěn)定性表現(xiàn),相比 Windows 端要更有優(yōu)勢。

責(zé)任編輯:張燕妮 來源: 阿里巴巴移動技術(shù)
相關(guān)推薦

2010-11-08 10:24:34

2017-12-03 13:00:23

CIO商業(yè)智能

2014-02-27 09:19:13

OpenStackCloud FoundSAP

2015-08-31 09:33:20

2020-10-08 18:12:36

數(shù)據(jù)科學(xué)職位面試數(shù)據(jù)科學(xué)家

2020-11-05 15:00:55

以太坊區(qū)塊鏈USDT

2009-09-17 08:28:30

Windows 7兼容性

2022-12-06 08:00:16

awscli工具監(jiān)控

2024-04-01 08:05:27

Go開發(fā)Java

2020-02-17 15:17:57

釘釘

2017-07-17 15:46:20

Oracle并行機制

2021-05-29 14:14:16

阿里云釘釘低代碼開發(fā)

2022-05-11 12:52:25

框架實踐應(yīng)用

2018-01-10 13:40:03

數(shù)據(jù)庫MySQL表設(shè)計

2020-05-18 08:58:33

Python開發(fā)工具

2020-06-10 14:01:46

阿里云釘釘Windows

2016-09-06 18:20:43

存儲

2018-08-10 12:56:00

大數(shù)據(jù)

2023-08-22 20:48:06

模型釘釘阿里云

2024-05-06 00:00:00

緩存高并發(fā)數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號

一级毛片精品毛片| 91欧美激情另类亚洲| 欧美精品123| 欧美三级黄色大片| 极品白浆推特女神在线观看| 日日夜夜精品视频| 国产精品女主播在线观看| 国产91精品久久久久| japan高清日本乱xxxxx| 在线视频三区| 麻豆一区二区在线| 尤物tv国产一区| 久久久久狠狠高潮亚洲精品| 女人18毛片一区二区三区| 牛牛国产精品| 日韩午夜中文字幕| 亚洲色图都市激情| 国产国语亲子伦亲子| 中文精品久久| 日韩美女在线视频| 91精品国产吴梦梦| 国产精品一级伦理| 日本麻豆一区二区三区视频| 亚洲一区二区国产| www.激情小说.com| av在线免费一区| 另类欧美日韩国产在线| 午夜精品在线视频| 性色av蜜臀av色欲av| 日韩av影片| 国产亚洲制服色| 国产精品美女呻吟| 黄视频网站免费看| 欧美日韩一二| 欧美久久一区二区| 免费成人深夜夜行网站视频| 国产精品亚洲欧美在线播放| 一区二区蜜桃| 中日韩美女免费视频网址在线观看| 三级在线视频观看| 黄a在线观看| 国产成人亚洲综合色影视| 欧美国产日韩中文字幕在线| xxxwww国产| 婷婷午夜社区一区| 亚洲欧美综合色| 成人福利免费观看| 青娱乐国产在线| 欧美黄色网视频| 在线区一区二视频| 成人免费看片视频在线观看| 日本a级在线| 成人综合婷婷国产精品久久蜜臀 | 国产精品视频一区二区三区四 | 欧洲成人综合网| 成人av在线资源网| 国产精品久久97| 国精产品久拍自产在线网站| 亚洲福利合集| 欧美一区二区女人| 99爱视频在线| 免费看a在线观看| 国产精品免费免费| 亚洲欧洲一二三| 亚洲精品视频专区| 日韩成人一级大片| 欧美日本高清一区| 性猛交ⅹxxx富婆video| 免费精品一区| 在线观看免费一区| 另类小说第一页| 欧美aaaaaa| 都市激情亚洲色图| 麻豆一区二区三区在线观看| caopen在线视频| 国产无人区一区二区三区| 手机成人在线| 四虎精品一区二区三区| 精品制服美女丁香| 啪一啪鲁一鲁2019在线视频| 一区二区视频免费看| 奇米亚洲欧美| 精品国产三级a在线观看| www.色就是色| 97久久中文字幕 | 一级一片免费看| 欧美.日韩.国产.一区.二区| 欧美激情一级欧美精品| 亚洲女人久久久| 啪啪亚洲精品| 久久这里只有精品视频首页| 日本理论中文字幕| 亚洲综合色站| 91黄色8090| 中文字幕一区二区三区手机版 | 中文字幕の友人北条麻妃| av中文字幕在线观看第一页| **欧美大码日韩| 人妻激情另类乱人伦人妻| 1024免费在线视频| 亚洲一区二区在线免费看| 性做爰过程免费播放| av资源新版天堂在线| 欧美日韩美少妇| 欧美日韩在线免费播放| 中文字幕乱码中文乱码51精品| 亚洲最大成人网4388xx| 亚洲欧美一二三| 麻豆tv在线| 欧美日韩另类在线| 一级黄色高清视频| 国产精品成人3p一区二区三区| 欧美日韩一区二区三区高清 | 精品亚洲一区二区| 亚州av综合色区无码一区| 91免费精品国偷自产在线在线| 欧美一级国产精品| 精品人妻一区二区三区蜜桃视频| 久久综合亚洲| 欧美激情视频一区二区| 又骚又黄的视频| 理论电影国产精品| 欧美动漫一区二区| 久久久123| 69成人精品免费视频| 蜜臀一区二区三区精品免费视频| 九七影院97影院理论片久久| 日韩av在线免费播放| 国产在线观看无码免费视频| 亚洲在线久久| 成人在线视频福利| 91美女视频在线| 日本高清视频一区二区| 国产视频手机在线播放| 香蕉久久精品日日躁夜夜躁| 亚洲欧美精品一区| 极品尤物一区二区| 综合精品久久| 成人国产精品免费视频| 国产福利在线观看| 日本高清无吗v一区| 在线免费观看黄色小视频| 精品视频亚洲| 国产精品88a∨| 97av免费视频| 波多野结衣中文字幕一区二区三区| 小说区视频区图片区| 欧美视频第一| www.欧美精品| 国产黄色片视频| 成人精品电影在线观看| 日韩精品在线视频免费观看| 在线一区av| 欧美人伦禁忌dvd放荡欲情| 国产又大又粗又爽的毛片| 免费在线观看成人av| 成人国产精品一区| 黄色网在线免费看| 欧美一区二区黄色| 老女人性淫交视频| 日韩电影在线观看网站| 日韩hmxxxx| 国产精品69xx| 在线看一区二区| 性猛交娇小69hd| 久久国产精品99久久人人澡| 天天做天天爱天天高潮| 欧一区二区三区| 国色天香2019中文字幕在线观看| 最近中文字幕在线视频| 成人激情免费网站| 日韩中文字幕在线视频观看| 亚洲精品自拍| 久久69精品久久久久久国产越南| 高清毛片aaaaaaaaa片| 国产精品网曝门| 男人的天堂狠狠干| 57pao成人永久免费| 另类视频在线观看| 少妇高潮一区二区三区69| 色哟哟精品一区| 亚洲熟妇一区二区| 日韩啪啪电影网| 国产91|九色| 成人在线免费视频| 日韩欧美电影一二三| 久久久国产精品成人免费| 国产乱子伦一区二区三区国色天香 | 久久久久久久黄色片| 国产欧美日韩亚州综合| 分分操这里只有精品| 女厕嘘嘘一区二区在线播放| 国产在线精品一区免费香蕉 | a级黄色一级片| 中文字幕区一区二区三| 欧美一级片在线播放| 免费日本一区二区三区视频| 亚洲精品大尺度| 乱h高h女3p含苞待放| 9久草视频在线视频精品| 欧美 日韩 国产精品| 欧美成a人片免费观看久久五月天| 久久夜色精品国产欧美乱| 外国精品视频在线观看| 一区二区三区高清在线| 无码人妻aⅴ一区二区三区| 国产揄拍国内精品对白| 在线看无码的免费网站| 成人看片毛片免费播放器| 亚洲色图13p| 波多野结衣在线观看视频| 国产午夜精品久久| 性色av蜜臀av浪潮av老女人| 久久99精品国产.久久久久| 国产肥臀一区二区福利视频| 牛牛国产精品| 一区二区三区四区五区视频| avav成人| www.精品av.com| 黄色免费在线播放| 精品国产免费视频| 国产精品欧美激情在线| 婷婷中文字幕综合| 亚洲自拍偷拍一区二区| 国产91丝袜在线观看| 人体内射精一区二区三区| 99精品视频在线观看播放| 91在线视频免费| 青青青青在线| 亚洲天堂男人天堂| 深夜福利在线看| 亚洲黄色www网站| 亚洲欧美强伦一区二区| 正在播放一区二区| 91九色蝌蚪91por成人| 色综合久久久久久久久久久| 国产精品xxxx喷水欧美| 国产亚洲精品aa午夜观看| 黑丝av在线播放| 蜜桃av一区二区在线观看| 妞干网这里只有精品| 97精品国产| 国产精品美女久久久久av福利| 中文字幕在线中文字幕在线中三区| 欧美日韩福利电影| 日韩电影免费观看| 亚洲精品中文字幕有码专区| 手机看片福利永久| 日韩精品在线看| 免费在线稳定资源站| 正在播放亚洲一区| 一级做a爰片久久毛片16| 欧美日韩国产综合一区二区| 一区二区视频网站| 亚洲综合色视频| 国产午夜精品无码一区二区| 日本一区二区高清| www成人啪啪18软件| 国产精品高清亚洲| 男男做爰猛烈叫床爽爽小说| 成人av免费在线| 国产精品揄拍100视频| 久久久久久电影| 欧美日韩一区二区区| 国产高清精品网站| 美女日批在线观看| 99精品国产热久久91蜜凸| wwwwwxxxx日本| 国内精品国产三级国产a久久| jizzjizzxxxx| 男人的天堂久久精品| 国产乱叫456| 豆国产96在线|亚洲| 丰满少妇一区二区三区| 国产欧美精品一区二区色综合| 天堂网中文在线观看| 一区二区三区精品在线观看| 国产又大又黄视频| 亚洲综合在线五月| av网站中文字幕| 7777精品伊人久久久大香线蕉超级流畅| 午夜精品久久久久久久爽 | 国产美女主播在线观看| 91成人在线免费观看| 亚洲 小说区 图片区| 制服.丝袜.亚洲.另类.中文| 天天操天天干天天爱| 在线精品国产欧美| 国产白丝在线观看| 国产第一区电影| 日韩影片在线观看| 欧美高清性xxxxhd| 欧美 日韩 国产精品免费观看| 一本大道熟女人妻中文字幕在线| 麻豆精品视频在线观看视频| 亚洲av无一区二区三区久久| 久久久精品国产免费观看同学| 国产午夜精品理论片在线| 丁香五六月婷婷久久激情| 一级欧美一级日韩| 亚洲国产精品久久91精品| 国产黄色片网站| 亚洲区一区二区| 丁香花在线电影小说观看| 国产精品旅馆在线| 精品精品国产三级a∨在线| 国产麻豆一区二区三区在线观看| 日本欧美肥老太交大片| 亚洲不卡1区| 欧美高清日韩| 国产三级三级看三级| 免费久久99精品国产| 香蕉视频免费网站| 成人免费视频caoporn| 欧美a在线播放| 综合婷婷亚洲小说| 欧美日韩一二三四区| 精品免费视频一区二区| 日韩一级中文字幕| 久久这里只有精品99| 国产一区精品福利| 欧美午夜免费| 国产精品久久久一区二区| 国语对白做受xxxxx在线中国| 久久久久网站| mm131国产精品| 久久久久成人黄色影片| 日韩精品无码一区二区| 日韩精品一区二区三区在线 | 欧美重口另类| 国产爆乳无码一区二区麻豆| 寂寞少妇一区二区三区| 337人体粉嫩噜噜噜| 91福利区一区二区三区| 国家队第一季免费高清在线观看| 97香蕉超级碰碰久久免费软件| 97久久精品| 成人在线视频一区二区三区| 国产成人精品亚洲777人妖| 亚洲色图综合区| 欧美一区二区三区免费观看视频 | 五月天丁香花婷婷| 国产成人免费高清| 永久看片925tv| 欧美一区二区美女| 在线电影福利片| 欧美伊久线香蕉线新在线| 人人精品亚洲| 欧美性久久久久| 久久久精品国产免费观看同学| 亚洲欧美日韩激情| 在线看欧美日韩| 青娱乐极品盛宴一区二区| 高清一区二区三区视频| 国产中文字幕一区二区三区| 日本xxxxx18| 国产成人精品免费在线| 久久精品99国产精| 337p日本欧洲亚洲大胆色噜噜| а√在线天堂官网| 成人性生交大片免费看视频直播 | 曰批又黄又爽免费视频| 色噜噜狠狠狠综合曰曰曰88av| 超免费在线视频| 九9re精品视频在线观看re6| 国产精品传媒精东影业在线| www.超碰97.com| 一区二区三区精品久久久| 天天爽夜夜爽夜夜爽| 日本伊人精品一区二区三区介绍| 免费欧美网站| 少妇无码av无码专区在线观看 | 精品国产乱码久久久久久久久| 97人人在线视频| 清纯唯美一区二区三区| 一区免费视频| 亚洲综合伊人久久| 亚洲资源中文字幕| 视频在线不卡| 国产日韩欧美影视| 影音先锋一区| 亚洲无人区码一码二码三码的含义| 欧美老人xxxx18| 24小时免费看片在线观看| 日韩在线国产| 国产精品夜夜爽| 69视频免费在线观看| 日韩一二三在线视频播| 精品嫩草影院| 色国产在线视频| 香蕉成人伊视频在线观看| 国产黄色片网站| 欧洲成人午夜免费大片| 久久久久久久久国产一区| 在线观看高清免费视频| 亚洲激情六月丁香| www.国产.com| 国产精品91免费在线| 欧美xxx在线观看| 国内精品卡一卡二卡三|