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

Side by Side Diff: chrome/browser/performance_monitor/performance_monitor_browsertest.cc

Issue 10837003: CPM Refactor and Cleanup (Closed) Base URL: http://git.chromium.org/chromium/src.git@dc_startup_times
Patch Set: Merged with latest master Created 8 years, 4 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 "chrome/test/base/in_process_browser_test.h"
6
7 #include "base/command_line.h" 5 #include "base/command_line.h"
8 #include "base/file_path.h" 6 #include "base/file_path.h"
9 #include "base/logging.h" 7 #include "base/logging.h"
10 #include "base/path_service.h" 8 #include "base/path_service.h"
11 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
12 #include "base/threading/sequenced_worker_pool.h" 10 #include "base/threading/sequenced_worker_pool.h"
13 #include "chrome/browser/browser_process.h" 11 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/extensions/extension_browsertest.h" 12 #include "chrome/browser/extensions/extension_browsertest.h"
15 #include "chrome/browser/extensions/extension_service.h" 13 #include "chrome/browser/extensions/extension_service.h"
16 #include "chrome/browser/extensions/unpacked_installer.h"
17 #include "chrome/browser/performance_monitor/constants.h" 14 #include "chrome/browser/performance_monitor/constants.h"
18 #include "chrome/browser/performance_monitor/database.h" 15 #include "chrome/browser/performance_monitor/database.h"
19 #include "chrome/browser/performance_monitor/performance_monitor.h" 16 #include "chrome/browser/performance_monitor/performance_monitor.h"
20 #include "chrome/browser/prefs/session_startup_pref.h" 17 #include "chrome/browser/prefs/session_startup_pref.h"
21 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
22 #include "chrome/browser/profiles/profile_manager.h" 19 #include "chrome/browser/profiles/profile_manager.h"
23 #include "chrome/browser/sessions/session_restore.h"
24 #include "chrome/browser/sessions/session_service.h" 20 #include "chrome/browser/sessions/session_service.h"
21 #include "chrome/browser/sessions/session_service_factory.h"
25 #include "chrome/browser/sessions/session_service_test_helper.h" 22 #include "chrome/browser/sessions/session_service_test_helper.h"
26 #include "chrome/browser/sessions/session_service_factory.h"
27 #include "chrome/browser/ui/browser.h" 23 #include "chrome/browser/ui/browser.h"
28 #include "chrome/browser/ui/browser_commands.h" 24 #include "chrome/browser/ui/browser_commands.h"
29 #include "chrome/browser/ui/browser_navigator.h" 25 #include "chrome/browser/ui/browser_navigator.h"
30 #include "chrome/browser/ui/browser_tabstrip.h" 26 #include "chrome/browser/ui/browser_tabstrip.h"
31 #include "chrome/browser/ui/browser_window.h" 27 #include "chrome/browser/ui/browser_window.h"
32 #include "chrome/browser/ui/browser_tabstrip.h"
33 #include "chrome/browser/ui/tabs/tab_strip_model.h"
34 #include "chrome/common/chrome_constants.h" 28 #include "chrome/common/chrome_constants.h"
35 #include "chrome/common/chrome_notification_types.h" 29 #include "chrome/common/chrome_notification_types.h"
36 #include "chrome/common/chrome_paths.h" 30 #include "chrome/common/chrome_paths.h"
37 #include "chrome/common/chrome_switches.h" 31 #include "chrome/common/chrome_switches.h"
38 #include "chrome/common/chrome_version_info.h" 32 #include "chrome/common/chrome_version_info.h"
39 #include "chrome/common/extensions/extension.h" 33 #include "chrome/common/extensions/extension.h"
40 #include "chrome/common/url_constants.h" 34 #include "chrome/common/url_constants.h"
41 #include "chrome/test/base/ui_test_utils.h" 35 #include "chrome/test/base/ui_test_utils.h"
42 #include "content/public/browser/notification_registrar.h" 36 #include "content/public/browser/notification_registrar.h"
43 #include "content/public/browser/notification_service.h" 37 #include "content/public/browser/notification_service.h"
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 Database::kDatabaseSequenceToken, 239 Database::kDatabaseSequenceToken,
246 FROM_HERE, 240 FROM_HERE,
247 base::Bind(base::IgnoreResult(&Database::AddStateValue), 241 base::Bind(base::IgnoreResult(&Database::AddStateValue),
248 base::Unretained(performance_monitor()->database()), 242 base::Unretained(performance_monitor()->database()),
249 key, 243 key,
250 value)); 244 value));
251 245
252 content::BrowserThread::GetBlockingPool()->FlushForTesting(); 246 content::BrowserThread::GetBlockingPool()->FlushForTesting();
253 } 247 }
254 248
249 // A handle for PerformanceMonitor::CheckForVersionUpdateOnBackgroundThread();
250 // we mock synchronicity with FlushForTesting().
251 void CheckForVersionUpdate() {
252 content::BrowserThread::PostBlockingPoolSequencedTask(
253 Database::kDatabaseSequenceToken,
254 FROM_HERE,
255 base::Bind(&PerformanceMonitor::CheckForVersionUpdateOnBackgroundThread,
256 base::Unretained(performance_monitor())));
257
258 content::BrowserThread::GetBlockingPool()->FlushForTesting();
259 }
260
255 PerformanceMonitor* performance_monitor() const { 261 PerformanceMonitor* performance_monitor() const {
256 return performance_monitor_; 262 return performance_monitor_;
257 } 263 }
258 264
259 protected: 265 protected:
260 ScopedTempDir db_dir_; 266 ScopedTempDir db_dir_;
261 PerformanceMonitor* performance_monitor_; 267 PerformanceMonitor* performance_monitor_;
262 }; 268 };
263 269
264 class PerformanceMonitorUncleanExitBrowserTest 270 class PerformanceMonitorUncleanExitBrowserTest
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 .AppendASCII("extensions") 406 .AppendASCII("extensions")
401 .AppendASCII("simple_extension_v1"); 407 .AppendASCII("simple_extension_v1");
402 const Extension* extension = LoadExtension(extension_path); 408 const Extension* extension = LoadExtension(extension_path);
403 409
404 DisableExtension(extension->id()); 410 DisableExtension(extension->id());
405 EnableExtension(extension->id()); 411 EnableExtension(extension->id());
406 412
407 std::vector<ExtensionBasicInfo> extension_infos; 413 std::vector<ExtensionBasicInfo> extension_infos;
408 // There will be three events in all, each pertaining to the same extension: 414 // There will be three events in all, each pertaining to the same extension:
409 // Extension Install 415 // Extension Install
410 // Extension Unload 416 // Extension Disable
411 // Extension Enable 417 // Extension Enable
412 for (int i = 0; i < kNumEvents; ++i) 418 for (int i = 0; i < kNumEvents; ++i)
413 extension_infos.push_back(ExtensionBasicInfo(extension)); 419 extension_infos.push_back(ExtensionBasicInfo(extension));
414 420
415 std::vector<int> expected_event_types; 421 std::vector<int> expected_event_types;
416 expected_event_types.push_back(EVENT_EXTENSION_INSTALL); 422 expected_event_types.push_back(EVENT_EXTENSION_INSTALL);
417 expected_event_types.push_back(EVENT_EXTENSION_UNLOAD); 423 expected_event_types.push_back(EVENT_EXTENSION_DISABLE);
418 expected_event_types.push_back(EVENT_EXTENSION_ENABLE); 424 expected_event_types.push_back(EVENT_EXTENSION_ENABLE);
419 425
420 std::vector<linked_ptr<Event> > events = GetEvents(); 426 std::vector<linked_ptr<Event> > events = GetEvents();
421 CheckExtensionEvents(expected_event_types, events, extension_infos); 427 CheckExtensionEvents(expected_event_types, events, extension_infos);
422
423 // There will be an additional field on the unload event: Unload Reason.
424 int unload_reason = -1;
425 ASSERT_TRUE(events[1]->data()->GetInteger("unloadReason", &unload_reason));
426 ASSERT_EQ(extension_misc::UNLOAD_REASON_DISABLE, unload_reason);
427 } 428 }
428 429
429 // Test that PerformanceMonitor correctly records an extension update event. 430 // Test that PerformanceMonitor correctly records an extension update event.
430 IN_PROC_BROWSER_TEST_F(PerformanceMonitorBrowserTest, UpdateExtensionEvent) { 431 IN_PROC_BROWSER_TEST_F(PerformanceMonitorBrowserTest, UpdateExtensionEvent) {
431 ScopedTempDir temp_dir; 432 ScopedTempDir temp_dir;
432 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 433 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
433 434
434 FilePath test_data_dir; 435 FilePath test_data_dir;
435 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); 436 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
436 test_data_dir = test_data_dir.AppendASCII("performance_monitor") 437 test_data_dir = test_data_dir.AppendASCII("performance_monitor")
(...skipping 29 matching lines...) Expand all
466 ASSERT_TRUE(extension_service-> 467 ASSERT_TRUE(extension_service->
467 UpdateExtension(extension->id(), path_v2_, GURL(), &crx_installer)); 468 UpdateExtension(extension->id(), path_v2_, GURL(), &crx_installer));
468 windowed_observer.Wait(); 469 windowed_observer.Wait();
469 470
470 extension = extension_service->GetExtensionById( 471 extension = extension_service->GetExtensionById(
471 extension_infos[0].id, false); // don't include disabled extensions. 472 extension_infos[0].id, false); // don't include disabled extensions.
472 473
473 // The total series of events for this process will be: 474 // The total series of events for this process will be:
474 // Extension Install - install version 1 475 // Extension Install - install version 1
475 // Extension Install - install version 2 476 // Extension Install - install version 2
476 // Extension Unload - disable version 1
477 // Extension Update - signal the udate to version 2 477 // Extension Update - signal the udate to version 2
478 // We push back the corresponding ExtensionBasicInfos. 478 // We push back the corresponding ExtensionBasicInfos.
479 extension_infos.push_back(ExtensionBasicInfo(extension)); 479 extension_infos.push_back(ExtensionBasicInfo(extension));
480 extension_infos.push_back(extension_infos[0]);
481 extension_infos.push_back(extension_infos[1]); 480 extension_infos.push_back(extension_infos[1]);
482 481
483 std::vector<int> expected_event_types; 482 std::vector<int> expected_event_types;
484 expected_event_types.push_back(EVENT_EXTENSION_INSTALL); 483 expected_event_types.push_back(EVENT_EXTENSION_INSTALL);
485 expected_event_types.push_back(EVENT_EXTENSION_INSTALL); 484 expected_event_types.push_back(EVENT_EXTENSION_INSTALL);
486 expected_event_types.push_back(EVENT_EXTENSION_UNLOAD);
487 expected_event_types.push_back(EVENT_EXTENSION_UPDATE); 485 expected_event_types.push_back(EVENT_EXTENSION_UPDATE);
488 486
489 std::vector<linked_ptr<Event> > events = GetEvents(); 487 std::vector<linked_ptr<Event> > events = GetEvents();
490 488
491 CheckExtensionEvents(expected_event_types, events, extension_infos); 489 CheckExtensionEvents(expected_event_types, events, extension_infos);
492
493 // There will be an additional field: The unload reason.
494 int unload_reason = -1;
495 ASSERT_TRUE(events[2]->data()->GetInteger("unloadReason", &unload_reason));
496 ASSERT_EQ(extension_misc::UNLOAD_REASON_UPDATE, unload_reason);
497 } 490 }
498 491
499 IN_PROC_BROWSER_TEST_F(PerformanceMonitorBrowserTest, UninstallExtensionEvent) { 492 IN_PROC_BROWSER_TEST_F(PerformanceMonitorBrowserTest, UninstallExtensionEvent) {
500 const int kNumEvents = 3; 493 const int kNumEvents = 2;
501 FilePath extension_path; 494 FilePath extension_path;
502 PathService::Get(chrome::DIR_TEST_DATA, &extension_path); 495 PathService::Get(chrome::DIR_TEST_DATA, &extension_path);
503 extension_path = extension_path.AppendASCII("performance_monitor") 496 extension_path = extension_path.AppendASCII("performance_monitor")
504 .AppendASCII("extensions") 497 .AppendASCII("extensions")
505 .AppendASCII("simple_extension_v1"); 498 .AppendASCII("simple_extension_v1");
506 const Extension* extension = LoadExtension(extension_path); 499 const Extension* extension = LoadExtension(extension_path);
507 500
508 std::vector<ExtensionBasicInfo> extension_infos; 501 std::vector<ExtensionBasicInfo> extension_infos;
509 // There will be three events in all, each pertaining to the same extension: 502 // There will be two events, both pertaining to the same extension:
510 // Extension Install 503 // Extension Install
511 // Extension Disable (Unload)
512 // Extension Uninstall 504 // Extension Uninstall
513 for (int i = 0; i < kNumEvents; ++i) 505 for (int i = 0; i < kNumEvents; ++i)
514 extension_infos.push_back(ExtensionBasicInfo(extension)); 506 extension_infos.push_back(ExtensionBasicInfo(extension));
515 507
516 UninstallExtension(extension->id()); 508 UninstallExtension(extension->id());
517 509
518 std::vector<int> expected_event_types; 510 std::vector<int> expected_event_types;
519 expected_event_types.push_back(EVENT_EXTENSION_INSTALL); 511 expected_event_types.push_back(EVENT_EXTENSION_INSTALL);
520 expected_event_types.push_back(EVENT_EXTENSION_UNLOAD);
521 expected_event_types.push_back(EVENT_EXTENSION_UNINSTALL); 512 expected_event_types.push_back(EVENT_EXTENSION_UNINSTALL);
522 513
523 std::vector<linked_ptr<Event> > events = GetEvents(); 514 std::vector<linked_ptr<Event> > events = GetEvents();
524 515
525 CheckExtensionEvents(expected_event_types, events, extension_infos); 516 CheckExtensionEvents(expected_event_types, events, extension_infos);
526
527 // There will be an additional field: The unload reason.
528 int unload_reason = -1;
529 ASSERT_TRUE(events[1]->data()->GetInteger("unloadReason", &unload_reason));
530 ASSERT_EQ(extension_misc::UNLOAD_REASON_UNINSTALL, unload_reason);
531 } 517 }
532 518
533 IN_PROC_BROWSER_TEST_F(PerformanceMonitorBrowserTest, NewVersionEvent) { 519 IN_PROC_BROWSER_TEST_F(PerformanceMonitorBrowserTest, NewVersionEvent) {
534 const char kOldVersion[] = "0.0"; 520 const char kOldVersion[] = "0.0";
535 521
536 // The version in the database right now will be the current version of chrome 522 // The version in the database right now will be the current version of chrome
537 // (gathered at initialization of PerformanceMonitor). Replace this with an 523 // (gathered at initialization of PerformanceMonitor). Replace this with an
538 // older version so an event is generated. 524 // older version so an event is generated.
539 AddStateValue(kStateChromeVersion, kOldVersion); 525 AddStateValue(kStateChromeVersion, kOldVersion);
540 526
541 content::BrowserThread::PostBlockingPoolSequencedTask( 527 CheckForVersionUpdate();
542 Database::kDatabaseSequenceToken,
543 FROM_HERE,
544 base::Bind(&PerformanceMonitor::CheckForVersionUpdateOnBackgroundThread,
545 base::Unretained(performance_monitor())));
546
547 // Wait for event insertion.
548 content::BrowserThread::GetBlockingPool()->FlushForTesting();
549 528
550 chrome::VersionInfo version; 529 chrome::VersionInfo version;
551 ASSERT_TRUE(version.is_valid()); 530 ASSERT_TRUE(version.is_valid());
552 std::string version_string = version.Version(); 531 std::string version_string = version.Version();
553 532
554 std::vector<linked_ptr<Event> > events = GetEvents(); 533 std::vector<linked_ptr<Event> > events = GetEvents();
555 ASSERT_EQ(1u, events.size()); 534 ASSERT_EQ(1u, events.size());
556 ASSERT_EQ(EVENT_CHROME_UPDATE, events[0]->type()); 535 ASSERT_EQ(EVENT_CHROME_UPDATE, events[0]->type());
557 536
558 const base::DictionaryValue* value; 537 const base::DictionaryValue* value;
(...skipping 18 matching lines...) Expand all
577 556
578 stats = GetStats(METRIC_PRIVATE_MEMORY_USAGE); 557 stats = GetStats(METRIC_PRIVATE_MEMORY_USAGE);
579 ASSERT_EQ(1u, stats.size()); 558 ASSERT_EQ(1u, stats.size());
580 EXPECT_GT(stats[0].value, 0); 559 EXPECT_GT(stats[0].value, 0);
581 560
582 stats = GetStats(METRIC_SHARED_MEMORY_USAGE); 561 stats = GetStats(METRIC_SHARED_MEMORY_USAGE);
583 ASSERT_EQ(1u, stats.size()); 562 ASSERT_EQ(1u, stats.size());
584 EXPECT_GT(stats[0].value, 0); 563 EXPECT_GT(stats[0].value, 0);
585 564
586 // Open new tabs to incur CPU usage. 565 // Open new tabs to incur CPU usage.
587 for (int i = 0; i < 3; ++i) { 566 for (int i = 0; i < 10; ++i) {
588 chrome::NavigateParams params(browser(), GURL("http://www.google.com"), 567 chrome::NavigateParams params(
568 browser(),
569 ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory),
570 FilePath(FILE_PATH_LITERAL("title1.html"))),
589 content::PAGE_TRANSITION_LINK); 571 content::PAGE_TRANSITION_LINK);
590 params.disposition = NEW_BACKGROUND_TAB; 572 params.disposition = NEW_BACKGROUND_TAB;
591 ui_test_utils::NavigateToURL(&params); 573 ui_test_utils::NavigateToURL(&params);
592 } 574 }
593 GatherStatistics(); 575 GatherStatistics();
594 576
595 // One CPUUsage stat should exist now. 577 // One CPUUsage stat should exist now.
596 stats = GetStats(METRIC_CPU_USAGE); 578 stats = GetStats(METRIC_CPU_USAGE);
597 ASSERT_EQ(1u, stats.size()); 579 ASSERT_EQ(1u, stats.size());
598 EXPECT_GT(stats[0].value, 0); 580 EXPECT_GT(stats[0].value, 0);
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 Database::MetricInfoVector metrics = GetStats(METRIC_TEST_STARTUP_TIME); 695 Database::MetricInfoVector metrics = GetStats(METRIC_TEST_STARTUP_TIME);
714 ASSERT_EQ(1u, metrics.size()); 696 ASSERT_EQ(1u, metrics.size());
715 ASSERT_LT(metrics[0].value, kMaxStartupTime.ToInternalValue()); 697 ASSERT_LT(metrics[0].value, kMaxStartupTime.ToInternalValue());
716 698
717 metrics = GetStats(METRIC_SESSION_RESTORE_TIME); 699 metrics = GetStats(METRIC_SESSION_RESTORE_TIME);
718 ASSERT_EQ(1u, metrics.size()); 700 ASSERT_EQ(1u, metrics.size());
719 ASSERT_LT(metrics[0].value, kMaxStartupTime.ToInternalValue()); 701 ASSERT_LT(metrics[0].value, kMaxStartupTime.ToInternalValue());
720 } 702 }
721 703
722 } // namespace performance_monitor 704 } // namespace performance_monitor
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698