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

Android 性能個案研究

移動開發(fā) Android
對于Android的開發(fā),相信很多開發(fā)者在Android性能優(yōu)化上花費了很大功夫,的確,這也是項目開發(fā)的一個關(guān)鍵所在,下面,就將所有的Android性能優(yōu)化個案奉獻給大家。

Falcon Pro

我最近在我的Nexus 4上安裝了Falcon Pro,一個新的Twitter客戶端。我真的很喜歡使用這個應(yīng)用程序,但我在使用它時注意到了某些地方存在一些問題,看起來滾動主時間軸并沒有得到非常穩(wěn)定的幀率。我深鉆了一下我每天工作所用工具和技術(shù)中的一些,我能很快地找到一些Falcon Pro 并不如它本可以表現(xiàn)得那么好的原因。

Falcon Pro

我在這篇文章里的目的是告訴你如何追蹤和修復(fù)應(yīng)用程序中的性能問題,即使你沒有它的源代碼。所有你需要的只是一份最新的Android 4.2 SDK –新的ADT bundle使設(shè)置變得簡易。我極力推薦你下載這個應(yīng)用程序來親自應(yīng)用這里描述的技術(shù)。對你來說不幸的是Falcon Pro是款付費應(yīng)用,因此我將給您提供你可以下載的各種文件的鏈接來跟隨我的分析。

關(guān)于性能

Android 4.1把重點放在Butter項目的性能上,它帶來了新的性能分析工具,如systrace。Android 4.2不提供象systrace那么顯著的工具,只是提供了對你的工具箱的一些有益補充。在本文的后面你會發(fā)現(xiàn)這些新工具中的一個。

性能分析往往是一個復(fù)雜的任務(wù),需要大量的經(jīng)驗和對某些工具、硬件、API的深入的知識等等。經(jīng)驗使我能只用幾分鐘就進行在這里展示的分析——你可以在我十二月一日的Twitter stream上看到它“實時”發(fā)生。你可能要多試幾次才會感覺這種工作很容易。

證實我的懷疑

關(guān)于性能操作,牢記最重要的一件事就是始終用測試去驗證你的行為。即使Falcon Pro 在Nexus4上運行幀率下降看起來很明顯,我還是需要確認(rèn)一下。因此,我將應(yīng)用安裝到一部提供不同于Nexus性能概況并且比Nexus4更強大的Nexus7上。Nexus 7提供了一個有趣的更有優(yōu)勢的性能分析工具,我們以后再談。

在Nexus 7安裝應(yīng)用程序并沒有什么區(qū)別,我仍能看到幀率下降。應(yīng)用甚至顯得稍差。為了描述這個問題,我決定用4.1以后引入的“GPU呈現(xiàn)模式分析”工具。你可以在應(yīng)用設(shè)置下的“開發(fā)者選項”中找到它。

如果“開發(fā)者選項”在你的android4.2設(shè)備上不能使用,找到“關(guān)于手機”或者“關(guān)于平板”勾選底部的7的倍數(shù)構(gòu)建選項。

Turn on Profile GPU rendering

當(dāng)選項打開后, 系統(tǒng)會保持跟蹤每個窗口繪制最后128幀所耗費的時間。使用這個工具你必須首先結(jié)束掉應(yīng)用– android將來的版本將擺脫這個限制。

方法說明:除非另有規(guī)定,本分析每個測量是通過每次緩慢滾動主時間軸上下幾點,顯示最多有一個額外的列表項。

在運行應(yīng)用,主時間軸開始滾動時候,我在終端執(zhí)行了如下命令:

$ adb shell dumpsys gfxinfo com.jv.falcon.pro

在產(chǎn)生的日志中,你會發(fā)現(xiàn)一個標(biāo)題為: Profile data in ms. 這一節(jié)包含為每個窗口所屬應(yīng)用產(chǎn)生的3列表格。 為了使用這些數(shù)據(jù), 簡單的復(fù)制表格到你喜歡的電子表格軟件中就會生成一個堆疊柱狀圖表。下面的圖是我的測量結(jié)果 (原始表格數(shù)據(jù) 可以在線查看.)

每列給出渲染每幀大概需要多長時間:
  1. Draw是消耗在構(gòu)建java顯示列表的時間。 它顯示出運行方法用的時間諸如View.onDraw(Canvas).
  2. Process是消耗在Android的2D渲染器執(zhí)行顯示列表的時間。你的視圖層次越多,要執(zhí)行的繪圖命令就越多。
  3. Execute是消耗在排列每個發(fā)送過來的幀的順序的時間.這部分的圖通常是很小的。

注意:使順利在60幀,每幀必須小于16毫秒完成。

關(guān)于Execute:如果執(zhí)行耗費了過長的時間,這意味著你是跑在前面的圖形管線。 android在運行時可以有3個緩沖區(qū).如果你需要另一個應(yīng)用程序?qū)⒆枞钡狡渲械囊粋€緩沖區(qū)釋放出來。兩個原因會發(fā)生這種情況。第一,你的應(yīng)用在Dalvik中快速繪制但在GPU顯示列表時候消耗了大量時間。第二,你的應(yīng)用程序花了很長的時間來執(zhí)行第幾幀;一旦管線滿了他將無法趕上,除非動畫完成。我們希望Android在未來版本中改進。

該圖顯然證實了我的懷疑:通常應(yīng)用運行良好,不過有時候會運行幀率下降。

進一步觀察

盡管我們收集的數(shù)據(jù)顯示,應(yīng)用有時候花費太久去渲染,但是這并不是全部的事實。幀刷新率也能夠被沒有調(diào)度或者錯誤調(diào)度的幀所影響。例如,一個應(yīng)用總是以少于16ms的時間來畫圖,但是有時候在幀之間展現(xiàn)更長的任務(wù),有時他將失去一個幀。

Systrace 是用于檢查,一個Falcon Pro 是否在遭受這個問題最簡單的工具。這個工具是一個具有非常低開銷的系統(tǒng)分析工具。它的時域分析相當(dāng)精確,并且給你展示了整個系統(tǒng)在做什么,包括你的應(yīng)用。

為了讓systrace起作用,進入Developer options并且選擇Enable traces。一個對話框出現(xiàn),并且讓你選擇你想要分析什么類型的事件。我們只關(guān)心Graphics 和 View。

注意:不要忘記關(guān)掉分析GPU rendering。

Enable systrace

#p#

為了使用systrace,打開一個終端,并從Android SDK的tools/systrace下運行systrace.py:

默認(rèn)該工具將捕獲5秒鐘的事件。我只是上下滾動主時間軸。跟蹤結(jié)果是一個獨立的HTML文件。

建議:為了在systrack中能夠?qū)Ш剑梢允褂肳ASD鍵平移和縮放。W將會放大鼠標(biāo)光標(biāo)處的內(nèi)容。

一個systrack文件展示了很多有趣的信息。比如,它表明你是否有一個進程計劃在CUP。如果你放大到名為10440: m.jv.falcon.pro的最后一行,你能看到應(yīng)用做了些什么。如果你查看performTraversals中的一塊,你能看到應(yīng)用繪制一幀消耗了多長時間。

雖然大多數(shù)的performtraversals低于16毫秒的臨界值,但是有些需要更多的時間,這也證實了先前獲得的測量結(jié)果(放大在935 MS標(biāo)記看到這樣一塊。)

更有意思的是,你可以看到應(yīng)用有時候會丟失一幀,因為它沒有安排一個繪制操作。放大到標(biāo)記為270毫秒的地方,找到deliverInputEvent 塊,消耗25毫秒。這些塊表示應(yīng)用消耗25毫秒來響應(yīng)用戶觸摸事件。由于應(yīng)用程序是使用ListView,這可能是由于在適配器的一個問題,我們隨后會回過頭來討論。

Systrace十分有用,不僅是它能檢查應(yīng)用消耗過多的是在繪制上,而且也能幫助我們找到其他的性能瓶頸。盡管它很有用,但是也存在自身的局限性。它只提供了高層次的數(shù)據(jù),我們需要利用其他的工具才能明白它真正發(fā)生了什么。

可視化的透支

繪制性能問題可能有很多根本原因,但是其中一個常見的是透支。透支發(fā)生在應(yīng)用每次向系統(tǒng)請求在其他物體上繪制內(nèi)容。想像一個最簡單的應(yīng)用問題:一個白色背景的窗口,在它的上面一個按鈕。當(dāng)系統(tǒng)繪制按鈕時,要繪制已存在的白色背景上。這就是透支。

透支是不可避免的,但是過多的透支就會產(chǎn)生問題。設(shè)備具有有限的內(nèi)存帶寬,如果透支導(dǎo)致你的應(yīng)用請求資源超過了可用帶寬,就是造成性能下降。不同設(shè)備可以明確負(fù)擔(dān)透支的數(shù)量是變化的。

一個好的經(jīng)驗法則是針對最大透支的2倍;這意味著你可以繪制屏幕一次,再畫上畫兩次,每個像素總量的3倍。

透支的存在也通常表示其他問題:太多的視圖,層次結(jié)構(gòu)復(fù)雜,通脹時間較長,等

Android提供了三個工具來識別和修復(fù)過度繪制: Hierarchy Viewer, Tracer for OpenGL 和 Show GPU overdraw。前兩個可以在ADT或者獨立的監(jiān)控工具中找到。最后一個是開發(fā)這選項的一部分。

Show GPU overdraw 使用不用的顏色來繪制屏幕,來指示過度繪制在哪里發(fā)生以及程度如何。打開此選項然后別忘了關(guān)閉你自己的應(yīng)用 – 未來的Android版本中將不再需要這樣做。

Enable overdraw debugging

在看Falcon Pro之前,讓我們看一下設(shè)置Show GPU overdraw選項的頁面長什么樣。

Settings with overdraw debugging

如果你記得每種顏色代表的含義,這些結(jié)果就很容易解釋:

  • 沒有顏色意味著沒有透支。像素只畫了一次。在這個例子中,你可以看到背景顏色沒有變化。
  • 藍色 意味著透支1倍。像素繪制了兩次。大片的藍色還是可以接受的。 (如果整個窗口是藍色的,你可以擺脫一層。)
  • 綠色 意味著透支2倍。像素繪制了三次。中等大小的綠色區(qū)域是可以接受的但你也應(yīng)該嘗試優(yōu)化,減少他們。
  • 淺紅 意味著透支3倍。像素繪制了四次。小范圍內(nèi)可以接受。
  • 暗紅 意味著透支4倍。像素繪制了五次或者更多。這是錯誤的,要修復(fù)他們。

基于此信息你可以看到設(shè)置是一個好的應(yīng)用程序,不需要任何額外的工作。有一點紅色在轉(zhuǎn)換部分,但是并不需要過于糾結(jié)。

透明像素:仔細看看以前的截圖。每個圖標(biāo)是藍色的。你可以看到位圖的透明像素加劇了透支。透明像素必須被GPU處理并且代價是昂貴的。Android使用層和9-pathches作為最優(yōu)方案去避免繪制透明像素,所有你只用考慮位圖就行。

透支和GPU: 在移動設(shè)備上有兩種GPU架構(gòu)。第一個使用了延遲渲染, 例如:ImaginationTech的SGX系列。 這種架構(gòu)允許GPU檢測和修復(fù)透支的具體情況 (如果你是混合透明或半透明的像素,它將不起作用)第二結(jié)構(gòu)采用直接繪制,可以在NVIDIA的Tegra GPU的找到。這種體系結(jié)構(gòu)不能優(yōu)化你的透支,這就是為什么我喜歡在Nexus 7試驗。兩種架構(gòu)都是各種所長,各有所短,但是具體的內(nèi)容已經(jīng)超出本文范圍。只要知道兩種方式都很好的運行。

現(xiàn)在讓我們看一下 Falcon Pro…

Overdraw in Falcon Pro

截圖中有大片的紅色! 然而有趣的是列表的背景是綠色的。這表明該應(yīng)用甚至在繪制正文之前,就有了一個2倍的過度繪制。這里我們看到的問題很可能跟多重全屏背景有關(guān)。要修復(fù)它通常比較容易。

刪除附加層

為了減少透支,我們必須了解它是怎么來的。這是比層次視圖、跟蹤OpenGL更有用。層次視圖是ADT(或者監(jiān)聽器)的一部分,并可以生成層次視圖快照。特別是調(diào)試布局問題,很有幫助,對性能工作更是得心應(yīng)手。

重要提示:層次視圖只能工作在非安全設(shè)備上,比如工程機、平板或者模擬器。在某些設(shè)備上使用層次視圖需要在你的應(yīng)用上安裝ViewServer(一個開源庫)。

在ADT(或監(jiān)視器)中打開 層次查看視圖 ,然后選擇 Windows 選項卡。斜體高亮的窗口是設(shè)備的前臺窗口,也就是通常情況下你要查看的那個。點擊它然后 點擊工具條中的 Load 按鈕 (它看起來像一個由藍方框組成的的樹形結(jié)構(gòu))。加載這棵樹可能需要一會兒所以要有耐心。加載好后,可以看到類似下圖的樣子。

Hierarchy Viewer

現(xiàn)在層次的視圖已經(jīng)展現(xiàn)在工具中,我們可以查看它就像瀏覽一個Photoshop文檔那樣。要進行查看可以點擊工具條中的第二個按鈕 – 該按鈕的提示是“捕獲窗口層次[…]”。Adobe Photoshop不是必須的,因為這里生成的文檔也可以由諸如Pixelmator和GIMP之類的工具來打開。我生成的PSD 文件已經(jīng)可以從網(wǎng)上下載。

該Photoshop文檔以每一個視圖一個層次的方式展示了該應(yīng)用。每一層都被標(biāo)記為可見或不可見,可以通過View.getVisibility()的返回值來查看。每一層都以它所屬的視圖來命名,或者是android:id 或者是類名。我曾經(jīng)嘗試添加分組支持來重建視圖樹…我真應(yīng)當(dāng)好好完成該功能。

Photoshop as an IDE

通過檢查層級列表,我們可以快速的確認(rèn)至少一個過度繪制的原因:多重全屏背景。第一個背景是第一層視圖,稱為DecorView。該視圖是Android系統(tǒng)創(chuàng)建的,包含了主題中定義的背景。系統(tǒng)中漸變的默認(rèn)設(shè)置是不可見的,所以可以安全的把它去除掉。

從DecorView向上滾動,你可以看到一個包含另一全屏梯度背景的LinearLayout。這是與DecorView完全相同的背景,因此是不必要的。唯一可見的背景,必須保持屬于名為id/tweet_list_container的視圖。

刪除窗口背景:當(dāng)你的應(yīng)用程序啟動時,在你的主題中定義的背景是被系統(tǒng)使用創(chuàng)建預(yù)覽窗口的。絕不要把它設(shè)置為null,除非您的應(yīng)用程序是透明的。相反,要把它設(shè)置為你想要的顏色或圖片,或者通過調(diào)用getWindow().setBackgroundDrawable(null)從onCreate() 中擺脫它。

#p#

進一步減少過度繪制

Photoshop文檔有助于理解應(yīng)用是如何構(gòu)建的,但是用它來消除小區(qū)域的過度繪制時就有些困難了。現(xiàn)在我們必須轉(zhuǎn)向Tracer for OpenGL。打開ADT (或監(jiān)視器)中的同名視圖,然后點擊工具條中的箭頭圖標(biāo)。輸入你app的包名和主Activity的名稱,然后選擇一個目標(biāo)文件并點擊Trace。

建議:獲取OpenGL跟蹤是大任務(wù)并且很耗時。要使該任務(wù)更輕便更快,請勿勾選所有的Data Collection Ooptions 復(fù)選框。

Starting an OpenGL trace

Activity 名稱:當(dāng)你運行一個應(yīng)用時,logcat會展示包和Activity的名稱。這就是我怎么知道在Tracer for OpenGL中該敲入些什么的原因。

當(dāng)應(yīng)用啟動起來,打開前兩個設(shè)置。

  • Collect Framebuffer contents on eglSwapBuffers()
  • Collect Framebuffer contents on glDraw*()

第一個有用的選項能幫助你快速的找到感興趣的幀。第二個選擇讓我們看到每個幀由繪圖命令繪制命令。第二個選項是解決透支問題的關(guān)鍵。

Enable data collections

這兩個選項使我開始滾動主時間軸。它將消耗很長時間去捕捉每一幀(不出意外是30秒)所有我建議你直接下載我的捕獲跟蹤.你可以通過點擊工具欄上的第一個按鈕在Tracer for OpenGL打開文件。

一旦加載完成。跟蹤顯示你每GL命令發(fā)送到GPU的每個捕獲的幀。 如果你下載了我的跟蹤文件,跳轉(zhuǎn)到21幀。當(dāng)某一幀被選中你可以看到類似Frame Summary 選項卡情形. 另外,你可以點擊藍色高亮繪制的命令,在Details 選項卡中查看當(dāng)前幀的狀態(tài)。

組織:GL命令通過view分組。他們重新創(chuàng)建相同的樹,在你的Hierarchy Viewer或XML布局文件可以查看。這使得了解視圖生成特定的操作很容易。

Analyzing a frame in Tracer for OpenGL

通過點擊先后在前三個繪圖命令,你可以看到在PS已經(jīng)確認(rèn)的問題;一個全屏背景繪制3次。

通過向下追溯查找,我們可以進一步地找到更多有待優(yōu)化的。當(dāng)一個tweet(列表項目)被繪制的時候,一個ImageView控件用來繪制圖像。控件首先繪制圖像本身的背景:

Tweet item

Avatar background

Avatar

如果你湊近一點看,你會發(fā)現(xiàn)背景只是作為圖片的邊框。這意味著在圖像背景中間黑色的部分過度繪制了。9-patch部分都被圖像覆蓋了。

這個問題的簡單解決方法是把9-patch中間部分設(shè)置為透明。 Android的 2D渲染器總是把9-patch優(yōu)化為透明。這個簡單的改變將會去掉很多的過度繪制。

有趣的是, 相同確切的問題發(fā)生與內(nèi)聯(lián)元素。頭像小不是個大問題,但內(nèi)聯(lián)元素卻能夠占據(jù)屏幕的絕大部分區(qū)域。解決方法是完全一樣的。

Inline media background

Inline media

更多的選擇: 我想Android的2D渲染管道,能夠自動檢測和糾正你過度繪制。我有一些想法但我不能作出任何承諾,就像使用內(nèi)置GPU的優(yōu)化,這只會與不完全透明圖元。

扁平化(譯注:用“縮減”更直觀)視圖層級

現(xiàn)在(其實是大部分時候)透支是要注意的事情,讓我們回到層級查看器。通過檢查層級樹,我們可以嘗試識別不必要的視圖。刪除視圖,尤其是視圖組,不僅可以幫助提高幀速率,而且可以減少內(nèi)存消耗和啟動時間等等。

快速瀏覽一下Falcon Pro的視圖層級,足以識別幾個只有一個單獨子視圖的視圖組。這些視圖組通常是不必要的,很容易去除。至少下面截圖中顯示的節(jié)點中的兩個應(yīng)該被刪除。

Unnecessary views

有許多其他的視圖可以從這棵樹中移除。例如,每個包含名為 id/listElementBottom的 RelativeLayout的tweet(譯者注:在Twitter上發(fā)布的消息)。此布局包含了作者的名字,他的Twitter地址,這條tweet發(fā)布過后的時間,和一個圖標(biāo)。作者名稱和Twitter地址是兩個單獨的 TextView而不是僅用一個,是為了使用不同風(fēng)格。時間和圖標(biāo)使用一個 TextView 和一個 ImageView,可以使用 TextView的復(fù)合畫板功能合并成一個 TextView。

左邊的滑入式菜單使用了幾組 LinearLayout+TextView+ImageView 來顯示帶圖標(biāo)的標(biāo)簽。每一組都可以用一個單獨的TextView來替換。

如何擺平你的UI:我在2009年的谷歌I/O上談?wù)摿祟}為激發(fā)你的UI的文章,在其中更詳細地解釋了這些技術(shù)。

輸入事件處理

還記得當(dāng)我們在看systrace的時候發(fā)現(xiàn)觸摸事件響應(yīng)處理有一些延遲嗎?現(xiàn)在就是解決這個問題的時候啦。traceview就是處置這種問題和了解應(yīng)用正在做什么的最好的工具。

 

Traceview是一個測量應(yīng)用的方法調(diào)用所耗時間的Dalvik分析器。怎樣使用它呢?在ADT或者監(jiān)視器中打開DDMS視圖,在Devices選項卡中選擇您的應(yīng)用的進程,然后點擊“start method profiling”按鈕(就是一個紅色圈圈和三個箭頭的那個按鈕)。

開啟追蹤之后,在主時間軸上選取開始和結(jié)束時間,再次點擊按鈕來完成跟蹤。您也可以下載 我的程序調(diào)試信息。結(jié)果如下。

Traceview

點擊第21行,ViewRootImpl.draw(),該方法調(diào)用時間將會高亮。表的最后一行將會給出這個方法及其子方法的平均調(diào)用時間。如果你仔細看時間軸上的高亮處,你會發(fā)現(xiàn)連續(xù)幀之間的差別。

一個弄清楚這些差別之間是怎么回事的簡易方法就是在差別開始出現(xiàn)的地方逐漸放大,然后點擊其中最大的彩色塊。跟蹤父鏈直到找到你的問題所在。在這個案例中,我跟蹤了Pattern.compileImpl方法的調(diào)用(平均調(diào)用時間為0.5ms),找到了DBListAdapter.bindView方法.

顯然,應(yīng)用程序?qū)⑾嗤谋磉_式被一遍又一遍的重復(fù)編譯,每次調(diào)用時候勢必在主時間軸產(chǎn)生一次調(diào)用時間花費。Traceview表明bindview方法的平均調(diào)用時間為38ms,56%的時間都花在了HTML文本解析上。這個花費應(yīng)該在后臺默默的運行而不應(yīng)該阻塞UI主線程。當(dāng)然正則表達式也不應(yīng)該被一次一次的重復(fù)編譯。

試試吧,少年!

最后一個調(diào)試給大家留作練習(xí)。這是一個包含兩個菜單可以向左或向右滑動切換的應(yīng)用。但是我在使用openGL調(diào)試工具調(diào)試時發(fā)現(xiàn)在菜單滑動切換的時候產(chǎn)生了大量的畫圖消耗。下載我的調(diào)試,看看是什么原因造成了這種現(xiàn)象吧(去到第34幀。)

提示:

1、應(yīng)用程序應(yīng)該通過調(diào)用 View.setLayerType()使用硬件層來簡化繪圖。

2、多余的背景也可以通過9-patches來巧妙的優(yōu)化。

3、裁剪同樣也是很有用的優(yōu)化方式。

4、通過設(shè)置ColorFilter傳遞給setLayerType()的畫筆的方式也許可以移除最后的繪圖指令哦。

我們一起學(xué)習(xí)了多種優(yōu)化應(yīng)用的工具。雖然我可以花大量的時間來講解選用何種技術(shù)來解決解決特定問題,但是那樣的話這篇文章就會顯得太臃腫了。android開發(fā)者官網(wǎng)上的提供文檔和Google I/O大會有關(guān)于android的討論(網(wǎng)上有免費的幻燈片和視頻)也許能夠幫助你。

責(zé)任編輯:張葉青 來源: 開源社區(qū)
相關(guān)推薦

2024-12-20 16:00:00

Python文本分類聚類

2014-03-21 10:31:51

NSArray枚舉

2013-12-06 14:52:49

性能評價模型分析WEB系統(tǒng)

2022-11-09 11:50:21

2021-08-27 07:01:06

用戶體驗設(shè)計師產(chǎn)品設(shè)計

2021-09-27 09:52:41

FacebookBOLTLinux

2017-01-11 19:15:55

Android著色器Tint

2011-06-01 10:58:54

Android Service

2014-06-06 10:47:52

Android視圖大小測量案例

2010-03-02 15:10:27

Android系統(tǒng)

2012-06-14 10:08:18

2021-08-23 15:45:55

5GCPE終端網(wǎng)絡(luò)

2013-09-16 15:16:20

Android性能優(yōu)化

2024-01-16 12:19:08

MySQL重要機制高并發(fā)

2014-11-11 16:28:21

浪潮高性能計算煤炭研究

2025-01-17 10:26:19

模型開發(fā)ChatGPT

2011-04-25 09:12:47

LinuxIO數(shù)據(jù)庫

2017-02-21 10:30:17

Android單元測試研究與實踐

2010-03-03 16:51:13

Android版本

2014-06-17 09:28:06

浪潮高性能計算重離子加速器
點贊
收藏

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

国产小视频在线观看免费| 亚洲天堂2018av| 日色在线视频| 秋霞av亚洲一区二区三| 久久天天躁日日躁| 中文字幕天堂网| 精品欧美日韩精品| 亚洲欧美日韩综合aⅴ视频| 国产高清精品一区二区| 久久精品久久久久久久| 久久久久午夜电影| 亚洲精美色品网站| 日韩av.com| 美女高潮视频在线看| 中文字幕不卡在线| 国产在线资源一区| 影音先锋国产在线| 亚洲婷婷在线| 久久精品最新地址| 丰满大乳奶做爰ⅹxx视频| 在线观看亚洲精品福利片| 亚洲国产日韩a在线播放性色| 日本不卡久久| 国内爆初菊对白视频| 蜜臀av一区二区三区| 性日韩欧美在线视频| 男人晚上看的视频| 日韩电影在线观看完整免费观看| 91精品国产丝袜白色高跟鞋| 成年人免费大片| 四虎亚洲精品| 中文字幕亚洲一区二区va在线| 久久99精品国产99久久| 国产成人免费看一级大黄| 免费日本视频一区| 45www国产精品网站| 欧美黄片一区二区三区| 欧美电影《轻佻寡妇》| 精品香蕉一区二区三区| 18禁一区二区三区| 成人在线日韩| 欧美日韩卡一卡二| 成人观看免费完整观看| 91超碰在线播放| 一区二区三区成人| 不卡中文字幕在线| 色开心亚洲综合| 国产清纯美女被跳蛋高潮一区二区久久w| 高清不卡一区二区三区| 99视频在线观看免费| 精品一区二区免费看| 国产精品免费久久久久久| youjizz在线视频| 国产亚洲欧洲| 欧美一级高清免费| 国产一级做a爱片久久毛片a| 99国产精品久久久久久久成人热 | 蜜桃传媒一区二区亚洲av| 成人激情自拍| 亚洲成成品网站| 熟妇高潮一区二区| 国产一级成人av| 亚洲精品乱码久久久久久金桔影视| 无套内谢丰满少妇中文字幕| 99精品在线免费观看| 91麻豆精品国产| 日本黄色www| 超碰成人福利| 亚洲精品99久久久久| 无码精品一区二区三区在线播放| 成人涩涩网站| 日韩成人在线视频网站| 美国黄色a级片| 精品免费在线| 精品国产网站地址| 精国产品一区二区三区a片| 国内综合精品午夜久久资源| 亚州国产精品久久久| 亚洲天堂视频网站| 蜜臀精品久久久久久蜜臀| 成人乱色短篇合集| 亚洲欧美另类一区| 91香蕉视频mp4| 日韩不卡av| 黄色网页在线免费看| 亚洲国产日韩一区二区| 国产真实乱子伦| 成人在线不卡| 欧美日韩国产一二三| 91av免费观看| 任你弄精品视频免费观看| 亚洲最新av在线网站| 在线免费看av网站| 国产日本精品| 91精品久久久久久久久久| 亚洲成人av综合| 久久久久久影视| 亚洲一区综合| 9999热视频在线观看| 欧亚一区二区三区| 日本少妇一区二区三区| 亚洲警察之高压线| 久久亚洲国产成人| 中文字幕国产在线观看| 国产老女人精品毛片久久| 鲁鲁狠狠狠7777一区二区| 欧美成人精品一区二区男人看| 亚洲五码中文字幕| 日韩爱爱小视频| 加勒比久久高清| 搡老女人一区二区三区视频tv | 色噜噜久久综合| 少妇丰满尤物大尺度写真| 久久99影视| 欧美激情啊啊啊| 亚洲一区中文字幕永久在线| 成人午夜精品一区二区三区| 亚洲午夜激情| 超级碰碰久久| 精品国免费一区二区三区| 夫妇交换中文字幕| 国产麻豆综合| 成人性色av| 国产超级va在线视频| 欧洲一区在线观看| 国产在线观看无码免费视频| 欧美成人亚洲| 91精品视频播放| porn亚洲| 91黄视频在线观看| 无码人妻精品一区二区三区温州| 欧美三区不卡| **亚洲第一综合导航网站| 在线免费看a| 日本道色综合久久| www.自拍偷拍| 国产精品久久久久久久免费软件| http;//www.99re视频| 男人影院在线观看| 欧美色精品在线视频| 国产人妻一区二区| 国产精品亚洲欧美| 国产亚洲二区| 蜜桃视频在线网站| 亚洲精品福利免费在线观看| 国产一级片视频| 国产成人自拍网| 九一免费在线观看| 欧美第一在线视频| 久久国产天堂福利天堂| av一区二区三| 亚洲综合丁香婷婷六月香| 久久久久亚洲av无码专区首jn| 欧美永久精品| 成人看片在线| 91超碰在线播放| 亚洲黄色片网站| 国产精品999在线观看| 91蝌蚪porny成人天涯| 国产高清精品在线观看| 你微笑时很美电视剧整集高清不卡| 国产91精品久| 国产h在线观看| 欧美日韩一区二区在线观看视频| 免费黄色在线网址| 激情成人综合网| 日韩免费在线观看av| 红杏aⅴ成人免费视频| 97久久精品人搡人人玩| 精品视频一二三| 欧美精品aⅴ在线视频| 欧美第一页在线观看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美激情中文字幕一区二区| www.com操| 一区二区免费不卡在线| 国产成人精品免费视频大全最热| cao在线视频| 亚洲男人天堂九九视频| 中文在线字幕av| 亚洲免费资源在线播放| 91视频在线免费| 日本怡春院一区二区| 致1999电视剧免费观看策驰影院| 日韩一区二区三区精品| 欧美亚洲另类视频| 在线国产情侣| 欧美精品一区二区三区蜜臀 | 午夜在线一区二区| 在线不卡视频一区二区| 国产劲爆久久| 成人黄色生活片| 国产激情在线播放| 色婷婷综合久久久久| 蜜臀av免费在线观看| 色欧美日韩亚洲| 久久网中文字幕| 欧美激情资源网| 精品人妻一区二区三区日产| 秋霞国产午夜精品免费视频| 日韩欧美精品免费| 日韩免费特黄一二三区| 国产久一道中文一区| 国产精品诱惑| 2019中文字幕在线| v片在线观看| 国产一区av在线| 男人天堂综合网| 在线电影欧美成精品| 亚洲精品男人的天堂| 亚洲免费视频成人| 九九热免费在线| 99久久777色| 久久黄色一级视频| 免费成人av在线播放| 色综合久久久久无码专区| 自由日本语亚洲人高潮| 丝袜足脚交91精品| 亚洲第一二三区| 国产精品久久久久久久小唯西川 | 欧美一级午夜免费电影| 欧美一区二区三区不卡视频| 亚洲图片欧美综合| 亚洲色婷婷一区二区三区| 日本一区免费视频| 性少妇bbw张开| 99re亚洲国产精品| www.美色吧.com| 国产精品一区二区久久不卡 | 亚洲精品tv| 国产精品99导航| 看黄在线观看| 国外成人在线视频| 女人黄色免费在线观看| 欧美成人午夜视频| 日本高清视频在线观看| 国产午夜精品视频| 精品av中文字幕在线毛片| 亚洲精品v天堂中文字幕| www精品国产| 日韩精品在线网站| 国产乱子伦精品无码码专区| 欧美日韩国产高清一区二区三区 | 91久久久久久久久久久久久久| 久久精品亚洲乱码伦伦中文| 国产成人无码一区二区在线观看| 成人高清伦理免费影院在线观看| 国产精品偷伦视频免费观看了 | 在线精品视频免费观看| 中文字幕精品无| 欧美综合在线视频| 中文字幕 自拍偷拍| 在线观看亚洲一区| 一区二区三区在线免费观看视频| 欧美三级乱人伦电影| 中文字幕av久久爽| 欧美伦理视频网站| 国产精品一区二区人人爽| 91精品国产福利| www.蜜臀av.com| 亚洲第一网站免费视频| 天天干天天做天天操| 精品爽片免费看久久| 97视频在线观看网站| 日韩色av导航| 日本欧美电影在线观看| 午夜精品久久久久久久男人的天堂 | 欧美手机在线| 一本—道久久a久久精品蜜桃| 婷婷综合在线| 成年女人18级毛片毛片免费 | 在线观看日本一区二区| 国产又黄又大久久| 95视频在线观看| 久久婷婷久久一区二区三区| 国产一区二区三区四区在线| 最新国产成人在线观看| 久久久精品国产sm调教网站| 精品久久久中文| 中文字幕+乱码+中文字幕明步 | 亚洲国产老妈| 久久久久免费看黄a片app| 丝袜a∨在线一区二区三区不卡| 亚洲36d大奶网| 国产91丝袜在线播放九色| 不卡一区二区在线观看| ...av二区三区久久精品| 国产精品黄色网| 欧美日韩一卡二卡三卡| 高清乱码毛片入口| 中文国产成人精品久久一| 在线视频中文字幕第一页| 欧美性做爰毛片| 国产成人久久精品一区二区三区| 国产精品夜夜夜一区二区三区尤| 国产日产精品_国产精品毛片| 成人性做爰片免费视频| 中文亚洲字幕| 国产农村妇女精品久久| www国产精品av| 国产精品成人免费观看| 色婷婷精品大在线视频| 亚洲国产精品久久久久久6q| 中国china体内裑精亚洲片| 国内在线视频| 国产日韩欧美夫妻视频在线观看 | 日韩精品极品视频| 成人在线播放免费观看| 国产成人亚洲综合91精品| 91蜜桃臀久久一区二区| 亚洲人久久久| 久久久一二三| 毛茸茸free性熟hd| 亚洲精品视频免费看| 18国产免费视频| 亚洲美女精品久久| 91禁在线看| 99在线影院| 亚洲欧美综合久久久| 国内自拍视频一区| 97精品国产97久久久久久久久久久久| 婷婷激情四射网| 欧美午夜片在线观看| 欧美日本网站| 91超碰caoporn97人人| 网站一区二区| 午夜啪啪福利视频| 久久精品国产精品亚洲精品| 在线免费看黄视频| 欧美日韩国产色视频| 亚洲免费一级片| 久久av中文字幕| 亚洲精品自拍| 亚洲午夜精品福利| 日韩av中文字幕一区二区| 国产精品1000部啪视频| 亚洲成人免费av| 免费av网站观看| 高清欧美电影在线| 综合激情久久| 国产精品视频一二三四区| 国产毛片精品视频| 天天综合天天做| 日韩一区二区麻豆国产| 毛片免费不卡| 成人国内精品久久久久一区| 久久要要av| 红桃视频 国产| 亚洲猫色日本管| 亚洲精品久久久久久动漫器材一区| 久热精品视频在线观看| 视频一区日韩| 日韩精品一区在线视频| av中文字幕在线不卡| 天海翼一区二区| 国产视频亚洲精品| 国产 日韩 欧美一区| 日韩高清专区| 麻豆91在线看| 欧美激情图片小说| 欧美成人vps| 国产精品一区二区日韩| 玛丽玛丽电影原版免费观看1977 | 欧洲av在线播放| 26uuu久久噜噜噜噜| 色综合中文网| 爱爱爱爱免费视频| 亚洲蜜臀av乱码久久精品蜜桃| 成人高潮片免费视频| 97碰碰碰免费色视频| 九色精品国产蝌蚪| av免费一区二区| 夜夜精品浪潮av一区二区三区| 日本精品999| 日韩免费观看av| 欧美电影免费| 中国一级特黄录像播放| 色偷偷成人一区二区三区91 | 色综合中文网| 91日韩精品视频| 五月天久久比比资源色| av成人手机在线| 豆国产97在线| 日韩不卡免费视频| 波多野结衣亚洲色图| 国产丝袜精品第一页| 亚洲成a人片777777久久| 妺妺窝人体色777777| 国产日本一区二区| 草草视频在线播放| 国产精品99导航| 黄色亚洲在线| youjizz亚洲女人| 日韩av一区在线| 国产亚洲高清一区| 成人在线免费播放视频| 一区二区三区在线观看国产| 国产在线观看免费网站| 国产精品白丝jk白祙| 蜜臀久久久99精品久久久久久|