| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/chromeos/boot_times_loader.h" | 5 #include "chrome/browser/chromeos/boot_times_loader.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
| 11 #include "base/file_util.h" | 11 #include "base/file_util.h" |
| 12 #include "base/lazy_instance.h" | 12 #include "base/lazy_instance.h" |
| 13 #include "base/message_loop.h" | 13 #include "base/message_loop.h" |
| 14 #include "base/metrics/histogram.h" | 14 #include "base/metrics/histogram.h" |
| 15 #include "base/process_util.h" | 15 #include "base/process_util.h" |
| 16 #include "base/string_number_conversions.h" | 16 #include "base/string_number_conversions.h" |
| 17 #include "base/string_util.h" | 17 #include "base/string_util.h" |
| 18 #include "base/stringprintf.h" | 18 #include "base/stringprintf.h" |
| 19 #include "base/threading/thread.h" | 19 #include "base/threading/thread.h" |
| 20 #include "base/threading/thread_restrictions.h" | 20 #include "base/threading/thread_restrictions.h" |
| 21 #include "base/time.h" | 21 #include "base/time.h" |
| 22 #include "chrome/browser/browser_process.h" | 22 #include "chrome/browser/browser_process.h" |
| 23 #include "chrome/browser/chromeos/login/authentication_notification_details.h" | 23 #include "chrome/browser/chromeos/login/authentication_notification_details.h" |
| 24 #include "chrome/browser/chromeos/login/user_manager.h" | 24 #include "chrome/browser/chromeos/login/user_manager.h" |
| 25 #include "chrome/browser/chromeos/network_state_notifier.h" | 25 #include "chrome/browser/chromeos/network_state_notifier.h" |
| 26 #include "chrome/common/chrome_notification_types.h" |
| 26 #include "chrome/common/chrome_switches.h" | 27 #include "chrome/common/chrome_switches.h" |
| 27 #include "content/browser/browser_thread.h" | 28 #include "content/browser/browser_thread.h" |
| 28 #include "content/common/notification_service.h" | 29 #include "content/common/notification_service.h" |
| 29 | 30 |
| 30 namespace chromeos { | 31 namespace chromeos { |
| 31 | 32 |
| 32 #define FPL(value) FILE_PATH_LITERAL(value) | 33 #define FPL(value) FILE_PATH_LITERAL(value) |
| 33 | 34 |
| 34 // File uptime logs are located in. | 35 // File uptime logs are located in. |
| 35 static const FilePath::CharType kLogPath[] = FPL("/tmp"); | 36 static const FilePath::CharType kLogPath[] = FPL("/tmp"); |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 | 336 |
| 336 void BootTimesLoader::RecordChromeMainStats() { | 337 void BootTimesLoader::RecordChromeMainStats() { |
| 337 RecordStats(kChromeMain, chrome_main_stats_); | 338 RecordStats(kChromeMain, chrome_main_stats_); |
| 338 } | 339 } |
| 339 | 340 |
| 340 void BootTimesLoader::RecordLoginAttempted() { | 341 void BootTimesLoader::RecordLoginAttempted() { |
| 341 login_time_markers_.clear(); | 342 login_time_markers_.clear(); |
| 342 AddLoginTimeMarker("LoginStarted", false); | 343 AddLoginTimeMarker("LoginStarted", false); |
| 343 if (!have_registered_) { | 344 if (!have_registered_) { |
| 344 have_registered_ = true; | 345 have_registered_ = true; |
| 345 registrar_.Add(this, NotificationType::LOAD_START, | 346 registrar_.Add(this, content::NOTIFICATION_LOAD_START, |
| 346 NotificationService::AllSources()); | 347 NotificationService::AllSources()); |
| 347 registrar_.Add(this, NotificationType::LOGIN_AUTHENTICATION, | 348 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_AUTHENTICATION, |
| 348 NotificationService::AllSources()); | 349 NotificationService::AllSources()); |
| 349 } | 350 } |
| 350 } | 351 } |
| 351 | 352 |
| 352 void BootTimesLoader::AddLoginTimeMarker( | 353 void BootTimesLoader::AddLoginTimeMarker( |
| 353 const std::string& marker_name, bool send_to_uma) { | 354 const std::string& marker_name, bool send_to_uma) { |
| 354 login_time_markers_.push_back(TimeMarker(marker_name, send_to_uma)); | 355 login_time_markers_.push_back(TimeMarker(marker_name, send_to_uma)); |
| 355 } | 356 } |
| 356 | 357 |
| 357 void BootTimesLoader::AddLogoutTimeMarker( | 358 void BootTimesLoader::AddLogoutTimeMarker( |
| 358 const std::string& marker_name, bool send_to_uma) { | 359 const std::string& marker_name, bool send_to_uma) { |
| 359 logout_time_markers_.push_back(TimeMarker(marker_name, send_to_uma)); | 360 logout_time_markers_.push_back(TimeMarker(marker_name, send_to_uma)); |
| 360 } | 361 } |
| 361 | 362 |
| 362 void BootTimesLoader::Observe( | 363 void BootTimesLoader::Observe( |
| 363 NotificationType type, | 364 int type, |
| 364 const NotificationSource& source, | 365 const NotificationSource& source, |
| 365 const NotificationDetails& details) { | 366 const NotificationDetails& details) { |
| 366 if (type == NotificationType::LOGIN_AUTHENTICATION) { | 367 if (type == chrome::NOTIFICATION_LOGIN_AUTHENTICATION) { |
| 367 Details<AuthenticationNotificationDetails> auth_details(details); | 368 Details<AuthenticationNotificationDetails> auth_details(details); |
| 368 if (auth_details->success()) { | 369 if (auth_details->success()) { |
| 369 AddLoginTimeMarker("Authenticate", true); | 370 AddLoginTimeMarker("Authenticate", true); |
| 370 RecordCurrentStats(kLoginSuccess); | 371 RecordCurrentStats(kLoginSuccess); |
| 371 registrar_.Remove(this, NotificationType::LOGIN_AUTHENTICATION, | 372 registrar_.Remove(this, chrome::NOTIFICATION_LOGIN_AUTHENTICATION, |
| 372 NotificationService::AllSources()); | 373 NotificationService::AllSources()); |
| 373 } | 374 } |
| 374 } else if (type == NotificationType::LOAD_START) { | 375 } else if (type == content::NOTIFICATION_LOAD_START) { |
| 375 // Make sure it's not some page load initiated by OOBE/login screen. | 376 // Make sure it's not some page load initiated by OOBE/login screen. |
| 376 if (!UserManager::Get()->user_is_logged_in()) | 377 if (!UserManager::Get()->user_is_logged_in()) |
| 377 return; | 378 return; |
| 378 // Only log for first tab to render. Make sure this is only done once. | 379 // Only log for first tab to render. Make sure this is only done once. |
| 379 // If the network isn't connected we'll get a second LOAD_START once it is | 380 // If the network isn't connected we'll get a second LOAD_START once it is |
| 380 // and the page is reloaded. | 381 // and the page is reloaded. |
| 381 if (NetworkStateNotifier::GetInstance()->is_connected()) { | 382 if (NetworkStateNotifier::GetInstance()->is_connected()) { |
| 382 // Post difference between first tab and login success time. | 383 // Post difference between first tab and login success time. |
| 383 AddLoginTimeMarker("LoginDone", true); | 384 AddLoginTimeMarker("LoginDone", true); |
| 384 RecordCurrentStats(kChromeFirstRender); | 385 RecordCurrentStats(kChromeFirstRender); |
| 385 // Post chrome first render stat. | 386 // Post chrome first render stat. |
| 386 registrar_.Remove(this, NotificationType::LOAD_START, | 387 registrar_.Remove(this, content::NOTIFICATION_LOAD_START, |
| 387 NotificationService::AllSources()); | 388 NotificationService::AllSources()); |
| 388 // Don't swamp the FILE thread right away. | 389 // Don't swamp the FILE thread right away. |
| 389 BrowserThread::PostDelayedTask( | 390 BrowserThread::PostDelayedTask( |
| 390 BrowserThread::FILE, FROM_HERE, | 391 BrowserThread::FILE, FROM_HERE, |
| 391 // This doesn't compile without std::string(...), as | 392 // This doesn't compile without std::string(...), as |
| 392 // NewRunnableFunction doesn't accept arrays. | 393 // NewRunnableFunction doesn't accept arrays. |
| 393 NewRunnableFunction(WriteTimes, | 394 NewRunnableFunction(WriteTimes, |
| 394 std::string(kLoginTimes), | 395 std::string(kLoginTimes), |
| 395 std::string(kUmaLogin), | 396 std::string(kUmaLogin), |
| 396 std::string(kUmaLoginPrefix), | 397 std::string(kUmaLoginPrefix), |
| 397 login_time_markers_), | 398 login_time_markers_), |
| 398 kLoginTimeWriteDelayMs); | 399 kLoginTimeWriteDelayMs); |
| 399 have_registered_ = false; | 400 have_registered_ = false; |
| 400 } else { | 401 } else { |
| 401 AddLoginTimeMarker("LoginRenderNoNetwork", false); | 402 AddLoginTimeMarker("LoginRenderNoNetwork", false); |
| 402 } | 403 } |
| 403 } | 404 } |
| 404 } | 405 } |
| 405 | 406 |
| 406 } // namespace chromeos | 407 } // namespace chromeos |
| OLD | NEW |