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

Flutter應用性能檢測與優(yōu)化

開發(fā) 前端
對于應用渲染并不流暢,出現了性能問題,我們該如何檢測,又該從哪里著手處理呢?和移動開發(fā)類似, Flutter 的性能問題主要可以分為 GPU 線程問題和 UI 線程(CPU)問題兩類。

概述

軟件項目的交付是一個復雜且漫長的過程,任何細小的失誤都有可能導致交付過程失敗。在軟件開發(fā)過程中,除了代碼邏輯的 Bug 和視覺異常這些功能層面的問題之外,移動應用另一類常見的問題是性能問題,比如滑動操作不流暢、頁面出現卡頓丟幀現象等。這些問題雖然不至于讓移動應用完全不可用,但也很容易引起用戶反感,從而對應用質量產生質疑,甚至失去耐心。

那么,對于應用渲染并不流暢,出現了性能問題,我們該如何檢測,又該從哪里著手處理呢?和移動開發(fā)類似, Flutter 的性能問題主要可以分為 GPU 線程問題和 UI 線程(CPU)問題兩類。對于這些問題,有一個通用的套路:首先,都需要先通過性能圖層進行初步分析,而一旦確認問題存在,接下來就是利用 Flutter 提供的各類分析工具來進行問題定位。

圖層分析

Flutter運行模式

1、Debug

Debug模式可以在真機和模擬器上同時運行,此模式會打開所有的斷言,包括debugging信息、debugger aids(比如observatory)和服務擴展。優(yōu)化了快速develop/run循環(huán),但是沒有優(yōu)化執(zhí)行速度、二進制大小和部署。命令flutter run就是以這種模式運行的,通過sky/tools/gn --android或者sky/tools/gn --ios來構建應用的。

2、Release

Release模式只能在真機上運行,不能在模擬器上運行:會關閉所有斷言和debugging信息,關閉所有debugger工具。優(yōu)化了快速啟動、快速執(zhí)行和減小包體積。禁用所有的debugging aids和服務擴展。這個模式是為了部署給最終的用戶使用。命令flutter run --release就是以這種模式運行的,通過sky/tools/gn --android --runtime-mode=release或者sky/tools/gn --ios --runtime-mode=release來構建應用。

3、Profile

Profile模式只能在真機上運行,不能在模擬器上運行,基本和Release模式一致,除了啟用了服務擴展和tracing,以及一些為了最低限度支持tracing運行的東西(比如可以連接observatory到進程)。命令flutter run --profile就是以這種模式運行的,通過sky/tools/gn --android --runtime-mode=profile或者sky/tools/gn --ios --runtime-mode=profile來構建應用。

4、test

headless test模式只能在桌面上運行,基本和Debug模式一致,除了是headless的而且你能在桌面運行。命令flutter test就是以這種模式運行的,通過sky/tools/gn來build。

在實際開發(fā)中,應該用到上面所說的四種模式又各自分為兩種:一種是未優(yōu)化的模式,供開發(fā)人員調試使用;一種是優(yōu)化過的模式,供最終的開發(fā)人員使用。默認情況下是未優(yōu)化模式,如果要開啟優(yōu)化模式,build的時候在命令行后面添加--unoptimized參數。

不管是移動開發(fā)還是前端開發(fā),對于性能問題分析的思路都是先分析并定位問題,Flutter也不例外,借助Flutter 提供的度量性能工具,我們可以快速定位代碼中的性能問題,而性能圖層就是幫助我們確認問題影響范圍的利器,它類似Android的圖層分析工具。

為了使用性能圖層,Flutter提供了分析(Profile)模式,與調試代碼可以通過模擬器在調試模式下找到代碼邏輯 Bug 不同,性能問題需要在發(fā)布模式下使用真機進行檢測。相比發(fā)布(Release)模式而言,調試模式增加了很多額外的檢查(比如斷言),這些檢查可能會耗費很多資源;更重要的是,調試模式使用 JIT (即時編譯)模式運行應用,代碼執(zhí)行效率較低。這就使得調試模式運行的應用,無法真實反映出它的性能問題。

而另一方面,模擬器使用的指令集為 x86,而真機使用的指令集是 ARM,由于這兩種方式的二進制代碼執(zhí)行行為完全不同,因此模擬器與真機的性能差異較大。一些 x86 指令集擅長的操作模擬器會比真機快,而另一些操作則會比真機慢,這也使得我們無法使用模擬器來評估真機才能出現的性能問題。

為了調試性能問題,我們需要在發(fā)布模式的基礎之上,為分析工具提供少量必要的應用追蹤信息,這就是分析模式。除了一些調試性能問題必須的追蹤方法之外,Flutter 應用的分析模式和發(fā)布模式的編譯和運行是類似的,只是啟動參數變成了 profile 而已。我們可以在 Android Studio 中通過菜單欄點擊 【Run】-【Profile 】‘main.dart’ 選項啟動應用,也可以通過命令行參數 flutter run --profile 運行 Flutter 應用。

渲染問題分析

在完成了應用啟動之后,接下來我們就可以利用 Flutter 提供的渲染問題分析工具,即性能圖層(Performance Overlay)來分析渲染問題了。性能圖層會在當前應用的最上層,以 Flutter 引擎自繪的方式展示 GPU 與 UI 線程的執(zhí)行圖表,而其中每一張圖表都代表當前線程最近 300 幀的表現,如果 UI 產生了卡頓(跳幀),這些圖表可以幫助我們分析并找到原因,如下圖所示。

上圖演示了性能圖層的展現樣式。其中,GPU 線程的性能情況在上面,UI 線程的情況顯示在下面,藍色垂直的線條表示已執(zhí)行的正常幀,綠色的線條代表的是當前幀。

同時,為了保持 60Hz 的刷新頻率,GPU 線程與 UI 線程中執(zhí)行每一幀耗費的時間都應該小于 16ms(1/60 秒)。在這其中有一幀處理時間過長,就會導致界面卡頓,圖表中就會展示出一個紅色豎條,如下圖所示。 

如果紅色豎條出現在 GPU 線程圖表,意味著渲染的圖形太復雜,導致無法快速渲染;而如果是出現在了 UI 線程圖表,則表示 Dart 代碼消耗了大量資源,需要優(yōu)化代碼執(zhí)行時間。

GPU問題定位

GPU渲染問題主要集中在底層渲染耗時上,有時候 Widget 樹雖然構造起來容易,但在 GPU 線程下的渲染卻很耗時。例如,涉及 Widget 裁剪、蒙層這類多視圖疊加渲染,或是由于缺少緩存導致靜態(tài)圖像的反復繪制,都會明顯拖慢 GPU 的渲染速度。

接下來,使用性能圖層提供的兩項參數,即檢查多視圖疊加的視圖渲染開關 checkerboardOffscreenLayers和檢查緩存的圖像開關checkerboardRasterCacheImages來檢查這兩種情況。

checkerboardOffscreenLayers

多視圖疊加通常會用到 Canvas 里的 savaLayer 方法,這個方法在實現一些特定的效果(比如半透明)時非常有用,但由于其底層實現會在 GPU 渲染上涉及多圖層的反復繪制,因此會帶來較大的性能問題。

對于 saveLayer 方法使用情況的檢查,我們只需要在 MaterialApp 的初始化方法中,將 checkerboardOffscreenLayers 開關設置為 true,分析工具就會自動幫我們檢測多視圖疊加的情況。使用了 saveLayer 的 Widget 會自動顯示為棋盤格式,并隨著頁面刷新而閃爍。不過,saveLayer 是一個較為底層的繪制方法,因此我們一般不會直接使用它,而是會通過一些功能性 Widget,在涉及需要剪切或半透明蒙層的場景中間接地使用。所以一旦遇到這種情況,我們需要思考一下是否一定要這么做,能不能通過其他方式來實現呢?

比如下面的例子中,我們使用 CupertinoPageScaffold 與 CupertinoNavigationBar 實現了一個動態(tài)模糊的效果,代碼如下: 

  1. CupertinoPageScaffold(  
  2.   navigationBar: CupertinoNavigationBar(),//動態(tài)模糊導航欄  
  3.     child: ListView.builder(  
  4.       itemCount: 100,  
  5.       //為列表創(chuàng)建100個不同顏色的RowItem  
  6.       itemBuilder: (context, index)=>TabRowItem(  
  7.             index: index,  
  8.             lastItem: index == 100 - 1,  
  9.             color: colorItems[index],//設置不同的顏色  
  10.             colorName: colorNameItems[index],  
  11.           )  
  12.     )  
  13. ); 

其中,模糊的NavigationBar效果如下圖所示。

當我們開啟checkerboardOffscreenLayers之后,可以看到視圖蒙層效果對GPU的渲染壓力導致性能視圖頻繁閃動。如果我們沒有對動態(tài)模糊效果有特殊需求,則可以使用不帶模糊效果的 Scaffold 和白色的 AppBar 實現同樣的產品功能,來解決這個性能問題。 

  1. Scaffold(  
  2.   //使用普通的白色AppBar  
  3.   appBar: AppBar(title: Text('Home', style: TextStyle(color:Colors.black),),backgroundColor: Colors.white),  
  4.   body: ListView.builder(  
  5.       itemCount: 100,  
  6.       //為列表創(chuàng)建100個不同顏色的RowItem  
  7.       itemBuilder: (context, index)=>TabRowItem(  
  8.         index: index,  
  9.         lastItem: index == 100 - 1,  
  10.         color: colorItems[index],//設置不同的顏色  
  11.         colorName: colorNameItems[index],  
  12.       )  
  13.   ),  
  14. ); 

運行一下代碼,可以看到,在去掉了模糊效果之后,GPU 的渲染壓力得到了緩解,checkerboardOffscreenLayers 檢測圖層也不再頻繁閃爍了。

checkerboardRasterCacheImages

從資源的角度看,另一類非常消耗性能的操作是渲染圖像,因為圖像渲染會涉及 I/O、GPU 存儲以及不同通道的數據格式轉換,因此渲染過程的構建需要消耗大量資源。為了緩解 GPU 的壓力,Flutter 提供了多層次的緩存快照,這樣 Widget 重建時就無需重新繪制靜態(tài)圖像了。

與檢查多視圖疊加渲染的 checkerboardOffscreenLayers 參數類似,Flutter 提供了檢查緩存圖像的開關 checkerboardRasterCacheImages,來檢測在界面重繪時頻繁閃爍的圖像。

為了提高靜態(tài)圖像顯示性能,我們可以把需要靜態(tài)緩存的圖像加到 RepaintBoundary 中,RepaintBoundary 可以確定 Widget 樹的重繪邊界,如果圖像足夠復雜,Flutter 引擎會自動將其緩存,從而避免重復刷新。當然,因為緩存資源有限,如果引擎認為圖像不夠復雜,也可能會忽略 RepaintBoundary。下面的代碼展示了通過 RepaintBoundary,將一個靜態(tài)復合 Widget 加入緩存的具體用法,如下所示。 

  1. RepaintBoundary(//設置靜態(tài)緩存圖像  
  2.   child: Center(  
  3.     child: Container(  
  4.       color: Colors.black,  
  5.       height: 10.0,  
  6.       width: 10.0,  
  7.     ),  
  8. )); 

UI 線程問題定位

如果說 GPU 線程問題定位的是渲染引擎底層渲染異常,那么 UI 線程問題發(fā)現的則是應用的性能瓶頸。比如在視圖構建時,在 build 方法中使用了一些復雜的運算,或是在主 Isolate 中進行了同步的 I/O 操作。這些問題,都會明顯增加 CPU 的處理時間,拖慢應用的響應速度。

針對這類問題,我們可以使用 Flutter 提供的 Performance 工具,來記錄應用的執(zhí)行軌跡。Performance 是一個強大的性能分析工具,能夠以時間軸的方式展示 CPU 的調用棧和執(zhí)行時間,去檢查代碼中可疑的方法調用。

打開 Android Studio 底部工具欄中的“Open DevTools”按鈕之后,系統(tǒng)會自動打開 Dart DevTools 的網頁,將頂部的 tab 切換到 Performance 后,我們就可以開始分析代碼中的性能問題了。

接下來,我們通過一個在 ListView 中計算 MD5 的例子來演示 Performance 的具體分析過程。考慮到在 build 函數中進行渲染信息的組裝是一個常見的操作,為了演示Performance的使用過程,我們故意放大計算 MD5 的耗時,如循環(huán)迭代計算了 1 萬次。 

  1. class MyHomePage extends StatelessWidget {  
  2.   MyHomePage({Key key}) : super(key: key);  
  3.   String generateMd5(String data) {  
  4.     //MD5固定算法  
  5.     var content = new Utf8Encoder().convert(data);  
  6.     var digest = md5.convert(content);  
  7.     return hex.encode(digest.bytes);  
  8.   }  
  9.   @override  
  10.   Widget build(BuildContext context) {  
  11.     return Scaffold(  
  12.       appBar: AppBar(title: Text('demo')),  
  13.       body: ListView.builder(  
  14.           itemCount: 30,// 列表元素個數  
  15.           itemBuilder: (context, index) {  
  16.             //反復迭代計算MD5  
  17.             String str = '1234567890abcdefghijklmnopqrstuvwxyz' 
  18.             for(int i = 0;i<10000;i++) {  
  19.               str = generateMd5(str);  
  20.             }  
  21.             return ListTile(title: Text("Index : $index"), subtitle: Text(str));  
  22.           }// 列表項創(chuàng)建方法  
  23.       ),  
  24.     );  
  25.   }  

與性能圖層能夠自動記錄應用執(zhí)行情況不同,使用 Performance 來分析代碼執(zhí)行軌跡,我們需要手動點擊【Record】按鈕去主動觸發(fā),在完成信息的抽樣采集后再點擊【Stop】按鈕結束錄制,然后就可以得到在這期間應用的執(zhí)行情況了。

Performance 記錄的應用執(zhí)行情況叫做 CPU 幀圖,又被稱為火焰圖。火焰圖是基于記錄代碼執(zhí)行結果所產生的圖片,用來展示 CPU 的調用棧,表示的是 CPU 的繁忙程度。所以,我們要檢測 CPU 耗時問題,皆可以查看火焰圖底部的哪個函數占據的寬度最大。只要有“平頂”,就表示該函數可能存在性能問題,如下圖所示。

可以看到,_MyHomePage.generateMd5 函數的執(zhí)行時間最長,幾乎占滿了整個火焰圖的寬,而這也與代碼中存在的問題是一致的。在找到了問題之后,我們就可以使用 Isolate(或 compute)將這些耗時的操作挪到并發(fā)主 Isolate 之外去完成了。

總結

在 Flutter 中,性能分析過程可以分為 GPU 線程問題定位和 UI 線程(CPU)問題定位,而它們都需要在真機上以分析模式(Profile)啟動應用,并通過性能圖層分析大致的渲染問題范圍。

一旦確認問題存在,接下來就需要利用 Flutter 所提供的分析工具來定位問題原因了。關于 GPU 線程渲染問題,我們可以重點檢查應用中是否存在多視圖疊加渲染,或是靜態(tài)圖像反復刷新的現象。而 UI 線程渲染問題,我們則是通過 Performance 工具記錄的火焰圖(CPU 幀圖),分析代碼耗時來找出應用執(zhí)行瓶頸。

總的來說,由于 Flutter 采用基于聲明式的 UI 設計理念,以數據驅動渲染,并采用 Widget->Element->RenderObject 三層結構,屏蔽了無謂的界面刷新,能夠保證絕大多數情況下我們構建的應用都是高性能的,所以在使用分析工具檢測出性能問題之后,通常我們并不需要做太多的細節(jié)優(yōu)化工作,只需要在改造過程中避開一些常見的坑,就可以獲得優(yōu)異的性能。同時,為了避免造成性能問題,還應該從以下幾個方面著手:

  •  控制 build 方法耗時,將 Widget 拆小,避免直接返回一個巨大的 Widget,這樣 Widget 會享有更細粒度的重建和復用;
  •  盡量不要為 Widget 設置半透明效果,而是考慮用圖片的形式代替,這樣被遮擋的 Widget 部分區(qū)域就不需要繪制了;
  •  對列表采用懶加載而不是直接一次性創(chuàng)建所有的子 Widget,這樣視圖的初始化時間就減少了。 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2012-10-09 09:43:50

WLAN優(yōu)化無線局域網WLAN

2024-03-04 08:00:00

Java開發(fā)

2014-02-20 13:36:35

業(yè)務服務管理 應用性能優(yōu)化

2011-10-17 09:47:53

應用性能工作負載服務器

2020-07-15 07:00:00

移動應用開發(fā)者指南

2010-02-23 16:17:59

2023-07-21 08:42:23

App汽車之家

2023-08-23 08:23:47

應用性能優(yōu)化

2025-03-12 04:25:00

Linux系統(tǒng)優(yōu)化應用

2025-10-29 01:25:00

CSSJS靜態(tài)提取

2021-08-09 16:39:52

工具JVM剖析

2014-08-04 16:38:37

移動應用

2023-07-19 15:45:47

ReactDOM輕量級

2015-12-11 14:02:02

php應用

2015-07-24 16:12:58

應用性能管理

2023-11-06 08:01:09

Go同步異步

2023-08-24 16:54:05

2015-04-03 17:35:50

移動應用性能聽云

2014-08-08 15:36:39

Apdex

2012-08-16 13:24:58

Windows 8Windows 7對比
點贊
收藏

51CTO技術棧公眾號

日韩一区二区三区电影| 亚洲精品视频一区| 国产日韩在线看片| 欧美三根一起进三p| 都市激情亚洲| 在线亚洲精品福利网址导航| 亚洲小视频在线播放| 亚洲色图欧美视频| 精品中文字幕一区二区| 97精品伊人久久久大香线蕉| 人与嘼交av免费| 亚洲一区电影| 欧美三级一区二区| 免费一级特黄特色毛片久久看| 韩国中文字幕2020精品| 国产乱码精品1区2区3区| 日韩av色综合| 久草免费新视频| 色97色成人| 亚洲精品久久久久久久久久久| 中文字幕第17页| 欧美裸体视频| 欧美视频二区| 国产亚洲一区二区在线| 91亚洲一线产区二线产区| 成人啊v在线| 午夜不卡av免费| 潘金莲一级淫片aaaaa免费看| 欧美一级黄视频| 影音先锋久久| 理论片在线不卡免费观看| 老鸭窝一区二区| 成人爽a毛片| 91精品国产美女浴室洗澡无遮挡| 国产无套粉嫩白浆内谢的出处| 欧美卡一卡二| 亚洲人成精品久久久久久| 日韩av图片| 嫩草研究院在线观看| 成人永久免费视频| 亚洲综合日韩中文字幕v在线| 波多野结衣一本一道| 亚洲日韩成人| 欧美国产日韩二区| 久草网站在线观看| 亚洲欧美在线专区| 久久偷看各类女兵18女厕嘘嘘| 亚洲图片第一页| 国产欧美日韩在线观看视频| 日韩电影在线观看永久视频免费网站| 日本在线不卡一区二区| 暧暧视频在线免费观看| 亚洲女同ⅹxx女同tv| 正在播放亚洲| 黄色网页在线免费观看| 国产suv精品一区二区三区| 成人精品一区二区三区| 1024手机在线视频| 欧美a级片网站| 亚洲第一网中文字幕| 久久久久亚洲av无码专区首jn| 免费一级欧美在线大片| 亚洲成人激情综合网| 人人妻人人澡人人爽欧美一区| 91三级在线| 伊人色综合久久天天人手人婷| 国产福利片一区二区| 四虎在线视频免费观看| 成人一区二区在线观看| 国产精品免费在线| 四虎影视在线播放| 久久久国产精品麻豆| 亚洲精品乱码久久久久久蜜桃91| 欧洲一区av| 中文字幕第一区综合| 四虎一区二区| 黄网站免费在线观看| 亚洲青青青在线视频| 成品人视频ww入口| 中国字幕a在线看韩国电影| 日韩欧美在线视频免费观看| 人妻无码视频一区二区三区| 电影在线观看一区二区| 欧美美女激情18p| 成人性免费视频| 麻豆免费在线| 欧美亚洲综合色| 国产精品igao网网址不卡| 亚洲一二av| 亚洲欧洲国产精品| 黄色录像免费观看| 一本久道久久久| 国产精品三级久久久久久电影| 91theporn国产在线观看| 日韩视频在线一区二区三区 | 国产伦精品一区二区三区| 污视频在线免费| 亚洲国产精品国自产拍av| 国产精品无码乱伦| 午夜激情在线播放| 欧美夫妻性生活| 国产高清自拍视频| 天天射—综合中文网| 国产做受高潮69| 一区二区视频网| 成人高清视频免费观看| 少妇特黄a一区二区三区 | 亚洲乱码国产乱码精品精可以看| 韩日视频在线观看| 国产欧美自拍| 亚洲精品美女久久| 亚洲熟女毛茸茸| 亚洲免费在线| 成人黄色在线免费观看| 成年人视频免费在线观看| 一区二区三区在线观看动漫| 99蜜桃臀久久久欧美精品网站| 91网在线看| 在线一区二区视频| 日韩综合第一页| 91精品在线观看国产| 中文字幕精品在线视频| 国产在线观看免费视频今夜| 麻豆91小视频| 欧美日本亚洲| 国产美女精品写真福利视频| 欧美精品第1页| 人妻aⅴ无码一区二区三区| 激情综合中文娱乐网| 成人做爽爽免费视频| 国产精品熟女久久久久久| 91免费观看在线| 欧美性猛交内射兽交老熟妇| 巨大黑人极品videos精品| 亚洲老头同性xxxxx| 久久久久黄色片| 国产在线视频精品一区| 亚洲欧美丝袜| 成人福利片在线| 亚洲深夜福利在线| 久久久久久久久久久影院| 成人精品鲁一区一区二区| 视色,视色影院,视色影库,视色网| 欧美亚洲综合视频| 中文字幕精品在线| 依依成人在线视频| 国产精品人成在线观看免费| 国产日韩成人内射视频 | 亚洲精品综合精品自拍| 国产黄色片视频| 成人免费看的视频| 日本中文字幕在线视频观看| 7777精品| 久久久久久久成人| 日本波多野结衣在线| 亚洲第一成人在线| 超碰男人的天堂| 中日韩视频在线观看| 精品一区日韩成人| 小早川怜子影音先锋在线观看| 日韩h在线观看| 天堂在线免费观看视频| 久久久国产综合精品女国产盗摄| 亚洲欧美激情网| 欧美电影一二区| 91久久久亚洲精品| 欧美14一18处毛片| 亚洲激情视频网| 4438国产精品一区二区| 久久久久久久久久久久久女国产乱 | 91网站免费观看| 污影院在线观看| 亚洲电影天堂av| 精品成人无码久久久久久| 国产亚洲精品中文字幕| 人人干人人干人人| 99这里只有精品视频| 久久久久久亚洲精品中文字幕| 日韩在线观看视频一区| 岛国av一区二区三区| 一级特黄曰皮片视频| 九色|91porny| 丰满少妇久久久| 欧美女优在线视频| 91免费在线视频网站| 国产啊啊啊视频在线观看| 日韩经典一区二区三区| 伊人久久国产精品| 亚洲午夜激情网页| 波多野结衣国产精品| 欧美成人一品| 久久久人人爽| 日本免费成人| 91精品国产自产91精品| 91激情在线| 亚洲国产成人精品电影| 自拍偷拍色综合| 亚洲午夜久久久久久久久电影院| 色噜噜日韩精品欧美一区二区| 精品一区二区三区久久| 波多野结衣之无限发射| 欧美高清在线| 久久精品国产理论片免费| 欧美激情啪啪| 7m第一福利500精品视频| 嫩草香蕉在线91一二三区| 亚洲成人亚洲激情| 国产精品久久久久久无人区| 精品久久久久久久久久ntr影视| 欧美成人久久久免费播放| 成人激情黄色小说| 国产精品自拍视频在线| 国产欧美丝祙| 大陆极品少妇内射aaaaaa| 国产欧美高清视频在线| 国产私拍一区| 欧美电影在线观看一区| 国产精品成人一区| av中文在线资源| 亚洲第一区中文99精品| 在线免费观看一区二区| 日韩欧美中文在线| 麻豆changesxxx国产| 国产精品美女一区二区三区| 一二三不卡视频| 成人av在线一区二区| 亚洲一二三不卡| 日韩av电影天堂| 久久精品免费一区二区| 午夜日韩av| 亚洲一一在线| 精品国产乱码| 久久天堂国产精品| 国产精品乱战久久久| 亚洲综合视频1区| 久久电影天堂| 国产精品日日摸夜夜添夜夜av| 亚洲天堂手机| 68精品国产免费久久久久久婷婷| 日本色护士高潮视频在线观看| 久久久成人精品视频| 在线免费黄色| 中文字幕欧美视频在线| 国产在线观看免费| 亚洲片国产一区一级在线观看| 五月天婷婷激情网| 亚洲国产日韩一区| 五月婷婷深深爱| 日韩av综合中文字幕| 深夜视频在线免费| 精品中文视频在线| 日韩国产福利| 亚洲免费中文字幕| 国产乱理伦片a级在线观看| 精品1区2区3区| 伊人网视频在线| 91精品在线免费| 99国产揄拍国产精品| 婷婷亚洲久悠悠色悠在线播放| 国产精品第九页| 午夜在线成人av| 久久黄色精品视频| 日韩欧美在线字幕| 这里只有精品免费视频| 色国产综合视频| 中文字幕一区二区三区四区视频| 色噜噜狠狠成人网p站| 国产成人精品网| 欧美色图天堂网| 精品黑人一区二区三区在线观看 | 日操夜操天天操| 天天综合网 天天综合色| 六月丁香婷婷综合| 欧美日韩专区在线| 99精品国产99久久久久久97| 精品国产髙清在线看国产毛片| 天天干,夜夜爽| 国产亚洲美女精品久久久| 日本黄色片在线观看| 欧美日韩国产123| 午夜欧美激情| 成人黄色大片在线免费观看| 2021年精品国产福利在线| 欧美美乳视频网站在线观看| 色婷婷综合网| 日韩xxxx视频| 日韩精品午夜视频| 日韩极品视频在线观看| 国产手机视频一区二区| 性chinese极品按摩| 国产黑丝在线一区二区三区| 51调教丨国产调教视频| 中文字幕日韩精品一区| 国产精品成人国产乱| 欧美色图一区二区三区| 污污视频在线免费看| 综合网日日天干夜夜久久| 激情网站在线| 国产日韩欧美在线播放| 精品福利网址导航| 一区二区三区国产福利| 国产欧美丝祙| 91精品国产高清91久久久久久 | 九九视频精品免费| 风间由美一二三区av片| 亚洲男人天堂一区| 懂色av中文字幕| 欧美精品一区二区三| 日本精品在线| 国产精品电影观看| 久久精品福利| 91大学生片黄在线观看| 日本亚洲一区二区| 超碰97在线资源站| 亚洲精品成人少妇| 亚洲综合视频在线播放| 精品香蕉在线观看视频一| 三级网站视频在在线播放| 国产精品三级网站| 欧美精品momsxxx| 你真棒插曲来救救我在线观看| 久久精品国内一区二区三区| 亚洲国产无码精品| 亚洲国产成人av| 亚洲国产精品久久人人爱潘金莲| 中文字幕无线精品亚洲乱码一区 | 精品综合久久| 国产精品jizz在线观看美国| 九九热精品国产| 欧美激情一区二区在线| 免费黄在线观看| 色综合久久久网| 手机看片一区二区| 高清亚洲成在人网站天堂| 精品一区二区三区中文字幕| 亚洲欧洲一区二区在线观看| 日韩在线播放一区二区| av在线网站观看| 精品久久久久久亚洲国产300| 亚洲经典一区二区三区| 欧美猛少妇色xxxxx| 视频亚洲一区二区| 国产树林野战在线播放| 黄色日韩网站视频| 无码黑人精品一区二区| 51精品久久久久久久蜜臀| 麻豆视频免费在线观看| 91美女片黄在线观| 亚洲五月综合| xxxx国产视频| 亚洲一区在线播放| 好男人www在线视频| 久久久久在线观看| 九色丨蝌蚪丨成人| 久久精品免费一区二区| 国产三级精品视频| 在线观看免费黄色小视频| www.欧美三级电影.com| 欧亚一区二区| 国产麻豆电影在线观看| 国产麻豆午夜三级精品| 久久久全国免费视频| 亚洲级视频在线观看免费1级| 在线观看的黄色| 日韩高清dvd| 激情综合网最新| 久久久久久国产精品免费播放| 精品久久久久久久久久久久包黑料| xxxx另类黑人| 欧美激情第一页在线观看| 久久精品国产99久久6| 三级影片在线看| 亚洲国模精品一区| 欧洲精品一区二区三区| 五月天男人天堂| 成人高清视频在线| 天天综合久久综合| 欧美成人精品不卡视频在线观看| 福利在线一区| 91香蕉视频污版| 亚洲美女一区二区三区| 天天综合网在线| 国产精品专区一| 伊人精品在线| 国产美女永久免费无遮挡| 91精品国产手机| 在线天堂新版最新版在线8| 一道精品一区二区三区| 成人小视频免费在线观看| 日韩免费av网站| 欧美高清视频免费观看| 国产成人三级| 日本中文字幕有码| 91国偷自产一区二区三区观看 | 九九亚洲精品| 91小视频在线播放| 色综合欧美在线| 欧美日韩经典丝袜| 日韩视频精品| caoporm超碰国产精品|