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

OpenHarmony系統(tǒng)解決方案 - 接入多個顯示設備卡開機Logo

系統(tǒng) OpenHarmony
在窗口子系統(tǒng)中AbstractDisplayController控制器的初始化與屏幕連接事件的接收存在時序問題,啟動成功時窗口子系統(tǒng)收到屏幕連接事件的時機均在AbstractDisplayController控制器的初始化之后,所以可以正常進入系統(tǒng)。

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

51CTO 開源基礎軟件社區(qū)

https://ost.51cto.com

問題描述

問題環(huán)境

系統(tǒng)版本:OpenHarmony-3.2-Release。

問題現(xiàn)象

接入多個顯示設備后,啟動系統(tǒng)偶現(xiàn)卡開機Logo。

異常效果:

系統(tǒng)卡在開機Logo界面,長時間無法顯示開機動畫,并且無法進入系統(tǒng)。

OpenHarmony系統(tǒng)解決方案 - 接入多個顯示設備卡開機Logo-開源基礎軟件社區(qū)OpenHarmony系統(tǒng)解決方案 - 接入多個顯示設備卡開機Logo-開源基礎軟件社區(qū)

正常效果:

系統(tǒng)啟動成功,顯示開機動畫,開機動畫結束后顯示鎖屏界面。

OpenHarmony系統(tǒng)解決方案 - 接入多個顯示設備卡開機Logo-開源基礎軟件社區(qū)OpenHarmony系統(tǒng)解決方案 - 接入多個顯示設備卡開機Logo-開源基礎軟件社區(qū)

問題原因

  • 在窗口子系統(tǒng)中AbstractDisplayController控制器的初始化與屏幕連接事件的接收存在時序問題,啟動成功時窗口子系統(tǒng)收到屏幕連接事件的時機均在AbstractDisplayController控制器的初始化之后,所以可以正常進入系統(tǒng)。
  • 當先接收到屏幕連接事件,再進行AbstractDisplayController控制器的初始化操作時,則會由于OnAbstractScreenConnect函數(shù)的處理邏輯導致設置默認屏幕操作失敗。

解決方案

修改默認屏幕設置條件,解決AbstractDisplayController控制器加載慢于Display通知屏幕連接事件時,造成的無法設置默認屏幕問題。

修改文件:foundation/window/window_manager/dmserver/src/abstract_display_controller.cpp

AbstractDisplayController::OnAbstractScreenConnect函數(shù)中,將以下代碼:

if (group->combination_ == ScreenCombination::SCREEN_ALONE || group->GetChildCount() == 1) {

替換為:

ScreenId dmsScreenId = abstractScreenController_->GetDefaultAbstractScreenId();
sptr<AbstractDisplay> display = GetAbstractDisplayByScreen(dmsScreenId);
if (group->combination_ == ScreenCombination::SCREEN_ALONE || group->GetChildCount() == 1 || display == nullptr) {

替換后完整函數(shù)代碼:

void AbstractDisplayController::OnAbstractScreenConnect(sptr<AbstractScreen> absScreen)
{
    if (absScreen == nullptr) {
        WLOGFE("absScreen is null");
        return;
    }
    WLOGI("connect new screen. id:%{public}" PRIu64"", absScreen->dmsId_);
    std::lock_guard<std::recursive_mutex> lock(mutex_);
    sptr<AbstractScreenGroup> group = absScreen->GetGroup();
    if (group == nullptr) {
        WLOGE("the group information of the screen is wrong");
        return;
    }
    ScreenId dmsScreenId = abstractScreenController_->GetDefaultAbstractScreenId();
    sptr<AbstractDisplay> display = GetAbstractDisplayByScreen(dmsScreenId);
    if (group->combination_ == ScreenCombination::SCREEN_ALONE || group->GetChildCount() == 1 || display == nullptr) {
        BindAloneScreenLocked(absScreen);
    } else if (group->combination_ == ScreenCombination::SCREEN_MIRROR) {
        WLOGI("OnAbstractScreenConnect, ScreenCombination::SCREEN_MIRROR, AddScreenToMirrorLocked");
        AddScreenToMirrorLocked(absScreen);
    } else if (group->combination_ == ScreenCombination::SCREEN_EXPAND) {
        WLOGI("OnAbstractScreenConnect, ScreenCombination::SCREEN_EXPAND, AddScreenToExpandLocked");
        AddScreenToExpandLocked(absScreen);
    } else {
        WLOGE("support in future. combination:%{public}u", group->combination_);
    }
}

定位過程

落盤異常開機日志,發(fā)現(xiàn)Launcher和SystemUI等系統(tǒng)應用在啟動過程中報錯,無法獲取DefaultDisplayInfo。

08-05 17:18:29.046   521  1088 D C04201/AbstractScreenController: <177>GetDefaultAbstractScreenId: GetDefaultAbstractScreenId, screen:0
08-05 17:18:29.046   521  1088 D C04201/DisplayManagerService: <190>GetDefaultDisplayInfo: GetDefaultDisplayInfo 0
08-05 17:18:29.046   521  1088 E C04201/AbstractDisplayController: <105>GetAbstractDisplayByScreen: fail to get AbstractDisplay 0
08-05 17:18:29.047   521  1088 E C04201/DisplayManagerService: <193>GetDefaultDisplayInfo: fail to get displayInfo by id: invalid display
08-05 17:18:29.047   240  1090 I C01800/SAMGR: SystemAbilityManagerStub::OnReceived, code = 12, callerPid = 1156, flags= 0
08-05 17:18:29.047  1156  1156 W C04201/DisplayManagerProxy: <52>GetDefaultDisplayInfo: DisplayManagerProxy::GetDefaultDisplayInfo SendRequest nullptr.
08-05 17:18:29.047  1156  1156 D C03f00/ArkCompiler: [ecmascript] Throw error: JsDisplayManager::OnGetDefaultDisplay failed.

查找默認屏幕設置邏輯,追蹤Log發(fā)現(xiàn)默認屏幕信息從abstractDisplayMap_中獲取。

// foundation/window/window_manager/dmserver/src/abstract_display_controller.cpp
sptr<AbstractDisplay> AbstractDisplayController::GetAbstractDisplayByScreen(ScreenId screenId) const
{
    if (screenId == SCREEN_ID_INVALID) {
        WLOGFE("screen id is invalid.");
        return nullptr;
    }
    std::lock_guard<std::recursive_mutex> lock(mutex_);
    for (auto iter : abstractDisplayMap_) {
        sptr<AbstractDisplay> display = iter.second;
        if (display->GetAbstractScreenId() == screenId) {
            return display;
        }
    }
    WLOGFE("fail to get AbstractDisplay %{public}" PRIu64"", screenId);
    return nullptr;
}

abstractDisplayMap_對象會在兩個位置被insert數(shù)據(jù),BindAloneScreenLocked函數(shù)和AddScreenToExpandLocked函數(shù)。而兩個函數(shù)擁有同一個入口函數(shù)AbstractDisplayController::OnAbstractScreenConnect。

// foundation/window/window_manager/dmserver/src/abstract_display_controller.cpp
void AbstractDisplayController::OnAbstractScreenConnect(sptr<AbstractScreen> absScreen)
{
    if (absScreen == nullptr) {
        WLOGFE("absScreen is null");
        return;
    }
    WLOGI("connect new screen. id:%{public}" PRIu64"", absScreen->dmsId_);
    std::lock_guard<std::recursive_mutex> lock(mutex_);
    sptr<AbstractScreenGroup> group = absScreen->GetGroup();
    if (group == nullptr) {
        WLOGE("the group information of the screen is wrong");
        return;
    }
    if (group->combination_ == ScreenCombination::SCREEN_ALONE || group->GetChildCount() == 1) {
        BindAloneScreenLocked(absScreen);
    } else if (group->combination_ == ScreenCombination::SCREEN_MIRROR) {
        WLOGI("OnAbstractScreenConnect, ScreenCombination::SCREEN_MIRROR, AddScreenToMirrorLocked");
        AddScreenToMirrorLocked(absScreen);
    } else if (group->combination_ == ScreenCombination::SCREEN_EXPAND) {
        WLOGI("OnAbstractScreenConnect, ScreenCombination::SCREEN_EXPAND, AddScreenToExpandLocked");
        AddScreenToExpandLocked(absScreen);
    } else {
        WLOGE("support in future. combination:%{public}u", group->combination_);
    }
}

查看源碼對應Log,發(fā)現(xiàn)異常情況下屏幕OnAbstractScreenConnect函數(shù)的執(zhí)行操作是一起完成的,此時ScrrenID為0的屏幕ScreenCombination屬性為ScreenCombination::SCREEN_MIRROR。而在正常情況下OnAbstractScreenConnect函數(shù)是分開執(zhí)行的。

異常Log:

08-05 17:18:26.923   521   923 I C04201/AbstractDisplayController: <152>connect new screen. id:0
08-05 17:18:26.923   521   923 I C04201/AbstractDisplayController: <162>OnAbstractScreenConnect, ScreenCombination::SCREEN_MIRROR, AddScreenToMirrorLocked
08-05 17:18:26.923   521   656 I C04201/AbstractScreenController: <1161>operator(): screenId:2, trigger:[foundation]
08-05 17:18:26.923   332   430 I C01799/MemMgr: MultiAccountManager::Init The manager initial succeed, accountCount = 0.
08-05 17:18:26.923   521   923 I C04201/AbstractDisplayController: <558>bind display to mirror. screen:0
08-05 17:18:26.923   521   656 I C04200/ClientAgentContainer: <98>GetAgentsByType: no such type of agent registered! type:2
08-05 17:18:26.923   521   923 I C04201/AbstractScreenController: <203>RegisterAbstractScreenCallback: dmsScreenId :1
08-05 17:18:26.923   521   923 I C04201/AbstractDisplayController: <152>connect new screen. id:1
08-05 17:18:26.923   521   923 E C04201/AbstractScreenController: <159>did not find screen:18446744073709551615
08-05 17:18:26.923   521   923 E C04201/AbstractDisplayController: <156>the group information of the screen is wrong
08-05 17:18:26.923   521   923 I C04201/AbstractScreenController: <203>RegisterAbstractScreenCallback: dmsScreenId :2
08-05 17:18:26.923   521   923 I C04201/AbstractDisplayController: <152>connect new screen. id:2
08-05 17:18:26.923   521   923 I C04201/AbstractDisplayController: <162>OnAbstractScreenConnect, ScreenCombination::SCREEN_MIRROR, AddScreenToMirrorLocked
08-05 17:18:26.923   521   923 I C04201/AbstractDisplayController: <558>bind display to mirror. screen:2

正常Log:

08-05 17:23:07.081   547   770 I C04201/AbstractDisplayController: <152>connect new screen. id:0
08-05 17:23:07.081   547   770 D C04201/AbstractScreenController: <177>GetDefaultAbstractScreenId: GetDefaultAbstractScreenId, screen:0

08-05 17:23:07.088   547   770 I C04201/AbstractDisplayController: <152>connect new screen. id:2
08-05 17:23:07.088   547   770 I C04201/AbstractDisplayController: <162>OnAbstractScreenConnect, ScreenCombination::SCREEN_MIRROR, AddScreenToMirrorLocked
08-05 17:23:07.088   547   770 I C04201/AbstractDisplayController: <558>bind display to mirror. screen:2

查看OnAbstractScreenConnect的觸發(fā)邏輯有兩種。

第一種,AbstractDisplayController初始化時注冊屏幕事件回調,注冊后遍歷dmsScreenMap_調用AbstractDisplayController::OnAbstractScreenConnect初始化在回調注冊前記錄的屏幕數(shù)據(jù)。

// foundation/window/window_manager/dmserver/src/abstract_screen_controller.cpp
void AbstractDisplayController::Init(sptr<AbstractScreenController> abstractScreenController)
{
    WLOGFD("display controller init");
    displayCount_ = 0;
    abstractScreenController_ = abstractScreenController;
    abstractScreenCallback_ = new(std::nothrow) AbstractScreenController::AbstractScreenCallback();
    if (abstractScreenCallback_ == nullptr) {
        WLOGFE("abstractScreenCallback init failed");
        return;
    }
    abstractScreenCallback_->onConnect_
        = std::bind(&AbstractDisplayController::OnAbstractScreenConnect, this, std::placeholders::_1);
    abstractScreenCallback_->onDisconnect_
        = std::bind(&AbstractDisplayController::OnAbstractScreenDisconnect, this, std::placeholders::_1);
    abstractScreenCallback_->onChange_
        = std::bind(&AbstractDisplayController::OnAbstractScreenChange, this, std::placeholders::_1,
        std::placeholders::_2);
    abstractScreenController->RegisterAbstractScreenCallback(abstractScreenCallback_);
}

void AbstractScreenController::RegisterAbstractScreenCallback(sptr<AbstractScreenCallback> cb)
{
    std::lock_guard<std::recursive_mutex> lock(mutex_);
    abstractScreenCallback_ = cb;
    for (auto& iter : dmsScreenMap_) {
        if (iter.second != nullptr && abstractScreenCallback_ != nullptr) {
            WLOGFI("dmsScreenId :%{public}" PRIu64"", iter.first);
            abstractScreenCallback_->onConnect_(iter.second);
        }
    }
}

第二種,當窗口子系統(tǒng)觸發(fā)OnRsScreenConnectionChange回調時,會調用ProcessScreenConnected函數(shù)。如果abstractScreenCallback_回調函數(shù)注冊則執(zhí)行AbstractDisplayController::OnAbstractScreenConnect。

// foundation/window/window_manager/dmserver/src/abstract_screen_controller.cpp
void AbstractScreenController::OnRsScreenConnectionChange(ScreenId rsScreenId, ScreenEvent screenEvent)
{
    WLOGFI("rs screen event. id:%{public}, event:%{public}u", rsScreenId, static_cast<uint32_t>(screenEvent));
    if (screenEvent == ScreenEvent::CONNECTED) {
        auto task = [this, rsScreenId] {
            ProcessScreenConnected(rsScreenId);
        };
        controllerHandler_->PostTask(task, AppExecFwk::EventQueue::Priority::HIGH);
    }
    ···
}

void AbstractScreenController::ProcessScreenConnected(ScreenId rsScreenId)
{
    std::lock_guard<std::recursive_mutex> lock(mutex_);
    if (screenIdManager_.HasRsScreenId(rsScreenId)) {
        WLOGE("reconnect screen, screenId=%{public}" PRIu64"", rsScreenId);
        return;
    }
    WLOGFD("connect new screen");
    auto absScreen = InitAndGetScreen(rsScreenId);
    if (absScreen == nullptr) {
        return;
    }
    sptr<AbstractScreenGroup> screenGroup = AddToGroupLocked(absScreen);
    if (screenGroup == nullptr) {
        return;
    }
    ···
    if (abstractScreenCallback_ != nullptr) {
        abstractScreenCallback_->onConnect_(absScreen);
    }
    ···
}

如果OnAbstractScreenConnect在第二種情況執(zhí)行,加載第一個屏幕時,則在group->GetChildCount() == 1時進入判斷,執(zhí)行BindAloneScreenLocked(absScreen);函數(shù),系統(tǒng)正常運行。

如果OnAbstractScreenConnect在第一種情況執(zhí)行,加載第一個屏幕時,會創(chuàng)建screenGroup。創(chuàng)建的group也會insert進dmsScreenMap_,此操作會導致異常Log中ScreenId為1的屏幕綁定異常。

// foundation/window/window_manager/dmserver/src/abstract_screen_controller.cpp
sptr<AbstractScreenGroup> AbstractScreenController::AddToGroupLocked(sptr<AbstractScreen> newScreen)
{
    sptr<AbstractScreenGroup> res;
    if (dmsScreenGroupMap_.empty()) {
        WLOGI("connect the first screen");
        // 第一塊顯示設備連接時進入
        res = AddAsFirstScreenLocked(newScreen); 
    } else {
        // 后續(xù)顯示設備連接時進入
        res = AddAsSuccedentScreenLocked(newScreen);
    }
    return res;
}
sptr<AbstractScreenGroup> AbstractScreenController::AddAsFirstScreenLocked(sptr<AbstractScreen> newScreen)
{
    ScreenId dmsGroupScreenId = screenIdManager_.CreateAndGetNewScreenId(SCREEN_ID_INVALID);
    ···
    dmsScreenGroupMap_.insert(std::make_pair(dmsGroupScreenId, screenGroup));
    dmsScreenMap_.insert(std::make_pair(dmsGroupScreenId, screenGroup));
    ···
}

當?shù)诙K顯示設備連接時,尋找第一塊設備創(chuàng)建的group,并把自己添加進group中。

// foundation/window/window_manager/dmserver/src/abstract_screen_controller.cpp
sptr<AbstractScreenGroup> AbstractScreenController::AddAsSuccedentScreenLocked(sptr<AbstractScreen> newScreen)
{
    ScreenId defaultScreenId = GetDefaultAbstractScreenId();
    auto iter = dmsScreenMap_.find(defaultScreenId);
    if (iter == dmsScreenMap_.end()) {
        WLOGE("AddAsSuccedentScreenLocked. defaultScreenId:%{public}" PRIu64" is not in dmsScreenMap_.",
            defaultScreenId);
        return nullptr;
    }
    auto screen = iter->second;
    auto screenGroupIter = dmsScreenGroupMap_.find(screen->groupDmsId_);
    if (screenGroupIter == dmsScreenGroupMap_.end()) {
        WLOGE("AddAsSuccedentScreenLocked. groupDmsId:%{public}" PRIu64" is not in dmsScreenGroupMap_.",
            screen->groupDmsId_);
        return nullptr;
    }
    auto screenGroup = screenGroupIter->second;
    Point point;
    if (screenGroup->combination_ == ScreenCombination::SCREEN_EXPAND) {
        point = {screen->GetActiveScreenMode()->width_, 0};
    }
    screenGroup->AddChild(newScreen, point);
    return screenGroup;
}

當OnAbstractScreenConnect被執(zhí)行時,獲取到ScreenID為0的Group,此時Group內的屏幕數(shù)為2,所以無法進入BindAloneScreenLocked函數(shù)所在的判斷,造成異常。

// foundation/window/window_manager/dmserver/src/abstract_display_controller.cpp
void AbstractDisplayController::OnAbstractScreenConnect(sptr<AbstractScreen> absScreen)
{
    if (absScreen == nullptr) {
        WLOGFE("absScreen is null");
        return;
    }
    WLOGI("connect new screen. id:%{public}" PRIu64"", absScreen->dmsId_);
    std::lock_guard<std::recursive_mutex> lock(mutex_);
    sptr<AbstractScreenGroup> group = absScreen->GetGroup();
    if (group == nullptr) {
        WLOGE("the group information of the screen is wrong");
        return;
    }
    if (group->combination_ == ScreenCombination::SCREEN_ALONE || group->GetChildCount() == 1) {
        BindAloneScreenLocked(absScreen);
    } else if (group->combination_ == ScreenCombination::SCREEN_MIRROR) {
        WLOGI("OnAbstractScreenConnect, ScreenCombination::SCREEN_MIRROR, AddScreenToMirrorLocked");
        AddScreenToMirrorLocked(absScreen);
    } else if (group->combination_ == ScreenCombination::SCREEN_EXPAND) {
        WLOGI("OnAbstractScreenConnect, ScreenCombination::SCREEN_EXPAND, AddScreenToExpandLocked");
        AddScreenToExpandLocked(absScreen);
    } else {
        WLOGE("support in future. combination:%{public}u", group->combination_);
    }
}

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

51CTO 開源基礎軟件社區(qū)

https://ost.51cto.com

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

2023-07-10 16:06:50

鴻蒙檢測鎖屏應用

2023-07-18 14:05:30

鴻蒙

2010-12-21 17:36:12

2011-11-18 14:59:47

Aruba

2009-12-31 15:43:32

寬帶接入網(wǎng)

2009-10-27 15:35:08

2009-07-29 09:43:15

銀行網(wǎng)絡無線接入

2009-10-29 13:46:30

ADSL接入解決方案

2009-10-30 16:42:27

無線接入解決方案

2009-11-02 18:10:39

綜合接入解決方案

2009-12-30 15:08:17

無線接入技術

2009-10-29 13:54:33

遠程接入解決方案

2011-05-18 15:30:13

2009-10-27 15:49:43

2009-10-29 10:32:17

接入網(wǎng)解決方案

2009-10-28 17:39:58

光接入網(wǎng)解決方案

2011-02-17 15:26:27

IADVoIPPPPoE

2022-11-04 15:13:29

2009-02-19 10:13:00

2012-12-20 15:07:15

銳捷無線網(wǎng)絡金融網(wǎng)絡
點贊
收藏

51CTO技術棧公眾號

成人av毛片在线观看| 欧美一区国产一区| 色在线观看视频| 成人资源在线播放| 亚洲.国产.中文慕字在线| 欧美二区在线看| 91麻豆视频在线观看| 久久中文字幕二区| 精品88久久久久88久久久| 夜夜添无码一区二区三区| 日韩专区一区二区| 日本色综合中文字幕| 99久久精品免费| 亚洲精品女人久久久| 2019中文字幕在线电影免费| 91蝌蚪国产九色| 成人疯狂猛交xxx| 精品无码久久久久| 日韩免费av| 亚洲成色777777女色窝| 无码少妇一区二区三区芒果| 天堂av最新在线| 国产精品情趣视频| 国模精品一区二区三区| 中文字幕永久免费视频| 国产欧美在线| 色综合久久精品亚洲国产| 国产精久久一区二区三区| 午夜久久av| 欧美日韩一级片在线观看| 青青草精品视频在线| chinese偷拍一区二区三区| 成人免费视频caoporn| 国产日韩欧美影视| 色老头在线视频| 国产日韩亚洲| 久久男人的天堂| 国产suv一区二区三区| 日韩精品久久| 亚洲欧美另类在线观看| 国产婷婷在线观看| 香港久久久电影| 欧美一区二区三区在| 在线免费观看视频黄| 精品91久久| 疯狂蹂躏欧美一区二区精品| 男的插女的下面视频| 日韩激情av| 亚洲精品久久久久久国产精华液| 一本久道久久综合| 成人动漫在线免费观看| 久久精品人人做| 欧美成人网在线| 国产又粗又猛又爽又黄的视频四季 | www.国产在线视频| 九七久久人人| 国产精品进线69影院| 日本一区二区在线| 精品欧美不卡一区二区在线观看| 成人激情文学综合网| 97在线资源站| 国产露脸国语对白在线| 九色综合狠狠综合久久| 成人在线视频福利| 国产精品久久久国产盗摄| 久久精品国产一区二区三| 国产精品女主播视频| 中文字幕丰满人伦在线| 奇米精品一区二区三区在线观看一 | 在线观看操人| 亚洲在线观看免费| 国产av国片精品| av在线视屏| 欧美日韩免费区域视频在线观看| 国产 日韩 欧美在线| 电影一区二区三| 欧美一a一片一级一片| 国产精品igao| 日韩欧国产精品一区综合无码| 884aa四虎影成人精品一区| 亚洲天堂网站在线| 国产精东传媒成人av电影| 亚洲第一免费播放区| 女~淫辱の触手3d动漫| 日韩在线观看| 欧美极度另类性三渗透| 日韩黄色在线播放| 裸体在线国模精品偷拍| 99三级在线| 你懂的在线视频| 亚洲欧洲色图综合| 精品国产av无码一区二区三区| 超级碰碰久久| 在线91免费看| www.超碰97| 国产精品久久久久久影院8一贰佰| 欧美成人国产va精品日本一级| jizz国产免费| 青青国产91久久久久久 | 丁香婷婷成人| 一区二区三区久久精品| 午夜精品一区二区三区视频| 日韩午夜免费| 91久久精品国产| 日韩精品一二| 亚洲精品成人悠悠色影视| 日韩欧美国产免费| 成人污污视频| 亚洲人成网站777色婷婷| 三日本三级少妇三级99| 国产精品nxnn| 久久九九国产精品怡红院| 久久午夜免费视频| 韩国欧美国产1区| 欧美日韩高清免费| 欧美xxxx视频| 欧美色成人综合| 粉嫩av懂色av蜜臀av分享| 99久久婷婷这里只有精品 | 亚洲欧美国产精品| 国产亚洲第一页| 久久国产精品99精品国产| 久久精品欧美| 第四色日韩影片| 7777精品伊人久久久大香线蕉完整版 | 男人天堂新网址| 电影一区电影二区| 欧美性猛交xxxx乱大交| 污视频在线观看免费网站| 蜜乳av综合| 国内精品久久久久久| 国产精品主播一区二区| 欧美国产激情二区三区| 久久久久久久久久久福利| 91夜夜蜜桃臀一区二区三区| 久久精品视频在线播放| 亚洲精品国产精品国自产网站按摩| 99精品视频在线播放观看| 久久亚洲a v| 日韩欧美中文在线观看| 精品国产一区久久久| 久久久久久久久久一级| 国产亚洲精品aa| 丝袜老师办公室里做好紧好爽| 成人av综合网| 欧美国产亚洲视频| 亚洲精品人妻无码| 亚洲精品伦理在线| 久久黄色一级视频| 欧美成人一品| 成人三级在线| 波多野结衣中文字幕久久| 欧美成人三级电影在线| 免费观看一级一片| 99精品久久久| 精品日本一区二区三区| 美女高潮视频在线看| 亚洲第一精品福利| 亚洲黄色小说图片| 91网站在线观看视频| 国产超级av在线| 精品一区三区| 国产精品久久久久久久久久久久久| 男操女在线观看| 在线观看一区日韩| 男人天堂资源网| 国产在线国偷精品产拍免费yy| 在线免费观看一区二区三区| 国产精品白丝久久av网站| 理论片在线不卡免费观看| a网站在线观看| 一区二区三区免费在线观看| av天堂一区二区| 一本综合久久| 亚洲成人自拍视频| 国产成年精品| 97国产精品免费视频| 欧美69xxxxx| 欧美人伦禁忌dvd放荡欲情| 免费中文字幕在线| 91亚洲永久精品| 啊啊啊国产视频| 自拍视频亚洲| 久久成人资源| 日韩一区二区三区四区五区 | 中日韩视频在线观看| 欧美最大成人综合网| 日本成人在线网站| 91精品国产91久久久久| 成a人v在线播放| 日韩午夜av电影| 在线观看日本网站| 日韩毛片高清在线播放| 中文字幕无码人妻少妇免费| 男女性色大片免费观看一区二区| 超级碰在线观看| 欧美美女在线| 91麻豆蜜桃| 欧美亚洲韩国| 欧美乱人伦中文字幕在线| 欧洲免费在线视频| 欧美一区二区播放| 亚洲熟妇无码乱子av电影| 国产精品黄色在线观看| av网页在线观看| 久草热8精品视频在线观看| 奇米影视亚洲色图| 天天色综合色| 欧美亚州在线观看| 51社区在线成人免费视频| 国产精品久久久久久久一区探花| 草莓视频丝瓜在线观看丝瓜18| 日韩有码片在线观看| 色综合成人av| 日韩欧美一级二级三级| 成人黄色片在线观看| 婷婷成人综合网| 久热这里有精品| 国产精品国产精品国产专区不蜜| 国产黄色三级网站| 国产麻豆9l精品三级站| 国产性生交xxxxx免费| 亚洲欧洲日本mm| 狠狠干视频网站| 色婷婷亚洲mv天堂mv在影片| 欧美精品国产精品久久久| 丁香综合av| 成人免费视频网站| 国产一区二区三区黄网站| 国产精品女人久久久久久| 亚洲私拍视频| 91国内揄拍国内精品对白| 欧美男男video| 成年无码av片在线| 日本中文字幕伦在线观看| 亚洲视频在线视频| 欧美女v视频| 日韩国产精品亚洲а∨天堂免| 性生活黄色大片| 日韩一区二区免费在线电影| 国产一区二区三区三州| 欧美日韩一区三区| 亚洲av综合一区| 在线免费观看日韩欧美| 国产性生活视频| 色94色欧美sute亚洲13| 天天干天天干天天| 欧美午夜性色大片在线观看| 久久亚洲精品国产| 欧美日韩国产在线看| 久草国产在线视频| 亚洲一二三四区不卡| 久久久精品99| 亚洲大型综合色站| 国产午夜精品无码| 精品久久久久国产| 一级片中文字幕| 狠狠做深爱婷婷久久综合一区| 国产午夜在线播放| 欧美性videos高清精品| 青青青国产在线| 一本色道久久综合亚洲91| 国产字幕在线观看| 欧美亚洲综合久久| 国产有码在线观看| 555www色欧美视频| www夜片内射视频日韩精品成人| 日韩美女视频在线| 天堂成人在线观看| 亚洲成人av电影在线| 在线看成人av| 黑人精品xxx一区| 国产情侣免费视频| 欧美日韩国产精选| 国产福利小视频| 亚洲精品99久久久久| 日本一本草久在线中文| 夜夜躁日日躁狠狠久久88av| 午夜在线免费观看视频| 欧美不卡视频一区发布| 岛国毛片av在线| 国产精品电影在线观看| 先锋影音网一区二区| 91黄色精品| 妖精一区二区三区精品视频| 神马影院一区二区三区| 综合久久一区| 久久久999视频| 久久精品国产亚洲一区二区三区| 亚洲成人激情小说| 久久久精品综合| 国产极品国产极品| 日韩欧美国产高清91| 国产男女裸体做爰爽爽| 日韩av在线免费看| 免费大片黄在线观看视频网站| 欧美黑人国产人伦爽爽爽| 忘忧草在线www成人影院| 97久草视频| 成人在线免费视频观看| 老子影院午夜伦不卡大全| 日本中文字幕一区二区有限公司| 国产调教打屁股xxxx网站| 国产日产欧美一区| 精品少妇一二三区| 欧美精品一级二级三级| 色av男人的天堂免费在线| 久久国产精品久久久久久| 都市激情亚洲综合| 国产91aaa| 久久精品亚洲人成影院 | 周于希免费高清在线观看| 成人国产精品久久久| 亚洲图片久久| 毛片在线播放视频| 韩国成人在线视频| 蜜桃av乱码一区二区三区| 午夜精品爽啪视频| 国产成人久久精品77777综合 | 国产成人福利在线| 精品成人av一区| 国产xxxx孕妇| 日韩在线观看成人| 国产成人免费9x9x人网站视频| 精品国产一区二区三区麻豆小说 | 欧美激情国内偷拍| 亚洲成人毛片| 亚洲国产成人不卡| 巨乳诱惑日韩免费av| 成人无码www在线看免费| 夜色激情一区二区| av网站在线观看免费| www.久久久久| 免费一级欧美在线观看视频| 日韩三级电影| 国产一区二区电影在线观看| 日本xxxxxxxxxx75| 国产suv一区二区三区88区| 天天色影综合网| 欧美美女直播网站| 欧美黄色激情| 91视频8mav| 国产精品久久久久一区二区三区厕所| 热久久精品免费视频| 久久精品亚洲一区二区三区浴池 | 三年中国中文观看免费播放| 日韩人在线观看| 黄色在线视频观看网站| 欧美中文在线观看国产| 亚洲精品白浆高清| 免费无码国产v片在线观看| 91麻豆免费在线观看| 国产精品久久久久久人| 亚洲一级黄色av| 成人黄色免费观看| 亚洲综合网中心| 国产一区二区福利| 免费又黄又爽又色的视频| 亚洲精品在线一区二区| 福利在线免费视频| 久久亚洲精品欧美| 日韩精品一二三区| 中文字幕第二区| 在线综合视频播放| 黄色污污视频在线观看| 国产一区二区三区色淫影院| 99视频精品| 国产精品久久久视频| 91精品啪在线观看国产60岁| 免费在线观看av电影| 国产一区二区三区四区五区加勒比| 母乳一区在线观看| 成人在线观看免费高清| 欧美一二三区在线| 久久影院午夜精品| 日本一区二区在线| 国产乱人伦偷精品视频不卡| 亚欧洲精品在线视频| 亚洲欧美日韩第一区| 伊人久久精品| 欧美又粗又长又爽做受| 久久久精品日韩欧美| 国产又粗又猛又黄又爽| 久久久亚洲福利精品午夜| 国产一区二区三区91| 亚洲第一成肉网| 欧美日韩亚洲91| 日本网站在线免费观看视频| 懂色中文一区二区三区在线视频 | 一区2区3区在线看| 欧美视频免费一区二区三区| 国产欧美日韩丝袜精品一区| 欧美日韩国内| av在线免费看片| 香港成人在线视频| av在线免费观看网| 国产精品免费一区二区三区四区| 日本aⅴ免费视频一区二区三区| 中文字幕影音先锋| 亚洲天堂第二页|