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

Side by Side Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 498883002: Add/improve tracing in navigation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixes based on Charlie's review Created 6 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/frame_host/render_frame_host_manager.h" 5 #include "content/browser/frame_host/render_frame_host_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 entry.bindings() != NavigationEntryImpl::kInvalidBindings && 181 entry.bindings() != NavigationEntryImpl::kInvalidBindings &&
182 pending_web_ui_->GetBindings() != entry.bindings()) { 182 pending_web_ui_->GetBindings() != entry.bindings()) {
183 RecordAction( 183 RecordAction(
184 base::UserMetricsAction("ProcessSwapBindingsMismatch_RVHM")); 184 base::UserMetricsAction("ProcessSwapBindingsMismatch_RVHM"));
185 pending_web_ui_.reset(); 185 pending_web_ui_.reset();
186 } 186 }
187 } 187 }
188 188
189 RenderFrameHostImpl* RenderFrameHostManager::Navigate( 189 RenderFrameHostImpl* RenderFrameHostManager::Navigate(
190 const NavigationEntryImpl& entry) { 190 const NavigationEntryImpl& entry) {
191 TRACE_EVENT0("browser", "RenderFrameHostManager:Navigate"); 191 TRACE_EVENT1("navigation", "RenderFrameHostManager:Navigate",
192 "FrameTreeNode id", frame_tree_node_->frame_tree_node_id());
192 // Create a pending RenderFrameHost to use for the navigation. 193 // Create a pending RenderFrameHost to use for the navigation.
193 RenderFrameHostImpl* dest_render_frame_host = UpdateStateForNavigate(entry); 194 RenderFrameHostImpl* dest_render_frame_host = UpdateStateForNavigate(entry);
194 if (!dest_render_frame_host) 195 if (!dest_render_frame_host)
195 return NULL; // We weren't able to create a pending render frame host. 196 return NULL; // We weren't able to create a pending render frame host.
196 197
197 // If the current render_frame_host_ isn't live, we should create it so 198 // If the current render_frame_host_ isn't live, we should create it so
198 // that we don't show a sad tab while the dest_render_frame_host fetches 199 // that we don't show a sad tab while the dest_render_frame_host fetches
199 // its first page. (Bug 1145340) 200 // its first page. (Bug 1145340)
200 if (dest_render_frame_host != render_frame_host_ && 201 if (dest_render_frame_host != render_frame_host_ &&
201 !render_frame_host_->render_view_host()->IsRenderViewLive()) { 202 !render_frame_host_->render_view_host()->IsRenderViewLive()) {
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 // Now delete them. 492 // Now delete them.
492 while (!ids_to_remove.empty()) { 493 while (!ids_to_remove.empty()) {
493 delete proxy_hosts_[ids_to_remove.back()]; 494 delete proxy_hosts_[ids_to_remove.back()];
494 proxy_hosts_.erase(ids_to_remove.back()); 495 proxy_hosts_.erase(ids_to_remove.back());
495 ids_to_remove.pop_back(); 496 ids_to_remove.pop_back();
496 } 497 }
497 } 498 }
498 499
499 void RenderFrameHostManager::SwapOutOldPage( 500 void RenderFrameHostManager::SwapOutOldPage(
500 RenderFrameHostImpl* old_render_frame_host) { 501 RenderFrameHostImpl* old_render_frame_host) {
502 TRACE_EVENT1("navigation", "RenderFrameHostManager::SwapOutOldPage",
503 "FrameTreeNode id", frame_tree_node_->frame_tree_node_id());
501 // Should only see this while we have a pending renderer. 504 // Should only see this while we have a pending renderer.
502 CHECK(cross_navigation_pending_); 505 CHECK(cross_navigation_pending_);
503 506
504 // Tell the renderer to suppress any further modal dialogs so that we can swap 507 // Tell the renderer to suppress any further modal dialogs so that we can swap
505 // it out. This must be done before canceling any current dialog, in case 508 // it out. This must be done before canceling any current dialog, in case
506 // there is a loop creating additional dialogs. 509 // there is a loop creating additional dialogs.
507 // TODO(creis): Handle modal dialogs in subframe processes. 510 // TODO(creis): Handle modal dialogs in subframe processes.
508 old_render_frame_host->render_view_host()->SuppressDialogsUntilSwapOut(); 511 old_render_frame_host->render_view_host()->SuppressDialogsUntilSwapOut();
509 512
510 // Now close any modal dialogs that would prevent us from swapping out. This 513 // Now close any modal dialogs that would prevent us from swapping out. This
(...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 1217
1215 RenderFrameProxyHostMap::iterator iter = 1218 RenderFrameProxyHostMap::iterator iter =
1216 proxy_hosts_.find(site_instance->GetId()); 1219 proxy_hosts_.find(site_instance->GetId());
1217 if (iter != proxy_hosts_.end()) 1220 if (iter != proxy_hosts_.end())
1218 return iter->second->GetRoutingID(); 1221 return iter->second->GetRoutingID();
1219 1222
1220 return MSG_ROUTING_NONE; 1223 return MSG_ROUTING_NONE;
1221 } 1224 }
1222 1225
1223 void RenderFrameHostManager::CommitPending() { 1226 void RenderFrameHostManager::CommitPending() {
1227 TRACE_EVENT1("navigation", "RenderFrameHostManager::CommitPending",
1228 "FrameTreeNode id", frame_tree_node_->frame_tree_node_id());
1224 // First check whether we're going to want to focus the location bar after 1229 // First check whether we're going to want to focus the location bar after
1225 // this commit. We do this now because the navigation hasn't formally 1230 // this commit. We do this now because the navigation hasn't formally
1226 // committed yet, so if we've already cleared |pending_web_ui_| the call chain 1231 // committed yet, so if we've already cleared |pending_web_ui_| the call chain
1227 // this triggers won't be able to figure out what's going on. 1232 // this triggers won't be able to figure out what's going on.
1228 bool will_focus_location_bar = delegate_->FocusLocationBarByDefault(); 1233 bool will_focus_location_bar = delegate_->FocusLocationBarByDefault();
1229 1234
1230 // Next commit the Web UI, if any. Either replace |web_ui_| with 1235 // Next commit the Web UI, if any. Either replace |web_ui_| with
1231 // |pending_web_ui_|, or clear |web_ui_| if there is no pending WebUI, or 1236 // |pending_web_ui_|, or clear |web_ui_| if there is no pending WebUI, or
1232 // leave |web_ui_| as is if reusing it. 1237 // leave |web_ui_| as is if reusing it.
1233 DCHECK(!(pending_web_ui_.get() && pending_and_current_web_ui_.get())); 1238 DCHECK(!(pending_web_ui_.get() && pending_and_current_web_ui_.get()));
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1433 entry.GetURL(), 1438 entry.GetURL(),
1434 entry.site_instance(), 1439 entry.site_instance(),
1435 entry.GetTransitionType(), 1440 entry.GetTransitionType(),
1436 entry.restore_type() != NavigationEntryImpl::RESTORE_NONE, 1441 entry.restore_type() != NavigationEntryImpl::RESTORE_NONE,
1437 entry.IsViewSourceMode()); 1442 entry.IsViewSourceMode());
1438 1443
1439 const NavigationEntry* current_entry = 1444 const NavigationEntry* current_entry =
1440 delegate_->GetLastCommittedNavigationEntryForRenderManager(); 1445 delegate_->GetLastCommittedNavigationEntryForRenderManager();
1441 1446
1442 if (new_instance.get() != current_instance) { 1447 if (new_instance.get() != current_instance) {
1448 TRACE_EVENT_INSTANT2(
1449 "navigation",
1450 "RenderFrameHostManager::UpdateStateForNavigate:New SiteInstance",
1451 TRACE_EVENT_SCOPE_THREAD,
1452 "current_instance id", current_instance->GetId(),
1453 "new_instance id", new_instance->GetId());
1454
1443 // New SiteInstance: create a pending RFH to navigate. 1455 // New SiteInstance: create a pending RFH to navigate.
1444 DCHECK(!cross_navigation_pending_); 1456 DCHECK(!cross_navigation_pending_);
1445 1457
1446 // This will possibly create (set to NULL) a Web UI object for the pending 1458 // This will possibly create (set to NULL) a Web UI object for the pending
1447 // page. We'll use this later to give the page special access. This must 1459 // page. We'll use this later to give the page special access. This must
1448 // happen before the new renderer is created below so it will get bindings. 1460 // happen before the new renderer is created below so it will get bindings.
1449 // It must also happen after the above conditional call to CancelPending(), 1461 // It must also happen after the above conditional call to CancelPending(),
1450 // otherwise CancelPending may clear the pending_web_ui_ and the page will 1462 // otherwise CancelPending may clear the pending_web_ui_ and the page will
1451 // not have its bindings set appropriately. 1463 // not have its bindings set appropriately.
1452 SetPendingWebUI(entry); 1464 SetPendingWebUI(entry);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1546 if (entry.IsViewSourceMode()) { 1558 if (entry.IsViewSourceMode()) {
1547 render_frame_host_->render_view_host()->Send( 1559 render_frame_host_->render_view_host()->Send(
1548 new ViewMsg_EnableViewSourceMode( 1560 new ViewMsg_EnableViewSourceMode(
1549 render_frame_host_->render_view_host()->GetRoutingID())); 1561 render_frame_host_->render_view_host()->GetRoutingID()));
1550 } 1562 }
1551 1563
1552 return render_frame_host_.get(); 1564 return render_frame_host_.get();
1553 } 1565 }
1554 1566
1555 void RenderFrameHostManager::CancelPending() { 1567 void RenderFrameHostManager::CancelPending() {
1568 TRACE_EVENT1("navigation", "RenderFrameHostManager::CancelPending",
1569 "FrameTreeNode id", frame_tree_node_->frame_tree_node_id());
1556 scoped_ptr<RenderFrameHostImpl> pending_render_frame_host = 1570 scoped_ptr<RenderFrameHostImpl> pending_render_frame_host =
1557 pending_render_frame_host_.Pass(); 1571 pending_render_frame_host_.Pass();
1558 1572
1559 RenderViewDevToolsAgentHost::OnCancelPendingNavigation( 1573 RenderViewDevToolsAgentHost::OnCancelPendingNavigation(
1560 pending_render_frame_host->render_view_host(), 1574 pending_render_frame_host->render_view_host(),
1561 render_frame_host_->render_view_host()); 1575 render_frame_host_->render_view_host());
1562 1576
1563 // We no longer need to prevent the process from exiting. 1577 // We no longer need to prevent the process from exiting.
1564 pending_render_frame_host->GetProcess()->RemovePendingView(); 1578 pending_render_frame_host->GetProcess()->RemovePendingView();
1565 1579
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1658 void RenderFrameHostManager::DeleteRenderFrameProxyHost( 1672 void RenderFrameHostManager::DeleteRenderFrameProxyHost(
1659 SiteInstance* instance) { 1673 SiteInstance* instance) {
1660 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); 1674 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId());
1661 if (iter != proxy_hosts_.end()) { 1675 if (iter != proxy_hosts_.end()) {
1662 delete iter->second; 1676 delete iter->second;
1663 proxy_hosts_.erase(iter); 1677 proxy_hosts_.erase(iter);
1664 } 1678 }
1665 } 1679 }
1666 1680
1667 } // namespace content 1681 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.cc ('k') | content/browser/loader/cross_site_resource_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698