| OLD | NEW |
| 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/browser/task_manager/task_manager.h" | 5 #include "chrome/browser/task_manager/task_manager.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 #include "content/public/test/content_browser_test_utils.h" | 44 #include "content/public/test/content_browser_test_utils.h" |
| 45 #include "extensions/browser/extension_system.h" | 45 #include "extensions/browser/extension_system.h" |
| 46 #include "extensions/common/extension.h" | 46 #include "extensions/common/extension.h" |
| 47 #include "net/dns/mock_host_resolver.h" | 47 #include "net/dns/mock_host_resolver.h" |
| 48 #include "net/test/embedded_test_server/embedded_test_server.h" | 48 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 49 #include "testing/gtest/include/gtest/gtest.h" | 49 #include "testing/gtest/include/gtest/gtest.h" |
| 50 #include "ui/base/l10n/l10n_util.h" | 50 #include "ui/base/l10n/l10n_util.h" |
| 51 #include "ui/base/page_transition_types.h" | 51 #include "ui/base/page_transition_types.h" |
| 52 | 52 |
| 53 using content::WebContents; | 53 using content::WebContents; |
| 54 using task_manager::browsertest_util::ColumnSpecifier; |
| 54 using task_manager::browsertest_util::MatchAboutBlankTab; | 55 using task_manager::browsertest_util::MatchAboutBlankTab; |
| 55 using task_manager::browsertest_util::MatchAnyApp; | 56 using task_manager::browsertest_util::MatchAnyApp; |
| 56 using task_manager::browsertest_util::MatchAnyExtension; | 57 using task_manager::browsertest_util::MatchAnyExtension; |
| 57 using task_manager::browsertest_util::MatchAnySubframe; | 58 using task_manager::browsertest_util::MatchAnySubframe; |
| 58 using task_manager::browsertest_util::MatchAnyTab; | 59 using task_manager::browsertest_util::MatchAnyTab; |
| 59 using task_manager::browsertest_util::MatchAnyUtility; | 60 using task_manager::browsertest_util::MatchAnyUtility; |
| 60 using task_manager::browsertest_util::MatchApp; | 61 using task_manager::browsertest_util::MatchApp; |
| 61 using task_manager::browsertest_util::MatchExtension; | 62 using task_manager::browsertest_util::MatchExtension; |
| 62 using task_manager::browsertest_util::MatchSubframe; | 63 using task_manager::browsertest_util::MatchSubframe; |
| 63 using task_manager::browsertest_util::MatchTab; | 64 using task_manager::browsertest_util::MatchTab; |
| (...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 817 ReloadExtension(extension_id); | 818 ReloadExtension(extension_id); |
| 818 ASSERT_NO_FATAL_FAILURE( | 819 ASSERT_NO_FATAL_FAILURE( |
| 819 WaitForTaskManagerRows(1, MatchExtension("background_page"))); | 820 WaitForTaskManagerRows(1, MatchExtension("background_page"))); |
| 820 } | 821 } |
| 821 } | 822 } |
| 822 | 823 |
| 823 // Checks that task manager counts a worker thread JS heap size. | 824 // Checks that task manager counts a worker thread JS heap size. |
| 824 // http://crbug.com/241066 | 825 // http://crbug.com/241066 |
| 825 IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, WebWorkerJSHeapMemory) { | 826 IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, WebWorkerJSHeapMemory) { |
| 826 ShowTaskManager(); | 827 ShowTaskManager(); |
| 827 model()->ToggleColumnVisibility(task_manager::browsertest_util::V8_MEMORY); | 828 model()->ToggleColumnVisibility(ColumnSpecifier::V8_MEMORY); |
| 828 ui_test_utils::NavigateToURL(browser(), GetTestURL()); | 829 ui_test_utils::NavigateToURL(browser(), GetTestURL()); |
| 829 size_t minimal_heap_size = 4 * 1024 * 1024 * sizeof(void*); | 830 size_t minimal_heap_size = 4 * 1024 * 1024 * sizeof(void*); |
| 830 std::string test_js = base::StringPrintf( | 831 std::string test_js = base::StringPrintf( |
| 831 "var blob = new Blob([\n" | 832 "var blob = new Blob([\n" |
| 832 " 'mem = new Array(%lu);',\n" | 833 " 'mem = new Array(%lu);',\n" |
| 833 " 'for (var i = 0; i < mem.length; i += 16)'," | 834 " 'for (var i = 0; i < mem.length; i += 16)'," |
| 834 " ' mem[i] = i;',\n" | 835 " ' mem[i] = i;',\n" |
| 835 " 'postMessage(\"okay\");']);\n" | 836 " 'postMessage(\"okay\");']);\n" |
| 836 "blobURL = window.URL.createObjectURL(blob);\n" | 837 "blobURL = window.URL.createObjectURL(blob);\n" |
| 837 "var worker = new Worker(blobURL);\n" | 838 "var worker = new Worker(blobURL);\n" |
| 838 "worker.addEventListener('message', function(e) {\n" | 839 "worker.addEventListener('message', function(e) {\n" |
| 839 " window.domAutomationController.send(e.data);\n" // e.data == "okay" | 840 " window.domAutomationController.send(e.data);\n" // e.data == "okay" |
| 840 "});\n" | 841 "});\n" |
| 841 "worker.postMessage('go');\n", | 842 "worker.postMessage('go');\n", |
| 842 static_cast<unsigned long>(minimal_heap_size)); | 843 static_cast<unsigned long>(minimal_heap_size)); |
| 843 std::string ok; | 844 std::string ok; |
| 844 ASSERT_TRUE(content::ExecuteScriptAndExtractString( | 845 ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
| 845 browser()->tab_strip_model()->GetActiveWebContents(), test_js, &ok)); | 846 browser()->tab_strip_model()->GetActiveWebContents(), test_js, &ok)); |
| 846 ASSERT_EQ("okay", ok); | 847 ASSERT_EQ("okay", ok); |
| 847 | 848 |
| 848 // The worker has allocated objects of at least |minimal_heap_size| bytes. | 849 // The worker has allocated objects of at least |minimal_heap_size| bytes. |
| 849 // Wait for the heap stats to reflect this. | 850 // Wait for the heap stats to reflect this. |
| 850 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( | 851 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( |
| 851 MatchTab("title1.html"), task_manager::browsertest_util::V8_MEMORY, | 852 MatchTab("title1.html"), ColumnSpecifier::V8_MEMORY, minimal_heap_size)); |
| 852 minimal_heap_size)); | |
| 853 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( | 853 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( |
| 854 MatchTab("title1.html"), task_manager::browsertest_util::V8_MEMORY_USED, | 854 MatchTab("title1.html"), ColumnSpecifier::V8_MEMORY_USED, |
| 855 minimal_heap_size)); | 855 minimal_heap_size)); |
| 856 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyTab())); | 856 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyTab())); |
| 857 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchTab("title1.html"))); | 857 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchTab("title1.html"))); |
| 858 } | 858 } |
| 859 | 859 |
| 860 // Checks that task manager counts renderer JS heap size. | 860 // Checks that task manager counts renderer JS heap size. |
| 861 IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, JSHeapMemory) { | 861 IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, JSHeapMemory) { |
| 862 ShowTaskManager(); | 862 ShowTaskManager(); |
| 863 ui_test_utils::NavigateToURL(browser(), GetTestURL()); | 863 ui_test_utils::NavigateToURL(browser(), GetTestURL()); |
| 864 size_t minimal_heap_size = 4 * 1024 * 1024 * sizeof(void*); | 864 size_t minimal_heap_size = 4 * 1024 * 1024 * sizeof(void*); |
| 865 std::string test_js = base::StringPrintf( | 865 std::string test_js = base::StringPrintf( |
| 866 "mem = new Array(%lu);\n" | 866 "mem = new Array(%lu);\n" |
| 867 "for (var i = 0; i < mem.length; i += 16)\n" | 867 "for (var i = 0; i < mem.length; i += 16)\n" |
| 868 " mem[i] = i;\n" | 868 " mem[i] = i;\n" |
| 869 "window.domAutomationController.send(\"okay\");\n", | 869 "window.domAutomationController.send(\"okay\");\n", |
| 870 static_cast<unsigned long>(minimal_heap_size)); | 870 static_cast<unsigned long>(minimal_heap_size)); |
| 871 std::string ok; | 871 std::string ok; |
| 872 ASSERT_TRUE(content::ExecuteScriptAndExtractString( | 872 ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
| 873 browser()->tab_strip_model()->GetActiveWebContents(), test_js, &ok)); | 873 browser()->tab_strip_model()->GetActiveWebContents(), test_js, &ok)); |
| 874 ASSERT_EQ("okay", ok); | 874 ASSERT_EQ("okay", ok); |
| 875 | 875 |
| 876 model()->ToggleColumnVisibility(task_manager::browsertest_util::V8_MEMORY); | 876 model()->ToggleColumnVisibility(ColumnSpecifier::V8_MEMORY); |
| 877 | 877 |
| 878 // The page's js has allocated objects of at least |minimal_heap_size| bytes. | 878 // The page's js has allocated objects of at least |minimal_heap_size| bytes. |
| 879 // Wait for the heap stats to reflect this. | 879 // Wait for the heap stats to reflect this. |
| 880 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( | 880 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( |
| 881 MatchTab("title1.html"), task_manager::browsertest_util::V8_MEMORY, | 881 MatchTab("title1.html"), ColumnSpecifier::V8_MEMORY, minimal_heap_size)); |
| 882 minimal_heap_size)); | |
| 883 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( | 882 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( |
| 884 MatchTab("title1.html"), task_manager::browsertest_util::V8_MEMORY_USED, | 883 MatchTab("title1.html"), ColumnSpecifier::V8_MEMORY_USED, |
| 885 minimal_heap_size)); | 884 minimal_heap_size)); |
| 886 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyTab())); | 885 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyTab())); |
| 887 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchTab("title1.html"))); | 886 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchTab("title1.html"))); |
| 888 } | 887 } |
| 889 | 888 |
| 890 // Checks that task manager counts utility process JS heap size. | 889 // Checks that task manager counts utility process JS heap size. |
| 891 IN_PROC_BROWSER_TEST_F(TaskManagerUtilityProcessBrowserTest, | 890 IN_PROC_BROWSER_TEST_F(TaskManagerUtilityProcessBrowserTest, |
| 892 UtilityJSHeapMemory) { | 891 UtilityJSHeapMemory) { |
| 893 ShowTaskManager(); | 892 ShowTaskManager(); |
| 894 model()->ToggleColumnVisibility(task_manager::browsertest_util::V8_MEMORY); | 893 model()->ToggleColumnVisibility(ColumnSpecifier::V8_MEMORY); |
| 895 | 894 |
| 896 auto proxy_resolver_name = | 895 auto proxy_resolver_name = |
| 897 l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_PROXY_RESOLVER_NAME); | 896 l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_PROXY_RESOLVER_NAME); |
| 898 ui_test_utils::NavigateToURL(browser(), GetTestURL()); | 897 ui_test_utils::NavigateToURL(browser(), GetTestURL()); |
| 899 // The PAC script is trivial, so don't expect a large heap. | 898 // The PAC script is trivial, so don't expect a large heap. |
| 900 size_t minimal_heap_size = 1024; | 899 size_t minimal_heap_size = 1024; |
| 901 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( | 900 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( |
| 902 MatchUtility(proxy_resolver_name), | 901 MatchUtility(proxy_resolver_name), ColumnSpecifier::V8_MEMORY, |
| 903 task_manager::browsertest_util::V8_MEMORY, minimal_heap_size)); | 902 minimal_heap_size)); |
| 904 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( | 903 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerStatToExceed( |
| 905 MatchUtility(proxy_resolver_name), | 904 MatchUtility(proxy_resolver_name), ColumnSpecifier::V8_MEMORY_USED, |
| 906 task_manager::browsertest_util::V8_MEMORY_USED, minimal_heap_size)); | 905 minimal_heap_size)); |
| 907 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyUtility())); | 906 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyUtility())); |
| 908 ASSERT_NO_FATAL_FAILURE( | 907 ASSERT_NO_FATAL_FAILURE( |
| 909 WaitForTaskManagerRows(1, MatchUtility(proxy_resolver_name))); | 908 WaitForTaskManagerRows(1, MatchUtility(proxy_resolver_name))); |
| 910 } | 909 } |
| 911 | 910 |
| 912 IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsNewDockedWindow) { | 911 IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsNewDockedWindow) { |
| 913 // TODO(nick, afakhry): Broken on new task manager because we show | 912 // TODO(nick, afakhry): Broken on new task manager because we show |
| 914 // a long chrome-devtools:// URL without a prefix (expecting "Tab: *"). | 913 // a long chrome-devtools:// URL without a prefix (expecting "Tab: *"). |
| 915 DisableNewTaskManagerForBrokenTest(); | 914 DisableNewTaskManagerForBrokenTest(); |
| 916 | 915 |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1234 WaitForTaskManagerRows(1, MatchTab("Title Of Awesomeness"))); | 1233 WaitForTaskManagerRows(1, MatchTab("Title Of Awesomeness"))); |
| 1235 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, MatchAnySubframe())); | 1234 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, MatchAnySubframe())); |
| 1236 | 1235 |
| 1237 HideTaskManager(); | 1236 HideTaskManager(); |
| 1238 ShowTaskManager(); | 1237 ShowTaskManager(); |
| 1239 | 1238 |
| 1240 ASSERT_NO_FATAL_FAILURE( | 1239 ASSERT_NO_FATAL_FAILURE( |
| 1241 WaitForTaskManagerRows(1, MatchTab("Title Of Awesomeness"))); | 1240 WaitForTaskManagerRows(1, MatchTab("Title Of Awesomeness"))); |
| 1242 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, MatchAnySubframe())); | 1241 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, MatchAnySubframe())); |
| 1243 } | 1242 } |
| OLD | NEW |