日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 8.0 手机亮灭屏

發(fā)布時間:2024/1/8 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 8.0 手机亮灭屏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文主要跟蹤分析通過按松power鍵來喚醒,熄滅屏幕的邏輯。下面是一些相關(guān)類的介紹

PowerManagerService.java:簡稱PMS,負責Andorid系統(tǒng)中電源管理方面的工作。作為系統(tǒng)核心服務(wù)之一,主要處理系統(tǒng)中與power相關(guān)的計算,然后決策系統(tǒng)該如何反應(yīng)。同時PowerManagerService與其他服務(wù)及HAL層等都有交互關(guān)系,協(xié)調(diào)power如何與系統(tǒng)其他模塊的交互,比如沒有用戶活動時屏幕變暗等。

DisplayPowerController.java:簡稱DPC管理Display設(shè)備的電源狀態(tài)。僅在PowerManagerService中實例化了一個對象,它算是PowerManagerService的一部分,只不過是獨立出來了而已。主要處理和距離傳感器,

燈光傳感器,以及包括關(guān)屏在內(nèi)的一些動畫,通過異步回調(diào)的方式來通知PowerManagerService某些事情發(fā)生了變化。

DisplayPowerState.java:簡稱DPS,在本質(zhì)上類似于View,只不過用來描述一個display的屬性,當這些屬性發(fā)生變化時,可以通過一個序列化的命令,讓這些和display電源狀態(tài)的屬性一起產(chǎn)生變化。

這個類的對象只能被DispalyPowerController的Looper持有。而這個Looper應(yīng)該就是PowerManagerService中新建的一個HandlerThread中的Looper。和PowerManager相關(guān)的,

包括DisplayPowerState和DisplayPowerController相關(guān)的消息處理應(yīng)該都可以通過這個HandlerThread進行運轉(zhuǎn)的

Notifier.java:將power狀態(tài)的重要變化,通過廣播發(fā)送出去,并且參與了與AMS,WMS,IMP的交互。

ColorFade.java:負責屏幕由關(guān)到開,由開到關(guān)的一些GL動畫,由DPC進行控制。

AutomaticBrightnessController.java:主要處理光傳感器,將底層上傳的參數(shù)進行處理計算,將計算的新的亮度值傳給DPC。

RampAnimator.java:處理屏幕亮度漸變動畫。

  • 代碼流程分析
  • Power事件上報跟蹤
  • 正常我們按下power鍵后,出觸發(fā)Kernel關(guān)于該事件的中斷。然后inputReader通過EventHub獲取該事件,并做出事件處理,之后由inputdispatch進行事件分發(fā)。

    因為power事件是key事件,會調(diào)用interceptKeyBeforeQueueing進行處理,通過如果流程

    InputDispatcher.cpp

    ? ->com_android_server_input_InputManagerService.cpp

    ????????? ->InputManagerService.java

    ?????????????????? ->InputMonitor.java

    ?????????????????????????? ->WindowManagerPolicy.java

    ??????????????????????????????????? ->PhoneWindowManager.java

  • PhoneWindowManager.java
  • 最終由PhoneWindowManager.java的interceptKeyBeforeQueueing方法對該次事件進行處理,對power鍵以及屏幕狀態(tài)進行判斷,來決定亮屏還是滅屏等操作。當需要亮屏?xí)r,會調(diào)用PowerMangerService中的wakeup函數(shù)進行處理。

    主要代碼如下:

    首先定義以下幾個布爾值,主要是按鍵屬性和屏幕狀態(tài)

    //是否亮屏狀態(tài),代碼是否可以與用戶交互

    final boolean interactive = (policyFlags & FLAG_INTERACTIVE) != 0;

    //按鍵事件是否為down事件

    final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;

    //事件是否被取消

    final boolean canceled = event.isCanceled();

    //按鍵的keycode,不同按鍵 keycode不同,一般power 116

    final int keyCode = event.getKeyCode();

    //是否是輸入事件

    final boolean isInjected = (policyFlags & WindowManagerPolicy.FLAG_INJECTED) != 0;

    //鎖屏界面狀態(tài)

    final boolean keyguardActive = (mKeyguardDelegate == null ? false :(interactive ?isKeyguardShowingAndNotOccluded() :mKeyguardDelegate.isShowing()));

    //flags有wake標記,或者按鍵(isWakeKey函數(shù))為KEYCODE_BACK, KEYCODE_MENU, KEYCODE_WAKEUP, KEYCODE_PAIRING, KEYCODE_STEM_1, KEYCODE_STEM_2, KEYCODE_STEM_3設(shè)置isWakeKey為true

    boolean isWakeKey = (policyFlags & WindowManagerPolicy.FLAG_WAKE) != 0 || event.isWakeKey();

    ?

    ?

    if (isValidGlobalKey(keyCode)//有效的全局按鍵 (KEYCODE_POWER:KEYCODE_WAKEUP:KeyEvent.KEYCODE_SLEEP:),

    ????????? && mGlobalKeyManager.shouldHandleGlobalKey(keyCode, event)) {//在com.android.internal.R.xml.global_keys 有定義

    ? if (isWakeKey) {

    ????????? wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey, "android.policy:KEY");喚醒屏幕

    ? }

    ? return result;

    }

    ?

    接下來是對特殊按鍵的處理,這里只關(guān)注power鍵

    ?switch (keyCode) {

    ? ?case KeyEvent.KEYCODE_POWER: {

    ????????? result &= ~ACTION_PASS_TO_USER;

    ????????? isWakeKey = false; // wake-up will be handled separately

    ????????? if (down) {

    ?????????????????? interceptPowerKeyDown(event, interactive);//處理power按下

    ????????? } else {

    ?????????????????? interceptPowerKeyUp(event, interactive, canceled);//處理power松開

    ????????? }

    ????????? break;

    ? }

    ?

    power down 鍵的處理

    private void interceptPowerKeyDown(KeyEvent event, boolean interactive) {

    ? // 獲取wakelock,報錯CPU喚醒狀態(tài)

    ? if (!mPowerKeyWakeLock.isHeld()) {

    ????????? mPowerKeyWakeLock.acquire();

    ? }

    ?

    ? // 取消多次按下超時監(jiān)測

    ? if (mPowerKeyPressCounter != 0) {

    ????????? mHandler.removeMessages(MSG_POWER_DELAYED_PRESS);

    ? }

    ?

    ? // Detect user pressing the power button in panic when an application has

    ? // taken over the whole screen.

    boolean panic = mImmersiveModeConfirmation.onPowerKeyDown(interactive,

    ?????????????????? SystemClock.elapsedRealtime(), isImmersiveMode(mLastSystemUiFlags),

    ?????????????????? isNavBarEmpty(mLastSystemUiFlags));

    ? if (panic) {

    ????????? mHandler.post(mHiddenNavPanic);

    ? }

    ?

    ? // Latch power key state to detect screenshot chord.

    ? if (interactive && !mScreenshotChordPowerKeyTriggered

    ?????????????????? && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {

    ????????? mScreenshotChordPowerKeyTriggered = true;

    ????????? mScreenshotChordPowerKeyTime = event.getDownTime();

    ????????? interceptScreenshotChord();//屏幕截屏

    ????????? interceptDisableTouchModeChord();? //添加口袋模式

    ? }

    ?

    ? // 當power鍵按下,停止電話響鈴或者結(jié)束通話

    ? TelecomManager telecomManager = getTelecommService();

    ? boolean hungUp = false;

    ? if (telecomManager != null) {

    ????????? if (telecomManager.isRinging()) {

    ?????????????????? 停止響鈴

    ?????????????????? telecomManager.silenceRinger();

    ????????? } else if ((mIncallPowerBehavior

    ?????????????????????????? & Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP) != 0

    ?????????????????????????? && telecomManager.isInCall() && interactive) {

    ?????????????????? Setting數(shù)據(jù)庫讀取設(shè)置,如果開了掛斷電話

    ?????????????????? hungUp = telecomManager.endCall();

    ????????? }

    ? }

    ?

    ? SprdGestureLauncherService gestureService = LocalServices.getService(

    ?????????????????? SprdGestureLauncherService.class);

    ? boolean gesturedServiceIntercepted = false;

    ? if (gestureService != null) {

    ????????? gesturedServiceIntercepted = gestureService.interceptPowerKeyDown(event, interactive,

    ?????????????????????????? mTmpBoolean);

    ????????? if (mTmpBoolean.value && mGoingToSleep) {

    ?????????????????? mCameraGestureTriggeredDuringGoingToSleep = true;

    ????????? }

    ? }

    ?

    ? // If the power key has still not yet been handled, then detect short

    ? // 如果power鍵還沒有被處理,判斷是短按,多按,長按等場景并做出對應(yīng)處理

    ? mPowerKeyHandled = hungUp || mScreenshotChordVolumeDownKeyTriggered

    ?????????????????? || mA11yShortcutChordVolumeUpKeyTriggered || gesturedServiceIntercepted;

    ? if (!mPowerKeyHandled) {

    ????????? if (interactive) {

    ?????????????????? //如果屏幕是亮的,長按動作處理對應(yīng)的長按動作

    ?????????????????? if (hasLongPressOnPowerBehavior()) {

    ?????????????????????????? Message msg = mHandler.obtainMessage(MSG_POWER_LONG_PRESS);

    ?????????????????????????? msg.setAsynchronous(true);

    ?????????????????????????? mHandler.sendMessageDelayed(msg,

    ??????????????????????????????????? ??????? ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());

    ?????????????????? }

    ? ??????? } else {//屏幕休眠的狀態(tài),喚醒屏幕

    ?????????????????? wakeUpFromPowerKey(event.getDownTime());

    ?

    ?????????????????? if (mSupportLongPressPowerWhenNonInteractive && hasLongPressOnPowerBehavior()) {

    ?????????????????????????? Message msg = mHandler.obtainMessage(MSG_POWER_LONG_PRESS);

    ?????????????????????????? msg.setAsynchronous(true);

    ?????????????????????????? mHandler.sendMessageDelayed(msg,//如果長按動作繼續(xù)執(zhí)行長按操作

    ??????????????????????????????????? ??????? ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());

    ?????????????????????????? mBeganFromNonInteractive = true;

    ?????????????????? } else {

    ?????????????????????????? final int maxCount = getMaxMultiPressPowerCount();

    ?

    ?????????????????????????? if (maxCount <= 1) {

    ??????????????????????????????????? mPowerKeyHandled = true;

    ?????????????????????????? } else {

    ??????????????????????????????????? mBeganFromNonInteractive = true;

    ......

    power up 鍵的處理

    private void interceptPowerKeyUp(KeyEvent event, boolean interactive, boolean canceled) {

    ? final boolean handled = canceled || mPowerKeyHandled; //power鍵是否被處理了

    ? mScreenshotChordPowerKeyTriggered = false;

    ? cancelPendingScreenshotChordAction();

    ? cancelPendingPowerKeyAction();

    ?

    ? if (!handled) {

    ????????? // power press 加1

    ????????? mPowerKeyPressCounter += 1;

    ????????

    ????????? final int maxCount = getMaxMultiPressPowerCount();//多按的次數(shù)

    ????????? final long eventTime = event.getDownTime();//press power 時間

    ????????? if (mPowerKeyPressCounter < maxCount) {

    ?????????????????? // 這種情況可能是一個多次按鍵事件,等待一會做確認處理

    ?????????????????? Message msg = mHandler.obtainMessage(MSG_POWER_DELAYED_PRESS,

    ??????????????????????????????????? interactive ? 1 : 0, mPowerKeyPressCounter, eventTime);

    ?????????????????? msg.setAsynchronous(true);

    ?????????????????? mHandler.sendMessageDelayed(msg, ViewConfiguration.getDoubleTapTimeout());

    ?????????????????? return;

    ????????? }

    ?

    ????????? // 沒有其他action,繼續(xù)處理power按下事件

    ????????? powerPress(eventTime, interactive, mPowerKeyPressCounter);

    ? }

    ?

    ? // Done.? Reset our state.

    ? finishPowerKeyPress();//power按鍵處理結(jié)束

    }

    private void finishPowerKeyPress() {

    ? mBeganFromNonInteractive = false;

    ? mPowerKeyPressCounter = 0;

    ? if (mPowerKeyWakeLock.isHeld()) {

    ????????? mPowerKeyWakeLock.release();//釋放wakelock

    ? }

    }

    下面繼續(xù)跟蹤powerPress函數(shù)

    private void powerPress(long eventTime, boolean interactive, int count) {

    ? if (mScreenOnEarly && !mScreenOnFully) {

    ????????? Slog.i(TAG, "Suppressed redundant power key press while "

    ?????????????????????????? + "already in the process of turning the screen on.");

    ????????? return;

    ? }

    ?

    ? if (count == 2) {//按兩次power事件

    ????????? powerMultiPressAction(eventTime, interactive, mDoublePressOnPowerBehavior);

    ? } else if (count == 3) {//按三次power事件

    ????????? powerMultiPressAction(eventTime, interactive, mTriplePressOnPowerBehavior);

    ? } else if (interactive && !mBeganFromNonInteractive) {//屏幕如果亮著而且mBeganFromNonInteractive為false會執(zhí)行下面操作

    ????????? switch (mShortPressOnPowerBehavior) {//根據(jù)配置om.android.internal.R.integer.config_shortPressOnPowerBehavior 決定對應(yīng)值 此處為1

    ?????????????????? case SHORT_PRESS_POWER_NOTHING:

    ?????????????????????????? break;

    ?????????????????? case SHORT_PRESS_POWER_GO_TO_SLEEP:

    ?????????????????????????? mPowerManager.goToSleep(eventTime,

    ??????????????????????????????????? ??????? PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0);//執(zhí)行滅屏操作

    ?????????????????????????? break;

    ?????????????????? ......

    }

    ?

    我們繼續(xù)跟蹤亮屏操作,從power down事件處理可知,調(diào)用wakeUpFromPowerKey點亮屏幕

    private void wakeUpFromPowerKey(long eventTime) {

    ? Slog.d(TAG, "wake Up From Power Key"); // 此處會打印這句log,可作為分析問題是注意點

    ? wakeUp(eventTime, mAllowTheaterModeWakeFromPowerKey, "android.policy:POWER");//調(diào)用wakeup繼續(xù)執(zhí)行亮屏操作,注意調(diào)用mPowerManager.wakeUp操作

    }

  • PowerManager.wakeUp
  • 下面我們看下PowerManager.wakeUp的相關(guān)處理

    public void wakeUp(long time) {

    ? try {

    ????????? mService.wakeUp(time, "wakeUp", mContext.getOpPackageName());//調(diào)用到PWM.wakeUpInternal->PWM.wakeUpNoUpdateLocked

    ? } catch (RemoteException e) {

    ????????? throw e.rethrowFromSystemServer();

    ? }

    }

    ?

    當power接收到亮滅屏調(diào)用后,會先進行設(shè)置手機wakefullness狀態(tài). 之后發(fā)送亮滅屏廣播通知其他應(yīng)用手機處于亮屏還是滅屏狀態(tài)。

    private boolean wakeUpNoUpdateLocked(long eventTime, String reason, int reasonUid,

    ????????? String opPackageName, int opUid) {

    ? //mWakefulness標識系統(tǒng)當前狀態(tài)共有四種定義:

    ? WAKEFULNESS_ASLEEP:表示系統(tǒng)當前處于休眠狀態(tài),只能被wakeUp()調(diào)用喚醒。

    ? WAKEFULNESS_AWAKE:表示系統(tǒng)目前處于正常運行狀態(tài)。

    ? WAKEFULNESS_DREAMING:表示系統(tǒng)當前正處于互動屏保的狀態(tài)。

    ? WAKEFULNESS_DOZING:表示系統(tǒng)正處于“doze”狀態(tài)

    ? if (eventTime < mLastSleepTime || mWakefulness == WAKEFULNESS_AWAKE

    ?????????????????? || !mBootCompleted || !mSystemReady) {//按鍵時間在睡下去之前,屏幕是正常狀態(tài),沒有完成開機流程,系統(tǒng)沒有準備完成,這四種情況不繼續(xù)執(zhí)行喚醒流程

    ????????? return false;

    ? }

    ?

    ? try {//系統(tǒng)不是點亮狀態(tài),打出相關(guān)log

    ????????? switch (mWakefulness) {

    ?????????????????? case WAKEFULNESS_ASLEEP:

    ?????????????????? case WAKEFULNESS_DREAMING:

    ?????????????????? case WAKEFULNESS_DOZING:

    ?????????????????????????? Slog.i(TAG, "Waking up from dozing due to"+opPackageName+" "+reason+" (uid " + reasonUid +")...");

    ?????????????????????????? break;

    ????????? }

    ?

    ????????? mLastWakeTime = eventTime;//更新wake時間

    ????????? setWakefulnessLocked(WAKEFULNESS_AWAKE, 0);//更新mWakefulness,并調(diào)用Notifier.onWakefulnessChangeStarted發(fā)送亮屏廣播?

    ????????? mNotifier.onWakeUp(reason, reasonUid, opPackageName, opUid);//調(diào)用Notifier通知battery處理?

    ????????? userActivityNoUpdateLocked(eventTime, PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, reasonUid);//更新最后一次用戶事件的時間

    ? } finally {

    ? }

    ? return true;

    }

    ?

  • Notifier.java
  • 然后主要就是在Notifier.java中與AMS,window,input進行交互,通知各模塊手機狀態(tài)發(fā)生了改變,根據(jù)屏幕狀態(tài)各自進行處理, 最后發(fā)送亮滅屏廣播, 通知相關(guān)的模塊.

    private void setWakefulnessLocked(int wakefulness, int reason) {

    ? if (mWakefulness != wakefulness) {

    ????????? mWakefulness = wakefulness;//更新mWakefulness變量

    ????????? mWakefulnessChanging = true;

    ????????? mDirty |= DIRTY_WAKEFULNESS;

    ????????? mNotifier.onWakefulnessChangeStarted(wakefulness, reason);//調(diào)用Notify的函數(shù)onWakefulnessChangeStarted 發(fā)廣播通知

    ? }

    }

    public void onWakefulnessChangeStarted(final int wakefulness, int reason) {

    ??? //獲取交互模式變量,亮屏為true, 滅屏為false

    ? final boolean interactive = PowerManagerInternal.isInteractive(wakefulness);

    ?

    ? 通知AMS wakefulness狀態(tài)的變化

    ? mHandler.post(new Runnable() {

    ????????? @Override

    ????????? public void run() {

    ?????????????????? mActivityManagerInternal.onWakefulnessChanged(wakefulness);

    ????????? }

    ? });

    ?

    ? //interactive 變化時才會執(zhí)行里面的邏輯

    ? if (mInteractive != interactive) {

    ????????? // Finish up late behaviors if needed.

    ????????? if (mInteractiveChanging) {

    ?????????????????? handleLateInteractiveChange();

    ????????? }

    ?

    ????????? //在input中記錄現(xiàn)在的屏幕狀態(tài)

    ????????? mInputManagerInternal.setInteractive(interactive);

    ????????? mInputMethodManagerInternal.setInteractive(interactive);

    ?

    ????????? //喚醒battery狀態(tài)

    ????????? try {

    ?????????????????? mBatteryStats.noteInteractive(interactive);

    ????????? } catch (RemoteException ex) { }

    ?

    ????????? // Handle early behaviors.

    ????????? mInteractive = interactive;

    ????????? mInteractiveChangeReason = reason;

    ????????? mInteractiveChanging = true;

    ????????? handleEarlyInteractiveChange();//處理交互模式改變

    ? }

    }

    ?

    private void handleEarlyInteractiveChange() {

    ? synchronized (mLock) {

    ????????? if (mInteractive) {//mInteractive 為true代表要執(zhí)行亮屏邏輯

    ?????????????????? // Waking up...

    ?????????????????? mHandler.post(new Runnable() {

    ?????????????????????????? @Override

    ?????????????????????????? public void run() {

    ??????????????????????????????????? // Note a SCREEN tron event is logged in PowerManagerService.

    ??????????????????????????????????? mPolicy.startedWakingUp();//調(diào)用PhoneWindowManager 方法開始亮屏流程

    ?????????????????????????? }

    ?????????????????? });

    ?

    ?????????????????? // 更新亮屏廣播

    ?????????????????? mPendingInteractiveState = INTERACTIVE_STATE_AWAKE;

    ?????????????????? mPendingWakeUpBroadcast = true;

    ?????????????????? updatePendingBroadcastLocked();//mSuspendBlocker.acquire();持有partial 鎖

    ????????? } else {//mInteractive 為false代表要執(zhí)行滅屏邏輯

    ?????????????????? final int why = translateOffReason(mInteractiveChangeReason);

    ?????????????????? mHandler.post(new Runnable() {

    ?????????????????????????? @Override

    ?????????????????????????? public void run() {

    ??????????????????????????????????? mPolicy.startedGoingToSleep(why);//調(diào)用PhoneWindowManager 方法開始滅屏流程

    ?????????????????????????? }

    ?????????????????? });

    ????????? }

    ? }

    }

    ?

  • 廣播更新的流程
  • 調(diào)用updatePendingBroadcastLocked函數(shù)發(fā)出handle msg 消息

    Message msg = mHandler.obtainMessage(MSG_BROADCAST);

    msg.setAsynchronous(true);

    mHandler.sendMessage(msg);

    然后handle收到后執(zhí)行sendNextBroadcast函數(shù)

    case MSG_BROADCAST:

    ? sendNextBroadcast();

    ? break;

    private void sendNextBroadcast() {

    ? final int powerState;

    ? //mBroadcastedInteractiveState 這個變量記錄當前的系統(tǒng)亮滅屏情況

    ? synchronized (mLock) {

    ????????? if (mBroadcastedInteractiveState == INTERACTIVE_STATE_UNKNOWN) {

    ?????????????????? // 當前狀態(tài)位置更新為喚醒狀態(tài)

    ?????????????????? mPendingWakeUpBroadcast = false;

    ?????????????????? mBroadcastedInteractiveState = INTERACTIVE_STATE_AWAKE;

    ????????? } else if (mBroadcastedInteractiveState == INTERACTIVE_STATE_AWAKE) {

    ?????????????????? // 當前是喚醒狀態(tài),更新為滅屏狀態(tài)

    ?????????????????? if (mPendingWakeUpBroadcast || mPendingGoToSleepBroadcast

    ??????????????????????????????????? || mPendingInteractiveState == INTERACTIVE_STATE_ASLEEP) {

    ?????????????????????????? mPendingGoToSleepBroadcast = false;

    ?????????????????????????? mBroadcastedInteractiveState = INTERACTIVE_STATE_ASLEEP;

    ?????????????????? } else {

    ?????????????????????????? finishPendingBroadcastLocked();//釋放partial 鎖

    ?????????????????????????? return;

    ?????????????????? }

    ????????? } else {

    ?????????????????? // 當前是滅屏狀態(tài),更新為喚醒狀態(tài)

    ?????????????????? if (mPendingWakeUpBroadcast || mPendingGoToSleepBroadcast

    ?????????????????? ???????????????? || mPendingInteractiveState == INTERACTIVE_STATE_AWAKE) {

    ?????????????????????????? mPendingWakeUpBroadcast = false;

    ?????????????????????????? mBroadcastedInteractiveState = INTERACTIVE_STATE_AWAKE;

    ?????????????????? } else {

    ?????????????????????????? finishPendingBroadcastLocked();

    ?????????????????????????? return;

    ?????????????????? }

    ????????? }

    ????????? //記錄下當前系統(tǒng)時間為廣播開始時間

    ????????? mBroadcastStartTime = SystemClock.uptimeMillis();

    ????????? powerState = mBroadcastedInteractiveState;

    ? }

    ?

    EventLog.writeEvent(EventLogTags.POWER_SCREEN_BROADCAST_SEND, 1);//打出event log

    ?

    ? if (powerState == INTERACTIVE_STATE_AWAKE) {//根據(jù)powerState的值決定發(fā)亮屏還是滅屏廣播

    ????????? sendWakeUpBroadcast();

    ? } else {

    ????????? sendGoToSleepBroadcast();

    ? }

    }

    廣播都是前臺廣播,然后其他模塊收到廣播后作出對應(yīng)處理

    mScreenOnIntent.addFlags(

    ? Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND

    ? | Intent.FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS);

    mScreenOffIntent.addFlags(

    ? Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND

    ? | Intent.FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS);

    Notify 收到這個廣播后會,繼續(xù)調(diào)用sendNextBroadcast,因為mPendingWakeUpBroadcast值變化,會調(diào)用finishPendingBroadcastLocked();釋放partial 鎖

    private final BroadcastReceiver mWakeUpBroadcastDone = new BroadcastReceiver() {

    ? @Override

    ? public void onReceive(Context context, Intent intent) {

    ? ?? EventLog.writeEvent(EventLogTags.POWER_SCREEN_BROADCAST_DONE, 1,

    ?????????????????????????? SystemClock.uptimeMillis() - mBroadcastStartTime, 1);

    ????????? sendNextBroadcast();

    ? }

    };

    總結(jié):當power接收到亮滅屏調(diào)用后,會先進行設(shè)置手機wakefullness狀態(tài),之后發(fā)送亮滅屏廣播通知其他模塊手機處于亮屏還是滅屏狀態(tài)。并且在發(fā)送廣播過程中power也與AMS,window,input進行交互,通知各模塊手機狀態(tài)發(fā)生了改變,根據(jù)屏幕狀態(tài)各自進行處理。其中發(fā)送亮滅屏廣播的主要實現(xiàn)在Notifier.java中。

    當wakefulness狀態(tài)發(fā)生改變,AMS收到通知。如果亮屏操作,AMS就會通過函數(shù)comeOutOfSleepIfNeedLocked調(diào)用到ActivityStackSupervisor中,將sleep超時消息移除,最后將在棧頂?shù)腶ctivity顯示出來。

    power是通過WindowManagerPolicy與PhoneWindowManager進行交互,當屏幕在喚醒時需要通知window進行更新手勢監(jiān)聽,更新方向監(jiān)聽,更新鎖屏超時時間。最后通知keyguard屏幕點亮了,進行刷新鎖屏界面時間,之后通過回調(diào)接口,回調(diào)回PhoneWindowManager的onShown函數(shù),通知window keyguard準備完成。

    當亮屏?xí)r通過InputManagerService將當前屏幕狀態(tài)傳入JNI中進行記錄,當再次發(fā)生power鍵事件可以方便確認該事件是需要亮屏還是滅屏。

    ?

  • Power狀態(tài)的更新和處理
  • 當廣播處理完畢后就會調(diào)用PMS的內(nèi)部函數(shù)updatePowerStateLocked來更新全局電源狀態(tài)。其實在PMS中很多函數(shù)都只是對一些必須的屬性進行賦值,大部分最終都會調(diào)用到updatePowerStateLocked函數(shù)中進行功能執(zhí)行,其中更新電源狀態(tài)主要依據(jù)就是變量mDirty。mDirty就是用來記錄power state的變化的標記位,這樣的狀態(tài)變化在系統(tǒng)中一共定義了12個,每一個狀態(tài)對應(yīng)一個固定的數(shù)字,都是2的倍數(shù)。這樣,若有多個狀態(tài)一塊變化,進行按位取或這樣結(jié)果既是唯一的,又能準確標記出各個狀態(tài)的變化。在updatePowerStateLocked中主要做了如下事情:

    • 首先判斷手機是否處于充電狀態(tài),如果標記位DIRTY_BATTERY_STATE發(fā)生改變時就證明電池狀態(tài)發(fā)生了改變,然后通過對比判斷(通過電池前后變化與充電狀態(tài)的變化),確認手機是否處于充電狀態(tài)。如果手機處于充電狀態(tài)會將表示充電的標記位記入mDirty中。當有USB插拔時我們也可以通過配置信息來決定是否需要點亮屏幕。并且是否在充電或者充電方式發(fā)生改變,系統(tǒng)都會認為發(fā)生了一次用戶事件進行更新最后用戶操作時間,以此來重新計算屏幕超時時間。

    private void updateIsPoweredLocked(int dirty) {

    ? if ((dirty & DIRTY_BATTERY_STATE) != 0) {

    ????????? final boolean wasPowered = mIsPowered;//是否在充電?

    ????????? final int oldPlugType = mPlugType;//充電類型?

    ????????? final boolean oldLevelLow = mBatteryLevelLow;//低電模式

    ????????? mIsPowered = mBatteryManagerInternal.isPowered(BatteryManager.BATTERY_PLUGGED_ANY);

    ????????? mPlugType = mBatteryManagerInternal.getPlugType();

    ????????? mBatteryLevel = mBatteryManagerInternal.getBatteryLevel();

    ????????? mBatteryLevelLow = mBatteryManagerInternal.getBatteryLevelLow();

    ????????? if (wasPowered != mIsPowered || oldPlugType != mPlugType) {

    ?????????????????? mDirty |= DIRTY_IS_POWERED;//如果充電中設(shè)置mDirty

    ?????????????????? /* < Bug#696466 optimization for sceenoff */

    ?????????????????? if (wasPowered != mIsPowered)

    ?????????????????????????? SystemProperties.set("sys.sprd.power.ispowered", (mIsPowered? "1": "0"));//設(shè)置屬性sys.sprd.power.ispowered

    ?????????????????? /* Bug#696466 optimization for sceenoff > */

    ?????????????????? //無線充電

    ?????????????????? final boolean dockedOnWirelessCharger = mWirelessChargerDetector.update(

    ??????????????????????????????????? mIsPowered, mPlugType, mBatteryLevel);

    ?????????????????? final long now = SystemClock.uptimeMillis();

    ?????????????????? if (shouldWakeUpWhenPluggedOrUnpluggedLocked(wasPowered, oldPlugType,

    ??????????????????????????????????? dockedOnWirelessCharger)) {//插拔USB是否要點亮屏幕

    ?????????????????????????? wakeUpNoUpdateLocked(now, "android.server.power:POWER", Process.SYSTEM_UID,

    ??????????????????????????????????????????? mContext.getOpPackageName(), Process.SYSTEM_UID);

    ?????????????????? }

    ?????????????????? userActivityNoUpdateLocked(//插拔USB算一次用戶事件,重新設(shè)置最后一次用戶事件的時間點

    ??????????????????????????????????? now, PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, Process.SYSTEM_UID);

    ?????????????????? // Tell the notifier whether wireless charging has started so that

    ?????????????????? // it can provide feedback to the user.

    ?????????????????? if (dockedOnWirelessCharger) {

    ?????????????????????????? mNotifier.onWirelessChargingStarted();

    ?????????????????? }

    ????????? }

    ????????? if (wasPowered != mIsPowered || oldLevelLow != mBatteryLevelLow) {//低電模式

    ?????????????????? if (oldLevelLow != mBatteryLevelLow && !mBatteryLevelLow) {

    ?????????????????????????? mAutoLowPowerModeSnoozing = false;

    ?????????????????? }

    ?????????????????? updateLowPowerModeLocked();//更新低電模式

    ????????? }

    ? }

    }

    • 更新wakefulness

    for (;;) {

    ? int dirtyPhase1 = mDirty;

    ? dirtyPhase2 |= dirtyPhase1;

    ? mDirty = 0;

    ? updateWakeLockSummaryLocked(dirtyPhase1);

    ? updateUserActivitySummaryLocked(now, dirtyPhase1);

    ? if (!updateWakefulnessLocked(dirtyPhase1)) {

    ????????? break;

    ? }

    }

    updateWakeLockSummaryLocked函數(shù)將wakeLock的類型用mWakeLockSummary進行記錄,最后與Wakefulness狀態(tài)結(jié)合重新算出新的mWakeLockSummary值,再判斷是否需要睡眠時會使用。

    之后updateUserActivitySummaryLocked就會更新屏幕超時時間,根據(jù)最后一次的用戶事件與屏幕超時時間與dim持續(xù)時間來計算屏幕超時的時間,然后與現(xiàn)在的時間進行對比,來決定屏幕要繼續(xù)高亮,還是要變?yōu)閐im狀態(tài)。

    PowerManagerHandler接收屏幕超時的消息, 并且調(diào)用handleUserActivityTimeout進行處理, 該函數(shù)之后就在Handler線程中運行

    ?

    private final class PowerManagerHandler extends Handler {?

    ??? public PowerManagerHandler(Looper looper) {?

    ??????? super(looper, null, true /*async*/);?

    ??? }?

    ?

    ??? @Override?

    ??? public void handleMessage(Message msg) {?

    ??????? switch (msg.what) {?

    ??????????? case MSG_USER_ACTIVITY_TIMEOUT:?

    ??????????????? handleUserActivityTimeout();??? //處理用戶超時事件?

    ??????????????? break;?

    ??????????? case MSG_SANDMAN:?

    ??????????????? handleSandman();?

    ??????????????? break;?

    ??????????? case MSG_SCREEN_BRIGHTNESS_BOOST_TIMEOUT:?

    ????? ??????????handleScreenBrightnessBoostTimeout();?

    ??????????????? break;?

    ??????? }?

    ??? }?

    }?

    ?

    private void handleUserActivityTimeout() { // runs on handler thread?

    ??? synchronized (mLock) {?

    ??????? if (DEBUG_SPEW) {?

    ??????????? Slog.d(TAG, "handleUserActivityTimeout");?

    ??????? }?

    ?

    ??????? mDirty |= DIRTY_USER_ACTIVITY;? //設(shè)置有用戶活動的mDirty值?

    ??????? updatePowerStateLocked();?? //更新電源狀態(tài), 最后去判斷是否要睡眠?

    ??? }?

    }?

    ?

    根據(jù)前面流程圖可以看出更新wakefulness過程是通過一個死循環(huán)來執(zhí)行的,只有調(diào)用函數(shù)updateWakefulnessLocked返回false時才會跳出循環(huán)。在循環(huán)中對wakeLockSummary進行更新,并且更新自動滅屏?xí)r間后,進行判斷系統(tǒng)是否該睡眠了,是否可以跳出循環(huán)。

    在updateWakefulnessLocked中主要根據(jù)是否存在wakeLock,用戶活動進行判斷設(shè)備是否需要進入睡眠狀態(tài)。從函數(shù)isBeingKeptAwakeLocked可以看出當device拿著一個wake lock,有用戶事件,有距離傳感器等都不會滅屏進行睡眠狀態(tài)。如果需要睡眠就會往下面調(diào)用,最后跳出循環(huán)。

    private boolean updateWakefulnessLocked(int dirty) {?

    ??? boolean changed = false;?

    ??? if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY | DIRTY_BOOT_COMPLETED?

    ??????????? | DIRTY_WAKEFULNESS | DIRTY_STAY_ON | DIRTY_PROXIMITY_POSITIVE?

    ??????????? | DIRTY_DOCK_STATE)) != 0) {?

    ??????? if (mWakefulness == WAKEFULNESS_AWAKE && isItBedTimeYetLocked()) {?? //mWakefulness為AWAKE, 并且到了睡覺時間, 就去睡覺?

    ??????????? if (DEBUG_SPEW) {?

    ??????????????? Slog.d(TAG, "updateWakefulnessLocked: Bed time...");????

    ??????????? }?

    ??????????? final long time = SystemClock.uptimeMillis();?

    ??????????? if (shouldNapAtBedTimeLocked()) {??

    ??????????????? changed = napNoUpdateLocked(time, Process.SYSTEM_UID);? //睡覺前先小憩一會?

    ??????????? } else {?

    ??????????????? changed = goToSleepNoUpdateLocked(time,?

    ??????????????????????? PowerManager.GO_TO_SLEEP_REASON_TIMEOUT, 0, Process.SYSTEM_UID);? //直接睡覺?

    ??????????? }?

    ??????? }?

    ??? }?

    ??? return changed;?

    }?

    [java] view plain copy

    private boolean isItBedTimeYetLocked() {// 對所有該喚醒的情況取反, 就是該休眠了?

    ??? return mBootCompleted && !isBeingKeptAwakeLocked();???

    }?

    private boolean isBeingKeptAwakeLocked() {?

    ??? return mStayOn? //設(shè)置了stay on?

    ??????????? || mProximityPositive? //距離傳感器返回一個positive結(jié)果,保持喚醒?

    ??????????? || (mWakeLockSummary & WAKE_LOCK_STAY_AWAKE) != 0? //當有wake lock時保持喚醒?

    ??????????? || (mUserActivitySummary & (USER_ACTIVITY_SCREEN_BRIGHT?

    ??????????????????? | USER_ACTIVITY_SCREEN_DIM)) != 0?? //有user activity時保持喚醒?

    ??????????? || mScreenBrightnessBoostInProgress;?

    }?

    [java] view plain copy

    ???? mDreamsActivateOnSleepSetting = (Settings.Secure.getIntForUser(resolver,?

    ??????????? Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,?

    ??????????? mDreamsActivatedOnSleepByDefaultConfig ? 1 : 0,?

    ??????????? UserHandle.USER_CURRENT) != 0);???? //從settings數(shù)據(jù)庫獲取對應(yīng)值?

    ??? mDreamsActivateOnDockSetting = (Settings.Secure.getIntForUser(resolver,?

    ??????????? Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,?

    ??????????? mDreamsActivatedOnDockByDefaultConfig ? 1 : 0,?

    ??????????? UserHandle.USER_CURRENT) != 0);?

    ?

    ?private boolean shouldNapAtBedTimeLocked() {? //當返回true, 設(shè)備自動nap?

    ??? return mDreamsActivateOnSleepSetting?

    ??????????? || (mDreamsActivateOnDockSetting?

    ??????????????????? && mDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED);?

    }?

    [java] view plain copy

    private boolean napNoUpdateLocked(long eventTime, int uid) {?

    ??? if (DEBUG_SPEW) {?

    ??????? Slog.d(TAG, "napNoUpdateLocked: eventTime=" + eventTime + ", uid=" + uid);?

    ??? }?

    ?

    ??? if (eventTime < mLastWakeTime || mWakefulness != WAKEFULNESS_AWAKE?

    ??????????? || !mBootCompleted || !mSystemReady) {?

    ??????? return false;?

    ??? }?

    ?

    ??? Trace.traceBegin(Trace.TRACE_TAG_POWER, "nap");?

    ??? try {?

    ??????? Slog.i(TAG, "Nap time (uid " + uid +")...");?

    ?

    ??????? mSandmanSummoned = true;?

    ??????? setWakefulnessLocked(WAKEFULNESS_DREAMING, 0);? //設(shè)置WAKEFULNESS_DREAMING?

    ??? } finally {?

    ??????? Trace.traceEnd(Trace.TRACE_TAG_POWER);?

    ??? }?

    ??? return true;?

    }?

    調(diào)用goToSleepNoUpdateLocked進行睡眠, 當按power鍵滅屏是也會調(diào)用該函數(shù).

    ?

    [java] view plain copy

    private boolean goToSleepNoUpdateLocked(long eventTime, int reason, int flags, int uid) {?

    ??? if (DEBUG_SPEW) {?

    ??????? Slog.d(TAG, "goToSleepNoUpdateLocked: eventTime=" + eventTime?

    ??????????????? + ", reason=" + reason + ", flags=" + flags + ", uid=" + uid);?

    ??? }?

    ?

    ??? if (eventTime < mLastWakeTime?

    ??????????? || mWakefulness == WAKEFULNESS_ASLEEP?

    ??????????? || mWakefulness == WAKEFULNESS_DOZING?

    ??????????? || !mBootCompleted || !mSystemReady) {?

    ??????? return false;?? //判斷設(shè)備是否應(yīng)該睡眠?

    ??? }?

    ?

    ??? Trace.traceBegin(Trace.TRACE_TAG_POWER, "goToSleep");?

    ??? try {?

    ??????? switch (reason) {?? //輸出滅屏的原因?

    ??????????? case PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN:?

    ??????????????? Slog.i(TAG, "Going to sleep due to device administration policy "?

    ??????????????????????? + "(uid " + uid +")...");?

    ??????????????? break;?

    ??????????? case PowerManager.GO_TO_SLEEP_REASON_TIMEOUT:?

    ??????????????? Slog.i(TAG, "Going to sleep due to screen timeout (uid " + uid +")...");?

    ?????? ?????????break;?

    ??????????? case PowerManager.GO_TO_SLEEP_REASON_LID_SWITCH:?

    ??????????????? Slog.i(TAG, "Going to sleep due to lid switch (uid " + uid +")...");?

    ??????????????? break;?

    ??????????? case PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON: ?

    ??????????????? Slog.i(TAG, "Going to sleep due to power button (uid " + uid +")...");?

    ??????????????? break;?

    ??????????? case PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON:?

    ??????????????? Slog.i(TAG, "Going to sleep due to sleep button (uid " + uid +")...");?

    ??????????????? break;?

    ??????????? case PowerManager.GO_TO_SLEEP_REASON_HDMI:?

    ??????????????? Slog.i(TAG, "Going to sleep due to HDMI standby (uid " + uid +")...");?

    ??????????????? break;?

    ??????????? default:?

    ??????????????? Slog.i(TAG, "Going to sleep by application request (uid " + uid +")...");?

    ??????????????? reason = PowerManager.GO_TO_SLEEP_REASON_APPLICATION;?

    ??????????????? break;?

    ??????? }?

    ?

    ??????? mLastSleepTime = eventTime;?

    ??????? mSandmanSummoned = true;?

    ? ??????setWakefulnessLocked(WAKEFULNESS_DOZING, reason);?

    ?

    ??????? // Report the number of wake locks that will be cleared by going to sleep.?

    ??????? int numWakeLocksCleared = 0;?

    ??????? final int numWakeLocks = mWakeLocks.size();???

    ??????? for (int i = 0; i < numWakeLocks; i++) {? //遍歷所有的wakeLocks, 將FULL, BRIGHT, DIM Locks,計入numWakeLocksCleared中?

    ??????????? final WakeLock wakeLock = mWakeLocks.get(i);?

    ??????????? switch (wakeLock.mFlags & PowerManager.WAKE_LOCK_LEVEL_MASK) {?

    ??????????????? case PowerManager.FULL_WAKE_LOCK:?

    ??????????????? case PowerManager.SCREEN_BRIGHT_WAKE_LOCK:?

    ??????????????? case PowerManager.SCREEN_DIM_WAKE_LOCK:?

    ??????????????????? numWakeLocksCleared += 1;?

    ??????????????????? break;?

    ??????????? }?

    ??????? }?

    ??????? EventLog.writeEvent(EventLogTags.POWER_SLEEP_REQUESTED, numWakeLocksCleared);?

    ?

    ??????? // Skip dozing if requested.?

    ??????? if ((flags & PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE) != 0) {?

    ??????????? reallyGoToSleepNoUpdateLocked(eventTime, uid); //如果沒有doze流程,直接設(shè)置WAKEFULNESS_ASLEEP?

    ??????? }?

    ??? } finally {?

    ??????? Trace.traceEnd(Trace.TRACE_TAG_POWER);?

    ??? }?

    ??? return true;?? //返回true?

    }?

    當?shù)谝粋€for循環(huán)中將所有的狀態(tài)都設(shè)置好了, 并且此時也沒有重要的mDirty發(fā)生變化, 在下一次循環(huán)中mDirty的值為0, updateWakefulnessLocked返回false,就會跳出循環(huán).

    當跳出循環(huán)之后在函數(shù)updateDisplayPowerStateLocked中進行獲取需要請求的設(shè)備電源狀態(tài)是亮還是滅或者dim,判斷是否開啟了自動調(diào)節(jié)亮度開關(guān),是否使用了距離傳感器,并經(jīng)過一系列的計算獲取亮度值等,最終都記錄到DisplayPowerRequest中,經(jīng)過DMS傳入DPC中,進行處理。

    在PowerManagerService中對各種狀態(tài)進行判斷后,將其數(shù)值封裝進DisplayPowerRequest中傳入DisplayPowerController中進一步處理。在亮屏過程中DisplayPowerController會根據(jù)傳過來的數(shù)值來設(shè)置新的電源狀態(tài)為亮屏,然后調(diào)用DisplayPowerState來對狀態(tài)進行設(shè)置。由于此時ColorFade level(就是在手機屏幕的一層surface,當level為0是為一層黑幀,level為1.0時為透明)的值為0,表示屏幕還沒有繪制好,所以此時需要block screen直到window界面繪制完成。當需要亮屏?xí)r調(diào)用PhoneWindowManager的screenTurningOn函數(shù),通知window屏幕就要點亮了。然后調(diào)用WMS中函數(shù)waitForAllWindowsDrawn函數(shù)等待將所有需要繪制的window繪制完成后回調(diào)回來,超時時間為1000ms。在WMS中獲取需要繪制的window將其加入mWaitingForDrawn中等待繪制,通過檢查mWaitingForDrawn是否為空來判斷,window是否繪制完成。此時screenTurningOn函數(shù)就執(zhí)行完了,剩下的就是等待windows繪制完成。

    總結(jié)

    以上是生活随笔為你收集整理的Android 8.0 手机亮灭屏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    99久久婷婷国产一区二区三区 | 日韩高清无线码2023 | 久久免费在线观看视频 | 中文字幕视频播放 | 天天爽天天爽夜夜爽 | 亚洲最大免费成人网 | 久久黄色片子 | 亚洲国产成人精品电影在线观看 | 天天操操操操操操 | 日韩中文字幕一区 | 国产成人福利在线 | 蜜臀av性久久久久av蜜臀妖精 | 美女视频永久黄网站免费观看国产 | 国产一区二区高清视频 | 国产高清视频色在线www | 91亚洲在线| 久章草在线 | 91视频88av | 欧美日韩一级久久久久久免费看 | 久久精品99北条麻妃 | 欧美激情精品久久久久久 | 国产一级三级 | 亚洲最大av在线播放 | 欧美一二三区在线播放 | 五月婷婷久久综合 | 久久综合久久综合久久综合 | 亚洲理论片 | 亚洲黄色在线免费观看 | 国产黄色av | 国产精品手机在线播放 | www在线观看视频 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 国产精品av在线 | 亚洲传媒在线 | 亚洲成a人片在线观看网站口工 | 国产做a爱一级久久 | 在线观看国产v片 | 欧美日韩一区久久 | 91理论电影| 亚洲精品免费观看 | 国产一级大片在线观看 | 国产精品国内免费一区二区三区 | 国产伦理一区 | 日韩久久久久久久久久久久 | 婷婷亚洲最大 | 91久久精品一区二区三区 | 国产成人精品一区二区在线观看 | 日韩欧美国产视频 | 国产a国产 | 免费成人av | 国产精品99久久久久久久久久久久 | 99这里只有精品视频 | 色综合久久久久综合体桃花网 | 中文字幕在线免费看 | 国内丰满少妇猛烈精品播放 | 五月天色网站 | 亚洲成人影音 | 久久热首页 | 亚洲视频久久久久 | 国产成人av在线 | 超碰人人在 | 香蕉久草 | 粉嫩av一区二区三区四区在线观看 | 国产尤物在线视频 | 插婷婷| 欧洲一区精品 | 在线观看日韩一区 | 色综合激情网 | 久草成人在线 | 激情综合色综合久久综合 | 久久久久久久久久久久国产精品 | 黄色a在线观看 | 97超碰网 | 91亚洲精品久久久久图片蜜桃 | 久久免费黄色大片 | 91在线公开视频 | 亚洲国产精品视频 | 欧美va天堂va视频va在线 | 91在线www| www.久热 | 中文字幕一区2区3区 | 91高清在线看 | 在线视频成人 | 精品美女在线观看 | 国产精品日韩久久久久 | 国产精品去看片 | 亚洲永久国产精品 | 91亚洲永久精品 | aaa亚洲精品一二三区 | 欧洲亚洲激情 | 天天色天天色天天色 | av大全在线免费观看 | 午夜在线日韩 | 一区二区三区视频网站 | 欧美二区视频 | 美女免费黄网站 | 婷婷综合久久 | 天堂av在线中文在线 | 美女国产精品 | 黄色精品网站 | 成人av免费在线看 | 91在线视频网址 | 天天综合久久 | 欧洲av不卡 | 欧美永久视频 | 国产精品九九久久久久久久 | 看av免费| 日韩三级视频 | 99热这里有精品 | 国产精品伦一区二区三区视频 | 在线看av网址| 亚洲国产精品影院 | 亚洲国产中文字幕在线观看 | 伊人婷婷色 | 中文字幕在线免费97 | 91色影院 | 欧美日韩18 | 亚洲性少妇性猛交wwww乱大交 | 91麻豆精品国产91久久久使用方法 | 日韩亚洲精品电影 | 国产黄色高清 | av韩国在线 | 久久综合欧美精品亚洲一区 | 国产精品入口麻豆www | 精品福利在线视频 | 丰满少妇一级片 | 亚洲影院色 | 在线观看第一页 | 六月色丁香 | 超碰97国产| 久久午夜视频 | 精品在线99 | 欧美日韩中文在线观看 | 亚洲免费公开视频 | 人人爽人人插 | 婷婷激情小说网 | 天天综合网 天天综合色 | 天天干天天拍天天操 | 综合色狠狠| 99在线视频观看 | 欧产日产国产69 | 久久久999免费视频 日韩网站在线 | 日韩a级黄色片 | 国产亚洲精品久久久网站好莱 | 久久avav| www免费| 国产精品久久久久久av | 国产黄色片久久 | 成人夜晚看av | 高清中文字幕av | 亚洲黄色在线 | 三级av免费 | 国产精品久久久久久久久久久久午 | 日韩网站免费观看 | 婷婷爱五月天 | 一区二区三区在线免费观看视频 | 国产99在线播放 | 国产视频精选 | 丰满少妇在线观看 | 成人理论电影 | 五月开心六月婷婷 | 国产美女视频免费 | 国产视频一区二区三区在线 | 精品视频免费久久久看 | 久久99精品久久久久久清纯直播 | 黄色亚洲大片免费在线观看 | 一区二区欧美日韩 | 日日射av| 精品国产一区二区三区不卡 | 中文字幕在线观看三区 | 香蕉视频在线看 | 久久婷五月 | 爱色av.com| 免费看的国产视频网站 | 日本精品久久久久影院 | 在线观看 国产 | 久久久久久美女 | 色av网站 | 国产 日韩 在线 亚洲 字幕 中文 | 国产精品一区二区久久精品爱微奶 | 黄色软件在线观看免费 | 亚洲综合五月 | 在线免费国产 | 日日噜噜噜噜夜夜爽亚洲精品 | 韩国av免费 | 99在线精品观看 | 日日干夜夜骑 | 成人午夜性影院 | 国产黄色大片免费看 | 美女一二三区 | 欧美特一级| 国产精品一区二区三区久久 | 天天操天天摸天天射 | 五月婷婷网站 | 久久99精品国产99久久6尤 | 日韩欧美一区二区三区视频 | 婷婷色婷婷 | 亚洲综合视频在线播放 | 九九精品久久久 | 久久亚洲影视 | 超碰在线色 | 日本精品视频一区二区 | 99热这里只有精品在线观看 | 永久免费毛片在线观看 | 亚洲精品日韩在线观看 | 亚洲一区二区三区在线看 | 99精品免费网 | 96国产精品视频 | 色偷偷888欧美精品久久久 | 一级黄色免费网站 | 国产精品久久免费看 | 久久久国产一区二区三区 | 91免费观看视频网站 | 国产美女精品视频 | 免费看十八岁美女 | 久久伊人国产精品 | 国产精品不卡一区 | 日本中文字幕网 | 91香蕉视频在线下载 | 亚洲国产精品久久久久 | 国产精品美女久久久网av | 日日夜夜免费精品 | 美女视频黄免费网站 | av在线网站观看 | 国产资源免费在线观看 | 久久久久久久久久久久久久免费看 | 美女搞黄国产视频网站 | 欧美一区影院 | 国内精品福利视频 | 国产精品嫩草69影院 | 国产福利不卡视频 | 国产女教师精品久久av | 91在线免费观看国产 | av直接看 | 久久国产精品电影 | 一区二三国产 | 亚洲日本欧美 | 超碰免费97 | 五月天精品视频 | av电影中文字幕 | 天天爽天天爽天天爽 | 国产91精品看黄网站在线观看动漫 | 国产精品久久久久久久久久ktv | 日韩精品一区二区三区三炮视频 | 中文字幕欧美三区 | 欧美精品在线一区 | 欧美国产日韩激情 | 在线视频一二区 | 国产黄色免费在线观看 | 成人av网站在线播放 | 亚洲天堂网站视频 | 中文免费 | 国产另类av | 国产91粉嫩白浆在线观看 | 在线免费观看黄色av | 9797在线看片亚洲精品 | 99精品在线观看视频 | 免费在线观看av网站 | 精品一区 在线 | 日韩av在线一区二区 | 欧洲亚洲女同hd | 五月婷婷激情 | 国产在线观看你懂得 | 精品国产伦一区二区三区观看方式 | 欧美日韩在线观看一区 | 亚洲成人动漫在线观看 | 精品日本视频 | 国产精品第十页 | 91丨九色丨蝌蚪丨老版 | 国产免费观看久久黄 | 亚洲人久久久 | 国产精品99久久99久久久二8 | 在线成人高清电影 | 精品国产中文字幕 | 国产精品乱码久久久久 | 久久精品老司机 | 黄色app网站在线观看 | 九九热精品国产 | 亚洲国产一区在线观看 | 黄色影院在线观看 | www.色爱 | 婷婷亚洲激情 | 国产精品美女久久久网av | 久久在线免费观看 | 色视频在线看 | 久久久九色精品国产一区二区三区 | 97精产国品一二三产区在线 | 欧美精品久久久久久久久久白贞 | 一区二区毛片 | 伊人国产在线观看 | 午夜a区| 美女精品在线观看 | 国产成人亚洲在线电影 | 精品久久久久久久久久久久久久久久久久 | 国产精品久久久久久久久免费看 | 日韩免费视频一区二区 | 一区二区三区四区五区在线视频 | 国产裸体视频bbbbb | 久久高清| 成人av地址| 99爱国产精品 | 99精品视频免费 | 99精品在线视频播放 | 国产在线成人 | 亚洲一区 影院 | 久久精品国产一区二区三区 | 在线观看激情av | av电影不卡 | 日韩系列在线 | 亚洲成av人片在线观看 | 国产资源在线免费观看 | 中文字幕精品一区二区三区电影 | 一级α片 | 999国产| 毛片网在线 | 免费看成年人 | 91丨九色丨国产在线观看 | 蜜臀av一区二区 | 成人三级黄色 | 日韩视频一区二区 | 三级在线视频播放 | 免费观看成年人视频 | 亚洲国产精品一区二区久久hs | 99精品免费久久久久久日本 | 亚洲精品男人天堂 | 在线视频日韩一区 | 99久久婷婷 | 日日操日日干 | 免费福利在线视频 | 精品毛片一区二区免费看 | 香蕉影视在线观看 | 欧美淫视频 | 9ⅰ精品久久久久久久久中文字幕 | 婷婷亚洲综合五月天小说 | 性色在线视频 | 精品99久久 | 激情偷乱人伦小说视频在线观看 | 青草视频在线 | 91中文字幕在线观看 | 婷婷九九| 手机看片1042 | 免费观看www视频 | 99热这里只有精品在线观看 | 日韩精品在线免费观看 | 国产精品久久久一区二区三区网站 | 日韩美女久久 | 日韩色在线观看 | 久久精品www人人爽人人 | 亚洲欧洲精品久久 | 成人久久免费视频 | 久久亚洲影视 | 一区二区欧美在线观看 | 国产剧情av在线播放 | 久久手机免费视频 | 91网免费看 | 国产色综合天天综合网 | 国产中文字幕视频在线观看 | 精品国产精品国产偷麻豆 | 国产小视频91 | 人人艹人人 | 成全在线视频免费观看 | 人人射av | 婷婷5月色 | 99看视频在线观看 | 欧美网站黄色 | 日韩成人在线一区二区 | 在线成人免费电影 | 一区二区不卡 | 日日添夜夜添 | 天天亚洲| 中文字幕999| 在线电影a | 中文永久免费观看 | 日韩一区二区免费视频 | 91av99| 国产一级做a爱片久久毛片a | 麻豆手机在线 | 欧美日韩国产一区二 | 亚洲日本va午夜在线电影 | 精品中文字幕在线 | 99久久久久久久 | 黄色一级在线视频 | 天天操天天弄 | 亚洲精品在线电影 | 黄色日视频 | 国精产品永久999 | 国产中文字幕亚洲 | 91在线视频免费播放 | 国产69精品久久久久99尤 | 中文字幕乱码视频 | av成人亚洲| 日韩中文字幕在线不卡 | 开心激情婷婷 | 国产精品一区二区久久国产 | 91九色最新 | 久久理论电影网 | 99麻豆视频 | 可以免费观看的av片 | 天天做日日做天天爽视频免费 | 综合网伊人 | 久久精品美女视频网站 | 成人av手机在线 | 久久久91精品国产一区二区精品 | 特级黄色视频毛片 | 国产精品亚 | 一区二区三区视频 | 久久人人爽人人片av | 日韩性xxx| 九九热.com| 天堂入口网站 | 91精品国产乱码 | 免费在线黄色av | 五月天色婷婷丁香 | 99久久精品视频免费 | 久久网站免费 | 国产成人在线一区 | 日本视频不卡 | 99视频在线观看视频 | 91视频下载 | 亚洲精品免费在线观看 | 亚洲成a人片在线观看网站口工 | 日韩色视频在线观看 | 人人精品| 天天操天天色天天射 | 国产一级片免费视频 | 日韩在观看线 | 成人久久久久久久久久 | 精壮的侍卫呻吟h | 亚洲一区二区三区精品在线观看 | 天天射网 | 日韩免费一区二区三区 | 青青河边草免费观看完整版高清 | 国产18精品乱码免费看 | 91精品91 | 日韩国产在线观看 | 日韩电影一区二区在线观看 | 91天天视频| 久久国产二区 | 中文字幕精品一区久久久久 | 黄色99视频 | 久久精品五月 | 久久综合九色99 | 久草免费在线视频观看 | 特级西西444www高清大视频 | 日本中文字幕电影在线免费观看 | 福利视频第一页 | 国产一区二区中文字幕 | 91精品久久久久久久久 | 久草久视频 | 日韩欧美精品在线 | 天天弄天天操 | 欧美国产日韩一区二区三区 | 欧美日一级片 | 黄色网址中文字幕 | 狠狠色狠狠综合久久 | 久久精品综合一区 | 亚洲欧美国产精品va在线观看 | www五月| 亚洲国产精品va在线看黑人 | 在线成人性视频 | 97色婷婷成人综合在线观看 | 正在播放国产一区二区 | 国产日韩精品在线观看 | 久久久久久久久久久综合 | 国产美女精彩久久 | 欧美日韩另类视频 | 免费婷婷 | 成年人网站免费在线观看 | 人人爱天天操 | 六月久久婷婷 | 婷婷综合伊人 | 亚洲成av人片在线观看无 | 丁香六月天婷婷 | 成人在线视频你懂的 | 99国产在线视频 | 色婷婷久久一区二区 | 天天天操操操 | 丁香久久婷婷 | 中文在线a在线 | 色狠狠久久av五月综合 | 免费av黄色| 国产日韩欧美在线观看视频 | 热久久国产精品 | 欧美性久久久久久 | 久久婷婷国产 | 人人草人人草 | 中文不卡视频 | 日本性xxxxx 亚洲精品午夜久久久 | 久久一区二 | 国产亚洲午夜高清国产拍精品 | 欧美精品国产综合久久 | 九九热视频在线 | 91大神一区二区三区 | 国产成人在线免费观看 | 成人午夜精品久久久久久久3d | 91麻豆精品国产91 | 日韩网站在线 | 亚洲欧美日韩在线一区二区 | 91视频在线网址 | 亚洲日本va在线观看 | 久久精品波多野结衣 | 黄色h在线观看 | 五月婷婷综合在线观看 | 精品国产免费久久 | www.天天操| 久久免费av电影 | 在线观看中文字幕av | 亚洲影视九九影院在线观看 | 亚洲婷婷丁香 | 国产色在线 | 亚洲另类久久 | 国产精品麻豆99久久久久久 | 天天综合网~永久入口 | 麻豆视频免费网站 | 精品国产午夜 | 欧美日韩伦理在线 | 久久精品视频99 | 国产精品自产拍 | 一级黄色大片 | 欧美精品久久久久a | 96视频免费在线观看 | 欧美成年黄网站色视频 | 特级a老妇做爰全过程 | 色婷婷中文 | 91中文字幕在线视频 | 免费日韩一区二区三区 | 欧美色综合久久 | 成人啊 v | 97精品国产一二三产区 | 国产精品久99 | 久久激情视频 久久 | 国产在线更新 | 久久久久久99精品 | 亚洲精品综合一区二区 | 久久一视频 | 日韩精品亚洲专区在线观看 | 爱爱av网站 | 久久久香蕉视频 | 久久久不卡影院 | 一区二区三区中文字幕在线 | 欧美孕妇视频 | 日韩精品你懂的 | 日韩a欧美| 97精品在线视频 | 欧美天天干 | 久久福利 | 天天操天天爱天天干 | 9在线观看免费高清完整版在线观看明 | 国产精品永久 | 热久久免费视频精品 | 日韩视频专区 | 久久久久激情视频 | 国产精品久久三 | 探花国产在线 | 超碰人人91| 日本中文不卡 | 欧美午夜寂寞影院 | 国产黄色精品网站 | 欧美激情视频一二三区 | 综合婷婷丁香 | 婷婷丁香激情五月 | 成人免费影院 | 国产区在线 | 91av片 | 99精品国产成人一区二区 | 亚洲影视资源 | 天天艹 | 日日夜夜天天久久 | 国产不卡视频在线播放 | 国产日韩欧美在线一区 | 国产成人在线观看 | 国产精品 国产精品 | 九色在线视频 | 久久精品99视频 | 99久高清在线观看视频99精品热在线观看视频 | 久久久免费精品 | 国产视频黄 | 国产三级av在线 | 国产精品一区二区av日韩在线 | 日韩精品一区在线播放 | 成人免费观看视频网站 | 欧美激情视频在线免费观看 | 久久试看 | 欧美性生爱 | av一区二区三区在线播放 | 日日干视频 | 精品国产免费av | 亚洲视频在线免费看 | 欧美黄色免费 | 亚洲日本韩国一区二区 | 亚洲国产影院av久久久久 | 在线观看国产区 | 天天操人人干 | 日韩一区二区免费视频 | 国产成人精品免高潮在线观看 | av一本久道久久波多野结衣 | 在线观看蜜桃视频 | 精品国产aⅴ麻豆 | 91精品福利在线 | 精品免费久久 | av高清在线观看 | 播五月综合 | 一区二区影院 | 在线观看国产www | 亚洲九九九 | 开心丁香婷婷深爱五月 | 久久情网| 日韩av在线免费看 | 91香蕉亚洲精品 | 韩国三级在线一区 | 美女福利视频一区二区 | www黄色软件 | 久久久国产影视 | 久久一区二区免费视频 | 亚洲一区二区三区四区在线视频 | 日韩一区二区三区高清免费看看 | 国产精品久久久 | 一级性视频 | 久草精品视频在线看网站免费 | 久久五月天综合 | 国产一区 在线播放 | 91福利区一区二区三区 | 国产精品女人网站 | 久久久电影 | 91精品国产自产在线观看永久 | 天天操天天干天天操天天干 | 亚洲国产影院av久久久久 | 国产精品久久久久一区二区三区 | 99久久成人 | 最新国产在线视频 | 91福利小视频 | 亚洲v欧美v国产v在线观看 | 波多野结衣资源 | 国产精品午夜在线观看 | 在线观看亚洲电影 | 在线免费观看涩涩 | 欧美日韩视频一区二区 | 激情亚洲综合在线 | 99久精品 | 美女网站在线看 | 香蕉影视 | 五月天网站在线 | 国产一区国产二区在线观看 | 欧美成人中文字幕 | 免费av成人在线 | 探花视频免费在线观看 | 欧美日韩国产成人 | 在线免费视 | av成人黄色| 色吊丝在线永久观看最新版本 | 美女一级毛片视频 | 97成人免费| 成人aⅴ视频 | 久久久久久久久久久久国产精品 | 激情综合五月 | 久久99精品久久只有精品 | 久久免费精品视频 | 欧美精品二区 | 亚洲精品中文在线 | 国内成人精品2018免费看 | 人人插人人搞 | 色视频网站在线观看一=区 a视频免费在线观看 | 毛片精品免费在线观看 | 91国内在线视频 | 波多野结衣最新 | 激情久久网 | 碰天天操天天 | 手机成人在线电影 | 国产色综合 | a黄色片在线观看 | 日韩精品观看 | 天天·日日日干 | 精品福利网 | 九九免费精品视频 | 日韩在线一级 | 免费久久精品视频 | 五月婷婷六月丁香激情 | 欧美在线观看视频 | 日韩av电影中文字幕 | 日韩免费电影网站 | 亚洲另类视频在线 | 在线观看中文字幕dvd播放 | 91成人在线网站 | 91亚洲精品国偷拍 | 日韩字幕在线观看 | 午夜国产一区二区 | 日韩视频中文 | 久久黄色小说视频 | 久久国产精品99久久人人澡 | 久久国产三级 | 91九色老| 亚洲综合色激情五月 | 日韩三级av | 日韩黄色免费看 | 狠狠狠色 | 中文字幕有码在线观看 | 99九九99九九九视频精品 | 狠狠干天天色 | 一级免费黄色 | 91亚洲精品久久久蜜桃网站 | 亚洲精品国产品国语在线 | 97视频人人澡人人爽 | 久久成电影 | 丁香婷婷基地 | 日韩激情在线视频 | 亚洲综合情 | 中文字幕亚洲情99在线 | 在线观看免费版高清版 | 亚洲视频高清 | 玖玖玖影院 | 欧美一性一交一乱 | 国产精品免费大片视频 | 五月天久久婷婷 | 九月婷婷人人澡人人添人人爽 | 在线 高清 中文字幕 | 成年人在线观看免费视频 | 精品毛片久久久久久 | 亚洲一区免费在线 | 黄色tv视频 | 国产精品原创视频 | 日本不卡一区二区 | 免费色视频 | 综合色婷婷 | 亚洲一区二区精品3399 | 久久经典国产视频 | 国产精品综合久久久久 | 欧美午夜理伦三级在线观看 | 黄污视频网站大全 | 九九激情视频 | 亚洲色图激情文学 | 国产在线观看91 | av电影 一区二区 | 久久夜色电影 | 国产破处在线视频 | 五月激情在线 | 久久国产免 | 久久久一本精品99久久精品 | 国产女做a爱免费视频 | www夜夜操com | 最新日韩视频 | 综合色狠狠 | 一区二区三区免费播放 | 丝袜+亚洲+另类+欧美+变态 | 中文字幕av全部资源www中文字幕在线观看 | 亚洲经典视频在线观看 | av在线影视 | 涩涩网站在线播放 | 欧洲精品亚洲精品 | 亚洲六月丁香色婷婷综合久久 | 五月激情在线 | 麻豆手机在线 | 欧美日韩国产二区 | 最近中文字幕免费av | 五月婷激情 | a级一a一级在线观看 | 免费看国产a | 婷婷av色综合 | 96视频在线 | av网站在线观看免费 | 国产精品一区二区av影院萌芽 | 狠狠干成人综合网 | 波多野结衣电影一区二区三区 | 亚洲午夜精品久久久久久久久 | 99久久精品免费 | 日日爽夜夜爽 | 视频在线日韩 | 97人人模人人爽人人喊网 | 一区二区三区视频 | 狠狠操电影网 | 夜夜澡人模人人添人人看 | 国精产品999国精产品岳 | 91精品国产自产在线观看 | 免费看片网址 | 亚洲综合精品视频 | 一级黄色在线视频 | 婷婷伊人综合亚洲综合网 | 久久五月婷婷丁香 | 久久一本综合 | 久久激情视频 久久 | 免费福利在线 | 日韩精品国产一区 | 国产精品久久久久久久久久妇女 | 人人射| a色视频 | 在线观看av的网站 | 免费视频 你懂的 | 亚洲精品自拍 | 日韩艹 | 国产中文字幕在线免费观看 | 亚洲手机天堂 | 夜夜嗨av色一区二区不卡 | 97碰在线视频 | 日本99热 | av中文字幕在线观看网站 | 国产一级性生活 | 国产 字幕 制服 中文 在线 | 日本爽妇网 | 大片网站久久 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 亚洲闷骚少妇在线观看网站 | 久久久99精品免费观看乱色 | 又粗又长又大又爽又黄少妇毛片 | 天天色天天射天天干 | 久久电影国产免费久久电影 | 黄色av在| 九九热久久免费视频 | 久久一区二区三区日韩 | 久久久久久久久久久久久久免费看 | 久久中文字幕导航 | 亚洲麻豆精品 | 91麻豆产精品久久久久久 | 亚洲高清在线视频 | 久久久夜色 | 久久国产精品免费看 | 就操操久久 | 91九色免费视频 | 友田真希av| 韩国一区二区av | 欧美日韩裸体免费视频 | 国产最新视频在线观看 | 国产一区二区在线精品 | www.大网伊人 | av成人在线播放 | 日日干综合 | 久久最新视频 | 国内免费的中文字幕 | 国产精品入口传媒 | 美女网站黄在线观看 | 亚洲第一av在线播放 | 日韩精品一区二区三区高清免费 | 中国一级片在线播放 | 成人a在线观看高清电影 | 草樱av| 美女视频黄的免费的 | 91激情视频在线 | 日本巨乳在线 | 91香蕉视频 | 色姑娘综合网 | 国内精品在线看 | 亚洲视频一区二区三区在线观看 | 国产成人精品亚洲 | 国产伦精品一区二区三区四区视频 | 91一区二区三区在线观看 | 国产成人精品久久久久蜜臀 | 成人久久综合 | 狠狠伊人| 在线看黄网站 | 亚洲黄在线观看 | 午夜精品成人一区二区三区 | 中文永久字幕 | 正在播放 久久 | 久99久中文字幕在线 | 青青草国产精品 | 日韩色av色资源 | 伊人五月在线 | 久久久久一区二区三区 | 国产精品一区二区 91 | 草草草影院| 欧美专区国产专区 | 精品国产免费一区二区三区五区 | 99热国产精品 | 国产精品久久嫩一区二区免费 | 大型av综合网站 | 中文字幕丝袜 | 国产专区日韩专区 | 成人黄色视| 四虎在线观看 | 激情影音先锋 | 免费在线观看毛片网站 | 奇米影音四色 | 日本免费久久高清视频 | 国产成人久久 | 国产字幕av | 国产精品久久久久久久久久久杏吧 | 亚欧洲精品视频在线观看 | 波多野结衣在线播放视频 | 日韩在线一区二区免费 | av电影一区二区三区 | 91欧美日韩国产 | 成人在线观看免费 | 国产特级毛片aaaaaa高清 | 久久看毛片 | 九九热精品视频在线观看 | 中文字幕 国产视频 | 亚洲综合网站在线观看 | 国产精品一区二区av麻豆 | 中文字幕在线视频第一页 | 日韩欧美在线观看一区 | 欧美国产日韩中文 | 日日干,天天干 | 日韩有码专区 | 国产国语在线 | 国产精品久久久久久久久久 | 美州a亚洲一视本频v色道 | 中文字幕不卡在线88 | 亚洲久草网 | 婷婷久草| 亚洲免费高清视频 | 精品久久久久久久久久久久久久久久久久 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 欧美国产在线看 | 麻豆视频在线 | 欧洲精品二区 | 日韩在线不卡视频 | 天天插天天干天天操 | 99精品免费久久久久久久久 | 免费黄色特级片 | 欧美黑人巨大xxxxx | 91精彩视频| 五月天激情视频在线观看 | 午夜色站 | 婷婷五月色综合 | 久久综合九色综合久久久精品综合 | 五月婷婷在线视频观看 | 国产黄免费在线观看 | 国产精品美女久久久久久久网站 | 色综合夜色一区 | 综合天天 | 日韩免费b| 欧美日韩首页 | 黄色a一级视频 | av网站播放 | 天天干,天天操 | 久久久久99精品成人片三人毛片 | 日韩电影久久 | 亚洲一级片在线看 | 美女福利视频在线 | 麻豆成人在线观看 | 日韩国产欧美视频 | 国产成人综 | 奇米影视四色8888 | 精品爱爱 | 色综合咪咪久久网 | 日韩在线视频一区二区三区 | 日日草av| 91在线国产观看 | 国产91精品在线播放 | 日韩精品久久久久久久电影99爱 | 欧美一二三视频 | 伊人狠狠 | 91天天视频| 免费a网 | 色婷婷国产 | 国产精品美女久久久免费 | 久久99精品波多结衣一区 | 日韩精品免费一线在线观看 | 日日夜夜天天人人 | 国产亚洲成av人片在线观看桃 | 九九久久久久久久久激情 | 久草免费新视频 | 免费精品视频在线观看 | 亚洲电影网站 | 中文字幕在线中文 | 午夜精品一区二区三区在线 | 日日干精品| 免费观看一区二区 | 日韩理论在线 | 麻豆高清免费国产一区 | 国产精品粉嫩 | 五月天,com | 91尤物国产尤物福利在线播放 | 婷婷综合导航 | 国产福利资源 | 国产午夜三级 | 人人玩人人爽 | 午夜三级在线 | 亚洲精品男人的天堂 | 国产aa精品 | 免费福利在线播放 | 久久成人麻豆午夜电影 | 九九九国产 | 五月婷婷开心 | 中文字幕在线观看网址 | 婷婷丁香久久五月婷婷 | 国产精品一区二区在线观看免费 | 欧美一二三四在线 | 在线视频欧美亚洲 | 欧美在线观看小视频 | 97日日碰人人模人人澡分享吧 | 97超碰在线久草超碰在线观看 | 亚洲国产综合在线 | 亚洲午夜精品久久久久久久久久久久 | 99久高清在线观看视频99精品热在线观看视频 | 中文字幕黄色 | 国产在线视频资源 | 国产丝袜制服在线 | 国产黄a三级 | 亚洲国产精品500在线观看 | 成人91av| 亚洲精区二区三区四区麻豆 | 中文字幕在线电影 | 日b视频在线观看网址 | 日韩免费在线看 | 黄色成人影院 | 看国产黄色片 | 亚洲春色奇米影视 | 正在播放国产一区 | 天天干人人干 |