精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产一区二区欧美| 日色在线视频| 一区二区蜜桃| 亚洲国产精品久久| 九热视频在线观看| 日本三级韩国三级欧美三级| 91美女在线观看| 国产一区私人高清影院| 日韩av在线电影| 日韩欧美网站| 国产视频久久久| 爱情岛论坛亚洲自拍| 亚洲同志男男gay1069网站| 国产精品国产三级国产普通话三级| 91亚洲国产成人精品性色| 97久久久久久久| 欧美日韩福利| 中文字幕久热精品在线视频 | 日本中文一区二区三区| 欧美国产日本高清在线| 中文天堂资源在线| 欧美自拍视频| 日韩一区二区电影| 波多野结衣天堂| av在线私库| 一区二区三区丝袜| 亚洲高清资源综合久久精品| 亚欧洲精品视频| 精品一区二区三区久久久| 欧美一区视频在线| 亚洲精品77777| 欧美区亚洲区| 久久亚洲精品毛片| 欧美xxxooo| 欧美艳星介绍134位艳星| 亚洲精品国产精品久久清纯直播| 下面一进一出好爽视频| 精品国产黄a∨片高清在线| 欧美午夜精品久久久久久久| 国产手机免费视频| 中文字幕中文字幕在线中高清免费版| 国产精品视频一二| 日本公妇乱淫免费视频一区三区| 亚洲av综合色区无码一区爱av| 久久精品国产99久久6| 国产精品久久91| 婷婷激情五月综合| 久久精品在线| 国产成人精品电影| 亚洲午夜无码久久久久| 日本欧美在线观看| 国产精品丝袜白浆摸在线| 波多野结衣毛片| 人人狠狠综合久久亚洲| 国产精品你懂得| 伊人免费在线观看| 国产在线精品一区二区三区不卡| 成人国产精品久久久| 亚洲字幕av一区二区三区四区| 麻豆国产精品777777在线| 国产一区红桃视频| 性少妇videosexfreexxx片| 成人午夜激情片| 精品国产综合区久久久久久| 欧美少妇另类| 欧美—级在线免费片| 在线国产精品网| 天堂av中文在线| 亚洲成av人在线观看| 怡红院av亚洲一区二区三区h| 蜜桃视频在线网站| 色999日韩国产欧美一区二区| 簧片在线免费看| 粉嫩av国产一区二区三区| 日韩一区二区三区四区| 精品熟女一区二区三区| 一道在线中文一区二区三区| 色悠悠久久88| 91在线播放观看| 国产日本精品| 国产欧美日韩视频| 丰满岳乱妇国产精品一区| 91免费观看在线| 亚洲视频欧美在线| 久久av色综合| 色天天综合色天天久久| 亚洲第一成肉网| 欧美网色网址| 久久视频国产精品免费视频在线| 久久精品亚洲无码| 蜜桃精品视频在线观看| 国产99在线免费| 美女欧美视频在线观看免费 | 国产91精品免费| 欧洲一区二区日韩在线视频观看免费 | 超碰在线一区| 亚洲一级黄色片| 久久老司机精品视频| 日韩经典一区二区| 国产精品视频免费一区| 一区二区高清不卡| 欧美日韩激情美女| 性色av浪潮av| 久久国产电影| 69国产精品成人在线播放| 97超碰人人草| 国产午夜精品福利| 久久久久久久久久网| 啪啪av大全导航福利综合导航| 亚洲激情久久久| 国产盗摄一区二区三区在线| 久久一二三四| av一区二区三区四区电影| 成人免费黄色网页| 疯狂做受xxxx高潮欧美日本| 日韩不卡的av| 久久福利综合| 国产精品999| 无码精品黑人一区二区三区| 亚洲视频一区在线| 天堂社区在线视频| 在线观看欧美理论a影院| 久久久影视精品| 999精品国产| 国产精品福利av| 国产又黄又猛视频| 琪琪久久久久日韩精品| 欧美激情18p| 国产99对白在线播放| 国产精品视频第一区| 中文字幕欧美人妻精品一区| 精品欧美午夜寂寞影院| 九九九热精品免费视频观看网站| 一级特黄aaa| 国产精品丝袜一区| 人人干人人视频| 少妇精品久久久一区二区| 97激碰免费视频| 免费观看国产精品| 亚洲一区二区四区蜜桃| 国产精品久久久久野外| 综合日韩在线| 亚洲最大福利网| av毛片在线| 日韩无一区二区| 少妇aaaaa| 成人午夜电影网站| 欧美成人精品免费| 露出调教综合另类| 欧美在线精品免播放器视频| 欧美日韩视频精品二区| 日本道在线观看一区二区| 五月天综合视频| 日本午夜精品视频在线观看| 日日夜夜精品网站| 日韩成人在线电影| 欧美噜噜久久久xxx| 日本高清视频网站| 日韩欧美有码在线| 欧美aaa级片| 国产一区二三区好的| 亚洲国产一二三精品无码| 中文字幕区一区二区三| 午夜欧美不卡精品aaaaa| 日本一区高清| 欧美日韩中字一区| 免费在线视频一区二区| 不卡一卡二卡三乱码免费网站| 精品少妇一区二区三区在线| 久久av免费看| 国产日韩专区在线| 秋霞在线午夜| 亚洲人成网站免费播放| 一区二区三区免费在线| 亚洲综合在线五月| 国产精品亚洲无码| 经典一区二区三区| 久久亚洲精品无码va白人极品| 成人h动漫免费观看网站| 91国产视频在线| 春暖花开成人亚洲区| 欧美一级生活片| 欧美精品亚洲精品日韩精品| 国产欧美精品在线观看| 曰本三级日本三级日本三级| 午夜亚洲一区| 少妇熟女一区二区| 欧美sss在线视频| 国产欧美日韩综合精品| 免费在线观看的电影网站| 亚洲欧美国产另类| av中文字幕第一页| 欧美日韩精品国产| 搜索黄色一级片| 99r国产精品| 亚洲图色中文字幕| 国产午夜精品一区二区三区欧美| 亚洲va久久久噜噜噜久久狠狠| 亚洲天堂av资源在线观看| 国产成人黄色av| 成人福利电影| 久久久精品免费视频| 欧美偷拍视频| 欧美videos中文字幕| 中文字幕在线2018| 精品久久久中文| 99视频只有精品| 风间由美中文字幕在线看视频国产欧美| 亚洲不卡视频| 国产精品96久久久久久| av毛片午夜不卡高**水| 久久精品视频99| 国产小视频免费在线观看| 精品国产一区二区精华 | 91极品美女在线| 激情综合网五月婷婷| 亚洲三级免费电影| 妺妺窝人体色WWW精品| aaa亚洲精品| 欧美性猛交乱大交| 久久国产精品99精品国产| 国产二区视频在线播放| 国产精品啊啊啊| 中文字幕欧美日韩一区二区| 国产精品探花在线观看| 黄色国产精品一区二区三区| 日韩视频一二区| 91最新在线免费观看| 日韩黄色碟片| 国产免费观看久久黄| 国产69精品久久久久按摩| 国产成人av网| 亚洲电影有码| 国产精品对白刺激| 3d性欧美动漫精品xxxx软件| 日韩av手机在线| 日本综合字幕| 国产v综合v亚洲欧美久久| 性欧美超级视频| 国产精品91久久久久久| 成人日韩在线| 国产精品一区二区久久国产| а√天堂资源国产精品| 国产九九精品视频| av日韩一区| 亚洲影院污污.| 91免费精品国偷自产在线在线| 春色成人在线视频| 精品国产影院| 欧美激情一区二区三区在线视频| 综合亚洲自拍| 欧美一区免费视频| 成人看的视频| 最新黄色av网站| 国产伊人精品| 国产91xxx| 视频一区二区三区入口| 国产日韩欧美久久| 国产一区二区调教| 亚洲一二三四五| 97aⅴ精品视频一二三区| 在线免费观看麻豆| 国产精品电影一区二区| 91精品国产高清一区二区三蜜臀| 亚洲制服丝袜av| 日韩 欧美 中文| 欧美系列亚洲系列| 国产色片在线观看| 亚洲国产欧美一区| 成人精品福利| 精品少妇一区二区30p| 欧美xxxhd| 国产精品午夜视频| 999久久久精品一区二区| 欧美成人免费在线| 国产二区精品| 国产精品333| 久久精品国产精品亚洲综合| 国产一卡二卡三卡四卡| 国产欧美综合色| 精品99在线观看| 欧美性猛交xxxx乱大交| 国产毛片毛片毛片毛片| 亚洲国产日韩欧美在线图片 | 色婷婷精品视频| 一区二区三区四区欧美日韩| 亚洲国产导航| 久久人人爽av| 99精品视频一区二区| 特级西西人体高清大胆| 亚洲sss视频在线视频| 在线观看你懂的网站| 精品国产一区二区亚洲人成毛片| 久青青在线观看视频国产| 麻豆乱码国产一区二区三区| 黑人巨大精品| 成人片在线免费看| 91偷拍一区二区三区精品| 熟女少妇在线视频播放| 国产精品66部| 国产午夜精品福利视频| 五月天婷婷综合| 999av视频| 色偷偷噜噜噜亚洲男人| 超碰aⅴ人人做人人爽欧美| av成人综合网| 午夜精品视频一区二区三区在线看| 免费av观看网址| 成人午夜av影视| 欧美肥妇bbwbbw| 欧美亚洲国产一卡| 欧美白人做受xxxx视频| 国产69精品久久久久99| 激情五月综合婷婷| 亚洲一卡二卡三卡四卡无卡网站在线看| 亚洲精品乱码| 久久久久亚洲av无码网站| 国产精品不卡在线观看| 波多野结衣二区三区| 精品亚洲一区二区三区| 欧美aaaaaaa| 91精品视频在线看| 婷婷另类小说| 日韩一级免费片| 欧美激情一区二区三区蜜桃视频 | 麻豆一区在线观看| 在线免费观看视频一区| 免费在线毛片| 欧美在线激情网| 色天下一区二区三区| 99精品在线免费视频| av一二三不卡影片| 国产第一页在线播放| 精品欧美乱码久久久久久1区2区| 草莓福利社区在线| 91在线免费视频| 综合久久亚洲| 国偷自产av一区二区三区麻豆| 亚洲人成在线播放网站岛国| 国产三级视频在线播放| 欧美成人精品在线| 视频一区在线| 2018中文字幕第一页| 不卡一区二区中文字幕| 国产微拍精品一区| 亚洲欧美激情另类校园| 欧美一区 二区 三区| 午夜欧美性电影| 久久精品av麻豆的观看方式| 亚洲伦理一区二区三区| 91精品国产aⅴ一区二区| 亚洲综合影视| 国产综合欧美在线看| 国产精品入口| 国产熟女一区二区| 欧美乱熟臀69xxxxxx| 成人看片免费| 国产丝袜不卡| 日韩精品一卡二卡三卡四卡无卡| 日韩欧美黄色网址| 日韩亚洲欧美在线| 国产传媒在线观看| 日韩不卡av| 国产精品一区二区x88av| 日本少妇xxxx动漫| 一区二区在线视频播放| 中文字幕综合| 国产精品裸体瑜伽视频| 国产欧美一区视频| 国产农村妇女毛片精品久久| 久久久久亚洲精品国产| 久久99青青| 国产精品igao网网址不卡| 香蕉影视欧美成人| 成人综合影院| 91视频最新| 久久综合激情| 国产a免费视频| 亚洲免费电影在线观看| 青草综合视频| 日韩精品 欧美| 亚洲国产精品av| 亚洲av无码国产综合专区| 日本韩国在线不卡| 伊人久久大香线蕉综合四虎小说 | 欧美系列电影免费观看| 污污网站在线观看视频| 性感美女久久精品| 免费在线观看黄色网| 久草精品电影| 精品无人码麻豆乱码1区2区| 国产精品久久久久久久妇| 日韩视频一区在线| 天堂成人娱乐在线视频免费播放网站| 黄色一级片免费的| 欧美性猛交99久久久久99按摩| 成人短视频在线观看| 欧美一区二区综合| 成人高清在线视频| 国产女人高潮毛片|