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

Hi3861的SAMGR--系統服務框架子系統-3

系統
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[406193]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

接前文《Hi3861的SAMGR--系統服務框架子系統-1》《Hi3861的SAMGR--系統服務框架子系統-2》

刪除《系統服務框架子系統-1》的 “3.大概流程” 這一小節,由本文進行替換。

samgr的展開圖和Hi3861開機部分的log,一并打包到附件,請看圖和log,結合代碼,理解本文。

3. 詳細流程分析

Hi3861平臺在啟動到HOS_SystemInit()時,

  1. void HOS_SystemInit(void) 
  2.     ...... 
  3.     printf("[system_init] [7-4]: SYS_INIT(service)=====================\n"); 
  4.     SYS_INIT(service); 
  5.     printf("[system_init] [7-5]: SYS_INIT(feature)=====================\n"); 
  6.     SYS_INIT(feature); 
  7.     ...... 
  8.     printf("[system_init] [7-7]: SAMGR_Bootstrap()=====================\n"); 
  9.     SAMGR_Bootstrap(); 

 會分別通過上面三步來:

  • A. 注冊系統服務(service)
  • B. 注冊系統服務提供的功能(feature)
  • C. 通過samgr啟動并開始管理系統服務和功能

下面我們就結合上面提供的samgr展開圖,看看這三步具體都做了哪些工作。

A. 注冊系統服務(service)

  1. [system_init] [7-4]: SYS_INIT(service)===================== 
  2.  
  3. [bootstrap_service] SYS_SERVICE_INIT(Init): Bootstrap 
  4.  
  5. [samgr_lite] SAMGR_GetInstance(mutex=NULL): NO SAMGR instance, Init() to create ONE 
  6.  
  7. [samgr_lite] Init. g_samgrImpl 
  8.  
  9. [samgr_lite] Init. mutex[956036]. sharedPool[0-8] reset to 0. status=0[BOOT_SYS] 
  10.  
  11. [samgr_lite] SAMGR_GetInstance(mutex=956036) 
  12.  
  13. [samgr_lite] RegisterService(Name:Bootstrap)->Sid[0] 
  14.  
  15.   
  16.  
  17. [broadcast_service] SYS_SERVICE_INIT(Init): Broadcast 
  18.  
  19. [samgr_lite] RegisterService(Name:Broadcast)->Sid[1] 
  20.  
  21.   
  22.  
  23. [hiview_service] SYS_SERVICE_INIT(Init): hiview 
  24.  
  25. [samgr_lite] RegisterService(Name:hiview)->Sid[2] 
  26.  
  27. [samgr_lite] RegisterFeatureApi(serviceName[hiview], feature[(null)]) 
  28.  
  29. [hiview_service] Init.InitHiviewComponent. 

 從上述og看,會首先注冊三個系統服務。

第一個注冊的系統服務是Bootstrap:

  1. SAMGR_GetInstance()->RegisterService((Service *)&bootstrap); 

復制這個時候samgr還沒有實例,所以需要先通過Init()初始化samgr的全局實例g_samgrImpl:

Hi3861的SAMGR--系統服務框架子系統-3-鴻蒙HarmonyOS技術社區

然后才能調用RegisterService((Service *)&bootstrap)來向g_samgrImpl注冊bootstrap服務,下圖是RegisterService()函數的代碼片段截圖:

Hi3861的SAMGR--系統服務框架子系統-3-鴻蒙HarmonyOS技術社區

調用SAMGR_CreateServiceImpl()為bootstrap創建一個ServiceImpl對象,并把bootstrap service對象與ServiceImpl.service關聯起來,同時也為ServiceImpl.features創建一個默認的空的向量,以便下一步為service關聯對應的feature。

再通過VECTOR_Add()操作,將ServiceImpl對象的引用加入g_samgrImpl.services向量中,并返回它在向量中的位置[0],以此作為bootstrap 的ServiceID[0]。

接下來注冊的第二個服務broadcast和第三個服務hiview,就可以直接通過RegisterService((Service *)Xxx)記錄進g_samgrImpl.services向量里了,Sid分別是[1]/[2]。服務的注冊過程與上面bootstrap的過程一樣。

B. 注冊系統服務提供的功能(feature)

  1. [system_init] [7-5]: SYS_INIT(feature)===================== 
  2.  
  3. [pub_sub_feature] Init. SYS_FEATURE_INIT(Init) g_broadcastFeature: Provider and subscriber 
  4.  
  5. [samgr_lite] RegisterFeature(serviceName:Broadcast, featureName:Provider and subscriber)->Fid[0] 
  6.  
  7. [pub_sub_implement] BCE_CreateInstance: set g_pubSubImplement.feature = &g_broadcastFeature 
  8.  
  9. [samgr_lite] RegisterFeatureApi(serviceName[Broadcast], feature[Provider and subscriber]) 

接下來注冊broadcast service的feature:PUB_SUB_FEATURE。

feature的注冊和運行需要依賴于對應的service,一個service可以有0個、1個或多個feature。

Hi3861的SAMGR--系統服務框架子系統-3-鴻蒙HarmonyOS技術社區

這里通過調用RegisterFeature(service, feature)來注冊feature并與對應的service關聯在一起,下圖是RegisterFeature() 函數的代碼片段截圖:

Hi3861的SAMGR--系統服務框架子系統-3-鴻蒙HarmonyOS技術社區

g_samgrImpl首先通過service name找到上一步登記在冊的對應的serviceImpl對象,將其與feature對象一起作為參數,送入DEFAULT_AddFeature()。

Hi3861的SAMGR--系統服務框架子系統-3-鴻蒙HarmonyOS技術社區

DEFAULT_AddFeature()里面,也會通過FEATURE_CreateInstance()先生成一個FeatureImpl對象,再通過VECTOR_Add()操作,將FeatureImpl對象的引用加入到 ServiceImpl.features這個向量中去,并返回它在向量中的位置[0],以此作為PUB_SUB_FEATURE的featureId[0],這就完成了feature與service的關聯,也就完成了feature的注冊工作。

上面A和B兩步,就已經完成了前面的samgr展開圖中的大部分工作(除了與創建queue/taskPool相關部分),至此,samgr與service/feature之間的樹形關系已經基本上成型了,但都還是靜態關系:g_samgrImpl的services向量,已經記錄了這一啟動階段注冊進來的所有系統服務的ServiceImpl ,而每個ServiceImpl的features向量,又記錄了注冊進來的與其對應的所有features的FeatureImpl對象。【看samgr的展開圖】

這里記錄的serviceName/serviceID(Sid) 和featureName/featureID(Fid) 都是非常重要的信息,在接下來的系統啟動和運行中,samgr可以通過它們來找到對應的ServiceImpl/FeatureImpl對象,并提供相應的服務/功能。

C. 通過samgr啟動并開始管理系統服務和功能

  1. [system_init] [7-7]: SAMGR_Bootstrap()===================== 
  2.  
  3. [samgr_lite] SAMGR_Bootstrap(status[1:BOOT_SYS_WAIT]). Begin:   size=3 
  4.  
  5.         InitializeAllServices: unInited services: size=3 
  6.  
  7.         ---------------------------------------------------- 
  8.  
  9.         Add service: Bootstrap   to TaskPool: 0x0... 
  10.  
  11.                                 TaskPool: 0xfa488... 
  12.  
  13.                                     Qid: 956424... 
  14.  
  15.         InitializeSingleService(Bootstrap): SAMGR_SendSharedDirectRequest(handler[HandleInitRequest]) 
  16.  
  17. [message] SAMGR_SendSharedDirectRequest: Put Exchange into Qid:[956424],type[4], request.msgId[0]+msgValue[0]: 
  18.  
  19.         ---------------------------------------------------- 
  20.  
  21.         Add service: Broadcast   to TaskPool: 0x0... 
  22.  
  23.                                 TaskPool: 0xfaaf8... 
  24.  
  25.                                     Qid: 956468... 
  26.  
  27.         InitializeSingleService(Broadcast): SAMGR_SendSharedDirectRequest(handler[HandleInitRequest]) 
  28.  
  29. [message] SAMGR_SendSharedDirectRequest: Put Exchange into Qid:[956468],type[4], request.msgId[0]+msgValue[0]: 
  30.  
  31.         ---------------------------------------------------- 
  32.  
  33.         Add service: hiview      to TaskPool: 0x0... 
  34.  
  35.                                 TaskPool: 0xfacb8... 
  36.  
  37.                                     Qid: 956512... 
  38.  
  39.         InitializeSingleService(hiview): SAMGR_SendSharedDirectRequest(handler[HandleInitRequest]) 
  40.  
  41. [message] SAMGR_SendSharedDirectRequest: Put Exchange into Qid:[956512],type[4], request.msgId[0]+msgValue[0]: 
  42.  
  43.   
  44.  
  45. ---------------------------------------------------- 
  46.  
  47. [task_manager] SAMGR_StartTaskPool: 
  48.  
  49.         CreateTask[Bootstrap(Tid: 0xe87c0), size(2048), Prio(25)]-OK! 
  50.  
  51. [task_manager] SAMGR_StartTaskPool: 
  52.  
  53.         CreateTask[Broadcast(Tid: 0xe875c), size(2048), Prio(32)]-OK! 
  54.  
  55. [task_manager] SAMGR_StartTaskPool: 
  56.  
  57.         CreateTask[hiview(Tid: 0xe8824), size(2048), Prio(24)]-OK! 
  58.  
  59. ---------------------------------------------------- 
  60.  
  61. [samgr_lite] InitCompleted: services[3-0] inited, OK! END
  62.  
  63. [samgr_lite] SAMGR_Bootstrap. End

 進入SAMGR_Bootstrap() 函數中:

首先創建一個空的臨時向量Vector initServices,用于收集還沒有初始化的服務。

接著遍歷g_samgrImpl.services向量中登記在冊的所有serviceImpl對象,查看它們的inited標記是否為SVC_INIT,是則表示對應的service需要做初始化,將其加入到臨時的向量表中;inited標記如果不是SVC_INIT,則表示對應的service已經初始化過了,不需要再次初始化,也就不用加入到臨時的向量表中。

接著通過InitializeAllServices(&initServices)把記錄在initServices臨時向量中的serviceImpl列表依次初始化一遍,也就是根據具體的service提供的TaskConfig參數,創建Queue和TaskPool這些運行環境。通過AddTaskPool()及其參數,為不同的service創建不同的TaskPool,這里有三種task類型,我們重點關注一下“SHARED_TASK”這種,詳情見前文《系統服務框架子系統-2》中,對SHARED_TASK類型的分析。

Hi3861的SAMGR--系統服務框架子系統-3-鴻蒙HarmonyOS技術社區

跑完AddTaskPool()之后,各個service都有了自己的QueueID/TaskPool資源了,InitializeSingleService(serviceImpl)就會發送SharedDirectRequest(消息類型type=4,即MSG_DIRECT)到各自service的Queue中,等待消息被處理。

接下來就是啟動service task了。

InitializeAllServices()內,依次為臨時向量initServices中的每個serviceImpl調用SAMGR_StartTaskPool (serviceImpl->taskPool, name); 來為service創建任務。

SAMGR_StartTaskPool() 代碼片段如下圖:

Hi3861的SAMGR--系統服務框架子系統-3-鴻蒙HarmonyOS技術社區

它創建和啟動service任務/線程,線程入口是TaskEntry()函數,位于task_manager.c文件內。

Hi3861的SAMGR--系統服務框架子系統-3-鴻蒙HarmonyOS技術社區

各個服務的TaskEntry線程,監控著各自的消息隊列Queue,從中檢出消息,獲取Exchange封裝的數據,根據里面的相關標記調用相關的msg handler來進行對應的處理。

至此,SAMGR_Bootstrap()函數就跑完了,samgr將會與services進入一種動態的互動關系中。

既然所有的service的消息隊列以及任務都已經開始工作了,那上面InitializeSingleService(serviceImpl)發送的SharedDirectRequest(消息類型type=4,即MSG_DIRECT),就會被各自service的TaskEntry線程收到并進行處理。

第一個service的線程啟動并進入while(1)循環,監控消息隊列,獲取消息,通過Sid和Qid可以知道這是Broadcast服務首先對消息進行處理。MSG_DIRECT消息處理的handle是HandleInitRequest(),這是samgr自己直接處理的初始化流程,這里將會調用Broadcast服務的生命周期函數之一的Initialize() 對服務進行初始化,Broadcast service下存在feature,也會同時調用feature的OnInitialize對feature進行初始化,如下log所示:

  1.   TaskEntry(Qid:956468) into while(1) wait for MSG from queue.... 
  2.  
  3.         TaskEntry(Qid:956468) Recv MSG: 
  4.  
  5.                 request.msgId[0]+msgValue[0] -->> Sid[1],Fid[-1],Qid[0] 
  6.  
  7.                 type[4]:MSG_DIRECT/DirectRequest by handler 
  8.  
  9. [samgr_lite] HandleInitRequest. to Init service:[Broadcast]Sid[1] and its features, updating Qid-->> 
  10.  
  11. [broadcast_service] Initialize.[Sid:1, Fid:-1, Qid:956468] 
  12.  
  13. [pub_sub_feature] OnInitialize(featureName[Provider and subscriber], [Sid:1, Fid:0, Qid:956468]) 
  14.  
  15.         -->>updated Qid[956468] 
  16.  
  17. [samgr_lite] InitCompleted: services[3-0] inited, OK! END

第二個service的線程啟動并進入while(1)循環,監控消息隊列,獲取消息,通過Sid和Qid可以知道這是Bootstrap服務要對消息進行處理。仍然是MSG_DIRECT消息處理,samgr的HandleInitRequest()的初始化流程,調用Bootstrap服務的生命周期函數之一的Initialize() 對服務進行初始化,沒有feature,如下log:

  1.     TaskEntry(Qid:956424) into while(1) wait for MSG from queue.... 
  2.  
  3.         TaskEntry(Qid:956424) Recv MSG: 
  4.  
  5.                 request.msgId[0]+msgValue[0] -->> Sid[0],Fid[-1],Qid[0] 
  6.  
  7.                 type[4]:MSG_DIRECT/DirectRequest by handler 
  8.  
  9. [samgr_lite] HandleInitRequest. to Init service:[Bootstrap]Sid[0] and its features, updating Qid-->> 
  10.  
  11. [bootstrap_service] Initialize.[Sid:0, Fid:-1, Qid:956424] 
  12.  
  13.         -->>updated Qid[956424] 
  14.  
  15. [samgr_lite] InitCompleted: services[3-2] inited, OK! END

 第三個service的線程啟動并進入while(1)循環,監控消息隊列,獲取消息,通過Sid和Qid可以知道這是hiview服務要對消息進行處理。仍然是MSG_DIRECT消息處理,samgr的HandleInitRequest()的初始化流程,調用hiview服務的生命周期函數之一的Initialize() 對服務進行初始化,沒有feature,如下log:

  1.    TaskEntry(Qid:956512) into while(1) wait for MSG from queue.... 
  2.  
  3.         TaskEntry(Qid:956512) Recv MSG: 
  4.  
  5.                 request.msgId[0]+msgValue[0] -->> Sid[2],Fid[-1],Qid[0] 
  6.  
  7.                 type[4]:MSG_DIRECT/DirectRequest by handler 
  8.  
  9. [samgr_lite] HandleInitRequest. to Init service:[hiview]Sid[2] and its features, updating Qid-->> 
  10.  
  11. [hiview_service] Initialize([Sid:2, Fid:-1, Qid:956512]) 
  12.  
  13.         -->>updated Qid[956512] 
  14.  
  15. [samgr_lite] InitCompleted: services[3-3] inited, OK! ... 

 從“InitCompleted: services[3-3] inited, OK!”這句log可以知道,三個系統服務(包括它們的feature)都已經啟動完畢了,進入InitCompleted()去看一下:

Hi3861的SAMGR--系統服務框架子系統-3-鴻蒙HarmonyOS技術社區

到這里,第一階段的系統服務就初始化完畢了,status也從1[BOOT_SYS_WAIT]轉變到2[BOOT_APP],接下來要進入BOOT_APP階段了,這里會發送BOOT_SYS_COMPLETED消息給Bootstrap,讓Bootstrap調用MessageHandle()來處理該消息,去開啟APP service和feature的啟動:

  1. [samgr_lite] InitCompleted: status[1->2:BOOT_APP], all core system services Initialized! 
  2.  
  3.         Going to SendBootRequest(msgId[0-BOOT_SYS_COMPLETED], msgValue:3) 
  4.  
  5. [samgr_lite] SendBootRequest(to Bootstrap(Sid:0, Qid:956424), request.msgId[0]+msgValue[3]) ->Handler: SAMGR_Bootstrap()      
  6.  
  7. [message] SAMGR_SendRequest: Put Exchange into Qid:[956424],type[1], request.msgId[0]+msgValue[3]: 

 上面的流程僅僅是啟動了用SYS_SERVICE_INIT()和SYS_FEATURE_INIT() 標記的系統service和feature,而通過SYSEX_SERVICE_INIT/APP_SERVICE_INIT/ SYSEX_FEATURE_INIT/APP_FEATURE_INIT 標記的APP service和feature(如在前面提到的示例程序samgr里定義的一部分service和feature),則會在上面這一步,通過發送BOOT_SYS_COMPLETED消息到Bootstrap的消息隊列中,讓Bootstrap調用MessageHandle()來處理該消息:

  1. TaskEntry(Qid:956424) Recv MSG: 
  2.  
  3.              request.msgId[0]+msgValue[3] -->> Sid[0],Fid[-1],Qid[956512] 
  4.  
  5.              type[1]:0MSG_NON/1CON/3SYNC/Request by service MessageHandle 
  6.  
  7. otstrap_service] MessageHandle(Bootstrap, request.msgId[0]+msgValue[3]) 
  8.  
  9.      case BOOT_SYS_COMPLETED[0]: flag[0] 
  10.  
  11.      todo INIT_APP_CALL(service)/INIT_APP_CALL(feature) 

 Bootstrap的MessageHandle()消息處理函數通過調用INIT_APP_CALL(service)和INIT_APP_CALL(feature)來完成APP service和Feature的啟動,從而提供用戶定義的服務和功能。

Hi3861默認是沒有APP service/feature的,可以打開samgr示例程序中的service_example和feature_example來進行驗證:

注冊service_example服務

  1. 注冊service_example服務   
  2.  
  3. [service_example] SYSEX_SERVICE_INIT(Init). example_service 
  4.  
  5. [samgr_lite] RegisterService(Name:example_service)->Sid[3] 
  6.  
  7. [samgr_lite] RegisterFeatureApi(serviceName[example_service], feature[(null)]) 
  8.  
  9. 注冊service_example服務的example_feature 
  10.  
  11. [feature_example] SYSEX_FEATURE_INIT(Init). example_service:example_feature 
  12.  
  13. [samgr_lite] RegisterFeature(serviceName:example_service, featureName:example_feature)->Fid[0] 
  14.  
  15. [samgr_lite] RegisterFeatureApi(serviceName[example_service], feature[example_feature]) 
  16.  
  17.                                 -->>flag[1](0x01:LOAD_FLAG) 
  18.  
  19. [message] SAMGR_SendResponseByIdentity(Sid[0],Fid[-1],Qid[956424]): request.msgId[0]+msgValue[3] 
  20.  
  21. [message] SAMGR_SendResponse: Put Exchange into Qid:[956424],type[2], request.msgId[0]+msgValue[3]: 

 對service_example和feature_example,又跑一遍上面的ABC三步,創建example_service的queue、taskpool和task,service_example的線程啟動并進入while(1)循環,監控消息隊列,獲取消息,處理消息,與上邊的三個系統服務基本沒什么差別了。

跑到下面這一步,APP service和feature都已經全部啟動完畢,各個服務的task都在監控自己的消息隊列,隨時處理收到的消息,系統進入到了BOOT_DYNAMIC_WAIT 這個穩定的狀態了。

我為了驗證service_example和feature_example提供的服務和功能,增加了BOOT_DEBUG和BOOT_DEBUG_WAIT兩個狀態,所以又多跑了下面的一部分流程,在現實的設備應用環境中,也有可能會有各種情況下的類似的調用導致相關消息的發送和處理。

  1.  TaskEntry(Qid:956424) Recv MSG: 
  2.  
  3.                 request.msgId[1]+msgValue[4] -->> Sid[0],Fid[-1],Qid[956424] 
  4.  
  5.                 type[2]:MSG_ACK/Response by SAMGR_Bootstrap 
  6.  
  7.                 response.data:"Bootstrap MessageHandle: BOOT_APP_COMPLETED" 
  8.  
  9. [samgr_lite] SAMGR_Bootstrap(status[5:BOOT_DYNAMIC_WAIT]). Begin:       size=4 
  10.  
  11. [samgr_lite] InitCompleted: services[4-4] inited, OK! ... 
  12.  
  13.   
  14.  
  15. [samgr_lite] InitCompleted: status[5->6:BOOT_DEBUG], Going to run TEST_CASE 
  16.  
  17.         Going to SendBootRequest(msgId[3-BOOT_TEST_RUN], msgValue:4) 
  18.  
  19. [samgr_lite] SendBootRequest(to Bootstrap(Sid:0, Qid:956424), request.msgId[3]+msgValue[4]) ->Handler: SAMGR_Bootstrap()      
  20.  
  21. [message] SAMGR_SendRequest: Put Exchange into Qid:[956424],type[1], request.msgId[3]+msgValue[4]: 
  22.  
  23. [samgr_lite] SAMGR_Bootstrap. End

 接下來的大段log就是開始跑 service_example.c 里的RunTestCase()和feature_example里的RunTestCase(),以及由此引發的各種消息的發送和處理了,通過這些測試用例,可以進一步理解service/feature的工作流程和相關API的調用關系,感興趣的同學可以自行了解一下,這里就不進一步分析了。

以后開發者開發自己的service/feature到實際應用中去的時候,service/feature的生命周期和工作流程,將會與上面的流程保持一致。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-06-10 09:25:39

鴻蒙HarmonyOS應用

2021-06-03 14:21:44

鴻蒙HarmonyOS應用

2021-06-18 15:23:59

鴻蒙HarmonyOS應用

2021-07-05 09:35:36

鴻蒙HarmonyOS應用

2021-07-08 16:16:59

鴻蒙HarmonyOS應用

2021-07-07 09:45:20

鴻蒙HarmonyOS應用

2021-07-12 09:50:39

鴻蒙HarmonyOS應用

2022-03-15 15:00:59

Hi3861Pin接口鴻蒙

2021-04-30 09:43:27

鴻蒙HarmonyOS應用

2020-10-16 09:50:37

Hi3861WiFi熱點

2023-05-26 16:07:14

Hi3861Wifi模塊

2020-11-03 11:39:22

wifi小車

2022-03-07 15:05:58

HTTPHi3861數據解析

2020-10-30 09:41:44

鴻蒙Hi3861WiFi小車

2020-10-14 09:41:02

Hi3861GPIO點燈

2021-07-01 14:21:58

鴻蒙HarmonyOS應用

2020-10-27 10:08:19

Hi3861ADC驅動

2020-11-18 11:56:06

鴻蒙Hi3861

2022-05-30 15:21:27

Hi3861TCP通信

2020-11-02 12:07:11

鴻蒙 GPIO
點贊
收藏

51CTO技術棧公眾號

2019中文字幕在线视频| 顶级黑人搡bbw搡bbbb搡| 成人性生交大片免费看网站| 9l国产精品久久久久麻豆| 欧美中文字幕第一页| www.xx日本| 国产成人福利av| 欧美亚洲国产一区在线观看网站 | 亚洲欧洲色图| 欧美精品亚洲二区| 精品少妇人妻av免费久久洗澡| 国产精品一区二区婷婷| 国产精品白丝av| 日本一区二区在线播放| 永久看片925tv| 免费看成人吃奶视频在线| 91精品欧美综合在线观看最新 | 欧美色视频一区二区三区在线观看| 一区二区日韩| 欧美日韩国产小视频| 毛片在线视频播放| v片在线观看| 国产无人区一区二区三区| 成人资源av| 国产一区二区女内射| 国产人成精品一区二区三| 免费97视频在线精品国自产拍| 玖玖爱在线观看| 成午夜精品一区二区三区软件| 欧美色涩在线第一页| 日本成年人网址| а√在线天堂官网| 一区二区三区中文在线| 亚洲图色在线| 18免费在线视频| 久久人人97超碰com| 成人在线免费观看一区| av免费在线不卡| 日本亚洲天堂网| 日本中文字幕久久看| 国产在线一区视频| 国精品一区二区| 欧美日本高清一区| 91嫩草|国产丨精品入口| 青青草国产免费一区二区下载| 日韩电影视频免费| 久久久久成人精品无码中文字幕| 日韩一区二区三区高清在线观看| 91精品欧美综合在线观看最新 | 在线观看日韩中文字幕| 精久久久久久| 国内精久久久久久久久久人| 久久久一二三区| 狠狠爱www人成狠狠爱综合网 | 日本а中文在线天堂| 亚洲大片精品永久免费| 69sex久久精品国产麻豆| 日本高清在线观看视频| 亚洲综合色区另类av| 欧美一级视频在线播放| av资源中文在线天堂| 午夜免费久久看| 精品国产一二三四区| 阿v视频在线观看| 大伊人狠狠躁夜夜躁av一区| 免费在线观看亚洲视频| 电影一区二区三| 91黄视频在线| 五月天中文字幕在线| www.久久久久爱免| 日韩一区二区不卡| 男人网站在线观看| 影视先锋久久| 中文字幕在线观看日韩| 成人免费视频网站入口::| 欧美一区综合| 97精品一区二区视频在线观看| 色一情一乱一伦| 美女视频一区二区三区| 亚洲一区二区三区sesese| 免费av网站观看| 久久精品亚洲精品国产欧美kt∨| 亚洲日本japanese丝袜| 二区三区四区高清视频在线观看| 亚洲高清在线精品| 日韩精品一区中文字幕| 2019中文亚洲字幕| 亚洲国产精品小视频| 神马久久久久久久久久久| 亚洲色图网站| 日韩免费在线视频| 性中国xxx极品hd| 久久五月婷婷丁香社区| 在线观看免费黄色片| 国产ktv在线视频| 91久久国产最好的精华液| 北条麻妃亚洲一区| 亚洲va久久| 欧美另类在线播放| 一级特黄免费视频| 懂色av一区二区三区蜜臀 | 第九色区av在线| 亚洲一区二区三区自拍| 日韩视频第二页| 亚洲日本va午夜在线电影| 亚洲欧美国产视频| 久久久久久久极品内射| 欧美aⅴ一区二区三区视频| 国产精品推荐精品| 哥也色在线视频| 在线观看视频91| 日本50路肥熟bbw| 欧美aaaa视频| 国产精品成人v| 日本精品999| 亚洲婷婷国产精品电影人久久| 成年人免费在线播放| youjizz亚洲| 日韩视频在线观看免费| 懂色av蜜臀av粉嫩av分享吧最新章节| 国产高清成人在线| 中文字幕精品一区日韩| 美女100%一区| 亚洲级视频在线观看免费1级| 97成人资源站| 另类小说一区二区三区| 日本一区美女| 桃色av一区二区| 亚洲国产精品久久久| 欧美成人手机视频| 国产一区三区三区| 一区二区三区在线视频111| 伊人久久视频| 日韩av综合网| 日韩精品一区二区av| 国产精品一区二区视频| 欧美区高清在线| 小早川怜子影音先锋在线观看| 日韩精品一区二区三区swag| 午夜国产福利一区二区| 极品销魂美女一区二区三区| 亚洲啪啪av| 国产91精品在线| 中文字幕在线看视频国产欧美在线看完整| 日本一级一片免费视频| av动漫一区二区| 精品无码国模私拍视频| 国产91精品入| 91精品国产91久久久久久吃药| 欧美熟妇另类久久久久久不卡| 亚洲一区二区欧美日韩| 亚洲av熟女高潮一区二区| 亚洲电影在线| 久久久久久久久四区三区| 精品极品在线| 亚洲欧美成人精品| 中文字幕在线播放av| 国产精品久久久久久久久免费桃花| 一区二区三区 日韩| 久久视频精品| 亚洲va久久久噜噜噜| 色呦呦网站在线观看| 亚洲а∨天堂久久精品9966| 国产又大又黑又粗免费视频| 99久久精品99国产精品| 免费日韩视频在线观看| 欧洲杯足球赛直播| 91免费福利视频| 毛片大全在线观看| 日韩电影大片中文字幕| 欧美激情一区二区三区免费观看 | 国产亚洲欧洲高清| 一级黄色片在线观看| 亚洲久本草在线中文字幕| 亚洲成a人片在线www| 亚洲一区二区毛片| 宅男av一区二区三区| 57pao国产一区二区| 日本在线精品视频| free性欧美hd另类精品| 日韩高清免费在线| 中文字幕永久在线视频| 一区二区三区久久久| 黄瓜视频污在线观看| 日韩成人免费电影| 99re6这里有精品热视频| 欧美日韩导航| 国产精品自拍偷拍| av在线加勒比| 自拍偷拍亚洲欧美| 欧美一级淫片aaaaaa| 欧美亚洲国产一区在线观看网站| 福利所第一导航| 国产片一区二区| 乱码一区二区三区| 欧美a一区二区| 黄色三级中文字幕| 日韩精品久久| 韩国一区二区三区美女美女秀 | 日本在线观看一区二区三区| 成人国产精品久久| 青青草一区二区| 羞羞视频在线观看不卡| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 日韩一区二区视频| 激情五月婷婷网| 夜夜嗨av一区二区三区| 国产综合精品久久久久成人av| 岛国一区二区在线观看| 成人综合久久网| 母乳一区在线观看| 国产精品一色哟哟| 久久久久蜜桃| 亚洲欧洲在线一区| 久久不见久久见国语| av激情久久| 国产成人免费视频网站视频社区| 日本精品视频在线| 免费成人在线电影| 色综合久久悠悠| 77导航福利在线| 夜夜躁日日躁狠狠久久88av| 日本中文字幕一区二区有码在线 | 欧美一区二区三区久久精品| 亚洲韩国在线| 国产日产精品一区二区三区四区的观看方式 | 99久久久无码国产精品免费| 欧美性欧美巨大黑白大战| yjizz国产| 精品日韩视频在线观看| 日韩乱码人妻无码中文字幕| 亚洲乱码国产乱码精品精的特点| 极品尤物一区二区| 国产日产亚洲精品系列| 高潮毛片无遮挡| 国产亚洲欧美激情| 日本精品在线观看视频| 国产亚洲精品bt天堂精选| 中文字幕高清视频| 2021中文字幕一区亚洲| 内射中出日韩无国产剧情| 99国产精品久久| 日本护士做爰视频| 97精品电影院| 欧美熟妇精品黑人巨大一二三区| 99视频精品全部免费在线| 国产精品手机在线观看| 99精品久久免费看蜜臀剧情介绍 | 欧美国产一区二区在线观看| 蜜乳av中文字幕| 亚洲国产精品精华液2区45| 国产一区二区三区精品在线| 国产人久久人人人人爽| 夫妇露脸对白88av| 国产精品白丝在线| 放荡的美妇在线播放| 亚洲一二三四区不卡| 国产午夜精品一区二区理论影院| 亚洲成精国产精品女| 男女啊啊啊视频| 欧洲一区二区av| 国产精品-色哟哟| 欧美一区二区三区男人的天堂| 性做久久久久久久久久| 亚洲精品久久久久久久久久久 | 免费91在线视频| bl视频在线免费观看| 欧日韩不卡在线视频| 成人福利一区二区| 97久久精品午夜一区二区| 精品欠久久久中文字幕加勒比| 美日韩精品免费| 日本一区二区在线看| 欧美与动交zoz0z| 1024日韩| 中文字幕永久视频| 国产高清无密码一区二区三区| 手机在线看片日韩| 国产精品色噜噜| 久久av高潮av无码av喷吹| 欧美日韩一区二区三区| 91在线公开视频| 精品国产乱码久久久久久久久 | 18成人在线视频| 国产女同在线观看| 欧美人妖巨大在线| 日本wwwxxxx| 中文日韩在线视频| heyzo中文字幕在线| 国产精品美女久久久免费| 亚洲一级大片| 日日噜噜噜噜夜夜爽亚洲精品| 亚洲综合中文| 亚洲狼人综合干| 国产酒店精品激情| 成年人免费观看视频网站| 一区二区三区在线免费| 中文字幕免费观看| 日韩精品一区二区三区在线 | 蜜桃久久久久| 中文字幕不卡每日更新1区2区| 国产精品日韩| 日本黄色一级网站| 国产精品免费丝袜| 日韩人妻精品中文字幕| 欧美成人激情免费网| av播放在线| 9.1国产丝袜在线观看| 精品国产一区二| 亚州欧美一区三区三区在线| 国产深夜精品| 佐佐木明希电影| 亚洲日本丝袜连裤袜办公室| 中国精品一区二区| 日韩毛片在线观看| 91福利区在线观看| 7777精品久久久大香线蕉小说| 欧美色图在线播放| 久章草在线视频| 久久综合久久鬼色| 日本三级欧美三级| 亚洲精品在线电影| 女囚岛在线观看| 5g国产欧美日韩视频| 亚洲成人精品| 午夜啪啪小视频| 国产精品嫩草99a| 中文字幕一区二区三区四区免费看 | 欧美亚洲动漫制服丝袜| 日韩三级电影网| 91精品国产高清久久久久久91| 丁香婷婷成人| 日韩在线观看a| 风间由美性色一区二区三区| 国产黄色的视频| 日韩午夜电影av| 99在线播放| www.久久爱.cn| 红桃视频国产一区| 在线xxxxx| 五月天视频一区| 亚洲三级中文字幕| 欧美亚洲另类在线| 国产精品亚洲二区| 蜜臀视频一区二区三区| 国产日韩成人精品| 伊人网视频在线| 日韩三级影视基地| 亚洲精品一区二区三区中文字幕 | 日韩欧美视频一区| 欧美78videosex性欧美| 国产精品果冻传媒潘| 99在线精品免费视频九九视| 成人手机在线免费视频| 日韩欧美国产免费播放| 国产一级片在线播放| 国产精品一区二区三区在线播放| 91麻豆精品国产91久久久平台| 三级黄色片免费看| 亚洲一二三专区| 欧美日韩国产亚洲沙发| 国产精品久久久久久五月尺| 久久影院一区| 师生出轨h灌满了1v1| 精品福利免费观看| 91官网在线| 99re在线国产| 国产精品毛片在线| 亚洲精品自拍视频在线观看| 日韩色在线观看| 日韩伦理在线一区| 亚洲成人自拍| 丁香婷婷综合激情五月色| 91丝袜一区二区三区| www.亚洲天堂| 国产96在线亚洲| 欧美伦理片在线观看| 亚洲综合成人网| 国产玉足榨精视频在线观看| 91精品视频免费观看| 最新亚洲视频| 国产又粗又猛又爽又黄的视频四季 | 国产精品久久久久久久久久久免费看| 99久久久久成人国产免费| 91av在线精品| 亚洲精品成人| 亚洲午夜久久久久久久久红桃| 91精品国产综合久久精品性色 | 欧美日韩国产欧| jizz中文字幕| 亚洲国产精品久久久久秋霞不卡| 亚洲精品国产嫩草在线观看| 少妇一晚三次一区二区三区| 久久久精品综合| www.av黄色| 国产精品影片在线观看| 亚洲久色影视| 国产1区2区3区4区| 国产一区二区三区在线看| 精品国内亚洲2022精品成人|