Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: content/browser/devtools/render_frame_devtools_agent_host.cc

Issue 2780373002: Use observer pattern instead of sniffing SwapCompositorFrame IPC (Closed)
Patch Set: Addressed comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/devtools/render_frame_devtools_agent_host.h" 5 #include "content/browser/devtools/render_frame_devtools_agent_host.h"
6 6
7 #include <tuple> 7 #include <tuple>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/guid.h" 10 #include "base/guid.h"
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 if (session()) { 853 if (session()) {
854 protocol::InspectorHandler::FromSession(session()) 854 protocol::InspectorHandler::FromSession(session())
855 ->TargetDetached("Render process gone."); 855 ->TargetDetached("Render process gone.");
856 } 856 }
857 break; 857 break;
858 } 858 }
859 DCHECK(CheckConsistency()); 859 DCHECK(CheckConsistency());
860 } 860 }
861 861
862 bool RenderFrameDevToolsAgentHost::OnMessageReceived( 862 bool RenderFrameDevToolsAgentHost::OnMessageReceived(
863 const IPC::Message& message) {
864 if (!current_)
865 return false;
866 if (message.type() == ViewHostMsg_SwapCompositorFrame::ID)
867 OnSwapCompositorFrame(message);
868 return false;
869 }
870
871 bool RenderFrameDevToolsAgentHost::OnMessageReceived(
872 const IPC::Message& message, 863 const IPC::Message& message,
873 RenderFrameHost* render_frame_host) { 864 RenderFrameHost* render_frame_host) {
874 bool is_current = current_ && current_->host() == render_frame_host; 865 bool is_current = current_ && current_->host() == render_frame_host;
875 bool is_pending = pending_ && pending_->host() == render_frame_host; 866 bool is_pending = pending_ && pending_->host() == render_frame_host;
876 if (!is_current && !is_pending) 867 if (!is_current && !is_pending)
877 return false; 868 return false;
878 if (!IsAttached()) 869 if (!IsAttached())
879 return false; 870 return false;
880 bool handled = true; 871 bool handled = true;
881 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(RenderFrameDevToolsAgentHost, message, 872 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(RenderFrameDevToolsAgentHost, message,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 void RenderFrameDevToolsAgentHost::WasShown() { 908 void RenderFrameDevToolsAgentHost::WasShown() {
918 CreatePowerSaveBlocker(); 909 CreatePowerSaveBlocker();
919 } 910 }
920 911
921 void RenderFrameDevToolsAgentHost::WasHidden() { 912 void RenderFrameDevToolsAgentHost::WasHidden() {
922 #if defined(OS_ANDROID) 913 #if defined(OS_ANDROID)
923 power_save_blocker_.reset(); 914 power_save_blocker_.reset();
924 #endif 915 #endif
925 } 916 }
926 917
918 void RenderFrameDevToolsAgentHost::DidReceiveCompositorFrame() {
919 if (!session())
920 return;
921 const cc::CompositorFrameMetadata& metadata =
922 RenderWidgetHostImpl::From(
923 web_contents()->GetRenderViewHost()->GetWidget())
924 ->last_frame_metadata();
925 protocol::PageHandler* page_handler =
926 protocol::PageHandler::FromSession(session());
927 if (page_handler)
928 page_handler->OnSwapCompositorFrame(metadata.Clone());
929 protocol::InputHandler::FromSession(session())->OnSwapCompositorFrame(
930 metadata);
931 protocol::TracingHandler* tracing_handler =
932 protocol::TracingHandler::FromSession(session());
933 if (frame_trace_recorder_ && tracing_handler->did_initiate_recording()) {
934 frame_trace_recorder_->OnSwapCompositorFrame(
935 current_ ? current_->host() : nullptr, metadata);
936 }
937 }
938
927 void RenderFrameDevToolsAgentHost:: 939 void RenderFrameDevToolsAgentHost::
928 DispatchBufferedProtocolMessagesIfNecessary() { 940 DispatchBufferedProtocolMessagesIfNecessary() {
929 if (navigating_handles_.empty() && 941 if (navigating_handles_.empty() &&
930 in_navigation_protocol_message_buffer_.size()) { 942 in_navigation_protocol_message_buffer_.size()) {
931 DCHECK(current_); 943 DCHECK(current_);
932 for (const auto& pair : in_navigation_protocol_message_buffer_) { 944 for (const auto& pair : in_navigation_protocol_message_buffer_) {
933 current_->DispatchProtocolMessage( 945 current_->DispatchProtocolMessage(
934 pair.second.session_id, pair.first, pair.second.method, 946 pair.second.session_id, pair.first, pair.second.method,
935 pair.second.message); 947 pair.second.message);
936 } 948 }
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 } 1090 }
1079 return false; 1091 return false;
1080 } 1092 }
1081 1093
1082 base::TimeTicks RenderFrameDevToolsAgentHost::GetLastActivityTime() { 1094 base::TimeTicks RenderFrameDevToolsAgentHost::GetLastActivityTime() {
1083 if (content::WebContents* contents = web_contents()) 1095 if (content::WebContents* contents = web_contents())
1084 return contents->GetLastActiveTime(); 1096 return contents->GetLastActiveTime();
1085 return base::TimeTicks(); 1097 return base::TimeTicks();
1086 } 1098 }
1087 1099
1088 void RenderFrameDevToolsAgentHost::OnSwapCompositorFrame(
1089 const IPC::Message& message) {
1090 ViewHostMsg_SwapCompositorFrame::Param param;
1091 if (!ViewHostMsg_SwapCompositorFrame::Read(&message, &param))
1092 return;
1093 if (!session())
1094 return;
1095 protocol::PageHandler* page_handler =
1096 protocol::PageHandler::FromSession(session());
1097 if (page_handler) {
1098 page_handler->OnSwapCompositorFrame(std::move(std::get<2>(param).metadata));
1099 }
1100 protocol::InputHandler::FromSession(session())->OnSwapCompositorFrame(
1101 std::get<2>(param).metadata);
1102 protocol::TracingHandler* tracing_handler =
1103 protocol::TracingHandler::FromSession(session());
1104 if (frame_trace_recorder_ && tracing_handler->did_initiate_recording()) {
1105 frame_trace_recorder_->OnSwapCompositorFrame(
1106 current_ ? current_->host() : nullptr, std::get<2>(param).metadata);
1107 }
1108 }
1109
1110 void RenderFrameDevToolsAgentHost::SignalSynchronousSwapCompositorFrame( 1100 void RenderFrameDevToolsAgentHost::SignalSynchronousSwapCompositorFrame(
1111 RenderFrameHost* frame_host, 1101 RenderFrameHost* frame_host,
1112 cc::CompositorFrameMetadata frame_metadata) { 1102 cc::CompositorFrameMetadata frame_metadata) {
1113 scoped_refptr<RenderFrameDevToolsAgentHost> dtah(FindAgentHost(frame_host)); 1103 scoped_refptr<RenderFrameDevToolsAgentHost> dtah(FindAgentHost(frame_host));
1114 if (dtah) { 1104 if (dtah) {
1115 // Unblock the compositor. 1105 // Unblock the compositor.
1116 BrowserThread::PostTask( 1106 BrowserThread::PostTask(
1117 BrowserThread::UI, FROM_HERE, 1107 BrowserThread::UI, FROM_HERE,
1118 base::Bind( 1108 base::Bind(
1119 &RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame, 1109 &RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 RenderFrameHost* host) { 1167 RenderFrameHost* host) {
1178 return (current_ && current_->host() == host) || 1168 return (current_ && current_->host() == host) ||
1179 (pending_ && pending_->host() == host); 1169 (pending_ && pending_->host() == host);
1180 } 1170 }
1181 1171
1182 bool RenderFrameDevToolsAgentHost::IsChildFrame() { 1172 bool RenderFrameDevToolsAgentHost::IsChildFrame() {
1183 return current_ && current_->host()->GetParent(); 1173 return current_ && current_->host()->GetParent();
1184 } 1174 }
1185 1175
1186 } // namespace content 1176 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698