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

Side by Side Diff: chrome/browser/sessions/session_restore.cc

Issue 1136523004: [Sessions] Add detailed logging of SessionRestore events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « no previous file | chrome/browser/sessions/tab_loader.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "chrome/browser/sessions/session_restore.h" 5 #include "chrome/browser/sessions/session_restore.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <list> 8 #include <list>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 30 matching lines...) Expand all
41 #include "chrome/common/url_constants.h" 41 #include "chrome/common/url_constants.h"
42 #include "components/sessions/session_types.h" 42 #include "components/sessions/session_types.h"
43 #include "content/public/browser/child_process_security_policy.h" 43 #include "content/public/browser/child_process_security_policy.h"
44 #include "content/public/browser/dom_storage_context.h" 44 #include "content/public/browser/dom_storage_context.h"
45 #include "content/public/browser/navigation_controller.h" 45 #include "content/public/browser/navigation_controller.h"
46 #include "content/public/browser/notification_registrar.h" 46 #include "content/public/browser/notification_registrar.h"
47 #include "content/public/browser/notification_service.h" 47 #include "content/public/browser/notification_service.h"
48 #include "content/public/browser/render_process_host.h" 48 #include "content/public/browser/render_process_host.h"
49 #include "content/public/browser/render_widget_host.h" 49 #include "content/public/browser/render_widget_host.h"
50 #include "content/public/browser/render_widget_host_view.h" 50 #include "content/public/browser/render_widget_host_view.h"
51 #include "content/public/browser/session_restore_uma.h"
51 #include "content/public/browser/session_storage_namespace.h" 52 #include "content/public/browser/session_storage_namespace.h"
52 #include "content/public/browser/storage_partition.h" 53 #include "content/public/browser/storage_partition.h"
53 #include "content/public/browser/web_contents.h" 54 #include "content/public/browser/web_contents.h"
54 #include "content/public/common/page_state.h" 55 #include "content/public/common/page_state.h"
55 #include "extensions/browser/extension_registry.h" 56 #include "extensions/browser/extension_registry.h"
56 #include "extensions/common/extension_set.h" 57 #include "extensions/common/extension_set.h"
57 58
58 #if defined(OS_CHROMEOS) 59 #if defined(OS_CHROMEOS)
59 #include "chrome/browser/chromeos/boot_times_recorder.h" 60 #include "chrome/browser/chromeos/boot_times_recorder.h"
60 #endif 61 #endif
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 std::max(0, std::min((*i)->selected_tab_index, 175 std::max(0, std::min((*i)->selected_tab_index,
175 static_cast<int>((*i)->tabs.size()) - 1)); 176 static_cast<int>((*i)->tabs.size()) - 1));
176 RestoreTabsToBrowser(*(*i), browser, initial_tab_count, 177 RestoreTabsToBrowser(*(*i), browser, initial_tab_count,
177 selected_tab_index, &created_contents); 178 selected_tab_index, &created_contents);
178 NotifySessionServiceOfRestoredTabs(browser, initial_tab_count); 179 NotifySessionServiceOfRestoredTabs(browser, initial_tab_count);
179 } 180 }
180 181
181 // Always create in a new window. 182 // Always create in a new window.
182 FinishedTabCreation(true, true, created_contents); 183 FinishedTabCreation(true, true, created_contents);
183 184
185 // Record the number of tabs associated with this session restore.
186 UMA_HISTOGRAM_COUNTS_100(content::kSessionRestoreTabCount,
sky 2015/05/07 20:23:45 Please try to keep all stats collection in Session
187 created_contents.size());
188
184 on_session_restored_callbacks_->Notify( 189 on_session_restored_callbacks_->Notify(
185 static_cast<int>(created_contents.size())); 190 static_cast<int>(created_contents.size()));
186 191
187 return browsers; 192 return browsers;
188 } 193 }
189 194
190 // Restore a single tab from a foreign session. 195 // Restore a single tab from a foreign session.
191 // Opens in the tab in the last active browser, unless disposition is 196 // Opens in the tab in the last active browser, unless disposition is
192 // NEW_WINDOW, in which case the tab will be opened in a new browser. Returns 197 // NEW_WINDOW, in which case the tab will be opened in a new browser. Returns
193 // the WebContents of the restored tab. 198 // the WebContents of the restored tab.
(...skipping 23 matching lines...) Expand all
217 } else { 222 } else {
218 int tab_index = 223 int tab_index =
219 use_new_window ? 0 : browser->tab_strip_model()->active_index() + 1; 224 use_new_window ? 0 : browser->tab_strip_model()->active_index() + 1;
220 web_contents = chrome::AddRestoredTab( 225 web_contents = chrome::AddRestoredTab(
221 browser, tab.navigations, tab_index, selected_index, 226 browser, tab.navigations, tab_index, selected_index,
222 tab.extension_app_id, 227 tab.extension_app_id,
223 disposition == NEW_FOREGROUND_TAB, // selected 228 disposition == NEW_FOREGROUND_TAB, // selected
224 tab.pinned, true, nullptr, tab.user_agent_override); 229 tab.pinned, true, nullptr, tab.user_agent_override);
225 // Start loading the tab immediately. 230 // Start loading the tab immediately.
226 web_contents->GetController().LoadIfNecessary(); 231 web_contents->GetController().LoadIfNecessary();
232 UMA_HISTOGRAM_ENUMERATION(
233 content::kSessionRestoreTabActions,
234 content::kSessionRestoreTabActionsUma_ForegroundTabLoaded,
235 content::kSessionRestoreTabActionsUma_Max);
227 } 236 }
228 237
229 if (use_new_window) { 238 if (use_new_window) {
230 browser->tab_strip_model()->ActivateTabAt(0, true); 239 browser->tab_strip_model()->ActivateTabAt(0, true);
231 browser->window()->Show(); 240 browser->window()->Show();
232 } 241 }
233 NotifySessionServiceOfRestoredTabs(browser, 242 NotifySessionServiceOfRestoredTabs(browser,
234 browser->tab_strip_model()->count()); 243 browser->tab_strip_model()->count());
235 244
236 // Since FinishedTabCreation() is not called here, |this| will leak if we 245 // Since FinishedTabCreation() is not called here, |this| will leak if we
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 WebContents* contents = RestoreTab(tab, i, browser, is_selected_tab); 524 WebContents* contents = RestoreTab(tab, i, browser, is_selected_tab);
516 525
517 // RestoreTab can return nullptr if |tab| doesn't have valid data. 526 // RestoreTab can return nullptr if |tab| doesn't have valid data.
518 if (!contents) 527 if (!contents)
519 continue; 528 continue;
520 529
521 RestoredTab restored_tab; 530 RestoredTab restored_tab;
522 restored_tab.contents = contents; 531 restored_tab.contents = contents;
523 restored_tab.is_active = is_selected_tab; 532 restored_tab.is_active = is_selected_tab;
524 created_contents->push_back(restored_tab); 533 created_contents->push_back(restored_tab);
534 UMA_HISTOGRAM_ENUMERATION(
535 content::kSessionRestoreTabActions,
536 content::kSessionRestoreTabActionsUma_TabCreated,
537 content::kSessionRestoreTabActionsUma_Max);
525 538
526 // If this isn't the selected tab, there's nothing else to do. 539 // If this isn't the selected tab, there's nothing else to do.
527 if (!is_selected_tab) 540 if (!is_selected_tab)
528 continue; 541 continue;
529 542
530 ShowBrowser(browser, browser->tab_strip_model()->GetIndexOfWebContents( 543 ShowBrowser(browser, browser->tab_strip_model()->GetIndexOfWebContents(
531 contents)); 544 contents));
532 // TODO(sky): remove. For debugging 368236. 545 // TODO(sky): remove. For debugging 368236.
533 CHECK_EQ(browser->tab_strip_model()->GetActiveWebContents(), contents); 546 CHECK_EQ(browser->tab_strip_model()->GetActiveWebContents(), contents);
534 } 547 }
535 } else { 548 } else {
536 // If the browser already has tabs, we want to restore the new ones after 549 // If the browser already has tabs, we want to restore the new ones after
537 // the existing ones. E.g. this happens in Win8 Metro where we merge 550 // the existing ones. E.g. this happens in Win8 Metro where we merge
538 // windows or when launching a hosted app from the app launcher. 551 // windows or when launching a hosted app from the app launcher.
539 int tab_index_offset = initial_tab_count; 552 int tab_index_offset = initial_tab_count;
540 for (int i = 0; i < static_cast<int>(window.tabs.size()); ++i) { 553 for (int i = 0; i < static_cast<int>(window.tabs.size()); ++i) {
541 const sessions::SessionTab& tab = *(window.tabs[i]); 554 const sessions::SessionTab& tab = *(window.tabs[i]);
542 // Always schedule loads as we will not be calling ShowBrowser(). 555 // Always schedule loads as we will not be calling ShowBrowser().
543 WebContents* contents = 556 WebContents* contents =
544 RestoreTab(tab, tab_index_offset + i, browser, false); 557 RestoreTab(tab, tab_index_offset + i, browser, false);
545 if (contents) { 558 if (contents) {
546 RestoredTab restored_tab; 559 RestoredTab restored_tab;
547 restored_tab.contents = contents; 560 restored_tab.contents = contents;
548 restored_tab.is_active = false; 561 restored_tab.is_active = false;
549 created_contents->push_back(restored_tab); 562 created_contents->push_back(restored_tab);
563 UMA_HISTOGRAM_ENUMERATION(
564 content::kSessionRestoreTabActions,
565 content::kSessionRestoreTabActionsUma_TabCreated,
566 content::kSessionRestoreTabActionsUma_Max);
550 } 567 }
551 } 568 }
552 } 569 }
553 } 570 }
554 571
555 // |tab_index| is ignored for pinned tabs which will always be pushed behind 572 // |tab_index| is ignored for pinned tabs which will always be pushed behind
556 // the last existing pinned tab. 573 // the last existing pinned tab.
557 // |tab_loader_| will schedule this tab for loading if |is_selected_tab| is 574 // |tab_loader_| will schedule this tab for loading if |is_selected_tab| is
558 // false. 575 // false.
559 WebContents* RestoreTab(const sessions::SessionTab& tab, 576 WebContents* RestoreTab(const sessions::SessionTab& tab,
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 Browser* SessionRestore::RestoreSession( 731 Browser* SessionRestore::RestoreSession(
715 Profile* profile, 732 Profile* profile,
716 Browser* browser, 733 Browser* browser,
717 chrome::HostDesktopType host_desktop_type, 734 chrome::HostDesktopType host_desktop_type,
718 uint32 behavior, 735 uint32 behavior,
719 const std::vector<GURL>& urls_to_open) { 736 const std::vector<GURL>& urls_to_open) {
720 #if defined(OS_CHROMEOS) 737 #if defined(OS_CHROMEOS)
721 chromeos::BootTimesRecorder::Get()->AddLoginTimeMarker( 738 chromeos::BootTimesRecorder::Get()->AddLoginTimeMarker(
722 "SessionRestore-Start", false); 739 "SessionRestore-Start", false);
723 #endif 740 #endif
741 UMA_HISTOGRAM_ENUMERATION(
742 content::kSessionRestoreActions,
743 content::kSessionRestoreActionsUma_Initiated,
744 content::kSessionRestoreActionsUma_Max);
724 DCHECK(profile); 745 DCHECK(profile);
725 // Always restore from the original profile (incognito profiles have no 746 // Always restore from the original profile (incognito profiles have no
726 // session service). 747 // session service).
727 profile = profile->GetOriginalProfile(); 748 profile = profile->GetOriginalProfile();
728 if (!SessionServiceFactory::GetForProfile(profile)) { 749 if (!SessionServiceFactory::GetForProfile(profile)) {
729 NOTREACHED(); 750 NOTREACHED();
730 return nullptr; 751 return nullptr;
731 } 752 }
732 profile->set_restored_last_session(true); 753 profile->set_restored_last_session(true);
733 // SessionRestoreImpl takes care of deleting itself when done. 754 // SessionRestoreImpl takes care of deleting itself when done.
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 // static 835 // static
815 SessionRestore::CallbackSubscription 836 SessionRestore::CallbackSubscription
816 SessionRestore::RegisterOnSessionRestoredCallback( 837 SessionRestore::RegisterOnSessionRestoredCallback(
817 const base::Callback<void(int)>& callback) { 838 const base::Callback<void(int)>& callback) {
818 return on_session_restored_callbacks()->Add(callback); 839 return on_session_restored_callbacks()->Add(callback);
819 } 840 }
820 841
821 // static 842 // static
822 base::CallbackList<void(int)>* 843 base::CallbackList<void(int)>*
823 SessionRestore::on_session_restored_callbacks_ = nullptr; 844 SessionRestore::on_session_restored_callbacks_ = nullptr;
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/sessions/tab_loader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698