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

ArkUI中的線程和看門狗機制

系統 OpenHarmony
為了防止主線程和ui線程卡住引起Appfreeze,做應用開發的時候,不要在Ability生命周期函數或者控件點擊事件等回調函數中做耗時操作。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

一、前言

本文主要分析ArkUI中涉及的線程和看門狗機制。

二、ArkUI中的線程

應用Ability首次創建界面的流程大致如下:

ArkUI中的線程和看門狗機制-開源基礎軟件社區

說明:
? AceContainer是一個容器類,由前端、任務執行器、資源管理器、渲染管線、視圖等聚合而成,提供了生命周期對接、功能調度接口和UI渲染的各項能力。
? Ability在FA模型中實際為AceAbility,和AceContainer容器類搭配管理界面。在AceAbility的生命周期函數AceAbility::OnStart(const Want& want)中創建AceContainer實例。
? 對于Stage模型,在UIContentImpl::CommonInitialize()函數中創建AceContainer實例。
AceContainer在構造函數中創建任務執行器,用于執行ArkUI相關任務。

void AceContainer::InitializeTask()
{
auto flutterTaskExecutor = Referenced::MakeRefPtr<FlutterTaskExecutor>();
flutterTaskExecutor->InitPlatformThread(useCurrentEventRunner_);
taskExecutor_ = flutterTaskExecutor;
// No need to create JS Thread for DECLARATIVE_JS
if (type_ == FrontendType::DECLARATIVE_JS) {
GetSettings().useUIAsJSThread = true;
} else {
flutterTaskExecutor->InitJsThread();
}
}

任務有如下幾種類型,每種類型(BACKGROUND任務除外)的任務會由一個fml::TaskRunner去執行。TaskRunner代碼在三方庫third_party\flutter\engine\flutter\common\task_runners.h中,實現原理和EventRunner,EventHandler機制相似。

enum class TaskType : uint32_t {
PLATFORM = 0,
UI,
IO,
GPU,
JS,
BACKGROUND,
UNKNOWN,
};

FlutterTaskExecutor類圖如下:

ArkUI中的線程和看門狗機制-開源基礎軟件社區

說明:
? 任務執行器可以用于執行異步(PostTask)和同步(PostSyncTask)任務。
? 異步任務:把任務丟給指定類型的線程處理,不會阻塞當前線程。
? 同步任務:把任務丟給指定類型的線程處理并阻塞當前線程,直到任務執行完后繼續當前線程。
? 比如觸摸事件的處理,會以異步任務的形式被丟到UI線程中處理。

auto&& touchEventCallback = [context = pipelineContext_, id = instanceId_](
const TouchEvent& event, const std::function<void()>& markProcess) {
ContainerScope scope(id);
context->GetTaskExecutor()->PostTask(
[context, event, markProcess]() {
context->OnTouchEvent(event);
CHECK_NULL_VOID_NOLOG(markProcess);
markProcess();
},
TaskExecutor::TaskType::UI);
};

三、各種類型的TaskRunner如何初始化?

1、platformRunner_

在InitPlatformThread函數中初始化。

void FlutterTaskExecutor::InitPlatformThread(bool useCurrentEventRunner)
{
#ifdef OHOS_STANDARD_SYSTEM
platformRunner_ = flutter::PlatformTaskRunner::CurrentTaskRunner(useCurrentEventRunner);
#else
fml::MessageLoop::EnsureInitializedForCurrentThread();
platformRunner_ = fml::MessageLoop::GetCurrent().GetTaskRunner();
#endif

FillTaskTypeTable(TaskType::PLATFORM);
}

對于標準OHOS,platformRunner_實際為
flutter::PlatformTaskRunner::CurrentTaskRunner(useCurrentEventRunner)
看下具體實現:

fml::RefPtr<fml::TaskRunner> PlatformTaskRunner::CurrentTaskRunner(bool useCurrentEventRunner)
{
return PlatformTaskRunnerAdapter::CurrentTaskRunner(useCurrentEventRunner);
}
fml::RefPtr<fml::TaskRunner> PlatformTaskRunnerAdapter::CurrentTaskRunner(bool useCurrentEventRunner)
{
if (useCurrentEventRunner) {
return fml::MakeRefCounted<PlatformTaskRunnerAdapter>(useCurrentEventRunner);
}
if (taskRunner_) {
return taskRunner_;
}
taskRunner_ = fml::MakeRefCounted<PlatformTaskRunnerAdapter>(useCurrentEventRunner);
return taskRunner_;
}

說明:
platformRunner實際類型為PlatformTaskRunnerAdapter。
PlatformTaskRunnerAdapter繼承自fml::TaskRunner,實現了virtual void PostTask(fml::closure task)等接口函數。實際是在EventRunner,EventHandler機制基礎上又做了層封裝。代碼中useCurrentEventRunner實參為false。意味著platformRunner實際是把任務丟給主線程去做的。(MainEventRunner對應的線程為主線程,MainEventRunner的初始化在Ability框架MainThread::Start()函數中)

PlatformTaskRunnerAdapter::PlatformTaskRunnerAdapter(bool useCurrentEventRunner)
: fml::TaskRunner(nullptr)
{
if (useCurrentEventRunner) {
eventRunner_ = OHOS::AppExecFwk::EventRunner::Current();
} else {
eventRunner_ = OHOS::AppExecFwk::EventRunner::GetMainEventRunner();
}
eventHandler_ = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner_);
}

void PlatformTaskRunnerAdapter::PostTask(fml::closure task)
{
eventHandler_->PostTask(std::move(task));
}

2、uiRunner, ioRunner, gpuRunner_

這三種類型的TaskRunner初始化都在FlutterTaskExecutor::InitOtherThreads函數中。

void FlutterTaskExecutor::InitOtherThreads(const flutter::TaskRunners& taskRunners)
{
uiRunner_ = taskRunners.GetUITaskRunner();
ioRunner_ = taskRunners.GetIOTaskRunner();
#ifdef NG_BUILD
gpuRunner_ = taskRunners.GetRasterTaskRunner();
#else
gpuRunner_ = taskRunners.GetGPUTaskRunner();
#endif

//...此處省略若干行
}

FlutterTaskExecutor::InitOtherThreads函數的參數 taskRunners從哪來?
FlutterAceView::CreateView()函數中會初始化一些配置項,然后創建flutter::OhosShellHolder對象。

FlutterAceView* FlutterAceView::CreateView(int32_t instanceId, bool useCurrentEventRunner, bool usePlatformThread)
{
FlutterAceView* aceSurface = new Platform::FlutterAceView(instanceId);
if (aceSurface != nullptr) {
aceSurface->IncRefCount();
}
flutter::Settings settings;
settings.instanceId = instanceId;
settings.platform = flutter::AcePlatform::ACE_PLATFORM_OHOS;
#ifndef GPU_DISABLED
settings.enable_software_rendering = false;
#else
settings.enable_software_rendering = true;
#endif
#ifdef ENABLE_ROSEN_BACKEND
settings.use_system_render_thread = SystemProperties::GetRosenBackendEnabled();
#endif
settings.platform_as_ui_thread = usePlatformThread;
settings.use_current_event_runner = useCurrentEventRunner;
// ...此處省略若干行
auto shell_holder = std::make_unique<flutter::OhosShellHolder>(settings, false);
if (aceSurface != nullptr) {
aceSurface->SetShellHolder(std::move(shell_holder));
}
return aceSurface;
}

OhosShellHolder構造函數中會根據傳入的參數創建flutter::TaskRunners。

OhosShellHolder::OhosShellHolder(
flutter::Settings settings,
bool is_background_view)
: settings_(std::move(settings))
{
// ...此處省略若干行
// The current thread will be used as the platform thread. Ensure that the
// message loop is initialized.
fml::MessageLoop::EnsureInitializedForCurrentThread();
fml::RefPtr<fml::TaskRunner> gpu_runner;
fml::RefPtr<fml::TaskRunner> ui_runner;
fml::RefPtr<fml::TaskRunner> io_runner;
fml::RefPtr<fml::TaskRunner> platform_runner =
PlatformTaskRunnerAdapter::CurrentTaskRunner(settings_.use_current_event_runner);
if (is_background_view) {
auto single_task_runner = thread_host_.ui_thread->GetTaskRunner();
gpu_runner = single_task_runner;
ui_runner = single_task_runner;
io_runner = single_task_runner;
} else {
if (settings_.platform_as_ui_thread) {
ui_runner = platform_runner;
} else {
ui_runner = thread_host_.ui_thread->GetTaskRunner();
}
if (!settings_.use_system_render_thread) {
gpu_runner = thread_host_.gpu_thread->GetTaskRunner();
} else {
gpu_runner = ui_runner;
}
if (settings_.use_io_thread) {
io_runner = thread_host_.io_thread->GetTaskRunner();
} else {
io_runner = ui_runner;
}
}
flutter::TaskRunners task_runners(thread_label, // label
platform_runner, // platform
gpu_runner, // gpu
ui_runner, // ui
io_runner // io
);

說明:
目前OHOS上,配置的參數如下:

ArkUI中的線程和看門狗機制-開源基礎軟件社區

對照上面的代碼段,實際gpu_runner,ui_runner,io_runner是同一個,任務都在UI線程執行。
另外對于Stage模型,ui_runner和platform_runner又是同一個,所以對Stage模型來說,TaskType::UI,TaskType::IO,TaskType::GPU,TaskType::PLATFORM類型的任務實際都是由主線程來執行的。

3、jsRunner_

初始化在FlutterTaskExecutor::InitJsThread(bool newThread)函數中。

void FlutterTaskExecutor::InitJsThread(bool newThread)
{
if (newThread) {
jsThread_ = std::make_unique<fml::Thread>(GenJsThreadName());
jsRunner_ = jsThread_->GetTaskRunner();
} else {
jsRunner_ = uiRunner_;
}

PostTaskToTaskRunner(
jsRunner_, [weak = AceType::WeakClaim(this)] { FillTaskTypeTable(weak, TaskType::JS); }, 0);
}

說明:
對于聲明式前端,newThread參數為false; JS前端為true。所以聲明式前端JS線程實際為UI線程;而對于JS前端,會起獨立的JS線程來處理JS相關的任務。

4、TaskType::BACKGROUND類型的任務如何執行?

TaskType::BACKGROUND類型的任務會由單例BackgroundTaskExecutor去執行。
BackgroundTaskExecutor中維護了一個8個線程的線程池,用來處理后臺耗時操作。線程名以"ace.bg."開頭。比如RosenFontLoader在加載網絡字體的時候,下載操作會放到后臺任務線程里去做。

void RosenFontLoader::LoadFromNetwork(const OHOS::Ace::RefPtr<OHOS::Ace::PipelineBase>& context)
{
auto weakContext = AceType::WeakClaim(AceType::RawPtr(context));
context->GetTaskExecutor()->PostTask(
[weak = AceType::WeakClaim(this), weakContext] {
auto fontLoader = weak.Upgrade();
auto context = weakContext.Upgrade();
if (!fontLoader || !context) {
return;
}
std::vector<uint8_t> fontData;
if (!DownloadManager::GetInstance().Download(fontLoader->familySrc_, fontData) || fontData.empty()) {
return;
}
//...此處省略若干行
},
TaskExecutor::TaskType::BACKGROUND);
}

綜上:

在ArkUI中,會為每個帶界面的Ability創建一個AceContainer,每個AceContainer中會創建一個FlutterTaskExecutor用于處理該Ability ArkUI相關的任務。根據不同的模型,ArkUI創建出來的線程會有所不同:
? 對于Stage模型的應用,ui線程復用了主線程,并且Stage模型應用目前都是聲明式前端,導致js線程又復用了ui線程。所以ArkUI只需另外創建名字以“ace.bg.”開頭的八個后臺任務線程。
? 對于FA模型的應用,除了八個后臺任務線程,根據Ability的數量會創建若干個名字以“.ui”結尾的線程。如果是JS前端,還會創建若干個名字以“jsThread-”開頭的線程。

四、ArkUI中的看門狗

ArkUI中的線程和看門狗機制-開源基礎軟件社區

AceEngine是單例,全局唯一。AceEngine的構造函數中會創建WatchDog實例。對于FA模型的應用,AceContainer::AttachView()函數中通過調用
AceEngine::Get().RegisterToWatchDog(instanceId, taskExecutor_, GetSettings().useUIAsJSThread);

把持有的FlutterTaskExecutor注冊到看門狗中看護。
看門狗只看護FlutterTaskExecutor中的UI線程和JS線程。Stage模型的應用由于UI線程和JS線程實際是復用的主線程,所以不需要在ArkUI中看護。Ability框架中有看門狗專門看護主線程。如果線程中有任務處理超過了3s,會上報RawEventType::WARNING對應的系統事件給hiview插件平臺;如果任務處理超過了5s,會上報RawEventType::FREEZE對應的系統事件給hiview插件平臺,hiview插件平臺會生成appfreeze的dump文件。
為了防止主線程和ui線程卡住引起appfreeze,做應用開發的時候,不要在Ability生命周期函數或者控件點擊事件等回調函數中做耗時操作。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2025-01-06 07:00:00

看門狗RedissonRedis

2023-11-29 07:40:12

分布式

2021-06-28 10:51:55

Redisson分布式鎖Watchdog

2021-01-08 12:06:59

WDT定時裝置

2019-05-05 08:54:47

黑客網絡攻擊5G

2021-07-02 08:51:09

Redisson分布式鎖公平鎖

2020-10-23 13:02:02

勒索軟件看門狗網絡犯罪

2023-09-19 15:14:59

鴻蒙Watchdog

2022-06-30 08:04:16

Redis分布式鎖Redisson

2025-07-30 09:34:04

2021-04-26 13:52:36

索尼Linux內存

2021-02-28 10:23:35

Python監控系統

2022-06-16 08:01:24

redis分布式鎖

2020-11-10 07:46:58

函數printf 數據

2010-07-07 18:34:43

UML公共機制

2009-06-11 17:03:29

Java線程

2021-11-26 10:08:57

鴻蒙HarmonyOS應用

2010-01-21 11:27:30

linux多線程機制線程同步

2009-03-20 13:40:15

JDK線程并發

2023-10-08 09:34:11

Java編程
點贊
收藏

51CTO技術棧公眾號

国模一区二区三区白浆| 禁断一区二区三区在线| 亚洲自拍偷拍麻豆| 国产高清在线一区| 国产成人无码av| 久久精品国产亚洲夜色av网站 | 国产aⅴ综合色| 国产做受高潮69| 国产精品无码网站| 亚洲欧美专区| 亚洲成va人在线观看| 亚洲国产综合自拍| 亚洲精品国产手机| 奇米777欧美一区二区| 久久99视频免费| 丁香激情五月少妇| 久久国产精品色av免费看| 在线中文字幕亚洲| 亚洲欧美日韩国产一区| 一个色综合导航| 国产成人精品一区二区在线小狼| 男人最爱成人网| 一区二区三区成人在线视频| 日本午夜一区二区三区| 成人av免费播放| 老司机精品视频一区二区三区| 久久久久国产精品www| 欧美成人短视频| 啄木系列成人av电影| 日韩久久久精品| 伊人国产在线视频| 成人影院av| 亚洲成av人片在线| 精品嫩模一区二区三区| porn视频在线观看| 91在线视频在线| 国产福利久久精品| 国产情侣激情自拍| 久久精品国产久精国产| 国产精品7m视频| 国产www在线| 亚洲区一区二| 久久久久久有精品国产| 亚洲国产精品久| 五月开心六月丁香综合色啪| 亚洲一级一级97网| 亚洲精品国产一区黑色丝袜| jizz国产精品| 欧美大胆人体bbbb| 超碰91在线播放| 精品麻豆剧传媒av国产九九九| 欧美丝袜丝交足nylons图片| 成年人网站大全| 成人自拍av| 91官网在线免费观看| 久久久999免费视频| 小视频免费在线观看| 亚洲 欧美综合在线网络| 国产成人永久免费视频| 亚洲综合影视| 亚洲成人久久影院| 久在线观看视频| 亚洲黄色免费av| 色婷婷激情综合| 色婷婷综合久久久久中文字幕 | 亚洲永久精品大片| 国产成人一二三区| 激情网站在线| 欧美日韩国产一区二区三区| 国产精品丝袜久久久久久消防器材| 91桃色在线观看| 欧美三级免费观看| www.日本xxxx| 日韩电影精品| 欧美成人官网二区| 久久久无码人妻精品一区| 国产成人精品一区二区免费看京 | 自拍偷拍视频亚洲| 精品产国自在拍| 综合网日日天干夜夜久久| 亚洲一区 欧美| 91av精品| 性欧美xxxx交| 久久人人爽人人爽人人片av免费| 免费看欧美女人艹b| 91在线网站视频| 后进极品白嫩翘臀在线视频| 91美女福利视频| 樱花www成人免费视频| 性欧美1819sex性高清大胸| 亚洲电影第三页| 九九视频精品在线观看| 成人激情久久| 精品视频中文字幕| 久久精品在线观看视频| 亚洲网址在线| 国产精品嫩草影院久久久| 亚洲AV无码成人片在线观看| 国产亚洲精品超碰| 成人污网站在线观看| 在线观看v片| 这里只有精品电影| 91视频免费观看网站| 女主播福利一区| 欧美一区二粉嫩精品国产一线天| 国产精品久久久久久免费| va亚洲va日韩不卡在线观看| 亚洲一区二区三区四区中文| 国产第一页在线| 欧美日韩在线播放三区| 国产麻豆剧传媒精品国产av| 99久久久国产精品美女| 欧美一区第一页| 午夜精品久久久久久久99| 亚洲国产高清在线| 国模无码视频一区二区三区| va天堂va亚洲va影视| 亚洲欧美制服丝袜| 国产午夜久久久| 国产在线播放一区二区三区| 日韩精品久久久| 成av人片在线观看www| 5月丁香婷婷综合| 免费网站在线高清观看| 国产欧美在线| 国产精品二区在线| av在线影院| 欧美日韩不卡在线| 97伦伦午夜电影理伦片| 亚洲视频观看| 91久久极品少妇xxxxⅹ软件 | 欧美顶级毛片在线播放| 欧美成人在线免费| 国产精品久久久久精| 国产精品午夜久久| 欧美黑人又粗又大又爽免费| 日韩三级av| 97在线观看免费| 色婷婷视频在线| 亚洲成人av电影在线| 麻豆tv在线观看| 欧美 日韩 国产 一区| 成人激情视频在线观看| 在线视频自拍| 欧美高清视频www夜色资源网| 秋霞网一区二区三区| 日韩专区一卡二卡| 欧美午夜欧美| 成人日韩在线| 影音先锋欧美精品| 无码日韩精品一区二区| 久久久www成人免费毛片麻豆 | 97欧美成人| 亚洲天堂av在线免费观看| 日本在线播放视频| 91视视频在线观看入口直接观看www | 亚洲天堂一区二区在线观看| 亚洲国产一区二区三区在线播放| 成人午夜一级二级三级| av免费在线观看网址| 日韩一区二区三| 久久久精品国产sm调教| 成人免费三级在线| 九九九九免费视频| 狠狠做六月爱婷婷综合aⅴ | 日本精品免费在线观看| 中文有码一区| 国产精品亚洲视频在线观看| 黄色在线免费网站| 精品日韩成人av| 亚洲日本韩国在线| 久久久高清一区二区三区| 免费看黄色一级大片| 久久福利综合| 亚洲一区二区三区毛片| 美女精品导航| 精品五月天久久| 无码人妻丰满熟妇奶水区码| 中文字幕欧美激情| 国产一级二级av| 噜噜噜91成人网| 在线播放 亚洲| 91亚洲无吗| 91精品国产91久久久| 国产在线观看精品一区| 欧美精品第1页| 日本三级视频在线| 久久精品免视看| 亚洲免费在线播放视频| 一区二区三区导航| 亚洲春色综合另类校园电影| 亚洲视频国产| 国产精品国语对白| 黑人精品视频| 丝袜情趣国产精品| 成人小说亚洲一区二区三区 | 国产日韩在线观看一区| 黑人欧美xxxx| 青青青在线免费观看| 99久久伊人网影院| 精品久久久99| 国产深夜精品| 男人j进女人j| 精品久久影院| 国产精品久久波多野结衣| 成人国产精品一区二区免费麻豆| 高清欧美性猛交xxxx黑人猛交| 国产一级网站视频在线| 欧美tk—视频vk| 中文字幕乱码人妻二区三区| 香蕉久久一区二区不卡无毒影院| 快灬快灬一下爽蜜桃在线观看| 成人免费av资源| 午夜剧场在线免费观看| 久久久www| 精品无码国模私拍视频| 亚洲精品成人无限看| 精品国产91亚洲一区二区三区www| 成人一级视频| 日韩av手机在线| freexxx性亚洲精品| 日韩最新在线视频| 福利视频在线导航| 日韩精品在线观看视频| 亚洲欧美另类视频| 欧美一区二区三区在线电影| 天天干天天操天天操| 亚洲影视在线观看| 麻豆网址在线观看| 欧美激情综合在线| 丰满少妇高潮一区二区| 99久久精品国产导航| 国产一精品一aⅴ一免费| 韩国精品一区二区| 在线播放免费视频| 久久99精品国产麻豆婷婷| 成年人网站大全| 久久精品国产清高在天天线| 国产白丝袜美女久久久久| 在线看片成人| 7777在线视频| 亚洲成人一区| 肉大捧一出免费观看网站在线播放| 色999国产精品| 亚洲第一导航| 91亚洲成人| 做爰高潮hd色即是空| 久久福利影院| 亚洲欧美日韩不卡一区二区三区| 在线一级成人| 日韩国产在线一区| 成人一区二区| 一区二区三区在线视频111| 色综合久久网| 在线观看av的网址| 一区二区自拍| 岳毛多又紧做起爽| 日韩专区欧美专区| 久久久久xxxx| 成人在线综合网站| 野花社区视频在线观看| 久久久亚洲国产美女国产盗摄| 丰腴饱满的极品熟妇| 亚洲国产高清不卡| 美女的奶胸大爽爽大片| 一区二区三区不卡视频在线观看| 日本一本高清视频| 色噜噜夜夜夜综合网| 91黄色在线视频| 日韩精品一区二区三区中文不卡| 亚洲欧美另类视频| 亚洲欧美在线播放| 调教视频免费在线观看| 欧美精品一区二区免费| 激情视频网站在线播放色| 国产成人精品亚洲精品| 亚洲伦理久久| 国产一区免费在线| 欧美精品羞羞答答| 老司机午夜免费福利视频| 99精品视频免费| 精品少妇无遮挡毛片| 国产精品综合久久| 激情综合丁香五月| 国产精品久久看| 久久午夜鲁丝片午夜精品| 色欧美日韩亚洲| 精品久久久久久亚洲综合网站| 亚洲激情视频在线观看| 1区2区3区在线观看| 孩xxxx性bbbb欧美| 国产91精品在线| 国产精品久久久对白| 欧美亚洲精品在线| www污在线观看| 奇米精品一区二区三区四区 | 一区二区三区 日韩| 国产精品自拍三区| 三上悠亚影音先锋| 一区二区三区四区精品在线视频 | 欧美日韩国产成人| 1234区中文字幕在线观看| 国产精品成人观看视频国产奇米| 日本一区二区三区视频在线看 | 中文字幕日本在线观看| 久久久久久久成人| 福利一区二区免费视频| 国产一区二区免费电影| 日韩欧美视频| 日韩欧美国产免费| 国产一区不卡视频| 韩国三级hd中文字幕| 亚洲成人免费看| av中文字幕观看| 在线观看精品国产视频| 美女视频在线免费| 99影视tv| 一区二区电影在线观看| 不卡的av中文字幕| 久久久久久久综合色一本| 日韩aaaaaa| 日韩精品中文字幕一区二区三区 | 欧美在线视频一二三| 深夜激情久久| 一区二区免费在线观看| 午夜亚洲性色福利视频| 999精品免费视频| 亚洲在线中文字幕| 国产草草影院ccyycom| xxx一区二区| 电影亚洲一区| 日本一区二区三不卡| 国产一区成人| 黄色短视频在线观看| 亚洲成人av电影在线| 亚洲精品视频网| 欧美激情精品久久久久久| 国产精品日韩精品在线播放| 在线观看成人av电影| 乱一区二区av| 黑人狂躁日本娇小| 欧美三级日韩三级| 在线免费av电影| 国产精品欧美激情| 久久高清免费| 国产一级免费大片| 亚洲欧美另类久久久精品 | 亚洲精品成人久久| 538在线观看| 黑人巨大精品欧美一区二区小视频 | a级黄色一级片| proumb性欧美在线观看| 日韩aaaaaa| 亚洲美女视频网| 国产 日韩 欧美一区| 五月天国产一区| 蜜桃免费网站一区二区三区| 亚洲黄色网址大全| 成人动漫一区二区在线| 久久天天狠狠| 一本精品一区二区三区| 中文字幕第六页| 亚洲成人高清在线| 天堂av中文在线资源库| 日韩**中文字幕毛片| 欧美日韩有码| www.欧美激情.com| 亚洲综合视频在线| 污污网站免费在线观看| 日产精品久久久一区二区福利| av资源久久| 香蕉视频色在线观看| 午夜婷婷国产麻豆精品| 欧美扣逼视频| 成人午夜两性视频| 亚洲人成免费| 九九九视频在线观看| 欧美一级午夜免费电影| 91九色porn在线资源| 欧美一级二级三级| 国产一区视频网站| 国产成人在线免费视频| 中文字幕在线看视频国产欧美在线看完整| 亚洲黑人在线| 国精产品一区一区三区视频| 国产日韩欧美a| www黄色网址| 国产成人精品av在线| 欧美粗暴jizz性欧美20| 亚洲最大免费视频| 欧美日韩不卡一区二区| 55av亚洲| 吴梦梦av在线| 久久久久综合网| 国产成人a人亚洲精品无码| 2019亚洲日韩新视频| 亚洲xxx拳头交| 性欧美丰满熟妇xxxx性仙踪林| 欧美肥胖老妇做爰| 欧美91看片特黄aaaa|