欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

谷歌瀏覽器的源碼分析(31)

系統 1915 0
?

上一次說到通過管道把接收到的 HTTP 數據通知另一個線程處理,它不是直接發送數據過去,而是把數據在共享內存里的句柄發送過去,達到高效通訊的目的。下面就來分析資源處理進程里,接收到這個消息之后,做些什么處理。這個消息的處理代碼如下:

?

#001 ? void ResourceDispatcher::OnReceivedData(int request_id,

#002 ????????????????????????????????????????? SharedMemoryHandle shm_handle,

#003 ????????????????????????????????????????? int data_len) {

#004 ??? // Acknowlegde the reception of this data.

回應這個消息,說已經收到數據了。

#005 ??? IPC::Message::Sender* sender = message_sender();

#006 ??? if (sender)

#007 ????? sender->Send(

#008 ????????? new ViewHostMsg_DataReceived_ACK(MSG_ROUTING_NONE, request_id));

#009 ?

#010 ??? DCHECK((shm_handle && data_len > 0) || (!shm_handle && !data_len));

?

打開共享內存文件,使用只讀的方式。

#011 ??? SharedMemory shared_mem(shm_handle, true); ? // read only

#012 ?

?

查找到請求下載的資源的請求標識號。

#013 ??? PendingRequestList::iterator it = pending_requests_.find(request_id);

?

如果沒有找到相應的請求標識號,就直接返回,不用處理這些數據。

#014 ??? if (it == pending_requests_.end()) {

#015 ????? // this might happen for kill()ed requests on the webkit end, so perhaps

#016 ????? // it shouldn't be a warning...

#017 ????? DLOG(WARNING) << "Got data for a nonexistant or finished request";

#018 ????? return;

#019 ??? }

#020 ?

?

這里找到相應的請求標識號,就把數據放到請求信息里處理。

#021 ??? PendingRequestInfo& request_info = it->second;

#022 ?

#023 ??? if (data_len > 0 && shared_mem.Map(data_len)) {

#024 ????? RESOURCE_LOG("Dispatching " << data_len << " bytes for " <<

#025 ?????????????????? request_info.peer->GetURLForDebugging());

#026 ????? const char* data = static_cast<char*>(shared_mem.memory());

#027 ????? request_info.peer->OnReceivedData(data, data_len);

#028 ??? }

#029 ? }

?

上面這個函數實現接收到 HTTP 數據,并且把數據放到請求的緩沖區里,但它沒有知道什么時候接收數據完成,顯然有另外一個消息來做這些的工作,就是下面類 ResourceDispatcherHost 的函數:

?

#001 ??? bool OnResponseCompleted(int request_id, const URLRequestStatus& status) {

#002 ????? receiver_->Send(new ViewMsg_Resource_RequestComplete(

#003 ????????? routing_id_, request_id, status));

#004 ?

#005 ????? // If we still have a read buffer, then see about caching it for later...

#006 ????? if (spare_read_buffer_) {

#007 ??????? read_buffer_.reset();

#008 ????? } else if (read_buffer_.get() && read_buffer_->memory()) {

#009 ??????? spare_read_buffer_ = read_buffer_.release();

#010 ????? }

#011 ????? return true;

#012 ??? }

?

這個函數里通過發送消息 ViewMsg_Resource_RequestComplete 來通知資源進程已經把網絡的數據接收完成了,可以進入下一步處理。然后在資源進程里就會處理這個消息,下一次再來分析這方面的代碼。

谷歌瀏覽器的源碼分析(31)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: av av片在线看| 亚洲国产精品日韩高清秒播 | 国产自产拍精品视频免费看 | 国产精品国偷自产在线 | 看黄色毛片 | 久久AV亚洲精品一区无码 | 亚洲影视在线观看 | 网友自拍视频在线 | 在线观看91精品国产入口 | 精品亚洲国产成av人片传媒 | 久久精品无码一区二区日韩av | 一区二区三区国模大胆 | 亚洲人成免费网站 | 国产精品主播视频 | 天天爆操 | 两性午夜视频 | 6080yy精品一区二区三区 | 国产视频aaa | 国产在线激情视频 | 毛片免费大全短视频 | 亚洲视频一区二区 | 成人人观看的免费毛片 | 天天草视频| 亚洲精品一区二区网址 | 亚欧乱色一区二区三区 | 日韩字幕无线乱码 | 男女配种超爽免费视频 | 美女操网站 | 欧美综合精品 | 精品欧美日韩 | 91看片淫黄大片欧美看国产片 | 日韩不卡一区 | 色综合久久中文色婷婷 | 欧日一级片 | 国产成人免费高清激情明星 | 久久精品国产线看观看亚洲 | 偷拍亚洲制服另类无码专区 | 一级做a爰片久久毛片人呢 达达兔午夜起神影院在线观看麻烦 | 一区二区三区日韩视频在线观看 | 成人一区二区三区在线 | 成人国产免费观看 |